arso vukicevic, asuro - lavirint, seminarski rad, 2009

29
UNIVERZITET U KRAGUJEVCU MAŠINSKI FAKULTET THE UNIVERSITY OF KRAGUJEVAC FACULTY OF MECHANICAL ENGINEERING KATEDRA ZA INFORMATIKU U INŽENjERSTVU Računarski podržano merenje i upravlj anje SEMINARSKI RAD ASURO - Lavirint Profesor: Prof. Dr Milan Matijevid Student : Arso Vukićević 54/2006

Upload: vuongque

Post on 02-Feb-2017

252 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

UNIVERZITET U KRAGUJEVCU

MAŠINSKI FAKULTET

THE UNIVERSITY OF KRAGUJEVAC

FACULTY OF MECHANICAL ENGINEERING

KATEDRA ZA INFORMATIKU U INŽENjERSTVU

Računarski podržano merenje i upravljanje

– SEMINARSKI RAD –

ASURO - Lavirint

Profesor:

Prof. Dr Milan Matijevid

Student :

Arso Vukićević 54/2006

Page 2: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

2

Sadržaj Predgovor ........................................................................................................................................................3 1.0 Definicija problema ....................................................................................................................................4 2.0 ASURO arhitektura sistema ........................................................................................................................5 2.1 Sharp GP2D12 Analog Distance Sensor .......................................................................................................8 2.2 Mikrokontroleri – ATMEGA8.......................................................................................................................9

Uloga mikrokontrolera u ASURO mini-robotu ............................................................................................. 10 2.3 Sklapanje ASURO modela ......................................................................................................................... 11 3.0 Windows instalacije .................................................................................................................................. 12

Flash Tool ................................................................................................................................................... 12 Instalacija editor programa i kompajlera .................................................................................................... 12 Kopiranje primer programa sa CD na hard disk ........................................................................................... 12

4.0 Programiranje ASURO mini-robota ........................................................................................................... 18 ASURO ugrađene C funkcije ........................................................................................................................ 18 void Init (void) ............................................................................................................................................ 18 void Sleep (unsigned char time72kHz) ........................................................................................................ 18 void MotorDir (unsigned char left_dir,usigned char right_ .......................................................................... 19 void MotorSpeed (unsigned char left_speed, unsigned char right_sped) .................................................... 19 void SerWrite (unsigned char *data, unsigned char lenght) ........................................................................ 19 void SerRead(unsigned char *data, unsigned char lenght, unsigned int timeout) ........................................ 19

4.1 Kalibracija senzora .................................................................................................................................... 21 4.2 ALGORITAM RADA .................................................................................................................................... 25 PROGRAMSKI KOD ......................................................................................................................................... 28

Page 3: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

3

Predgovor

Tema seminarskog rada je “ASURO”, mobilni mini-robot , razvijen za edukacione svrhe u German Aerospace Centre DLR, odeljenja za Robotiku i Mehatroniku. S obzirom da se za programiranje isključivo koristi freeware software, pokazao se kao veoma dobar školski projekat na mnogim univerzitetima i obrazovnim ustanovama.

Zadatak seminarskog rada je isprogramirati ga tako da on pronalazi izlaz iz lavirinta, koji

takođe trebam sam da osmislim i dokumentujem u sklopu seminarskog rada. Ideja je bila da se primenom osnovnih koncepata automatskog upravljanja na računarski

upravljane sisteme, čiji je jednostavan primer AZURO, rеši postavljeni zadatak – a ceo seminarski rad organizuje i dokumentuje kao praktičan i upotrebljiv primer dobre prakse.

Cilj seminarskog rada je dopunjavanje teoretskih znanja stečenih na predavanjima praktičnim

iskustvima i veštinama.

Page 4: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

4

1.0 Definicija problema

Lavirint je dimenzija 2358mm X 1890mm, zelenom strelicom naznačena je startna pozicija a crvenom cilj – izlaz iz lavirinta. Lavirint je podeljen na polja, koja su oblika kvadrata dimenzija 450mm x 450mm. Projektovana debljina zidova je 18mm, ali može biti i manja.

Potrebno je ASURO mini-robot programirati tako da uspešno pronalazi izlaz iz lavirinta.

Slika 1.0.1 Izgled lavirinta

Page 5: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

5

2.0 ASURO arhitektura sistema

Sam postupak sklapanja robota uz pradenje dobijenog uputstva je jednostavan i bide ukratko opisan nakon upoznavanja sa arhitekturom sistema. Pored štampane elektronske ploče i ved pomenutog freeware software-a sastavni delovi ASURO mini-robota su (slika 2.0.1) : IC1 : Atmel AVR RISC – procesor, MOTOR L, MOTOR R : Dva nezavisno kontrolisana motora, //Optičkim tragače linija (optical linetracer), meni je senzor D12 K1,K2….K6 : Šest sigurnosnih detektora za sudare u vidu prekidača, T11, T12, T13,T14 : Dva odometerska senzora, D15, D16, : Tri LED indikatora, IR – Interfejs za programiranje i kontrolisanje od strane PC-a.

Slika 2.0.1 Osnovni delovi ASURO-a

Page 6: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

6

Slika 2.0.2 Elektronska šema ASURO-a

Page 7: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

7

Na slici 2.0.1 je prikazan realni–fizički i tehnički prikaz AZURO-a. Pošto u ralnom svetu fizičke modele prave inženjeri, tako što prvo konceptualno i tehnički reše i dokumentuju konstituciju bududeg fizičkog prototipa, u nastavku seminarskog rada bide upotrebljavani i objašnjavani uglavnom tehnički crteži i logičke šeme delova koji se možda ne vide golim okom ali inženjerima slikovitije opisuju problem koji se razmatra.

Snaga elektromotora se prenosi sa zupčanika koji su pričvršdenih na

osovinu elektromotora na zupčanike koji se nalaze na zajedničkoj osovini (prečnika 1.9 mm) i potom na zupčanike koji se nalaze na istoj osovini na kojoj i točkovi.

Pošto se radi sa motorima koje pokrede jednosmerna struja, promena smera obrtanja

motora (odnosno okretanja točkova i kretanja ASURO robota) ostvaruje se pomodu H-mosta. H-most je povezan na izlazne portove mikrokontrolera preko sistema logičkih kola odakle dobija odgovarajude logičke vrednosti ( nula – nizak napon, jedinica – visok napon). Logička kola daju takve napone da de za logičku jedinicu na odgovarajedem izlaznom portu provoditi par tranzistora T5-T8, a za logičku nulu T7-T6 (za desni elektromotor).

Slika 2.0.3 H-most, proticanje el. struje kroz H-most

Središnji zupčanik, osim za prenos snage, služi za merenje trenutne brzine kretanja ASURO-a.

Strana okrenuta ka stampanoj ploči je obeležena sa crno-belim segmentima-trakama i pozicionirana tako da se nalazi tačno naspram odometra i davača svetlosti koji imaju ulogu brzinometra. Što ima više crno-belih segmenata to je brži odziv sistema. Međutim, ukoliko je preveliki broj segmenata, pri

vedem broju obrtaja može dodi do redukcije osetljivosti na tamno-svetlo. Preporučeno je da se koristi šest belih i šest crnih segmenata.

Slika 2.0.4 Zupčanici sa segmentima za merenje brzine

Page 8: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

8

2.1 Sharp GP2D12 Analog Distance Sensor

Generalni opis :

Sharp GP2D12 je analogni senzor daljine koji koristi infracrvene zrake za detekciju objekata na udaljenosti od 10cm do 80cm. Radi tako što na izlazu prosleđuje nelinearni napon u funkciji udaljenosti detektovanog objekta od senzora. Povezuje se lako u bilo koji digitalni sistem korišdenjem AD konvertora. Povezivanje i testiranje : Sam senzor povezan je na voltažu od +5V. Potenciometar povezan na Vref pin se koristi kao naponski delilac koji smanjuje napon na 2.55 V. Na ADC083 konvertoru, to de dati na izlazu binarnu vrednost od 0/255 za ulaz od 0/2.55 V.

Slika 2.1.1 GPSD12 povezan na ADC083 analogno- digitalni konvertor

Kalibracija senzora :

Imajudi u vidu da dinamicka karakteristika GP2D12 nije linearna, morademo da definišemo koje rastojanje definiše koju voltažu senzora. Jedan od načina jeste testiranje senzora, postavljanjem proizvoljnog predmeta na određenoj daljini, i beleženje tih vrednosti. Zapisane vrednosti potom se mogu koristiti kao referentne u programskom kodu. Sa statičke karakteristike se vidi da senzor radi za udaljenosti od 10 do 80cm. Za manje udaljenosti od 10cm dobijali bi veoma nelinearne napone na izlazu. Slika 2.1.2 Staticka karakteristika GP2D12

GP2D12 u seminarskom radu : Senzor je ugrađen na instrument tabli, koja je preko pinova povezana sa osnovnom pločom sa koje dobija i napajanje za svoj rad. Senzor meri udaljenost objekta i mikrokontroleru vrada dvo-bitnu vrednost (broj od 0-1023). Na osnovu ovih brojeva mikrokontorler treba isprogramirati tako da on pravilno reaguje na prepreke na koje nailazi. Detaljniji opis kako je senzor kalibrisan, i kako mikrokontroler reaguje na informacije koje od njega dobija bide date u nastavku seminarskog rada… Slika 2.1.3 GP2D12 u seminarskom radu

Page 9: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

9

2.2 Mikrokontroleri – ATMEGA8

Mikrokontroler je tzv. «računar-u-čipu» koji se koristi za kontrolu integrisanih kola, sklopova, uređaja itd. Tipičan mikrokontolrer sadrži svu potrebnu memoriju i I/O interfejse (A/D konvertore, serijske i paralelne komunikacione module, tajmere itd.). Na Slici 1 je prikazana opšta blok šema mikrokontrolera.

Slika 2.2.1 Opšta blok šema mikrokontrolera

ATmega8 je 8-bitni CMOS mikrokontroler baziran na AVR RISC arhitekturi. Brzina rada je 1

MIPS/MHz. AVR jezgro izvršava instrukcije uz podršku 32 radna registra. Svih 32 getistra su direktno povezani na ALU-aritmetičku logicku jedinicu - deo CPU-a izveden u vidu logičkih kola koja izvršavaju aritmetičku ili logičku operaciju zadatu preko kontrolera CPU-a i upisuje rezultate u poseban regista-koji se naziva akumulator. Flash memorija se može reprogramirati preko serijskog ili USB porta, ili preko on-chip programa porkrenutog na AVR jezgru dok se podaci sa pinova upisuju u EEPROM i odatle se njima manipuliše. Inače, Atmega8 je opremljen sa sistemskim razvojnim alatima koji uključuju C kompajlere, makro asemblere, program debugger/simulator-e.

Osobine : Poseduje 8Kb In-System RW

Programmable Flash memorije, 512b EEPROM, 1Kb SRAM, 23 I/O linija, 32 radna registra, 3 fleksibilna Timer/Counter brojaca.

Slika 2.2.2 Raspored portova na ATMEGA8

Page 10: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

10

Mikrokontroleri se danas koriste u embedded sistemima za upravljanje raznim procesima. Oni se veoma često koriste i u situacijama kada treba da se veoma brzo reaguje na spoljne signale – posebno ako se takvi sistemi koriste za rad u realnom vremenu. Mikrokontroleri su sastavni delovi mnogih vrsta elektronske opreme (embedded sistemi). Oni čine vedinu svih prodatih procesorskih čipova. Preko 50% su "jednostavni" mikrokontroleri, a drugih 50% su specijaliozovani digitalni procesori signala (DSP). Mikrokontroler je prisutan u skoro svakom električnom uređaju, veš mašini, mikrotalasnoj pednici, telefonu itd. Inače, prvi moderan prepoznatljiv embedded sistem bio je Apollo Guidance Computer, kojeg je razvio Charles Stark Draper u MIT Instrumetation Laboratory. Svaki let do Meseca je imao dva takva.

Slika 2.2.3 Blok šema ASURO-a

Uloga mikrokontrolera u ASURO mini-robotu

Najjednostavnije rečeno, mikrokontroler ATMEGA8 ima zadatak da održava komunikaciju sa svim uređajima koji su povezani na njega, da im zadaje zadatke, prati njihov rad i reguje tako da se sistem nalazi u predviđenom radnom stanju-opsegu. Na ulazne portove mikrokontrolera povezani su senzori za daljinu i odometarski senzori (njih u automatskom upravljanju nazivamo ulaznim veličinama sistema upravljanja), na izlazne portove mikrokontrolera povezani su elektromotori ( izlazne - upravljane veličine ). Mikrokontroler sa korisnikom komunicira preko RS232 ili USB porta preko kojih se može reprogramirati ili slati rezultate rada na korisnikov PC.

Page 11: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

11

2.3 Sklapanje ASURO modela

Nakon upoznavanja sa arhitekturom sistema, vreme je da ukratko objasnim kako se to

infromacije trebaju upotrebiti u praksi – sklapanjem objekta upravljanja našeg sistema!

Slika 2.3.1 Sastavni delovi ASURO-a

Sliku 2.3.1 možemo shvatiti kao dekompoziciju slike 2.0.1 . Ovde su takođe prikazani svi delovi ASURO robota. Sve što treba uraditi jeste sastaviti ih prema semi sa slike 2.0.2 . Za to je korišden standardni alat : lemilica sa pratecim priborom, šravciger, lepak...itd. Najpre se podešavaju zupčanici na osovinama. Potom se leme elementi digitalnih kola na štampanoj ploči prema šemi iz upustva. Nakon toga se postavljaju delovi za napajanje – kudište za baterije, ono se povezuje sa elektromotorima i štampanom pločom. Na kraju je potrebno rasedi ping-pong lopticu na pola i zalepiti je za štampanu ploču. Na taj način smo obezbedili tredu tačku oslonca za ASURO i spreman je za testiranje.

Page 12: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

12

3.0 Windows instalacije

Na lokalnom hard disku potrebno je napraviti direktorijum , na primer „C:\ASURO“. U njemu de biti smešteni svi fajlovi sa kojima de se u budude raditi.

Flash Tool

Prekopiramo E:\Windows\Tool\sflash program u folder u C:\AZURO. Takođe program može biti pokrenut direktno sa CD, u svakom slučaju bolje je imati sve potrebne fajlove na dohvatu ruke.

Instalacija editor programa i kompajlera

Pokrenimo fajl E:\Windows\Compiler\COMPILER WinAVR (20030913) . Dalje je samo potrebno pratiti sledede korake…

Slika 3.0.1 Proces instalacije kompajlera i editora koda

Sada je potrebno samo malo sačekati dok se kopiraju neophodni fajlovi. Nakon završetka instalacije prikazade se README.txt fajl u programu programmers notepad i ikonica na Desktopu.

Kopiranje primer programa sa CD na hard disk

Nakon što je fajl prekopiran na hard disk i u programu programmers notpad 2 u meniju Tools izberemo Options u prikazanom prozoru izaberemo opciju Tools .

Slika 3.0.2 Proces dodavanja opcije make

Page 13: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

13

Slika 3.0.3 Proces dodavanja opcije make

Popunite formular po parametrima navedenim ispod : Name: make Command: C:\ASURO_src\FirstTry\Test-all.bat Folder: C:\ASURO_src\FirstTry Click [OK]

Page 14: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

14

Nova PN2 alatka de uzeti ime ‘’make’’ i sada je dostupna u Tools meniju. Kada se alatka aktivira pokrenude batch fajl koji ima ime Test-all.bat, sada su kompajlirani podaci smešteni u npr. C:\ASUROsrc\FirstTry.

U slededem koraku napravidemo Clean fajl u našem program za editovanje.

Slika 3.0.4 Proces dodavanja opcije clean

Popunite formular kao na slici ili po parametrima navedenim ispod :

Name: clean Command: C:\ASURO_src\FirstTry\Test-clean.bat Folder: C:\ASURO_src\FirstTry Click [OK]

Nova PN2 alatka de uzeti ime ‘’Clean’’ i sada je dostupna u Tools meniju. Kada se alatka

aktivira pokrenude batch fajl koji ima ime Test-clean.bat, sada su kompajlirani podaci smešteni u npr. C:\ASUROsrc\FirstTry.

Page 15: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

15

Slika 3.0.5 Opcija Tools nakone kreiranja make i clean opcije

Sada probe radi pokrenudemo iz menija File Open fajl test.cda bi smo pogledali osnovni

sadržaj fajlova u kojima demo programirati.

Slika 3.0.6 Proces otvaranja c fajla

Slika 3.0.7 Izgled otvorenog C fajla u Programmers Notepad programu

Page 16: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

16

Iz menija Tools make, izabrademo alatku make koja de obaviti kompajliranje koda i proveriti da li u njemu ima grešaka, pošto je učitan početni/primer fajl ne bi trebalo očekivati greške.

Slika 3.0.8 Kompajliranje korišdenjem opcije make

Šta se zapravo dogodilo?

Iz fajla test.c (i asuro.c) generisan je novi fajl pod nazivom test.hex. Ovaj fajl sadrži mašinski kod konvertovan od programa. Ovaj kod može biti učitan / flešovan u ASURO memoriju. Ovaj program nema funkcije. Kako ovo radi?

Poziva se batch fajl Test-all.bat (ovaj batch fajl sadrži listu komadi o isčitavanju linije za linijom ). U ovom fajlu komanda make all bide izvršena , ona kreira make fajl koji de biti lociran na istom mestu kao i kod Test-all.bat fajl i možemo je upotrebiti kasnije kada budemo pisali naš kod.

Oznaka all znači da se svi fajlovi iz projekta konvertuju a ne samo odvojeni input delovi. Make fajl iz našeg primera znači da je program napisan na način da fajl sa imenom test.c bide kompajliran zajedno sa fajlom asuro.c (koji sadrži određene pre definisane funkcije o kojima de biti reči u narednom delu) i kreiran novi . hex fajl koji može biti flešovan u memoriju našeg robota.

Page 17: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

17

Ovo znači da dokle god nikakve promene nisu napravljene u make fajlu i mi ga samo kopiramo svaki naš program bi trebao da bude nazvan test.c .

Kada se program kompajlira neki dodatni podaci se kreiraju. Ovi podaci su neophodni za

vreme konverzije posle čega su totalno ne upotrebljivi. Oni mogu biti uklonjeni sa clean alatkom koju samo upravo kreirali.

Kreirani fajlovi se nalaze u direktorijumu projekta i mogu se videti, da bi se izbrisali izaberemo altaku Clean iz menija Tools

Slika 3.0.9 Pozivanje opcije clean

Sada kada pokušamo da otvorimo neki fajl….

Slika 3.0.10 Ponovno otvaranje fajla

Ostade samo osnovni fajlovi. Clean poziva Test-clean.bat.

Slika 3.0.12 Izgled direktorijuma nakon pozivanja funkcije clean

Page 18: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

18

4.0 Programiranje ASURO mini-robota

Programiranje ASURO mini-robota može se vršiti u Programmers Notepad programu, koristedi neki od podržanih programskih jezika, koji se dobija uz instalacioni disk i preporučen je od strane proizvođača. Međutim, prilikom izrade seminarskog rada Programmers Notepad se nije pokazao kao pouzdano rešenje, a njegov debugg sistem pokazao se kao veoma neefikasan…skoro neupotrebljiv prilikom pisanja novog, ili menjanja dobijenog koda.

Zato je svo kodiranje izvedeno u Microsovt Visual Studio 6.0 C, bez pravog debugg programa, oslanjajudi se na iskustvo prilikom kodiranja. Umesto prethodno opisane preporučene procedure kompajlirane C koda u HEX fajlove možete izvršiti duplim klikom na batch fajlove. Ukoliko je kod ispravan kreirade se svi neophodni fajlovi, i na kraju HEX fajl. Ukoliko se desi neka greška, u LST fajlu možete videti dokle je program stigao sa kompajliranjem i na osvovu toga prepoznati grešku…

ASURO ugrađene C funkcije

Olakšavajuda okolnost prilikom kodiranja je da postoji zaglavlje asuro.h koje je napisao proizvođač ASURO mini-robota i koje se može nadi na instalacionom disku. U njemu su definisane mnoge korisne funkcije za rad sa ASURO-om (tako da se mi ne moramo mučiti da ih iznova pišemo – potrebno je samo da znamo da ih pravilno upotrebimo), a one koje su korišdene u seminarskom radu bide ukratko o objašnjene.

void Init (void)

Ova funkcija de resetovati mikroprocesor na njegovo početno stanje i mora biti uvek izvršena na počtku svakog programa. Ukoliko funkcija nedostaje program ne zna čak ni šta treba da radi sa svojim terminalima. Naj jednostavniji ASURO program bi trebao da izgleda ovako:

#include “asuro.h”

int main(void)

{

Init();

while(1);

return 0;

}

Funkcija main() bide zatvorena sa return 0; markiranim kao krajem programa. U ASURO

međutim neki delovi starog programa ranije flešovanog mogu ostati u memoriji i biti izvršeni što bi značilo za rezultat nepredviđene okolnosti. Da bi izbegli izvršavanje fragmenata starog programa mi hvatamo program u internu petlju i na taj način smo sigurni da on nikad nede izadi iz definisanog stanja.

void Sleep (unsigned char time72kHz)

Ova funkcija de komandovati procesoru da sačeka neko vreme. Period čekanja može biti definisan parametrom koji sadrži broj maksimalne vrednosti od 255 i brojačkog ciklusa od 72kHz. Na primer, ukoliko bi procesor trebalo da spava oko 3ms (0,003s/1)/72kHz = 216, funkcija Sleep(216) de naterati procesor da sačeka 3ms pomodu sledede linije koda :

Page 19: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

19

Sleep(216);

void MotorDir (unsigned char left_dir,usigned char right_dir)

Ova funkcija kontroliše smer oba motora i trebala bi biti pozvana pre definisanja brzine. Validni parametri su FWD (napred), RWD (nazad), BREAK (Kočenje ili iznenadno zaustavljanje) i FREE. Na primer, levi motor de se kretati napred dok desni motor je zaustavljen.

MotorDir(FWD,BREAK);

void MotorSpeed (unsigned char left_speed, unsigned char right_sped)

Ova funkcija kontroliše brzinu oba motora. Maksimalna brzina je 255. Motor de početi da se krede brzinom od oko 60, u zavisnosti od mehaničkih uslova. Parametarske vrednosti u suštini kontrolišu snagu motora i rotacionu brzinu, međutim ne treba zanemariti faktore poput trenja i nagiba.Na primer, levi motor de se kretati maksimalnom brzinom dok se desni nede kretati u opšte. Smer je prethodno definisan preko funkcije MotorDir() .

MotorSpeed (255,0);

void SerWrite (unsigned char *data, unsigned char lenght)

Ova funkcija šalje nazad podatke iz ASURO-a na serijski IR-interfejs na 2400Bit/s, No-parity, 1 StopBit, NoFlowControl. Prvi parametar sadrži reference na podatke koji se šalju dok drugi parametar opisuje broj karaktera koji je poslat. Primer :

A string ’’Hello how are you?’’ bi trebao da bude poslat

SerWrite (“Hello how are you?”,18);

void SerRead(unsigned char *data, unsigned char lenght, unsigned int

timeout)

Jednom kada ste u mogudnosti da šaljete podatke preko IR-interfejsa, poželedete i da primite neki. Slededa funkcija omogudava to. Prvi parametar je pokazivač na adresu skladištenja gde bi hteli da smestimo poruku. Drugi parametar je pokazuje koliko karaktera se očekuje , dok tredi opisuje vreme za timeout. On se koristi da interne period čekanja ukoliko manje podataka od prijavljenih stigne. Ukoliko posle određenog period više podataka ne stigne funkcija de biti prekinuta i prvi karakter u stringu za prijem bide zamenjen sa T. Ukoliko međutim ovaj parametar je 0 funkcija nede biti prekinuta sve dok i zadnji od očekivanih brojeva ili karaktera ne stigne. Primer :

Page 20: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

20

String Go Ahead bi trebao da bude prihvaden i mi ne želimo da budemo sigurni da su svi karakteri stigli u ASURO pre što se operacija nastavi.

#include “asuro.h”

int main(void) {

char data[8];

Init();

SerRead (data,8,0);

MotorDir(FWD,FWD);

MotorSpeed(120,120);

while(1);

return 0;

}

Page 21: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

21

4.1 Kalibracija senzora

Prilikom opisivanja senzora, prikazana je statička karakteristika senzora Sharp GP2D12. Međutim, u praksi se najčešde dešava da kod senzora manjeg kvaliteta i u serijskoj proizvodnji dolazi do odstupanja od fabričke – default karakteristike, što je potvrđeno i u seminarskom radu. Tako na primer senzor usmeren napred za predmet udaljen 20cm vratide broj 320, a senzor usmeren na stranu 300. Za kalibraciju senzora, potrebno je slededi kod iskompajlirati, i njegov HEX fajl pomodu flash programa prebaciti na ASURO-mini robota:

#include "asuro.h"

#define LEDLEVEL 200

#define WARNINGLEVEL 300

//funkcija za prebacivanje iz int u char

void IntToChar(char *data, unsigned int broj)

{

for(int i=0; i<=3; i++)

{

data[3-i]= (char) (broj%10+48);

broj/=10;

}

}

int main(void)

{

unsigned int lineData[2];

char podatak[4];

Init();

MotorDir(111,111);

while(1)

{

SerWrite("\nBroj ",6);

LineData(lineData);

IntToChar(podatak,lineData[1]);

SerWrite(podatak,4);

}

return 0;

}

Potom je potrebno u Windows OS otvoriti opciju HyperTerminal (u Windows Vista OS sistemu ova opcija je izbačena). Na slici ispod postoji ved kreirana konekcija nazvana asuro. Ukoliko ne postoji ved kreirana konekcija, možete kreirati novu pratedi sledede korake :

Page 22: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

22

Slika 4.1.1 Proces otvaranja Hyperterminala na Windows XP o.s.

Nakon pritiska na HyperTerminal otvara se opcija za kreiranje nove konekcije. Unesite naziv konekcije (na slici ispod Seminarski_Rad) i pritisnite OK.

Slika 4.1.2 Proces kreiranja nove konekcije na hiperterminalu

Popunite polja kao što je prikazano na slici ispod. Ukoliko je RS32 transiver priključen na PC, pojavidese novi COM (na slici COM1). Selektujte ga, i pritisnite OK.

Page 23: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

23

Slika 4.1.3 Popunjavanje parametara prilikom kreiranja nove konekcije na hiperterminalu

Treba podesiti Flow control na None i pritisnuti OK.

Slika 4.1.4 Parametriporta prilikom kreiranja nove konekcije na hiperterminalu

Page 24: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

24

Nakon toga konekcija je uspešno kreirana. Potrebno je uključiti ASURO mini-robota i prineti ga RS232 transiver i započede komunikacija između PC-a i ASURO mini-robota (na slici ispid asuro ispisuje na Hyperterminalu vrednosti koje prima sa jednog od senzora).

Slika 4.1.5 Izgled aktivne konekcije – ASURO preko hiperterminala ispisuje vrednosti koje prima sa senzora

Page 25: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

25

4.2 ALGORITAM RADA

Slika 4.2.1 Intuitivni algoritam rada ASURO-a

Page 26: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

26

Na slici 4.2.1 je prikazan intuitivni model koji objašnjava kako ASURO treba da reaguje na prepreke na koje nailazi. Suština obilaženja lavirinta sastoji se u pradenju jedne (desne) ivice zida.

Proces držanja rastojanja od desne ivice oivičen je narandžastim okvirom i sivom pozadinom na slici 4.2.1 a na slici 4.2.2 prikazan je detaljan princip rada. Ukoliko je udaljenost robota u odnosu na zid manja od neke referntne udaljenost (Dmin) – robot treba da poveda brzinu okretanja desnog točka, odnosno da smanji brzinu okretanja levog točka. Naravno važi i obrnuto ukoliko je udaljenost robota od zida veda od neke referentne maksimalne vrednosti (Dmax). Slika 4.2.2 Prikaz principa održavanja udaljenosti sa desne strane

Međutim, prilikom nailaženja na skretanje (oštra ivica – 90 ili 180 stepeni) potrebno je napraviti izuzetke i postupiti na načine predstavljene blokovima skreni levo i skreni desno. Blok skreni levo se izvršava kada ASURO naiđe na zid napred, tačnije kada mu se približi do neke referentne udaljenosti. Tada ASURO naglo skrede u levu stranu za otprilike 90 stepeni. Ukoliko je reč o tzv. unutrašnje g skretanju ASURO ce nakon njega nastaviti da održava rastojanje od zida sa desne strane.

Slika 4.2.3 Prikaz principa reagovanja na nailazak na prepreku napred

Ukoliko senzor koji meri udaljenost na desnu stranu primeti da je udaljenost znatno povecana od prosečne, to znači da ASURO treba da skrene na desno za 90 stepeni. Ukoliko je reč o skretanju za 90 stepeni – potrebno je da proces ponovi dva puta. Slika 4.2.3 Prikaz principa reagovanja na nailazak na slobodno skretanje sa desne strane

Funkcija za uzimanja vrednosti sa senzora :

void DistanceData(unsigned int *data)

{

// senzor koji meri udaljenost napred

ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;

ADCSRA |= (1 << ADSC);

while(!(ADCSRA & (1 << ADIF)));

Page 27: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

27

ADCSRA |= (1 << ADIF);

data[0] = ADCL + ( ADCH << 8 );

// senzor koji meri udaljenost sa desne strane

ADMUX = ( 1 << REFS0 ) | ( 1 << REFS1 ) | IR_RIGHT;

ADCSRA |= ( 1 << ADSC );

while(!(ADCSRA & (1 << ADIF)));

ADCSRA |= (1 << ADIF);

data[1] = ADCL + ( ADCH << 8 );

}

Ova funkcija je napisana da čita udaljenost ASURO-a od zida – sa prednje i desne strane. Ova

funkcija de proslediti AD konvertovanu vrednost merenja oba senzora daljine. Prva brojna vrednost je vrednost levog senzora (meri daljinu napred), a druga je konvertovana vrednost desnog senzora (meri udaljenost zida sa desne strane). Maksimalni intenzitet odnosno vrednost najvede udaljenosti je 0 dok totalno blize objekte referencira sa 1023. Normalno sa ovim ekstremnim vrednostima se nedemo sresti, u seminasrskom radu radicemo sa vrednostima od 200-1000.

Page 28: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

28

PROGRAMSKI KOD

#include "asuro.h"

#define LEDLEVEL 200 // donja granica udaljenosti od zida

#define WARNINGLEVEL 300 // gornja granica udaljenosti

// brzine

#define MAXSPEED 140

#define MINSPEED 50

#define AVGSPEED 100

// rastojanja

#define A1Dmax 1000 // maksimalna udaljenost sa desne strane

#define A1Dmin 900 // minimalna udaljenost sa desne strane

#define A0Dmax 800 // maksimalna udaljenost napred

//Funkcija za uzimanje podataka sa senzora 0-1023

void DistanceData(unsigned int *data)

{

ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;

ADCSRA |= (1 << ADSC);

while(!(ADCSRA & (1 << ADIF)));

ADCSRA |= (1 << ADIF);

data[0] = ADCL + ( ADCH << 8 );

ADMUX = ( 1 << REFS0 ) | ( 1 << REFS1 ) | IR_RIGHT;

ADCSRA |= ( 1 << ADSC );

while(!(ADCSRA & (1 << ADIF)));

ADCSRA |= (1 << ADIF);

data[1] = ADCL + ( ADCH << 8 );

}

int main(void)

{

unsigned int distanceData[2];

unsigned int i;

unsigned int flag;

unsigned int CorrectionFactor = 0;

Init();

MotorDir(FWD, FWD);

MotorSpeed(MAXSPEED,MAXSPEED);

//

while(1)

{

DistanceData(distanceData);

if(distanceData[1]<200) // ukoliko je naiso na rupu

{

if(flag==0)

{

MotorSpeed( AVGSPEED , AVGSPEED );

for( i=0; i<=280; i++)

Page 29: Arso Vukicevic, ASURO - Lavirint, Seminarski rad, 2009

Arso Vukićević 54/2006 Programiranje ASURO mini-robota

`

29

Sleep(216); //3 mS

}

// sreni desno 90 stepeni

MotorSpeed( MAXSPEED , 0);

for( i=0; i<=260; i++)

Sleep(216); //3 mS

MotorSpeed( AVGSPEED , AVGSPEED );

for( i=0; i<=444; i++)

Sleep(216); //3 mS

if(flag==1)

{

MotorSpeed( AVGSPEED , AVGSPEED );

for( i=0; i<=333; i++) // bili je 444

Sleep(216); //3 mS

}

flag =1;

}

if(distanceData[1]>1000) // ako je mnogo blizu zida

skreci levo //900

{

MotorSpeed( AVGSPEED - 20, AVGSPEED );

for( i=0; i<=100; i++)

Sleep(216); //3 mS

flag =0;

}

else if(distanceData[1]<900) // ako je mnogo daleko od

zida //800

{

MotorSpeed( AVGSPEED , AVGSPEED - 20 );

for( i=0; i<=100; i++)

Sleep(216); //3 mS

flag =0;

}

else if(distanceData[1]<935 && distanceData[1]>970) //

pre je bilo 750 850

{

flag =0;

MotorSpeed( AVGSPEED , AVGSPEED );

}

if(distanceData[0]>900) // ako je naisao na zid napred

{

// skreni levo

MotorSpeed( 0 , MAXSPEED);

for( i=0; i<=260; i++)

Sleep(216); //3 mS

flag =0;

}

}

return 0;

}