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/04 11:42] – 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 37: | Line 17: | ||
| ===== 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: | ||
| + | |||
| + | ==== 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 96: | Line 102: | ||
| ==Harjutus 2.1== | ==Harjutus 2.1== | ||
| - | Koosta programm, mis paneb roboti tsükliliselt ruudukujulist trajektoori sõitma. Lahendamisel | + | Koosta programm, mis paneb roboti tsükliliselt ruudukujulist trajektoori sõitma. |
| + | Lahendamisel | ||
| ==Harjutus 2.2== | ==Harjutus 2.2== | ||
| - | Koosta programm, mis paneb roboti | + | Koosta programm, mis paneb roboti |
| + | Ü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 111: | Line 119: | ||
| while(1) | while(1) | ||
| { | { | ||
| - | // | + | // |
| set_analog_mode(MODE_10_BIT); | set_analog_mode(MODE_10_BIT); | ||
| // Potentsiomeetri (TRIMPOT) väärtuse lugemine ja kirjutamine muutujasse | // Potentsiomeetri (TRIMPOT) väärtuse lugemine ja kirjutamine muutujasse | ||
| Line 127: | Line 135: | ||
| ==Harjutus 3.1== | ==Harjutus 3.1== | ||
| - | Kirjutada | + | Koostadaa |
| + | 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.\\ | ||
| + | Lahendamisel kombineerida erinevaid tsüklilisi lauseid. | ||
| - | ~~PB~~ | + | < |
| ==== Näide 4 ==== | ==== Näide 4 ==== | ||
| - | Nuppude ja valjuhääldi | + | Nuppude ja piezo heligeneraatori |
| <code c> | <code c> | ||
| // Pololu teekide lisamine | // Pololu teekide lisamine | ||
| Line 169: | 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 meloodiat. Meloodia hakkab mängima pärast nupu A vajutamist ja nupu C vajutamisel lõpetab mängimise\\ | ||
| + | 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. | ||
| + | |||