This is an old revision of the document!
Kui me valisime milline robot alustada proekteerida, me koos gruppikaaslastega teasime kindlasti, et ei taha teha bonaalseid asjau. Näiteks tänapäeval on väga populaarsed juhitavad robotid kaameraga, robotid mis oskavad sõita joone järgi ja n.e. Leppisime kokku, et meie robot peab olema autonoomne. Ja sellepärast et tänapäeval kõik elektroonika seadmed arenevad selles suunas, et olla väiksem ja energiasäästlikum, me valisime seda mis soobib meile – mikrorobot.
Projekteerida ja valmistada antud komponentide baasil funktsionaalne mikroroboti koos baasnavigatsiooni funktsionaalsusega. Kui ta näeb tõkket, ta peab seda kindlaks teha ja vältida seda.
Robot peab sobima mikroroboti standartide piirangutesse ja peab olema valmistatud kodulabori komponendidest. Ei tohi ületada maksumust 10 000 krooni.
Kui me hakkasime mõtlema roboti mehaanilisest osast ja gabariididest, leppisime kokku et ta peab sõitma kahe ratastega. See annab piisavalt liikumisvõimalust. Ja sellega ta saab pöörelda „tanki“ meetodil. See annab talle rohkem manööverdusvõimalust. Et tasakaalustada meie robotit ja teha massitsenter võimalikult madalam paigaldasime raskemaid komponendid alusplaadil.
Mehaaniline osa on väga lihtne. Meie robot seisab 2 ratastel. Lisaks on väike toetusrullik.. Ratad on ühendatud mootoriga. Selleks aitavad hammasratta ülekande mehhanism. Kõik patareid ja motorid asuvad alusplaadil. Mootorid on umbes keskel. Peal asub plaat elektriskeemiga ja anduritega. See plaat on kinnitatud põhiplaadil 4 varrase abil.
Roboti juhtimine tuleneb süsteemi käitumismudelist ja on määratud lähteülesande funktsionaalsusega ning nõuete ja piirangutega. Meie robot on autonoomne, algoritmidega juhitav.
Algoritm kirjeldab süsteemi juhtloogikat ja on esitatud plokkdiagrammina. Lihtsama algoritmi koostamiseks piisab paarist elemendist ja nendevaheliste seoste kirjeldamisest. Kui roboti algoritm on koostatud korrektselt, siis on sellest roboti juhtprogrammi juba suhteliselt lihtne koostada. Kui robot märkab takistus ees, siis ta pöörleb sinna, kus takistust pole. Kui nii vasakul kui paremal takistusi ei ole, siis ta pöörleb vasakule. Kui robot märkab takistus kas vasakul või paremal, siis ta pöörleb vastassuunas 45 kraadi nurgal.
| Tähis | Tähendus | 00 | 01 | 10 |
|---|---|---|---|---|
| M1 | vasak mootor | seisab | pöörleb päripäeva | pöörleb vastupäeva |
| M2 | parem mootor | seisab | pöörleb päripäeva | pöörleb vastupäeva |
| F | keskmine IK andur | signaal puudub | signaal olemas | |
| FR | parem IK andur | signaal puudub | signaal olemas | |
| FL | vasak IK andur | signaal puudub | signaal olemas |
#define F_CPU 8000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "def.h" int wall = 4; ISR(TIMER0_OVF_vect) { IR_LEDR_PORT^=1<<IR_LEDR; IR_LEDL_PORT^=1<<IR_LEDL; IR_LEDF_PORT^=1<<IR_LEDF; TCNT0=time; } int wall_on() { TCNT0 = time; sei(); while(1) { if((IR_RESF_PIN&(1<<IR_RESF))==0) { cli(); wall = 1; //ïðåïÿòñâèå ñïåðåäè break; } if((IR_RESR_PIN&(1<<IR_RESR))==0) { cli(); wall = 2;//ïðåïÿäñòâèå ñïðàâà break; } if((IR_RESL_PIN&(1<<IR_RESL))==0) { cli();ïðåïÿäñòâèå wall = 3;// ñëåâà break; } } return wall; } int main() { TCCR0 = 1<<CS00|1<<CS01|0<<CS02; TIMSK = 1<<TOIE0; IR_RESR_DDR &=~(1<<IR_RESR); //ÏÐÈÅÌ ÎÒ IR ÏÐÈÅÌÍÈÊÀ IR_RESR_DDR &=~(1<<IR_RESR); IR_RESR_DDR &=~(1<<IR_RESR); IR_LEDR_DDR |= 1<<IR_LEDR; //ÏÅÐÅÄÀÒ×È ÈÐ ÑÈÃÍÀËÀ IR_LEDF_DDR |= 1<<IR_LEDF; IR_LEDL_DDR |= 1<<IR_LEDL; MOTOR_L1_DDR |=1<<MOTOR_L1; MOTOR_L2_DDR |=1<<MOTOR_L2; MOTOR_R1_DDR |=1<<MOTOR_R1; MOTOR_R2_DDR |=1<<MOTOR_R2; while(1) { wall_on(); if(wall==1) { MOTOR_R1_PORT |= 1<<MOTOR_R1; //ÏÐÀÂÛÉ ÌÎÒÎÐ ÂÏÅÐÅÄ MOTOR_R2_PORT &=~ (1<<MOTOR_R2); MOTOR_L1_PORT &=~ (1<<MOTOR_L1);//ËÅÂÛÉ ÌÎÒÎÐ ÍÀÇÀÄ MOTOR_L2_PORT |= 1<<MOTOR_L2; //_delay_ms(); MOTOR_R1_PORT &=~ (1<<MOTOR_R1); MOTOR_L2_PORT &=~ (1<<MOTOR_L2); wall = 4; } if(wall==2) { MOTOR_R1_PORT |= 1<<MOTOR_R1; //ÏÐÀÂÛÉ ÌÎÒÎÐ ÂÏÅÐÅÄ MOTOR_R2_PORT &=~ (1<<MOTOR_R2); MOTOR_L1_PORT &=~ (1<<MOTOR_L1);//ËÅÂÛÉ ÌÎÒÎÐ ÍÀÇÀÄ MOTOR_L2_PORT |= 1<<MOTOR_L2; //_delay_ms(); MOTOR_R1_PORT &=~ (1<<MOTOR_R1); MOTOR_L2_PORT &=~ (1<<MOTOR_L2); wall = 4; } if(wall==3) { MOTOR_L1_PORT |= 1<<MOTOR_L1;//ËÅÂÛÉ ÌÎÒÎÐ ÂÏÅÐÅÄ MOTOR_L2_PORT &=~ (1<<MOTOR_L2); MOTOR_R1_PORT &=~ (1<<MOTOR_R1);//ÏÐÀÂÛÉ ÌÎÒÎÐ ÍÀÇÀÄ MOTOR_R2_PORT |= 1<<MOTOR_R2; //_delay_ms(); MOTOR_L1_PORT &=~ (1<<MOTOR_L1); MOTOR_R2_PORT &=~ (1<<MOTOR_R2); wall=4; } if(wall==4)// ïóòü ñâîáîäåí ìîæíî åõàòü { MOTOR_R1_PORT |= 1<<MOTOR_R1; //ÏÐÀÂÛÉ ÌÎÒÎÐ ÂÏÅÐÅÄ MOTOR_R2_PORT &=~ (1<<MOTOR_R2); MOTOR_L1_PORT |= 1<<MOTOR_L1;//ËÅÂÛÉ ÌÎÒÎÐ ÂÏÅÐÅÄ MOTOR_L2_PORT &=~ (1<<MOTOR_L2); } } }
#define IR_LEDR 2 #define IR_LEDR_PORT PORTD #define IR_LEDR_DDR DDRD #define IR_LEDF 1 #define IR_LEDF_PORT PORTD #define IR_LEDF_DDR DDRD #define IR_LEDL 0 #define IR_LEDL_PORT PORTD #define IR_LEDL_DDR DDRD #define IR_RESF 1 #define IR_RESF_PORT PORTC #define IR_RESF_DDR DDRC #define IR_RESF_PIN PINC #define IR_RESR 2 #define IR_RESR_PORT PORTC #define IR_RESR_DDR DDRC #define IR_RESR_PIN PINC #define IR_RESL 0 #define IR_RESL_PORT PORTC #define IR_RESL_DDR DDRC #define IR_RESL_PIN PINC #define MOTOR_L1 0 #define MOTOR_L1_PORT PORTB #define MOTOR_L1_DDR DDRB #define MOTOR_L2 2 #define MOTOR_L2_PORT PORTB #define MOTOR_L2_DDR DDRB #define MOTOR_R1 1 #define MOTOR_R1_PORT PORTB #define MOTOR_R1_DDR DDRB #define MOTOR_R2 3 #define MOTOR_R2_PORT PORTB #define MOTOR_R2_DDR DDRB #define time 230
Viivitus paneme katsetes.
Projekti raames valminud robotplatvorm on valmistatud üldiselt plastikust. Alusplaadil on kinnitatud rattad, kaks mootorit keskel, äärtel patareid. Kõik raskemaid komponendid panime alusplaadile masstsentri madalamiseks. Varraste peal on kinnitatud teine plaat peale elektroonikakomponendidega ( mikrokontroller, LED j.n.e ).
| Komponent | Mark | Kogus | Hind | Maksumus |
|---|---|---|---|---|
| Mootor | Faulhaber 12V | 2 | 150.- | 300.- |
| Mikrokontroller | AVR ATmega8 | 1 | 100.- | 100.- |
| Mootorite draiver | L293D | 1 | 40.- | 40.- |
| Kondensaator | CPOL-EUE2-5 1000mkF | 1 | 10.- | 10.- |
| Infrapunane vastuvõtja | IRM8601S | 3 | 30.- | 90.- |
| LED | LED5MM | 3 | 3.- | 9.- |
| Resistor | R-EU_R1206 10kOm | 1 | 1.- | 1.- |
| Resistor | R-EU_R1206 510 Om | 3 | 1.- | 3.- |
| Nupp | BUTTON_6MM | 1 | 20.- | 20.- |
| Ratas | 30/5 mm | 2 | 15.- | 30.- |
| Patareid | Sony alkaline AAA | 3 | 10.- | 30.- |
| Erinevad kaablid | 1m | 10.- | 10.- | |
| Muud tarvikud | 100.- | 100.- | ||
| KOKKU: | 643.- | |||
Roboti hind tuli välja suhteliselt madal arvestades sellega, et mõned osad olid isetehtud, jootmine tegime ise j.n.e. Tootmise hinda saaks veel alandada, optimeerides komponentide ja materjalikulu. Projekti käigus tutvusime mehhatroonikasüsteemi projekteerimise, valmistamise ja testimisega, mis andis meile esmakordse sellelaadse kogemuse.
Töö lõpus selgus tõsiasi, et roboti korralikuks töötamiseks on vaja oluliselt rohkem aega planeerida testimisele, seda eriti tarkvara osas. Erinevad moodulid ei pruugi alati koos korrektselt töötada, kuigi eraldi katsetades oli kõik korras. See näitab, et süsteemi moodulite integreerimine on tõsine väljakutse ja selleks tuleb planeerida oluliselt rohkem aega ja ressurssi.
Kokkuvõteks arvame, et projekt oli huvitav ja hariv ning andis aimu integreeritud süsteemide projekteerimisest ja valmistamisest.