This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:projects:tudengid11:ratasjalg [2011/03/19 08:13] – MAHB082783 | et:projects:tudengid11:ratasjalg [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 11: | Line 11: | ||
| - {{: | - {{: | ||
| - {{: | - {{: | ||
| + | |||
| + | ===== Ratasjalg ===== | ||
| + | Tavaliselt on ratastega liikurrobotite kasutamise tingimuseks liikumine tasasel pinnal, takistustest üritatakse lihtsalt ringiga mööda minna. Paljudel juhtudel ei pruugi see aga võimalik olla ja nii jääb robotile etteantud ülesanne täitmata. On ka jalgadega roboteid, mis suudavad mõningaid takistusi ületada, kui nende puuduseks on väike kiirus ning tasasel pinnal jäävad nad seetõttu ratastele alla. Piisava kiiruse ja samas võime takistusi ületada on võimalik saavutada ratta ja jala kombineerimisega. Ideaalne oleks, kui robot suudab rataste kuju muuta vastavalt olukorrale. Lahenduseks on ratasjalg, mis kombineerib endas ratta kiiruslikud omadused ja jala hea läbivuse. Käesoleva projekti eesmärgiks on luua lihtne autonoomne demorobot, mis kasutab ratasjalga liikumiseks ja takistuste ületamiseks. | ||
| ===== Ülesanne ===== | ===== Ülesanne ===== | ||
| Konstrueerida ja valmis ehitada autonoomne robot, mis suudab ületada väiksema kõrgusega takistusi. Takistuste ületamiseks kasutada olemasolevat ratasjalga, ehitades sellele juurde mehhaanismi ratta avamiseks. Robot peab suutma tuvastada enda ees oleva takistuse ja hinnata objekti ületatavust(kõrgust). Vajadusel avab robot ratasjalad ja ületab takistuse, pärast takistuse ületamist ratasjalad suletakse ja edasi toimub liikumine ratastel. Kui takistust ei õnnestu ületada, muudab robot suunda ja liigub edasi kuni järgmise takistuse tuvastamiseni. | Konstrueerida ja valmis ehitada autonoomne robot, mis suudab ületada väiksema kõrgusega takistusi. Takistuste ületamiseks kasutada olemasolevat ratasjalga, ehitades sellele juurde mehhaanismi ratta avamiseks. Robot peab suutma tuvastada enda ees oleva takistuse ja hinnata objekti ületatavust(kõrgust). Vajadusel avab robot ratasjalad ja ületab takistuse, pärast takistuse ületamist ratasjalad suletakse ja edasi toimub liikumine ratastel. Kui takistust ei õnnestu ületada, muudab robot suunda ja liigub edasi kuni järgmise takistuse tuvastamiseni. | ||
| + | |||
| + | ===== Nõuded ja piirangud süsteemile ===== | ||
| + | |||
| + | * Peab suutma autonoomselt avada ja sulgeda ratasjalgasid | ||
| + | * Koostatud peamiselt kodulabori komponentidest | ||
| + | * Peab suutma tuvastada takistusi ja hinnata takistuste ületatavust | ||
| + | * Suudab ületada takistusi kõrgusega kuni ca. 5,5 cm. | ||
| + | * Liigub ruumis ringi autonoomselt, | ||
| + | * Liikumine sisetingimustes | ||
| ===== Süsteemi üldine mudel ===== | ===== Süsteemi üldine mudel ===== | ||
| Line 34: | Line 46: | ||
| **Avamissüdamiku peatamine piduri (hõõrdumise) abil** | **Avamissüdamiku peatamine piduri (hõõrdumise) abil** | ||
| * Sujuvam ratta avamine, puudub oht kinnikiilumiseks | * Sujuvam ratta avamine, puudub oht kinnikiilumiseks | ||
| - | * Probleemid – konstruktsioon | + | * Konstruktsioon |
| + | * Vajab rohkem ruumi | ||
| + | * Hõõrdejõud | ||
| + | ~~CL~~ | ||
| Esialgu valisime variandi, kus avamissüdamik peatatakse varda abil. Põhjusteks antud konstruktsiooni lihtsus ja kindlus, et varras suudab avamissüdamiku kindlalt fikseerida. | Esialgu valisime variandi, kus avamissüdamik peatatakse varda abil. Põhjusteks antud konstruktsiooni lihtsus ja kindlus, et varras suudab avamissüdamiku kindlalt fikseerida. | ||
| Line 67: | Line 81: | ||
| Nagu näha, siis avamissüsteem on konstruktsioonilt üsna lihtne ja koosneb vähestest detailidest. Selle juures on omad plussid ja miinused. Vaja on ainult ühte servomootorit ning see ei pea arendama kuigi suurt momenti. Avamise jaoks on oluline käigumootorite suutlikkus. Algul kartsime, et antud lahenduse puhul võivad servomootorile mõjuda suured jõud. Tegelikkuses seda ohtu ei ole, sest varda juhik on rattale väga lähedal. See tähendab, et ratta avamisel/ | Nagu näha, siis avamissüsteem on konstruktsioonilt üsna lihtne ja koosneb vähestest detailidest. Selle juures on omad plussid ja miinused. Vaja on ainult ühte servomootorit ning see ei pea arendama kuigi suurt momenti. Avamise jaoks on oluline käigumootorite suutlikkus. Algul kartsime, et antud lahenduse puhul võivad servomootorile mõjuda suured jõud. Tegelikkuses seda ohtu ei ole, sest varda juhik on rattale väga lähedal. See tähendab, et ratta avamisel/ | ||
| + | |||
| + | Järgnevalt on toodud paari detaili lihtsustatud joonised. | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Antud detail valmistamisel lõigtakse sobivate mõõtmetega L-kujulisest profiilist välja vastava pikkusega tükk. Seejärel puuritakse kinnitusavad ja freesitakse servomootori sobitamiseks ava. Detaili materjaliks on alumiinium. | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Detail valmistatakse CNC-freespingis 3 millimeetri paksusest alumiiniumplaadist. | ||
| ===== Elektroonika ===== | ===== Elektroonika ===== | ||
| + | |||
| + | Roboti juhtimiseks kasutame kodulabori komplektis olevat kontrollermoodulit, | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | === Mootorid === | ||
| + | |||
| + | Rataste avamissüsteemi juures kasutasime [[http:// | ||
| + | {{: | ||
| + | |||
| + | Rattaid/ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ~~CL~~ | ||
| + | |||
| + | Tootja tüübinumber: | ||
| + | |||
| + | Tüüp: Ironcore Motor/ Spur Gearhead | ||
| + | |||
| + | Toitepinge: 4.5 → 15Vdc | ||
| + | |||
| + | Võimsus: 21,2 W | ||
| + | |||
| + | Pöörlemiskiirus: | ||
| + | |||
| + | Moment: 0,294 Nm | ||
| + | |||
| + | Ülekandetegur: | ||
| + | |||
| + | |||
| + | === Aku === | ||
| + | |||
| + | 11.1 voldine LiPo | ||
| ===== Juhtimine ===== | ===== Juhtimine ===== | ||
| + | |||
| + | ==== Algoritm ==== | ||
| [{{ : | [{{ : | ||
| + | |||
| + | ==== Lähtekood ==== | ||
| + | |||
| + | Järgnevalt on toodud osa programmikoodist. Kogu lähtekood: | ||
| + | |||
| + | <code java> | ||
| + | |||
| + | int main() | ||
| + | { | ||
| + | //taimeri seadistamine | ||
| + | TCCR0|=(1<< | ||
| + | OCR0=255; | ||
| + | | ||
| + | //lcd ekraani initsialiseerimine | ||
| + | lcd_alpha_init(LCD_ALPHA_DISP_ON); | ||
| + | lcd_alpha_clear(); | ||
| + | char text[16]; | ||
| + | |||
| + | vertdist=ultrasonic_measure(pin_trigger, | ||
| + | horzdist=ultrasonic_measure(pin_trigger1, | ||
| + | |||
| + | unsigned short mindist=500; | ||
| + | unsigned short maxdist=0; | ||
| + | unsigned short openmindist=500; | ||
| + | unsigned short openmaxdist=0; | ||
| + | | ||
| + | //Viikude seadistamine | ||
| + | DDRC|=0x38; | ||
| + | PORTC |=(0x38); | ||
| + | DDRE|=(1<< | ||
| + | PORTE|=(1<< | ||
| + | PORTE &= ~(1<< | ||
| + | TCCR1A|=(1<< | ||
| + | TCCR1B|=(1<< | ||
| + | ICR1=36864; | ||
| + | OCR1A=1843; | ||
| + | OCR1B=1843; | ||
| + | |||
| + | pin_setup_output(pin_trigger); | ||
| + | pin_setup_input_with_pullup(pin_echo); | ||
| + | pin_setup_output(pin_trigger1); | ||
| + | pin_setup_input_with_pullup(pin_echo1); | ||
| + | |||
| + | TCCR2|=(1<< | ||
| + | OCR2=144; | ||
| + | TIMSK|=(1<< | ||
| + | |||
| + | dcmotor_init(0); | ||
| + | dcmotor_init(1); | ||
| + | servomotor_init(0); | ||
| + | servomotor_init(1); | ||
| + | sei(); | ||
| + | |||
| + | bool flag2=true; | ||
| + | bool flag1=true; | ||
| + | bool flag0=true; | ||
| + | bool roaming=false; | ||
| + | bool potncollision=false; | ||
| + | bool collided=false; | ||
| + | |||
| + | unsigned short t0=clock; | ||
| + | unsigned short t1=clock; | ||
| + | unsigned short t2; | ||
| + | |||
| + | Stop(); | ||
| + | sw_delay_ms(2000); | ||
| + | | ||
| + | //põhiline programmitsükkel | ||
| + | while(1) | ||
| + | { | ||
| + | if(t0< | ||
| + | { | ||
| + | | ||
| + | vertdist=filter(vertdist, | ||
| + | sw_delay_ms(100); | ||
| + | horzdist=filter(horzdist, | ||
| + | if(!legsOpen) | ||
| + | { | ||
| + | if(vertdist> | ||
| + | maxdist=vertdist; | ||
| + | else if(vertdist< | ||
| + | mindist=vertdist; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | if(vertdist> | ||
| + | openmaxdist=vertdist; | ||
| + | else if(vertdist< | ||
| + | openmindist=vertdist; | ||
| + | } | ||
| + | t0=clock+10; | ||
| + | } | ||
| + | if(bit_is_clear(PINC, | ||
| + | { | ||
| + | flag2=false; | ||
| + | OpenLegs(); | ||
| + | } | ||
| + | else if(bit_is_set(PINC, | ||
| + | flag2=true; | ||
| + | if(bit_is_clear(PINC, | ||
| + | { | ||
| + | flag1=false; | ||
| + | CloseLegs(); | ||
| + | } | ||
| + | else if(bit_is_set(PINC, | ||
| + | flag1=true; | ||
| + | if(bit_is_clear(PINC, | ||
| + | { | ||
| + | flag0=false; | ||
| + | static char count=1; | ||
| + | | ||
| + | mindist=500; | ||
| + | maxdist=0; | ||
| + | openmindist=500; | ||
| + | openmaxdist=0; | ||
| + | if(count& | ||
| + | { | ||
| + | roaming=true;// | ||
| + | count++; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | roaming=false; | ||
| + | count++; | ||
| + | } | ||
| + | } | ||
| + | else if(bit_is_set(PINC, | ||
| + | flag0=true; | ||
| + | | ||
| + | if(roaming) | ||
| + | { | ||
| + | if(horzdist< | ||
| + | { | ||
| + | potncollision=true; | ||
| + | } | ||
| + | | ||
| + | if(horzdist< | ||
| + | { | ||
| + | PORTC &= ~(0x10); | ||
| + | Stop(); | ||
| + | sw_delay_ms(50); | ||
| + | BackWard(); | ||
| + | sw_delay_ms(1250); | ||
| + | OCR0=255; | ||
| + | |||
| + | TurnLeft(); | ||
| + | sw_delay_ms(1500); | ||
| + | Stop(); | ||
| + | |||
| + | potncollision=false; | ||
| + | PORTC |= 0x10; | ||
| + | } | ||
| + | |||
| + | else if(!legsOpen&& | ||
| + | { | ||
| + | PORTC &= ~(0x20); | ||
| + | OCR0=255; | ||
| + | OpenLegs(); | ||
| + | PORTC |= (0x20); | ||
| + | } | ||
| + | |||
| + | else if(!collided&& | ||
| + | collided=true;// | ||
| + | |||
| + | else if(collided&& | ||
| + | { | ||
| + | PORTC &= ~(0x08); | ||
| + | potncollision=false; | ||
| + | |||
| + | OCR0=255; | ||
| + | collided=false; | ||
| + | CloseLegs(); | ||
| + | PORTC |= (0x08); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | if(legsOpen) | ||
| + | OCR0=255; | ||
| + | else | ||
| + | OCR0=100; | ||
| + | ForWard(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | else | ||
| + | { | ||
| + | Stop(); | ||
| + | OCR0=255; | ||
| + | } | ||
| + | | ||
| + | sprintf(text," | ||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(text); | ||
| + | sprintf(text," | ||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(text); | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Valmislahendus ===== | ||
| + | |||
| + | Pärast 9 nädalat rasket tööd valmis robot " | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | Ja siin väike video | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | ===== Majanduskalkulatsioon ===== | ||
| + | |||
| + | Komponentide puhul,mille konkreetset hinda ei suudetud või ei olnud võimalik kindlaks teha,on maksumust hinnatud umbkaudselt. | ||
| + | |||
| + | ^Komponent^Mark^Kogus^Hind, | ||
| + | |DC mootor|919D501| 2|28, | ||
| + | |Ultraheliandur|SRF05|2|16, | ||
| + | |Aku|LiPo 11,1 V|1|40|40| | ||
| + | |Mikrokontroller arendusplaadiga|ATMega128|1|80, | ||
| + | |Standard RC servo|DG S03NFSTD|1|15, | ||
| + | |Mootorite moodul| |1|58, | ||
| + | |Alusplaatide materjal| |2|5|10| | ||
| + | |Anduri- ja mootorikinnitused| |4|3|12| | ||
| + | |Rattad/ | ||
| + | |Kruvid, poldid ja mutrid| | | |10| | ||
| + | |Kleepsud| | | |5| | ||
| + | ^Kokku^ ^ ^ ^356^ | ||
| + | |||
| + | Tehtud tööd: | ||
| + | |||
| + | ^Töö^Aeg, h^Hind^Maksumus, | ||
| + | |Projekteerimine|80|2|160| | ||
| + | |Roboti testimine|50|2|100| | ||
| + | |Detailide freesimine|4|6, | ||
| + | |Detailide mehaaniline töötlemine|15|2|30| | ||
| + | |Roboti koostamine|10|2|20| | ||
| + | |Programmeerimine|41|3|123| | ||
| + | ^Kokku^200^ ^450^ | ||
| + | |||
| + | ===== Projektijuhtimine ===== | ||
| + | |||
| + | Aja planeerimisel lähtusime peamiselt antud aine õppekorralduses toodud ajakavast. Täpsemalt on erinevatel ajaperioodidel tehtud tööd kirjas nädalaaruannetes, | ||
| + | |||
| + | ===== Kokkuvõte ja järeldused ===== | ||
| + | |||
| + | Kokkuvõttes sai projekteeritud ja valmis ehitatud enam-vähem töötav autonoomne robot. Kõige olulisem viga, mille me projekti käigus tegime, oli liiga vähese aja jätmine roboti katsetamiseks. Katsetamise käigus tulid esile mitmed probleemid, mida me projekteerimise käigus ei osanud karta. Samuti oleks olnud mõistlik natuke rohkem aega kulutada ideelaheduste analüüsile. Valisime kasutatava lahenduse kiiresti välja, et asi saaks kiiremini realiseeritud, | ||
| + | |||
| + | Roboti konstrueerimine andis meile hea ettekujutuse mehhatroonikasüsteemi ülesehitusest. Tõdesime, kui oluline on süsteemi mehaanika-, elektroonika ja programmiosa omavaheline sobivus. Projekti käigus oli meil võimalus rakendada varem omandatud teoreetilisi teadmisi, lisaks arendasime ka meeskonnatöö ja aja planeerimise oskust. Oluline asi, mis meie tööd projekti käigus aeglustas, oli mõningate roboti osade ebamugav koostamine. Seega tulevikus üritame konstrueerida süsteemid niiviisi, et neid oleks võimalik kiiresti kokku panna ja komponentide vahetamiseks lahti võtta. | ||
| + | |||
| + | |||
| + | ===== Viited ja kasutatud materjalid ===== | ||
| + | |||
| + | - Kodulabori juhendmaterjal http:// | ||
| + | - Komponentide hinnad http:// | ||
| + | - Ratasjala kirjeldus [[http:// | ||
| + | - Mikrokontrolleri andmeleht [[http:// | ||