This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:projects:3pi:programming [2015/11/05 08:37] – kaupo.raid | et:projects:3pi:programming [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== 3pi roboti programmeerimine ====== | ||
- | |||
- | **Vajalik tarkvara** | ||
- | |||
- | * Atmel Studio 6 | ||
- | * Pololu AVR Development Bundle | ||
- | |||
- | {{: | ||
- | |||
- | ~~PB~~ | ||
- | ===== Tarkvara paigaldamine ja seadistamine ===== | ||
- | |||
- | /*{{ : | ||
- | Enne programmeerimist tuleb laadida alla vajalik tarkvara. Atmel Studio on saadaval [[http:// | ||
- | Enne kasutamist tuleb tarkvara seadistada. Esmalt tuleb avada Atmel Studio 6 ja teha uus 3pi projekt (ATmega328p mikrokontroller). Seejärel ülevalt menüüribast valida // | ||
- | * Select Tool-> | ||
- | * Select Serial Port-> | ||
- | Kui saadaval on mitu COM port-i, siis tuleb Windows //Device Manager-> | ||
- | Programmaator on pärast //Apply// nupu vajutamist seadistatud. | ||
- | |||
===== Roboti programmeerimine ===== | ===== Roboti programmeerimine ===== | ||
Line 38: | Line 18: | ||
===== Programmi koostamine ===== | ===== Programmi koostamine ===== | ||
- | Kõik programmid peale esimese on koostatud Pololu teeki kasutades. Täpsema info saamiseks on soovituslik põhjalikumalt teeki uurida, et paremini 3pi roboti funktsionaalsust ära kasutada. Teegi kirjeldus on saadaval [[et: | + | Kõik programmid peale esimese on koostatud Pololu teeki kasutades. Täpsema info saamiseks on soovituslik põhjalikumalt teeki uurida, et paremini 3pi roboti funktsionaalsust ära kasutada. Teegi kirjeldus on saadaval [[et: |
+ | |||
+ | ==== Test ==== | ||
+ | Proovida antud programmi, et veenduda roboti töökorras. | ||
+ | <code c> | ||
+ | #include < | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | |||
+ | play_from_program_space(PSTR("> | ||
+ | |||
+ | while(1) | ||
+ | { | ||
+ | // Print battery voltage (in mV) on the LCD. | ||
+ | clear(); | ||
+ | print_long(read_battery_millivolts_3pi()); | ||
+ | |||
+ | red_led(1); | ||
+ | delay_ms(200); | ||
+ | red_led(0); | ||
+ | delay_ms(200); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
==== Näide 1 ==== | ==== Näide 1 ==== | ||
Line 103: | Line 107: | ||
Koosta programm, mis paneb roboti tsükliliselt kaheksakujulist trajektoori sõitma.\\ | Koosta programm, mis paneb roboti tsükliliselt kaheksakujulist trajektoori sõitma.\\ | ||
Ülesande lahendamisel saab osaliselt kasutada eelmise harjutuse koodi. Ülesande kontrollimiseks võib roboti külge kinnitada markeri, mis paberil sõites joonestab liikumistrajektoori. | Ülesande lahendamisel saab osaliselt kasutada eelmise harjutuse koodi. Ülesande kontrollimiseks võib roboti külge kinnitada markeri, mis paberil sõites joonestab liikumistrajektoori. | ||
+ | |||
==== Näide 3 ==== | ==== Näide 3 ==== | ||
Line 133: | Line 138: | ||
Lahendamisel alustada ühe post sümboli kuvamise harjutamisest. Seejärel leida maksimaalne postide arv ühele real ning konverteerida ADC väärtus vastavalt saadud arvule.Proportsionaalseks kuvamiseks on soovitav koostada " | Lahendamisel alustada ühe post sümboli kuvamise harjutamisest. Seejärel leida maksimaalne postide arv ühele real ning konverteerida ADC väärtus vastavalt saadud arvule.Proportsionaalseks kuvamiseks on soovitav koostada " | ||
==Harjutus 3.2== | ==Harjutus 3.2== | ||
- | Koostada programm, mis kuvab LCD-l vasakult paremale lõpmatult liikuvat teksti. Paremal ära kadunud sümbolid tekivad uuesti vasakule algusesse. | + | Koostada programm, mis kuvab LCD-l vasakult paremale lõpmatult liikuvat teksti. Paremal ära kadunud sümbolid tekivad uuesti vasakule algusesse.\\ |
Lahendamisel kombineerida erinevaid tsüklilisi lauseid. | Lahendamisel kombineerida erinevaid tsüklilisi lauseid. | ||
- | ~~PB~~ | + | < |
==== Näide 4 ==== | ==== Näide 4 ==== | ||
Line 175: | Line 180: | ||
==Harjutus 4.1== | ==Harjutus 4.1== | ||
+ | Koostada programm, mis loendab kõigi kolme nupu vajutusi ja kuvab need LCD peale. Proovida erinevaid nupu lugemise funktsioone. Mis eripära on debounce-iga nupu lugemise funktsioonil ja miks see hea/halb on?\\ | ||
+ | Nuppudel on kaks olekut: alla vajutatud (pressed) ja lahti lastud (released). Teegi funktsioonidel on kasutatud mõlemaid olekuid. Seega funktsiooni kasutamisel tuleb põhjalikult enne loogika läbi mõelda. | ||
==Harjutus 4.2== | ==Harjutus 4.2== | ||
- | Koostada programm, mis mängib robotil oleva piezo heligeneraatoriga | + | Koostada programm, mis mängib robotil oleva piezo heligeneraatoriga |
- | Lahendamisel on soovitav kasutada " | + | Lahendamisel on soovitav kasutada " |
+ | |||
+ | ==== Näide 5 ==== | ||
+ | |||
+ | Jooneandurite kalibreerimine ja lugemine | ||
+ | <code c> | ||
+ | |||
+ | //Teegi lisamine | ||
+ | #include < | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | //Andurite väärtuste salvestamiseks täisarvude massiv | ||
+ | unsigned int sensors[5]; | ||
+ | |||
+ | // 3pi roboti andurite lugemise seadistamine | ||
+ | // Kasutab väärtust 2000, mis määrab aja, mille jooksul võetakse üks lugem | ||
+ | // Vastavalt 2000*0.4 us = 0.8 ms, 20 MHz juures töötaval mikrokontrolleril | ||
+ | pololu_3pi_init(2000); | ||
+ | |||
+ | // Ootab nupu vajutamist | ||
+ | wait_for_button_press(BUTTON_A); | ||
+ | delay_ms(1000); | ||
+ | print(" | ||
+ | //Võtab kalibratsioonimõõtmise iga 100 millisekundi tagant | ||
+ | while(!button_is_pressed(BUTTON_C)){ | ||
+ | calibrate_line_sensors(IR_EMITTERS_ON); | ||
+ | delay_ms(100); | ||
+ | } | ||
+ | |||
+ | while(1) | ||
+ | { | ||
+ | // Loeb andurite väärtused massiivi ja arvutab välja positsiooni | ||
+ | unsigned int position = read_line(sensors, | ||
+ | |||
+ | // Kuvab arvutatud positsiooni väärtuse, mis jääb vahemikku 0 - 4000 | ||
+ | // Väärtus on 0 kui ainult kõige vasakpoolsem andur näeb joont | ||
+ | // Väärtus on 4000 kui ainult kõige parempoolsem andur näeb joont | ||
+ | clear(); | ||
+ | print_long(position); | ||
+ | delay_ms(100); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==Harjutus 5.1== | ||
+ | Koostada programm, mis kalibreerib roboti iseseisvalt. Iseseisev kalibreerimine annab stabiilsema tulemuse. | ||
+ | ==Harjutus 5.2== | ||
+ | Koostada programm, milles kontrollitakse piezo heligeneraatori sagedust jooneanduriga. | ||
+ | |||