Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:projects:tudengid11:ratasjalg [2011/03/29 17:24] MAHB082783et:projects:tudengid11:ratasjalg [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 17: Line 17:
 ===== Ü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, takistusi vältides või neid ületades
 +  * Liikumine sisetingimustes
  
 ===== Süsteemi üldine mudel ===== ===== Süsteemi üldine mudel =====
Line 90: Line 99:
  
 [{{:et:projects:tudengid11:ratasjalg:elektriskeem.png?600|Mootorite ja andurite elektrilised ühendused}}] [{{:et:projects:tudengid11:ratasjalg:elektriskeem.png?600|Mootorite ja andurite elektrilised ühendused}}]
 +
 +[{{:et:projects:tudengid11:ratasjalg:skeem2.png?550|Hüpoteetiline mootorite driver}}]
  
 === Mootorid === === Mootorid ===
Line 122: Line 133:
  
 ===== Juhtimine ===== ===== Juhtimine =====
 +
 +==== Algoritm ====
  
 [{{ :et:projects:tudengid11:ratasjalg:flowchart.png | Esialgne juhtimisalgoritmi flowchart}}] [{{ :et:projects:tudengid11:ratasjalg:flowchart.png | Esialgne juhtimisalgoritmi flowchart}}]
 +
 +==== Lähtekood ====
 +
 +Järgnevalt on toodud osa programmikoodist. Kogu lähtekood:  {{:et:projects:tudengid11:ratasjalg:ratasjalg.c}}.
 +
 +<code java>
 +
 +int main()
 +{
 +    //taimeri seadistamine
 +    TCCR0|=(1<<COM01)|(1<<WGM00)|(1<<WGM01)|0x05;
 +    OCR0=255;
 +    
 + //lcd ekraani initsialiseerimine
 +    lcd_alpha_init(LCD_ALPHA_DISP_ON);
 +    lcd_alpha_clear();
 +    char text[16];
 +
 +    vertdist=ultrasonic_measure(pin_trigger, pin_echo);    
 +    horzdist=ultrasonic_measure(pin_trigger1, pin_echo1);
 +
 +    unsigned short mindist=500;
 +    unsigned short maxdist=0;
 +    unsigned short openmindist=500;
 +    unsigned short openmaxdist=0;
 +    
 + //Viikude seadistamine
 +    DDRC|=0x38;
 +    PORTC |=(0x38);
 +    DDRE|=(1<<PE4)|(1<<PE5);
 +    PORTE|=(1<<PE5);
 +    PORTE &= ~(1<<PE4);
 +    TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
 +    TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS11);
 +    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<<WGM21)|(1<<CS20)|(1<<CS22);
 +    OCR2=144;
 +    TIMSK|=(1<<OCIE2);
 +
 +    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<clock)
 +        {           
 +        
 +            vertdist=filter(vertdist,pin_trigger, pin_echo);
 +            sw_delay_ms(100);
 +            horzdist=filter(horzdist,pin_trigger1, pin_echo1);
 +            if(!legsOpen)
 +            {
 +                if(vertdist>maxdist)
 +                    maxdist=vertdist;
 +                else if(vertdist<mindist)
 +                    mindist=vertdist;
 +            }
 +            else
 +            {
 +                if(vertdist>openmaxdist)
 +                    openmaxdist=vertdist;
 +                else if(vertdist<openmindist)
 +                    openmindist=vertdist;
 +            }
 +            t0=clock+10;
 +        }
 +        if(bit_is_clear(PINC,2)&&flag2)//punase led juures
 +        {
 +            flag2=false;
 +            OpenLegs();
 +        }
 +        else if(bit_is_set(PINC,2))
 +            flag2=true;
 +        if(bit_is_clear(PINC,1)&&flag1)//kollane
 +        {
 +            flag1=false;
 +            CloseLegs();
 +        }
 +        else if(bit_is_set(PINC,1))
 +            flag1=true;
 +        if(bit_is_clear(PINC,0)&&flag0)//roheline
 +        {
 +            flag0=false;
 +            static char count=1;
 +            
 +            mindist=500;
 +            maxdist=0;
 +            openmindist=500;
 +            openmaxdist=0;
 +            if(count&0x01)
 +            {
 +                roaming=true;//ürita autonoomslet töötada
 +                count++;
 +            }
 +            else
 +            {
 +                roaming=false;
 +                count++;
 +            }
 +        }
 +         else if(bit_is_set(PINC,0))
 +            flag0=true;
 +        
 +        if(roaming)
 +        {
 +            if(horzdist<50)//kui 50 cm midagi paistab
 +            {                
 +                potncollision=true;
 +            }
 +            
 +            if(horzdist<20)//kui kõrge takistus (20 cm)
 +            {
 +                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&&vertdist<8)//90?   kui rattad kinni ja näeb takistus
 +            {
 +                PORTC &= ~(0x20);
 +                OCR0=255;
 +                OpenLegs();                ;
 +                PORTC |= (0x20);
 +            }
 +
 +            else if(!collided&&legsOpen&&vertdist<10)//kui põrkub kokku takistusega peale ratatste avamist
 +                collided=true;//abi flag
 +
 +            else if(collided&&legsOpen&&vertdist>12)//120? kui ületanud takistuse
 +            {  
 +                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,"l%dc%dp%dr%d %d",legsOpen,collided,potncollision,roaming,OCR0);
 +        lcd_alpha_goto_xy(0, 0);
 +        lcd_alpha_write_string(text);
 +        sprintf(text,"v%d h%d  ",vertdist,horzdist);
 +        lcd_alpha_goto_xy(0, 1);
 +        lcd_alpha_write_string(text);
 +     }
 +    return 0;
 +}
 +
 +</code>
 +
 +===== Valmislahendus =====
 +
 +Pärast 9 nädalat rasket tööd valmis robot "Ratasjalg". Kuigi robot vajaks veel natuke katsetamist, siis tuleb rahul olla sellega mis tehtud sai. Rataste avamissüsteem, mis meie ülesande juures oli põhiprobleem, toimib üldjuhul hästi. Samuti suudab robot eristada kõrget takistust madalast ning otsustada, kas rattad avada või suunda muuta. Järgnevalt on toodud pilt valmis robotist.
 +
 +[{{:et:projects:tudengid11:ratasjalg:valma.jpg?600|Ratasjalg}}]
 +
 +Ja siin väike video
 +
 +{{youtube>large:j8UShJ8e4qc }}
  
 ===== Majanduskalkulatsioon ===== ===== Majanduskalkulatsioon =====
  
-Hinnad on tabelis toodud ainult nendele komponentidele, mille hinna suutsime välja selgitada.+Komponentide puhul,mille konkreetset hinda ei suudetud või ei olnud võimalik kindlaks teha,on maksumust hinnatud umbkaudselt.
  
-^Komponent^Kogus^Hind, EUR^Maksumus, EUR^ +^Komponent^Mark^Kogus^Hind, EUR^Maksumus, EUR^ 
-|DC mootor 919D501| 2|28,09|56,18| +|DC mootor|919D501| 2|28,09|56,18| 
-|Ultraheliandur SRF05|2|33,60| +|Ultraheliandur|SRF05|2|16,80|33,60| 
-|Aku LiPo 11,1 V|1|40.-|40.-+|Aku|LiPo 11,1 V|1|40|40| 
-|Mikrokontroller  ATmega128 arendusplaadiga|1|80,40|80,40| +|Mikrokontroller arendusplaadiga|ATMega128|1|80,40|80,40| 
-|Standard RC servo|1|15,60|15,60| +|Standard RC servo|DG S03NFSTD|1|15,60|15,60| 
-|Mootorite moodul|1|58,80|58,80| +|Mootorite moodul|1|58,80|58,80| 
-|Alusplaatide materjal| | | | +|Alusplaatide materjal| |2|5|10
-|Anduri- ja mootorikinnitused| | | | +|Anduri- ja mootorikinnitused| |4|3|12
-|Rattad| | | | +|Rattad/ratasjalad| | | |35
-|Kruvid, poldid ja mutrid| | | | +|Kruvid, poldid ja mutrid| | | |10| 
-^Kokku^ ^ ^285.-^+|Kleepsud| | | |5
 +^Kokku^ ^ ^ ^356^ 
 + 
 +Tehtud tööd: 
 + 
 +^Töö^Aeg, h^Hind^Maksumus, EUR^ 
 +|Projekteerimine|80|2|160| 
 +|Roboti testimine|50|2|100| 
 +|Detailide freesimine|4|6,40|25,6| 
 +|Detailide mehaaniline töötlemine|15|2|30| 
 +|Roboti koostamine|10|2|20| 
 +|Programmeerimine|41|3|123| 
 +^Kokku^200^ ^450^
  
 ===== Projektijuhtimine ===== ===== Projektijuhtimine =====
Line 146: Line 382:
 Aja planeerimisel lähtusime peamiselt antud aine õppekorralduses toodud ajakavast. Täpsemalt on erinevatel ajaperioodidel tehtud tööd kirjas nädalaaruannetes, samuti võib sealt ka leida vastavale aruandele järgnevate nädalate plaanid. Roboti valmimine venis lõpuks päris palju, kuna mitmeid esialgseid lahendusi tuli modifitseerida ja see kulutas oluliselt aega. Tulemusena ei saanud kuigi pikalt tegeleda roboti testimisega. Oluliselt aitasid projekti valmimisele kaasa ettekanded, mis motiveerisid etteantud tähtajaks midagi valmis tegema ja samas võimaldasid saada tagasisidet juhendajatelt ja teistelt meeskondadelt. Meeskonnatöö sujus rahuldavalt, mõnel juhul oli probleeme kõigile meeskonnaliikmetele sobivate aegade leidmisega.  Meeskonnas väga ranget tööjaotust ei olnud, erandina programmeerimisega tegeles peamiselt üks inimene. Aruannete koostamise ja töö dokumenteerimisega tegeles peamiselt meeskonna juht, kuid materjali dokumentatsiooni jaoks kogusid ka teised liikmed. Komponentide ja materjalide hankimine käis läbi juhendajate, roboti vastava osaga tegelev meeskonnaliige andis juhendajale teada mingi komponendi või materjali vajadusest. Aja planeerimisel lähtusime peamiselt antud aine õppekorralduses toodud ajakavast. Täpsemalt on erinevatel ajaperioodidel tehtud tööd kirjas nädalaaruannetes, samuti võib sealt ka leida vastavale aruandele järgnevate nädalate plaanid. Roboti valmimine venis lõpuks päris palju, kuna mitmeid esialgseid lahendusi tuli modifitseerida ja see kulutas oluliselt aega. Tulemusena ei saanud kuigi pikalt tegeleda roboti testimisega. Oluliselt aitasid projekti valmimisele kaasa ettekanded, mis motiveerisid etteantud tähtajaks midagi valmis tegema ja samas võimaldasid saada tagasisidet juhendajatelt ja teistelt meeskondadelt. Meeskonnatöö sujus rahuldavalt, mõnel juhul oli probleeme kõigile meeskonnaliikmetele sobivate aegade leidmisega.  Meeskonnas väga ranget tööjaotust ei olnud, erandina programmeerimisega tegeles peamiselt üks inimene. Aruannete koostamise ja töö dokumenteerimisega tegeles peamiselt meeskonna juht, kuid materjali dokumentatsiooni jaoks kogusid ka teised liikmed. Komponentide ja materjalide hankimine käis läbi juhendajate, roboti vastava osaga tegelev meeskonnaliige andis juhendajale teada mingi komponendi või materjali vajadusest.
  
 +===== 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, kuid paremini läbimõeldud valiku tegemine võinuks roboti valmimist hoopis kiirendada. 
 +
 +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://home.roboticlab.eu
 +  - Komponentide hinnad http://www.ittgroup.ee
 +  - Ratasjala kirjeldus [[http://inseneeria.eas.ee/index.php?option=com_content&view=article&id=336%3Aleiutis-ratasjalg&catid=62%3Ajuuni-2010&Itemid=27|http://inseneeria.eas.ee]]
 +  - Mikrokontrolleri andmeleht [[http://www.atmel.com/dyn/resources/prod_documents/doc2467.pdf|ATMega128]]
et/projects/tudengid11/ratasjalg.1301419477.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0