You are on page 1of 32

4.

1 Gla avni kontroler


M Mozak mob bilnog robo je razvo ota ojna platfor rma Arduino Uno Rev Arduino Uno je v3. o mikroko ontroler plo koja se temelji n ATmega oa e na a328 kontro oleru. Ona ima 14 digitalnih d ulaznih/ /izlaznih pin nova (od ko 6 moe se koristit kao PWM izlaz), 6 a ojih e ti M analognih ulaza, 16 u MHz ke eramiki re ezonator, USB priklju ak, prikljuak za napajanje, ICS zaglavlje i reset SP e, dugme. Sadri sve to je potre ebno kako b se podra mikrokontroler, jedn bi ao dnostavno se povee e na rau unar pomo USB ka u abla da bi se zapoel sa radom Uno se razlikuje od svih lo m. e prethod dnih ploa u kojoj se ne koriste FTDI USB-serijski ip. Umjest toga, on ima i to na Atmega a16U2 progr ramiran kao USB-serij ski konvert o ter.

Slik 4.1. Arduin Uno Rev3 razvojna platfo ka no r orma

stike: Verzija Uno Rev3 ima sljedee karakteris - M Mikrokontr roler ATmeg ga328 - R Radni napo 5V on - U Ulazni napo (preporu on ueno) 7-12V V - U Ulazni napo (granice) 6-20V on ) - D Digitalni I / O pinovi 14 (od ega est PWM izlaza) 1 - A Analogni ul lazni pinovi 6 i - D strujna po I / O pin 40 mA DC n - D trenutna za 3.3V Pin 50 mA DC a P - F Flash memo orija 32 kB (ATmega3 28) od kojih je 0,5 kB koristi boot h tloader - SRAM 2 K (ATmega KB a328) EEPROM 1 KB (ATm mega328) - E - B Brzina takta 16 MHz a

Napome ena: Dizajn Arduino ptalforme m n p moe koristit Atmega8, 168 ili 32 Trenutni modeli ti 28, koriste ATmega32 ali Atme 28, ega168 je p prikazano u shemi. Pin konfigurac je iden n acija ntina na sva tri p procesora.

Slika 4.2. Raspore pinova na k a ed kontroleru i an nalogija pinov na Arduino ploi va o

A Arduino Un moe se napajati p no e putem USB veze ili s vanjskim napajanjem Izvor B m m. napajanj je autom nja matski odab bran. Vanjs sko (ne US SB) napajanje moe d doi ili iz AC-DC adaptera ili baterije Adapter moe biti sp a e. m pojen priklj jukom 2.1m central pozitiva utika mm lno an u napon nsku utini icu. Vod iz baterije m z moe biti umetnut u GND i Vin pin-priklj u G n juak za napajanj nje. P Ploa moe raditi na vanjskom n e naponu 6-20 volti. Ak dolazi na ko apon manji od 7V, i tada, 5V pin moe dostaviti manje od pe volti i pro V m et ojekat moe biti nestab e bilan. Ako se koristi s vie od 12V, regu d ulator napona se mo pregrijati i otetiti plou. Prep e i poruuje se raspon e napona od 7-12 v volti. V VIN. Ulazn napon na Arduino plou kad se korist vanjski i ni n da ti izvor napajanja (za r razliku od 5V iz US priklju SB ak ili drug reguliran izvor na gi ni apajanja). Moe se M o opskrbiti na apon kroz ovaj pin, ili, ako je opsk krba napono preko po om ower jack, pristupiti p k kroz ovaj pi in. 5 Ovaj pi izlazi reg 5V. in guliran 5V i regulator na ploi. Snabdijeva iz ra anje napono preko om 5 ili 3,3 V pina zaobi 5V ilazi regulat da se ne otetila ploa. tor, ebi p 3 3V3. 3,3 V opskrba generisan na plo preko re a na i egulatora. Maksimaln struja na i izvlaenja je 50 mA. G GND. Pinov za masu vi

Asmir Mu ujagi

Svaka od 14 digitalnih pinova na Uno se moe koristiti kao ulaz ili izlaz, koristei pinMode (), digitalWrite () i digitalRead () funkcije. Oni rade na 5 volti. Svaki pin moe pruiti ili primiti najvie 40 mA i ima unutarnji pull-up otpornik (iskljuen po defaultu) od 20 do 50 k. Osim toga, neki pinovi imaju specijalizirane funkcije: Serijski: 0 (RX) i 1 (TX). Koristi se za primanje (RX) i prijenos (TX) TTL serijske podatke. Ovi pinovi su povezani s odgovarajuim pinovima u ATmega8U2 USB-TTL serial ipu. Vanjski prekidi: 2 i 3. Ovi pinovi mogu biti konfigurisani za pokretanje prekida na niske vrijednosti, uzlaznog ili silaznog ruba, ili promjene u vrijednosti. PWM: 3, 5, 6, 9, 10, i 11. Osigurati 8-bitni PWM izlaz s analogWrite () funkcijom. SPI: 10 (SS), 11 (Mosi), 12 (MISO), 13 (SCK). Ovi pinovi podravaju SPI komunikaciju koristei SPI biblioteku. LED: 13. Tu je LED spojen na digitalni pin 13. Kada je pin visoka vrijednost, LED svijetli, kada je pin niska vrijednost, LED ne svijetli.

Uno ima 6 analognih ulaza, s oznakom A0 do A5, od kojih svaki pruaju 10 bita rezolucije (tj. 1024 razliite vrijednosti). Po defaultu se mjeriti od GND na 5 volti, iako je to mogue promijeniti gornji kraj svog raspona koristei AREF pin i analogReference () funkciju. Osim toga, neki pinovi imaju specijalizirane funkcije: TWI: A4 ili SDA pin i A5 ili SCL pin. Podrka TWI komunikaciju koristei Wire biblioteku. Postoji nekoliko drugih pinova na ploi: - AREF. Referentni napon za analogne ulaze. analogReference (). - Reset. Dovedemo li ovu liniju na NAJNII nivo, mikrokontroler se resetuje. Obino se koristi reset dugme za dodavanje koje se nalazi na ploi. Arduino Uno ima niz objekata za komunikaciju s raunarom, drugim Arduino ploama, ili drugim mikrokontrolerima. ATmega328 prua UART TTL (5V) serijsku komunikaciju, koja je dostupna na digitalnim pinovima 0 (RX) i 1 (TX). ATmega16U2 na ploi kanalima do serijske komunikacijske dolazi preko USB-a i pojavljuje kao virtualni COM port na raunaru. ATmega16U2 Firmware koristi standardni USB COM driver, a vanjski driver nije potreban. Meutim, na Windows,. Inf datoteka je potrebna. Softver ukljuuje serijski monitor koji omoguuje jednostavan pregled tekstualnih podataka koji se alju i iz Arduino ploe. RX i TX LED na ploi e zasvijetliti kada se podaci prenose preko USB-to-serial ip-a i USB prikljuka na raunaru (ali ne i za serijsku komunikaciju na pinove 0 i 1). ATmega328 takoer podrava I2C (TWI) i SPI komunikaciju. Softver ukljuuje Wire biblioteku koja e pojednostaviti koritenje I2C bus-a.
Asmir Mujagi 3

A ATmega328 na Arduin Uno dola sa bootlo 8 no azi oader-om koji vam om k moguuje da uploada ujemo n novi kd z njega bez koriten vanjsko hardvera programer On kom za nja og a ra. municira pomou originalno STK500 protokola (C header da u og p C atoteke).

4.2 Pogonski sis stem

K pogonski sistem mobilnog r Kao robota u ov vom primjeru koriten je L298 dvostruki n d puno-m mosni kontro oler, koji je namijenjen za upravlja n anje DC ili STEP moto orima. U sluaju da DC mot napajam direktno sa mikrok tor mo o kontrolera, to bi izazva veliko o t alo optereenje ili samo unitenj mikroko je ontrolera, to nam n nije cilj. Zbog toga se koriste samo signali iz Z e mikroko ontrolera ko pobuuju motor kon oji u ntroler ( u ovom sluaju L298). u

Slika 4.3 Izg gled motor kon ntrolera L298

S Slika 4.3 p prikazuje stv varni izgled L298 mo d otor kontrol lera u Mult tiwatt15 V kuitu. Proizvo se jo u d odi dvije vrste kuita, Mu k ultiwatt15 H i PowerSO (SMD) Na slijede slici O20 ). eoj je prikaz motor k zan kontroler L2 sa raspo 298 oredom pino i sama unutranjos kontrolera ova u st a.

Sli 4.4 Raspo ika ored pinova i izgled unutra anjosti motor kontrolera L2 298 Asmir Mu ujagi 4

Objanjenja svih p pinova na ko ontroleru L L298 u Mult tiwatt15 ku uitu prikaz zano je u slijedeoj tabeli Tabela 1. Funkcije pinova e L29 Naziv 98 Multiw watt15 1, 15 5 Sen A; Sense B nse e 2, 3 4 5, 7 6, 11 8 9 10, 1 12 13, 1 14 Fu unkcija

Izm meu ovih pinova i mas spojen je otpornik za se a kon ntrolu struje optereenja. e Out 1; Out 2 Izla iz mosta A. Struja koja tee kro optereenje azi a k oz spo ojeno izme ova dva pina prati se na pinu 1. u p e VS Nap napajan za motor pon nja re. Nep provodljivi 100nF kond denzator mo biti prik ora kljuen izm meu ovog pina i mase (GND) p In nput 1; Inpu 2 ut TTL kompatib L bilni ulazi mosta A. m Ena A; Ena B TTL kompatib able able L bilni Omog ulaz: L gui Logiko sta anje one emoguuje most A (ena A) i/ili most B (en m able nable B). GND Ma asa VSS Nap napajan za logik blokove.. pon nja ke Nep provodljivi 100nF kond denzator mo biti prik ora kljuen izm meu ovog pina i mase (GND) p In nput 3; Inpu 4 ut TTL kompatib L bilni ulazi mosta B. m Out 3; Out 4 Izla iz mosta B. Struja koja tee kro optereen azi a k oz nje spo ojeno izme ova dva pina prati se na pinu 15 u p e 5.

P Princip rada H-mosta pojednostav a vljeno je pr rikazan na slici 4.5. Na slici su prikazana s a etiri pr rekidaa koj su obilje slovima A,B,C i D, ti prekida predstav ji eni a D ai vljaju etiri pojaala (simboli u obliku trougla) na slici 4.6. Kada su sv etiri prekidaa otv a va vorena kroz elektro z motore ne tee stru Ako se zatvore pre uja. ekidai A i D kroz mot e poet da tee struja i on tor ti oeti da okre suprotn od kazaljk na satu. Ako se zatv ee no vore prekida C i B po ai onovo e e se po ke protei struja samo to se sada motor okr o a ree u smjer kazaljke na satu. Sa ru asvim je jasn da ne no smije bi zatvoren sva etiri prekidaa j bi se tim izazvao kratki spoj.. L298 u seb sadri iti na jer me bi dva ova akva mosta te mu to daje mogu d nost upravl ljanja sa dv motora o va odvojeno, ak kada jedna st trana kontro olera pregor druga je u mogunost da normalno funkcio ri ti onie.

Slika 4.5 Princip rada H-mosta a a

Asmir Mu ujagi

N slici 4.6 prikazan je princip sp Na 6 pajanja L29 kontrolera. Za jedn 98D nostavniji ra i bru ad realizac ciju mobilno robota koritena je gotova ploica, odn og k e nosno svi p potrebni dijelovi za spajanje izmeu mi e ikrokontrolera i motora nalaze se na jednoj tampanoj p a, ploi (slika 4.7). 4

Sl lika 4.6 Princ spajanja motor kontrole cip m era

Slika 4.7. Izgled goto tampane ploice motor driver-a ove p r

Asmir Mu ujagi

N ulaze u ovaj drive dovodim signale direktno sa mikrokon Na er mo a ntrolera odn nosno sa Arduino razvojne p o ploe. Osim etiri ulaz u driver (IN1...4), dovodimo i m m za ( masu (GND jer je D), neophod povezati sve eleme koji su u jednom funkcionaln krugu. V dno ente u f nom Vidimo da na plou mozemo dovesti jo i signale Enable (EN ENB), koje i ne moramo ko o o NA, m oristiti jedno ostavnim postavlj janjem kratk kospojnika na mjestu 5 5V_EN. P Potrebni na apon za rad elektromot tora dovodim na prikljuak VMS i GND ko moe mo S oji da se kr ree u raspo od 0-50 U ovom sluaju ko onu 0V. m oristit e se napon od 6 koji je dovoljan e 6V d da pokr rene oba ele ektromotora Napajanje od 5V nije potrebno dovoditi za rad logiko bloka a. e e a og unutar d drivera jer se na samo ploi nal oj lazi regulato napona 7805 koji s or 7 stabilizuje dovedeni d naopn n motore i p na proslijeuje ga logiko bloku. e om I Izlaz iz ovo drivera MOTORA i MOTORB spajamo direktno prik og M B d kljunim vo odovima na moto koji pok ore kreu mobiln robot. M ogu se koristiti motori kojima je p ni potrebno naj ajvie 2A po moto za pokr oru retanje. U ovom sluaj motorim je potrebno pri pokr o ju ma retanju oko 250mA o dok za normalan rad je po otrebno 170 0mA. Mot tori koji su koriteni u ovoj aplikaciji u i a karakter ristika: dim menzija( x L) 24.2 m x 44.1 mm, nomi mm inalnog nap pona 5 V struja ne s opteree enog motora 100 mA.

Slika 4.8 Izgled motora a m

D bi mobi robot bio stabilniji koristilo se etiri toka. Jedan motor pokr Da ilni b i, ree dva toka pr reko trostep penog reduk ktora za de snu stranu robota, tako i drugi m o motor pokre druga e dva tok za lijevu stranu mo ka u obilnog rob bota. Sa ova akvom konfiguracijom dobijamo mobilni m robot ko je stabila na etiri toka ali na diferencija pogon kao da je na dva toka. oji an t a alni k a

Slika 4.9 T Tokovi mobilnog robota

U Upotreba elektromotor izaziva p ra pojavu dost jakih um ta mova koji m mogu negativno da utiu na rad mikro a okontrolera Preporuu se da se svi napo a. uje s onski vodov uviju tak da se vi ko elektrom magnetna po ponita olja avaju.

Asmir Mu ujagi

4.3 Sen nzorski si istem

D Detekcija svjetlosti je osnovna po otreba mno ogih ureaja ljudi, ivo a, otinja, bilja aka. Kod ivotinja detekcija svjetlosti je u tolik mjeri razvijena da radi bliz termodinamike a koj r d zu detekcij svjetlosti. Svjetlost je pojava ko se najbolje objanja pomou kvantne mehanike. je oja ava u m Ona se sastoji od estica ko se naziv oje vaju fotoni. Fotoni im maju talasnu duinu , brzinu u 8 -34 4 c=3x10 m/s, frekv venciju =2 2c/, energ E=hc/ gdje je h= giju =6.67x10 Js i impuls P=h/. Detekto svjetlost mogu bit podijeljen u dvije grupe; tak ori ti ti ni kozvani kva antni detekt tori koji pretvara fotone u elektrone pomou p oluprovodn aju nika i terma alne detekto koji aps ore sorbiraju energiju fotona i on mjere porast tempe u nda p erature pom mou termom metra. K Kvantni det tektori pru aju mnogo bolje rezultate od term o malnih dete ektora. Prin ncip rada svih kv vantnih dete ektora se za asniva na a apsorbiranju fotona i oslobaanju elektrona. Priroda u o u at. ovog pr rocesa je ve eoma komp pleksna i po oznata je kao fotoelek k ktrini efeka Polu pro ovodnici imaju o osobinu da izloeni svjetlosti os slobaaju elektrone. Ako foton koji pada na polu e A provodn biva ap nik, psorbiran, nosi dovoljn energije doi e do oslobaanj elektrona koji e n no ja a potei d dalje kroz p puluprovodn u vidu e nik elektrine st truje. Jedan primjer tak n kvog ureaj je p-n ja dioda, i izmeu p p podruja i en podruj nalazi se osiromae podruj da bi dolo do ja e eno je, d protican struje to podruje mora biti pre nja m eplavljeno elektronima. e

Slika 4.10 Princip rada foto diode. 0 a

F Foto dioda j obina di je ioda koja je nepropusn polarizov e no vana. Kada d doe do aps sorpcije fotona i oslobaanj elektrona oni ce mo proi barijeru izme p-n spoj to zna da foto ja a da eu oja, i dioda pr roizvodi str ruju samo ak je energi fotona ve od energije koja je potrebna da se ko ija ea probije barijera.

T Takoer po ostoji i foto tranzistori koji oper o i riraju na sli inom meto odu. U sutini foto tranzisto nije nita drugo do bipolarni tra or a b anzistor koji je izveden na taj nai da svjetlo moe n in ost pasti na baza-kolek spoj. Elektroni ko se gener a ktor E oji riraju djelov vanjem foto ona sprem maju se u bazu, n nakon sprem manja dovo oljne koliin elektron dolazi do proticanj struje kr spoj ne na d ja roz
Asmir Mu ujagi 8

kolektor r-emiter, ta struja mo biti od 1 0 do 100 puta vea od one koja se moe pr a e p d roizvesti foto dio odom, to do ovodi do zak kljuka da s foto tranzistori mnogo osjetljivi od dioda. su vi

Sli 4.11 Foto ika otranzistor u emiterskom sp e poju

I Infracrvena radijacija je elektrom a j magnetna rad dijacija tala asna duina je dua od vidljive d svjetlosti, te je veo oma pogod za upotr dna rebu kako u vojne tak i civilne svrhe. Primjenu u ko e vojnim svrhama na je u lociranju obje ala ekata, nadg gledanju, n night vision itd. A u civilnim n svrhama koristi se u daljinskom mjerenju temperatur beinoj komunikac spektro a u re, ciji, oskopiji i u vreme enskim prog gnozama. I Infracrveni senzori se koristi ko mobilnih robota sa fiksnom p e od h a putanjom, odnosno nazivaju se linijski senzori, te se koriste za otkriva u i e e anje kontras izmeu povrina. Jedan od sta J naina v voenja mo obilnih robot jeste pom ta mou linije koja je drug boje od p k ge podloge, naj jee se koristi c crna linija n bijeloj podlozi, zbo g osobine crne boje da upija svje na c a etlost odnos zbog sno osobine bijele boj da reflek e je ktuje svjetl lost. Infracr rveni senzo su izved ori deni pomo dvije u kompon nente, emite svjetlos i kolekto svjetlosti. Kao izvor ili emite koristi se obina era sti ora er e LED a k kolekto ili prijemnik koristi s fototrazistor ili foto dioda, kao to je prika kao or se azano na slici 12. .

Slika 4.12 Linijski senzor

m ektivni senz kompan Vishay Semicondu zori nije uctors koji u svom U ovom radu koriteni su refle kuitu sadre IR d diodu i IR tr ranzistor.

Asmir Mu ujagi

T TCRT5000 i TCRT50 000L reflek ktivni senzo koji ukljuuje infr ori racrveni od dailja i fototran nzistor. Pake ukljuuje dvije vrste montae. et e e

Slika 4.13. Izgled senzora blizin e, lijevo stvar izgled, desn oznake za s s rni no senzor

Nain p pakovanja: o olovni Vrsta d detektora: f fototranzisto or Dimen nzije (D x x V u mm) 10,2 x 5,8 x 7 ): 8 Domet u roku> od 20% u od t d dnosu kolekt tora struja: 0,2 mm do 15 mm Tipin izlazne str se testira: IC = 1 m ni ruje mA Daylig blokiran filtra ght nje Emitte talasna du er uina: 950 nm n olovo (Pb)-bez lemljenja radna temperatura -25 do +85 C a


Slika 4.14. Nain spajanja senz zora i princip rada

Asmir Mu ujagi

10

Uobiaj jeno je da se ne stavlja samo jedan senzor neg vie njih u cilju pov e n go h veanja prec cioznosti i stabiln nosti upravl ljanja mobilnim robot, na slici 2.25 je prika , azan raspore senzora, koji jo ed moe im razne oblike, V oblik, U Ob itd. Sa A5 pa do A0 oznae mjesto spajanja mati o blik a eno senzora na Arduino platformu. a o Staza Staza

Senzorska linija a

A5

A4

A3

A2 2

A1

A0

Slika 4. .15. Raspored senzora d

Senzors sistem k ski koristi est senzora za p s praenje lin nije. Svaki senzor spoje je prema emi na en slici 2.2 te su svi montirani na eksperim 25, n mentalnu plo zajedno. ou

Slika 4.16. ema spa 4 ajanja senzora i Arduino pl a latforme

T Tako da za svaki sen nzor je po otrebno obe ezbijediti napajanje + 5V, GND i OUT, odnosno izlaz sa senzora do Arduino pla o A atforme. Za est senzora, koliko i imamo, potrebno a ih p nam ja o osam priklju unih vodov koji se sp va pajaju direk ktno na Arduino.

Asmir Mu ujagi

11

L Linijski sen nzor je izra prema en emi orgina alnog proizv voda kompa anije Pololu koji se u, sastoji o osam sen od nzora TCRT T5000 ali u SMD pakovanju, te je mogue izv vriti odstra anjivanje dva sen nzora ako n nam nisu po otrebni. Na slici 4.17 prikazan je linijski sen p nzora profesionalno izraen, koji je dos , stupan kao komercijaln proizvod. k ni

Slika 4.17 Linij senzor ko ijski ompanije Polo olu

Slijede slika prik a kazuje linij jski senzor koji je ru izraen od pojedin no nanih elek ktronskih elemena prema e na slici 4.16. ata emi

Slika 4.18. L Linijski senzor rune izrade r

Asmir Mu ujagi

12

4.4 Sof ftverski sistem

S gore op Sva pisana pogl lavlja su be eskorisna ak nema sof ko ftvera koji upravljati njima. e Program miranje mik krokontroler je nauka za sebe te o njemu se nee puno govo ra a u oriti sem objanje koda i n ena njegovog al lgoritma. Za izradu pro a ograma pom mou kojeg radi mobiln robot, ni koriten je softvers alat Ardu n ski uino.

Slika 4.19. Po S oetni prikaz Arduino sotver A ra

Sl lika 4.20. Izgl Arduino so led oftverskog ala ata

A Arduino int tegrisano ra azvojno okr ruenje je aplikacija napisana u Java progr n ramskom jeziku. K Kreirano je tako da uv e vede u progr gramiranje umjetnike, studente i os u s stale poetn nike koji nisu upo oznati sa na ainom razv softvera Sastoji se od ureiva koda sa mogunost voja a. e aa a tima kao to su oznaavanje koda, up parivanje za agrada, automatsko uv vlaenje lin nija. Ovaj ureiva u
Asmir Mu ujagi 13

moe da prevede kd a zatim ga i prebaci u ip jednom komandom. U ovom sluaju nije potrebno podaavati parametre prevoenja koda ili pokretati programe iz komandne linije. Arduino integrisano razvojno okruenje dolazi sa C/C++ bibliotekom zvanom "Wiring" koja ini uobiajene ulazno-izlazne operacije veoma jednostavnim. Arduino programi se piu u C/C++ programskom jeziku, mada korisnici moraju da definiu samo dvije funkcije kako bi napravili izvrni program. Te funkcije su: - setup() funkcija koja se izvrava jednom na poetku i slui za poetna podeavanja - loop() funkcija koja se izvrava u petlji sve vreme dok se ne iskljui ploa Tipian prvi program jednostavno pali i gasi LED diodu. U Arduino okruenju, korisnik bi mogao da nape ovakav program:
#define LED_PIN 13 void setup () { pinMode (LED_PIN, OUTPUT); } void loop () { digitalWrite (LED_PIN, HIGH); delay (1000); digitalWrite (LED_PIN, LOW); delay (1000); } // definii pin 13 kao digitalni izlaz

// // // //

ukljui LED saekaj 1000 milisekundi iskljui LED saekaj 1000 milisekundi

Da bi ovaj kd ispravno radio, pozitivna strana LED diode mora biti povezana na pin 13 a negativna strana LED diode na uzemljenje (u ovom sluaju negativni dio napajanja). Ovaj primjer od strane standardnog C++ prevodioca ne bi bio vien kao ispravan program, meutim kada korisnik izda komandu za prevoenje, ovom kodu se dodaje izvesno zaglavlje i jedna jednostavna main() funkcija ime on postaje ispravan. Arduino razvojno okruenje koristi GNU toolchain i AVR Libc za prevoenje programa.

Asmir Mujagi

14

4.5 Me ehaniki s sistem


U meha anike siste eme jednog mobilnog robota sp g g padaju: kon nstrukcija, reduktori, leajevi, osovine vijci, itd. P e, Poto se u ovom sluaj radi o veo jednostavnom mo o ju oma obilnom rob botu, koji u sebi sadri samo postolje i dva redukto koji se montiraju na elektromo d ora m a otore slika 4.21, nije 4 vren ni ikakav pror raun mehan nikih osob bina. Postolj mobilnog robota na kome su smjeteni je g a svi elem menti je dat na slici 4.22. Za sp to pajanje elek ktronskih ploica na k kuite kori itene su vijane veze sa m maticama, a za spajanj ploice sa senzorim koriten su dva vijka sa nje ma na maticam gdje se p ma pomijeranjem matica re m egulie udal ljenost senzora od poda a.

Slika 4 4.21 Izgled red duktora

Slika 4. Postolje m .22. mobilnog robo sa svim dij ota jelovima Asmir Mu ujagi 15

N slici 4.23 je prika Na azan izgled zavrenog mobilnog robota. Ra d g Raspored ele emenata, dimenzi postolja, izgled elek ije , ktronske plo oice moe biti izveden i na druge naine. n

Slika 4.23. Kon nani izgled m mobilnog robo prije i nak sastavljanj ota, kon nja

Asmir Mu ujagi

16

N slici 4. Na .24 predsta avljeni su d drugi mobi ilni roboti zasnovani na istom principu upravlja anja.

Slik 4.24 Primje drugih izved robota zas ka er dbi snovanih na is stom principu rada

Asmir Mu ujagi

17

5.0 Alg goritam hibridno og upravl ljanja mo obilnog robora


Z predsta Za avljanje hib bridne para adigme org ganizacije upravljanja mobilnog robota a g koriten je labirint kroz koji ro n obot treba d proe. La da abirint jedno ostavnog izg gleda prikaz je na zan slici 5.0 te e biti o 0. objanjeno na njemu ka robot dj n ako jeluje. Kraj puta Poet pozicija tna robota r
Slika 5. Jednostavni labirint .0

K su koraci pri rjea Koji avanju ovog problema? U osnovi postoje dva koraka. Pr korak g ? a rvi je vozit se kroz la ti abirint i pro onai kraj p puta. Drugi korak je optimizirazi taj put tak da se i o i ko robot m moe kretati savreno ra avno prema cilju, bez da skree u slijepe ulice d s e. K Kako e rob pronai kraj puta? U ovom rad e se kor bot du ristiti tehnik zvana lijeva ruka ka na zidu (the left hand on the wall). Zamis w slimo da sm u labirintu i da drim svoju lije ruku mo u mo evu me, u li na zidu cijelo vrijem na kraju bi pronal izlaz bez zastoja u labirintu. U ovim jednostavnim uslovim m ma, algorita am lijeva ruka na zidu mo oe biti pojedno ostavljena: - A moete skrenuti li Ako e ijevo onda i naprijed i skrenite li ii ijevo, - D Drugo, ako moete nas staviti vozit ravno ond voziti rav ti da vno, - D Drugo, ako moete skr renuti desno skrenuti desno. o - A ste u sl Ako lijepoj ulici onda okren i nuti. Rob mora izv bot vriti ove od dluke kada se nae na raskrsnici. Raskrsnica je sastavljanje dva a ili vie p u jedno taki. puta oj

Asmir Mu ujagi

18

Kod labirinta je mogue osam raz liitih situa d e acija. Sve te raskrsni ili skre ice etanja su prikizan na slijede ni eim slikama

Samo skretanje o ul lijevo

Samo skretanje ude esno

Lijevo il desno li ''T T''

etiri p puta

Pravo ili ulijevo

Pravo il udesno li

Slijepa ulica

Kraj labi irinta

Sli 5.1 Osam moguih nail ika lazaka u labiri intu

S Svaki potez koji robot napravi na bilo kojem od ovih osam sluajev biva poh z m va hranjen u EEPRO memorij robota. EEPROM m OM ju E memorija im kapacitet od 1 KB ( ma t (ATmega32 te je 28), mogue veoma slo e ene i duga ake labirint da pohran u memori te ni iju. D bi to m Da manje prostora zauzimal u memor uvode se skraenice za putanje: lo riji e e - L = skretanj lijevo nje - R = skretan desno nje - S = ii ravn preko pijelaza no - B = okretan za 180 nje K Kada primi ijenimo ove do sad o e objanjene metode na jednostavan labirint, moe se m n m vidjeti k kako algorit radi. tam

Asmir Mu ujagi

19

P nailaza robota je na raskrsn Prvi ak e nicu sa eti puta, te robot skre ulijevo. Slijedei iri e S nailazak robota je n slijepu ulici, robot s okree za 180te ide nazad istim putem. Sv potezi k na u se a e m vi se mem moriu da bi se na kraju optimiziral li.

B
Put = LB L

Put = L

Slika 5.2 P Prva dva skret tanja robota

L
Put = LBL

L
Put = LBLL L

Slika 5.3 Dr ruga dva skre etanja robota

Asmir Mu ujagi

20

N predhod dvije slike robot je dva puta skretao u li Na dne e ijevu stranu Nakon toga robot u. ponovo nailazi na s slijepu ulicu okree se i ide ravno i skree de u o esno te napo okon nailaz na kraj zi labirinta a.

S B

Put = LBLLB

Put = LBLLBS L
Slika 5.4 Tr Trea dva skretanja robota

Kona put = L ani LBLLBSR


Slika 5.5 Posljednje s 5 skretanje i nai ilazak na kraj labirinta

Asmir Mu ujagi

21

K Kada robot naie na kr puta u m raj memoriji robota se nala put koji je sljedee oblika azi i eg LBLLB BSR. Sad je potreb izvriti optimizac da bno i ciju ovog puta da bi robot u sl p ljedeem kretanju izbjegao s u slijepe ulice i doao rav do kraja labirinta. Ispravan pu kojim rob treba e vno ut bot da ide n nakon optim mizacije je prikazan na s sljedeim sl likama.

Put = S

Put = SR R

Slika 5 Prva dva nailaska 5.6 n

Kona put = S ani SRR

Slika 5.7 Posljednje s 7 skretanje i nai ilazak na kraj labirinta

Asmir Mu ujagi

22

Da bi dobili konani oblik optimiziranog puta potrebna su pravila po kome se vri optimizacija. Kada pogledamo prva tri kretanja u putanji LBLLBSR, tj. LBL, vidimo da je to putanja gdje ima slijepu ulicu te se ovaj dio putanje zamjenjuje sa S. Druga putanja se odnosi na sljedea tri kretanja LBS. Opet vidimo da u putanji imamo slijepu ulicu, tako da se ovaj dio zamjenjuje sa R. U konanici, oblik putanje treba da izgleda SRR. Ovo su samo neke zamjene za optimizaciju putanje kretanja. Izgled svih zamjena koje su nam potrebne za konanu optimizaciju bilo kakvog izgleda puta su: LBR = B LBS = R RBL = B SBL = R SBS = B LBL = S

Neke zamjene nam nee trebati za svaki labirint ali su sve potrebne za optimizaciju, zbog razliitosti putanja. Vidimo da je u zamjenama koriteno i okretanje odnosno B. To je neophodno za detaljniju optimizaciju puta.

Asmir Mujagi

23

P R I L O G
Kd za mobilni robot sa hibridnom paradigmom orzanizacije upravljanja

Asmir Mujagi

24

#define #define #define #define #define #define int int int int int int

leftCenterSensor leftNearSensor leftFarSensor rightCenterSensor rightNearSensor rightFarSensor

3 4 5 2 1 0

leftCenterReading; leftNearReading; leftFarReading; rightCenterReading; rightNearReading; rightFarReading;

int leftNudge; int replaystage; int rightNudge; #define leapTime 200 #define leftMotor1 #define leftMotor2 7 6

#define rightMotor1 9 #define rightMotor2 8 #define led 13 char path[30] = {}; int pathLength; int readLength; void setup(){ pinMode(leftCenterSensor, INPUT); pinMode(leftNearSensor, INPUT); pinMode(leftFarSensor, INPUT); pinMode(rightCenterSensor, INPUT); pinMode(rightNearSensor, INPUT); pinMode(rightFarSensor, INPUT); pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); pinMode(led, OUTPUT); //Serial.begin(115200); digitalWrite(led, HIGH); delay(1000);

void loop(){ readSensors(); if(leftFarReading<200 && rightFarReading<200 && (leftCenterReading>200 || rightCenterReading>200) ){ straight();

Asmir Mujagi

25

} else{ leftHandWall(); } } void readSensors(){ leftCenterReading leftNearReading leftFarReading rightCenterReading rightNearReading rightFarReading = = = = = = analogRead(leftCenterSensor); analogRead(leftNearSensor); analogRead(leftFarSensor); analogRead(rightCenterSensor); analogRead(rightNearSensor); analogRead(rightFarSensor);

// serial printing below for debugging purposes // // // // // // // // // // // // // } void leftHandWall(){ if( leftFarReading>200 && rightFarReading>200){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(leapTime); readSensors(); if(leftFarReading>200 || rightFarReading>200){ done(); } if(leftFarReading<200 && rightFarReading<200){ turnLeft(); } } if(leftFarReading>200){ // if you can turn left then turn left digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); Asmir Mujagi 26 Serial.print("leftCenterReading: "); Serial.println(leftCenterReading); Serial.print("leftNearReading: "); Serial.println(leftNearReading); Serial.print("leftFarReading: "); Serial.println(leftFarReading); Serial.print("rightCenterReading: "); Serial.println(rightCenterReading); Serial.print("rightNearReading: "); Serial.println(rightNearReading); Serial.print("rightFarReading: "); Serial.println(rightFarReading); delay(200);

digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(leapTime); readSensors(); if(leftFarReading<200 && rightFarReading<200){ turnLeft(); } else{ done(); }

if(rightFarReading>200){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(30); readSensors(); if(leftFarReading>200){ delay(leapTime-30); readSensors(); if(rightFarReading>200 && leftFarReading>200){ done(); } else{ turnLeft(); return; }

} delay(leapTime-30); readSensors(); if(leftFarReading<200 && leftCenterReading<200 && rightCenterReading<200 && rightFarReading<200){ turnRight(); return; } path[pathLength]='S'; // Serial.println("s"); pathLength++; //Serial.print("Path length: "); //Serial.println(pathLength); if(path[pathLength-2]=='B'){ //Serial.println("shortening path"); shortPath(); } straight(); } readSensors(); if(leftFarReading<200 && leftCenterReading<200 && rightCenterReading<200 && rightFarReading<200 && leftNearReading<200 && rightNearReading<200){ turnAround(); } } void done(){ digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); Asmir Mujagi 27

digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); replaystage=1; path[pathLength]='D'; pathLength++; while(analogRead(leftFarSensor)>200){ digitalWrite(led, LOW); delay(150); digitalWrite(led, HIGH); delay(150); } delay(500); replay(); } void turnLeft(){ while(analogRead(rightCenterSensor)>200||analogRead(leftCenterSensor)>200 ){ digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(2); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1); } while(analogRead(rightCenterSensor)<200){ digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(2); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1); } if(replaystage==0){ path[pathLength]='L'; //Serial.println("l"); pathLength++; //Serial.print("Path length: "); //Serial.println(pathLength); if(path[pathLength-2]=='B'){ //Serial.println("shortening path"); shortPath(); } }

void turnRight(){ while(analogRead(rightCenterSensor)>200){ Asmir Mujagi 28

} while(analogRead(rightCenterSensor)<200){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); delay(2); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1); } while(analogRead(leftCenterSensor)<200){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); delay(2); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1); } if(replaystage==0){ path[pathLength]='R'; Serial.println("r"); pathLength++; Serial.print("Path length: "); Serial.println(pathLength); if(path[pathLength-2]=='B'){ Serial.println("shortening path"); shortPath(); } } } void straight(){ if( analogRead(leftCenterSensor)<200){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(1); digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); Asmir Mujagi 29

digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); delay(2); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1);

} if(analogRead(rightCenterSensor)<200){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(1); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(5); return; } digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(4); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1); } void turnAround(){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(150); while(analogRead(leftCenterSensor)<200){ digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(2); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); delay(1); } path[pathLength]='B'; pathLength++; straight(); //Serial.println("b"); //Serial.print("Path length: "); //Serial.println(pathLength); } void shortPath(){ int shortDone=0; if(path[pathLength-3]=='L' && path[pathLength-1]=='R'){ pathLength-=3; path[pathLength]='B'; Asmir Mujagi 30

delay(5); return;

//Serial.println("test1"); shortDone=1;

if(path[pathLength-3]=='L' && path[pathLength-1]=='S' && shortDone==0){ pathLength-=3; path[pathLength]='R'; //Serial.println("test2"); shortDone=1; } if(path[pathLength-3]=='R' && path[pathLength-1]=='L' && shortDone==0){ pathLength-=3; path[pathLength]='B'; //Serial.println("test3"); shortDone=1; } if(path[pathLength-3]=='S' && path[pathLength-1]=='L' && shortDone==0){ pathLength-=3; path[pathLength]='R'; //Serial.println("test4"); shortDone=1; } if(path[pathLength-3]=='S' && path[pathLength-1]=='S' && shortDone==0){ pathLength-=3; path[pathLength]='B'; //Serial.println("test5"); shortDone=1; } if(path[pathLength-3]=='L' && path[pathLength-1]=='L' && shortDone==0){ pathLength-=3; path[pathLength]='S'; //Serial.println("test6"); shortDone=1; } path[pathLength+1]='D'; path[pathLength+2]='D'; pathLength++; //Serial.print("Path length: "); //Serial.println(pathLength); //printPath();

void printPath(){ Serial.println("+++++++++++++++++"); int x; while(x<=pathLength){ Serial.println(path[x]); x++; } Serial.println("+++++++++++++++++"); } void replay(){ readSensors(); if(leftFarReading<200 && rightFarReading<200){ Asmir Mujagi 31

straight(); } else{ if(path[readLength]=='D'){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(100); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); endMotion(); } if(path[readLength]=='L'){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(leapTime); turnLeft(); } if(path[readLength]=='R'){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(leapTime); turnRight(); } if(path[readLength]=='S'){ digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); delay(leapTime); straight(); } } readLength++;

replay(); } void endMotion(){ digitalWrite(led, LOW); delay(500); digitalWrite(led, HIGH); delay(200); digitalWrite(led, LOW); delay(200); digitalWrite(led, HIGH); delay(500); endMotion(); }

Asmir Mujagi 32

You might also like