This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:projects:tudengid11:balanseerija [2011/04/04 19:23] – Siim573 | et:projects:tudengid11:balanseerija [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Balanseerija ====== | ====== Balanseerija ====== | ||
| - | Dokument on koostamisel! | ||
| ===== Meeskond ===== | ===== Meeskond ===== | ||
| Line 8: | Line 7: | ||
| * Holger Kruusla | * Holger Kruusla | ||
| * Martin Parker | * Martin Parker | ||
| - | |||
| - | ==== Nädalaaruanded ==== | ||
| - | |||
| - | - Nädal - {{: | ||
| - | - Nädal - {{: | ||
| - | - Nädal - {{: | ||
| ==== Ülesanne ==== | ==== Ülesanne ==== | ||
| Line 113: | Line 106: | ||
| ==Lähtekood== | ==Lähtekood== | ||
| - | < | + | |
| + | < | ||
| // Standardteegid | // Standardteegid | ||
| #include < | #include < | ||
| Line 124: | Line 119: | ||
| #define ENK 181 // esimene normaal kaugus | #define ENK 181 // esimene normaal kaugus | ||
| #define TNK 177 // tagumine normaal kaugus | #define TNK 177 // tagumine normaal kaugus | ||
| - | #define VIGA 40 | + | #define VIGA 40 // jäme mõõteviga |
| + | |||
| + | #define NUPP_PORT PINC | ||
| + | #define NUPP1_PIN PC6 | ||
| // Ultraheli anduri viigud | // Ultraheli anduri viigud | ||
| Line 132: | Line 130: | ||
| pin pin_echo_t | pin pin_echo_t | ||
| - | // Globaalsed muutujad | ||
| - | uint8_t korrektuur = 0 ; | ||
| - | register uint8_t sensor asm(" | ||
| - | register uint8_t nr_rotates asm(" | ||
| - | register uint8_t pre_sensor asm(" | ||
| short esimene, | short esimene, | ||
| - | |||
| void Filter(short lugem, short kaugus) | void Filter(short lugem, short kaugus) | ||
| { | { | ||
| - | // võrdleb tegelikuga ja elimineerib suured vead | + | // võrdleb tegelikuga ja otsustab mida sellega teha |
| if((lugem > kaugus + VIGA)||(lugem < kaugus - VIGA)) | if((lugem > kaugus + VIGA)||(lugem < kaugus - VIGA)) | ||
| { | { | ||
| Line 150: | Line 142: | ||
| tagumine = tagumine_v[4]; | tagumine = tagumine_v[4]; | ||
| } | } | ||
| - | else // nihutab tulemusi | + | else // nihutab tulemusi |
| { | { | ||
| if(kaugus == ENK) | if(kaugus == ENK) | ||
| Line 169: | Line 161: | ||
| } | } | ||
| } | } | ||
| + | |||
| } | } | ||
| Line 174: | Line 167: | ||
| // Põhifunktsioon Main | // Põhifunktsioon Main | ||
| // ------------------------------------------------------------- | // ------------------------------------------------------------- | ||
| + | pin test[5] = {PIN(C,3), PIN(C,5), PIN(C,7), PIN(C,2), PIN(C,4)}; | ||
| int main(void) | int main(void) | ||
| { | { | ||
| + | // PORTC defineerimine | ||
| + | DDRC = (1<< | ||
| short k = 0; // andurite abimuutuja kordamööda mõõtmisel | short k = 0; // andurite abimuutuja kordamööda mõõtmisel | ||
| Line 186: | Line 182: | ||
| short p_error=0, | short p_error=0, | ||
| long Kpj, | long Kpj, | ||
| - | long time = 0; | ||
| suund_p = EDASI; | suund_p = EDASI; | ||
| suund_v = EDASI; | suund_v = EDASI; | ||
| + | // PWM ja adc initsialiseerimine | ||
| init_adc(); | init_adc(); | ||
| adc_compare(); | adc_compare(); | ||
| Line 201: | Line 197: | ||
| tagumine_v[j] = TNK; | tagumine_v[j] = TNK; | ||
| } | } | ||
| - | // Joonejälgimise | + | |
| - | Kpj=120; | + | // Joonejälgimise |
| + | Kpj=80; | ||
| + | Kdj=0; | ||
| Kij=0; | Kij=0; | ||
| - | Kdj=50; | ||
| // PID kordajad | // PID kordajad | ||
| Line 210: | Line 207: | ||
| Ki = 10; // lõppvalemis jagatud 10-ga | Ki = 10; // lõppvalemis jagatud 10-ga | ||
| Kd = 2; | Kd = 2; | ||
| - | //Kpj = 70; | + | |
| - | + | ||
| integral_p = 0; | integral_p = 0; | ||
| derivative_p = 0; | derivative_p = 0; | ||
| Line 223: | Line 219: | ||
| previous_error_v = error_v; | previous_error_v = error_v; | ||
| M_v = 0; | M_v = 0; | ||
| - | korrektuur = 0; | ||
| while(1) | while(1) | ||
| - | { | + | { |
| // Ultraheli andurite lugemine | // Ultraheli andurite lugemine | ||
| if(k==0) | if(k==0) | ||
| - | { | + | { |
| + | |||
| esimene = ultrasonic_measure1(pin_trigger_e, | esimene = ultrasonic_measure1(pin_trigger_e, | ||
| // Filtreerib ja parandab | // Filtreerib ja parandab | ||
| Filter(esimene, | Filter(esimene, | ||
| - | k++;time++; | + | k++; |
| } | } | ||
| else | else | ||
| Line 240: | Line 236: | ||
| // Filtreerib ja parandab | // Filtreerib ja parandab | ||
| Filter(tagumine, | Filter(tagumine, | ||
| - | k=0;time++; | + | k=0; |
| - | } | + | } |
| - | + | uh_vahe = ((TNK-tagumine_v[4]) - (ENK-esimene_v[4])) ; | |
| - | uh_vahe = ((TNK-tagumine_v[4]) - (ENK-esimene_v[4])); | + | |
| - | + | // Edasiliikumiseks vajaliku nurgahälbe tekitamine | |
| + | if((uh_vahe==1)||(uh_vahe==2)||(uh_vahe==3)||(uh_vahe==4)) uh_vahe = 0; | ||
| // jooneandurite lugemine | // jooneandurite lugemine | ||
| sensor = read_sensors(); | sensor = read_sensors(); | ||
| Line 262: | Line 260: | ||
| if(integral_v < -400) integral_v = -400; | if(integral_v < -400) integral_v = -400; | ||
| derivative_v = error_v - previous_error_v; | derivative_v = error_v - previous_error_v; | ||
| - | + | // Momentide arvutamine | |
| M_p = Kp*(error_p) + Ki*integral_p/ | M_p = Kp*(error_p) + Ki*integral_p/ | ||
| M_v = Kp*(error_v) + Ki*integral_v/ | M_v = Kp*(error_v) + Ki*integral_v/ | ||
| - | speed_p = max_speed*M_p/ | + | speed_p = max_speed*M_p/ |
| - | speed_v = max_speed*M_v/ | + | speed_v = max_speed*M_v/ |
| previous_error_p = error_p; | previous_error_p = error_p; | ||
| Line 291: | Line 289: | ||
| suund_v = TAGASI; | suund_v = TAGASI; | ||
| } | } | ||
| + | |||
| p_error=jooneasukoht(PAREM); | p_error=jooneasukoht(PAREM); | ||
| i_error+=p_error; | i_error+=p_error; | ||
| Line 299: | Line 297: | ||
| if(J> | if(J> | ||
| if(J< | if(J< | ||
| - | if (J>=0)speed_v=(speed_v*(100-J)/ | + | speed_v = (speed_v*(100-J)/ |
| - | else speed_p = (speed_p*(100+J)/ | + | speed_p = (speed_p*(100+J)/ |
| - | + | ||
| - | // Kiiruse piiraja | + | |
| - | if(speed_p > max_speed) speed_p = max_speed; | + | |
| - | if(speed_v > max_speed) speed_v = max_speed; | + | |
| + | if(speed_p > max_speed) | ||
| + | { | ||
| + | speed_p = max_speed; | ||
| + | } | ||
| + | if(speed_v > max_speed) | ||
| + | { | ||
| + | speed_v = max_speed; | ||
| + | } | ||
| Motors(PAREM, | Motors(PAREM, | ||
| - | Motors(VASAK, | + | Motors(VASAK, |
| + | |||
| } | } | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | Siin on ülejäänud lähtekood -> {{: | ||
| + | |||
| ====Valmislahendus==== | ====Valmislahendus==== | ||
| Pärast 9 nädalat tööd on valmis robot balanseeriv joonejälgija. | Pärast 9 nädalat tööd on valmis robot balanseeriv joonejälgija. | ||
| - | Järgnevalt on näha meie roboti prototüüp ja kõik tähtsamad detailid ning nende kinnitused komplektselt. Ühtlasi on antud pildi järgi | + | Järgnevalt on näha meie roboti prototüüp ja kõik tähtsamad detailid ning nende kinnitused komplektselt. Ühtlasi on antud pildi järgi |
| {{: | {{: | ||
| Line 327: | Line 333: | ||
| | Põhikontroller | | Põhikontroller | ||
| | Mootorikontroller | | Mootorikontroller | ||
| - | | Mootorid | + | | Mootorid |
| - | | Reduktorid | + | | Reduktorid |
| | Ultraheli andurid | | Ultraheli andurid | ||
| | Jooneandurid | | Jooneandurid | ||
| Line 336: | Line 342: | ||
| | Sisend-väljundplaat | LED ja Mikrolüliti | | Sisend-väljundplaat | LED ja Mikrolüliti | ||
| | Makettplaat | | Makettplaat | ||
| - | ^ Kokku | + | | Juhtmed, kaablid |
| + | ^ Kokku | ||
| Lisaks tuleks CNC freespingi ja muude töövahendite kasutamise hind. | Lisaks tuleks CNC freespingi ja muude töövahendite kasutamise hind. | ||
| ====Projektijuhtimine==== | ====Projektijuhtimine==== | ||
| + | Ülesanded said üsna alguses ära jaotatud ning samuti oli osaliselt olemas ajakava, sest aine nõudis teatud ajaks vastavat roboti valmidust. | ||
| + | | ^ Ülesanne | ||
| + | ^ Siim | Roboti tasakaal andurite seisukohalt | | ||
| + | ^ Priit | Mehaanika projekteerimine | ||
| + | ^ Holger | ||
| + | ^ Martin | ||
| + | |||
| + | Koostöö oli hea ning saime roboti üsna kiiresti valmis ning jäi päris palju aega programmeerimiseks. | ||
| + | |||
| + | == Nädalaaruanded == | ||
| + | |||
| + | - Nädal - {{: | ||
| + | - Nädal - {{: | ||
| + | - Nädal - {{: | ||
| ====Kokkuvõte==== | ====Kokkuvõte==== | ||
| - | Üldiselt õnnestus meil antud ülesande täitmine üsnagi edukalt. Robot suudab iseseisvalt end tasakaalustada ning ka algtasemel joont järgida. | + | Üldiselt õnnestus meil antud ülesande täitmine üsnagi edukalt. Robot suudab iseseisvalt end tasakaalustada ning ka algtasemel joont järgida. Saime mehaanika üsnagi lihtsalt projekteeritud ja koostatud, elektroonika oli enamjaolt olemas tuli ainult moodulid ja komponendid omavahel sobitada. Kõige rohkem aega võttis programmeerimine ja testimine. Üks põhjus miks meil korraliku tasakaalu saavutamine kaua aega võttis oli lihtsate algoritmide kasutamine, nimelt ei kasutanud me alguses eriti matemaatikat vaid pigem võrdlustehnikat. Palju parema tulemuse saavutasime siis kui võtsime kasutusele PID regulaatori. Seega soovitan teistel kohe sellest alustada. |
| Üks suurimaid puudusi sellel robotil on kiiruse mõõtmise võimaluse puudumine. Soovitan kindlasti kasutada sellise ülesande täitmisel kas koodritega või Halli anduritega mootoreid. Võib kasutada ka muid piisavalt töökindlaid mooduseid kiiruse määramiseks. | Üks suurimaid puudusi sellel robotil on kiiruse mõõtmise võimaluse puudumine. Soovitan kindlasti kasutada sellise ülesande täitmisel kas koodritega või Halli anduritega mootoreid. Võib kasutada ka muid piisavalt töökindlaid mooduseid kiiruse määramiseks. | ||
| Line 354: | Line 375: | ||
| ====Lisad==== | ====Lisad==== | ||
| - | Video roboti toimimisest - [[http:// | + | Video roboti toimimisest - [[http:// |