NavigatsioonirobotAutor: Raivo Sell Käesolev õpiobjekt tutvustab navigatsioonirobotit, mida saab ehitada Robootika Kodulabori baasil.
Navigatsioonirobot on tüüpiline robootika rakendus õpilastele, kes soovivad rakendada oma oskusi integreeritud süsteemi loomiseks. Navigatsiooniroboti ehitamiseks on vaja liikuvat alusplatvormi kaugusandurit ja mikrokontrollersüsteemi, milleks antud juhul on Robootika Kodulabor. ![]() Õpiobjekti nimi: NavigatsioonirobotÕpiväljundid:Pärast mooduli läbimist õpilane:
Kasutusjuhend:
Õpetatav osa: Lugeda teoreetilist ülevaadet enne riistvara reaalset ühendamist ja pingestamist. Vaadata juhendeid korrektse riistvara käsitlemise tagamiseks. Õpitu kinnistamiseks tuleb praktilised näited reaalselt läbi teha. Seoste loomine: Läbi õppejuhendite ja sõnalise selgituse järgimise. Kinnistav osa: Iseseisev praktika reaalse riistvarakomplekti baasil. TEOREETILINE OSARoboti võib lihtsustatult jagada kolmeks loogiliseks ja
füüsiliseks osaks: roboti konstruktsioon ehk mehaanika, elektroonika ja juhtimine. MehaanikaRoboti mehaanika põhiülesandeks on roboti
erinevate komponentide ühendamine ühtseks tervikuks. Näiterobot on
ehitatud robotplatvorm RP06 baasil, mis tähendab, et suurem osa tööst
on juba ära tehtud. Alusplatvorm sisaldab endas roboti keret, robotit
edasi viivaid mootoreid koos kinnitusega ning ülekannet, mis mootorite
kiire ning nõrga liikumise teisendab aeglasemaks ning tugevamaks
liikumiseks. Lisaks on seal ette nähtud ka koht akudele ning
koodritele. Alusplatvormi peale käib omakorda vaheplaat, mille külge
kinnitatakse roboti elektroonikamoodulid ning kaugusandur koos
servomootoriga. ElektroonikaRoboti
elektroonikaskeemi saab jagada lihtsustatuna kolmeks: sisendid,
väljundid ning juhtmoodul. Sisenditeks selle roboti puhul on koodrid,
millelt saab tagasisidet mootorite liikumise kohta ning ultraheliandur,
millega robot jälgib seinu. Väljunditeks on 2 alalisvoolumootorit
roboti lintmehhanismide liigutamiseks ning servomootor ultrahelianduri
liigutamiseks. Lisaks eelnevalt kirjeldatuile on sisenditeks ning
väljunditeks ka kasutajaliidese plaadil olevad nupud ning LED-id ja
LCD. Juhtmooduliks on Robootika Kodulabori Kontrollermoodul, mis
tegeleb andurite lugemisega ning väljundite lülitamisega. TarkvaraRobot
käitub alati vastavalt tema kontrollerisse laetud tarkvarale. Tarkvara
ülesandeks on lugeda roboti sisendeid, teha juhtimisotsuseid ja
vastavalt sellele lülitada väljundeid. KoostamineVajalikud komponendid
Koostamise juhendVõtta olemasolev vaheplaat ja paigaldada see kruvidega robotplatvormile. Enne vaheplaadi kinnitamist tuleb plavormile lisada akud ja juhtmetele paigaldada vajalikud pistikud. Vaheplaadile saab kinnitada ka servomootori, millele omakorda on paigaldatud ultraheli kaugusandur. Kaugusanduri paigaldamine servo mootorile võimaldab seda roboti liikumise ajal pöörata kuni 180 kraadi. Selline pidev pööramine tekitab radari efekti ja annab võimaluse tuvastada objekte või labürindi seinu mitte ainult otse ees vaid ka roboti külgedel. Alljärgnevalt on näidatud roboti peamised moodulid, mis tuleb omavahel ühendada: ![]() ![]() Platvormi ja Kodulabori elektrilised ühendusedKõigepealt ühendada koodrite kaablid RP06 korpuses. Pange tähele kaablite polarisatsiooni. Järgmiseks tõmbame juhtmed läbi alusplaadi pilu ning kinnitame alusplaadi roboti kere külge. Edasi ühendame mootorite kaablid. Mootori kaablid tuleb ühendada mootori väljunditesse Mootorikontrolleri plaadil (Nt parem mootor DC3 ja vasak mootor DC2). Ühenda koodrid koodrite sisenditesse (parem kooder ülemisse, vasak alumisse). Viimaseks kasutades Y-toitekaablit ühendame mõlemale plaadile toite. Radari koostamineKõigepealt paneme kokku servo kinnituse poldid. Kasutame selleks pikka M3 polti ning kaht lukustusmutrit: Üht mutrit kasutame servo kinni hoidmiseks ning teine on kauguse hoidmiseks ning peaks olema keeratud umbes samale kaugusele, nagu servo kere. Seejärel ühendame ultrahelianduri servoga. Kui moodul on valmis, ühendame selle koostu roboti alusplatvormiga. Kasutame tavalisi M3 mutreid poltide kinnitamiseks. Seejärel ühendame ultrahelianduri kaabli. Jälgige polaarsust! Ultraheliandur tuleks ühendada ühte digitaalsesse sisend/väljund viiku (Näiteks PORTE 2). Viimaks ühendame servo kaabli ühte servo väljundisse (Näiteks SERVO1). Koostatud robot näeb pealtvaates välja selline: NÄITEKOODLihtne navigatsiooniroboti tarkvaranäide. // // Kasutades väikest servomootorit ning sellele kinnitatud ultraheliandurit // navigeeri labürindis. // 7-segment ekraan näitab kaugust lähemal, kui 10cm // Ultraheliandur on ühendatud viiku PORTE 2 // Servo ühendatud viiku SERVO 1 // #define F_CPU 14745600 #define RIGHT_MT 0 #define LEFT_MT 1 #define SERVO_STRAIGHT -30 #define SERVO_LEFT -180 #define SERVO_RIGHT 160 #define DEG90 800 #include <stdio.h> #include <homelab/pin.h> #include <homelab/delay.h> #include <homelab/module/sensors.h> #include <homelab/module/motors.h> #include <homelab/module/segment_display.h> // // Ultrahelianduri viik // pin pin_trigger_echo = PIN(E, 2); // // Põhiprogramm // int main(void) { uint16_t distance; // Anduriplaadil kasutame väliseid andureid pin ex_sensors = PIN(G, 0); pin_setup_output(ex_sensors); pin_set(ex_sensors); //Seadista mootorid dcmotor_init(0); dcmotor_init(1); //Seadista servomootor servomotor_init(1); //Seadista 7-segmendiline ekraan segment_display_init(); while(1) { //Kontrolli kas midagi on ees distance = ultrasonic_measure_srf05(pin_trigger_echo); //Näita kaugust 7-segmendilisel ekraanil segment_display_write(distance); if(distance < 5) { //Midagi on ees, jääme seisma ja vaatame, kuhu minna dcmotor_drive(RIGHT_MT,0); dcmotor_drive(LEFT_MT,0); //Vaata paremale servomotor_position(1,SERVO_RIGHT); sw_delay_ms(1000); distance = ultrasonic_measure_srf05(pin_trigger_echo); if(distance < 20) { //Midagi on ees, paremale minna ei saa, vaatame vasakule servomotor_position(1,SERVO_LEFT); sw_delay_ms(1000); distance = ultrasonic_measure_srf05(pin_trigger_echo); if(distance < 20) { //Tupik, keerame ümber ja läheme tagasi dcmotor_drive(RIGHT_MT,-1); dcmotor_drive(LEFT_MT,-1); servomotor_position(1,SERVO_STRAIGHT); sw_delay_ms(1500); } else { //Vasakult puhas, keerame sinna ja sõidame edasi dcmotor_drive(RIGHT_MT,-1); dcmotor_drive(LEFT_MT,-1); servomotor_position(1,SERVO_STRAIGHT); sw_delay_ms(DEG90); } } else { //Paremalt puhas, keerame sinna ja sõidame edasi dcmotor_drive(RIGHT_MT,1); dcmotor_drive(LEFT_MT,1); servomotor_position(1,SERVO_STRAIGHT); sw_delay_ms(DEG90); } } else { //Midagi pole ees, sõidame otse dcmotor_drive(RIGHT_MT,-1); dcmotor_drive(LEFT_MT, 1); servomotor_position(1,SERVO_STRAIGHT); sw_delay_ms(100); } } } LISAMATERJAL
Teoreetilise osa algtekstide autor: Raivo Sell ja Rain Ellermaa |