primena mikrokontrolera na primeru robota koji prati liniju

9
V I S O K A T E H N I Č K A Š K O L A N I Š SEMINARSKI RAD Primena mikrokontrolera na primeru robota koji prati liniju Predmet: Programiranje mikrokontrolera

Upload: bivis81

Post on 28-Jun-2015

137 views

Category:

Documents


4 download

DESCRIPTION

Primena mikrokontrolera na primerurobota koji prati liniju

TRANSCRIPT

Page 1: Primena mikrokontrolera na primeru robota koji prati liniju

V I S O K A T E H N I Č K A Š K O L AN I Š

SEMINARSKI RAD

Primena mikrokontrolera na primeru robota koji prati liniju

Predmet: Programiranje mikrokontrolera

Mentor: Student:Prof. dr Zoran N. Milivojević Radenković Vladimir

SEk 84/06

Page 2: Primena mikrokontrolera na primeru robota koji prati liniju

U ovom radu biće proučen rad Plermjai Inchuay-a koji je pobednik Ving-Paw takmičenja Tajlandskih studenata na temu ,,Robot koji prati liniju”. Zadatak je bio uz pomoć mikrokontolera, pokretača motora, senzora za praćenje i naravno, dva elektromotora i napajanja konstruisati robota sposobnog da prati liniju. Zahvaljujući karakteristikama ugrađenih komponenti,a i samog programa koje su pisali konstruktori, robot Plermjai Inchuay-a (Sl.1) pokazao se kao najbrži i najprecizniji u praćenju. Zbog toga će hardverska konstrukcija njegovog projekta ovde biti detaljno obrađena. Posebno temeljno biće analiziran program konstruktora sa obradom svakog bloka posebno, uz ukazivanje prednosti i nedostataka pomenutog.

Sl.1 - robot

Robot je implementiran primenom Atmel-ovog mikrkontolera AT89C2051, H-Bridge pokretača motora L293D, četiri IR senzora i komparatora LM324. Šema robota data je na Sl.2. Senzori su preko komparatora vezani na port P3 – od P3.0 do P3.3, dok su P3.4-P3.7 slobodni. Portovi P1.0 i P1.1 vezani su na EN12 i EN34 pinove H-Bridge pokretača. Portovi P1.2 do P1.5 vezani su na ulaze IN1-IN4 pokretača. Port 1.6 vezan je za start dugme. Port P1.7 vezan je za LED diodu. Izlazi pokretača OUT1 i OUT2 vezani su za jedan, OUT3 i OUT4 za drugi electromotor. Šema IR senzora i komparatora, i raspored senzora dati su na Sl.3 i Sl.4, a tabela funkcija i šema pokretača motora na Sl.5. Radi razumevanja i povezivanja šeme robota i tabele funkcija i šeme pokretača treba naglasiti da su, prema rasporedu pinova ENx (x=12 ili x=34) ulazi inhibicionog napona Vinh, IN1=D, IN2=C, IN3=A in IN4=B.

1

Page 3: Primena mikrokontrolera na primeru robota koji prati liniju

Sl.2 – šema robota Sl.3 – šema IR senzora i

komparatora

Sl.4 – raspored senzora

Sl.5 – šema H-bridge pokretača i tabela funkcija2

Page 4: Primena mikrokontrolera na primeru robota koji prati liniju

Program za mikrokontroler 2051 pisan je u C-jeziku, i Keil-ovim MC51 kompajlerom preveden u heksadecimalni kod. Program u C-jeziku je razumljiv i bice u narednom delu proučen uz detaljno objašnjenje svakog bloka.

#include d:\mc51\8051io.h#include d:\mc51\8051reg.hextern register unsigned char

speedleft,speedright;register unsigned char high,low,flag,time;

main(){ P1=0x40; P3=0xff; high = 80; low = 30; flag = 0; time = 50; Start(); while(1) { P3|= 0x0f; Run(); }}

Start(){ char exit,key; exit =1; while(exit) { key = P1; if((key & 0x40)==0) exit=0; }}

Run(){ char sensors; sensors = (P3 &=0x0f);

if((sensors & 0x01)==0) { TurnRight(); flag = 1; }

else if((sensors & 0x08)==0) { TurnLeft(); flag = 2; } else if(sensors == 0x09) { Forward(high); flag = 0; }

U main bloku zadata je početna sekvenca bitova za P1=01000000 čime se P1.6 stavlja na viši naponski nivo i deklariše kao ulaz, znači uslov za izvršenje programa je uključen taster, a ostali pinovi su na logičkoj nuli, deklarisani kao izlaz. Ujedno, nisko naponsko stanje na P1.7 uključuje LED diodu. Početna sekvenca P3=11111111, čime se ceo port P3 deklariše kao ulazni. Maska postavljena na P3 briše sadržaj pinova koji nisu konektovani da ne bi došlo do greške u programu.

Uz uslov dok je P3 nije jednak 00001111 (dok svi senzori ne detektuju belu boju) izvršava se blok Run.

Start blok proverava while petljom da li je došlo do promene logičkih stanja porta P1 i ukoliko nije, program se dalje ne izvršava.

Ukoliko se registruje niže logičko stanje na P3.0, a P3.1,P3.2 i P3.3 su na visokom, dok su P3.4-P3.7 neaktivni, prvi senzor je registrovao crnu liniju, izvršava se blok TurnRight – skretanje u desno.

Ako je P3.3 na nižem logičkom stanju, izvršava se blok TurnLeft – skretanje u levo.

Ukoliko senzori 2 i 3 registruju crnu traku, P3=00001001, punom brzinom oba motora se ide napred.

else if(((sensors==0x0b)||(sensors==0x0d))&&(flag==0))

3

Page 5: Primena mikrokontrolera na primeru robota koji prati liniju

Forward(low);

}

Forward(char speed){ P1=0x64; speedright = speed+10; speedleft = speed; delay(time);}

TurnRight(){ P1=0x68; speedright = low+5; speedleft = low; delay(time);}

TurnLeft(){ P1=0x54; speedright = low+5; speedleft = low; delay(time);}

Reverse(char speed){ P1=0x58; speedright = speed; speedleft = speed+5; delay(time);}

Ukoiko je logička sekvenca P3=00001011 ili 00001101 (senzori 1 i 4 i jedan od senzora 2 ili 3 registruju crnu traku), a kreće se brzo pravolinijski, robot usporava.

Greška - else if blok nije završen komandom elsegde je trebalo definisati postupak u slučaju mogućih neobradjenih kombinacija P3 00000011,00000101,00001010,00001100 odnosno 03h,05h,0ah,0ch i kada se robot ne kreće brzo pravolinijski, niti slucaj skretanja sa linije – P3=0fh.

Greška u bloku Forward – speedright mora da bude jednaka speedright, uostalom obe ove promenljive su suvisne, programiranje rada motora vrsi se preko porta P1. P1=01100100, znači P1.2, P1.5, P1.6 na višem logičkom stanju, IN1, IN4 i START dugme uključeno. Nelogično, po šemi trebalo da je kodovnje za Forward(high)=>P1=01100010=62h Forward(low)=>P1= 01xxxx00, gde je sadržaj bitova obeleženih sa x nebitan. Skretanje u desno – P1=01101100 - IN1,IN2 i IN4 na visokom nivou – po šemi bi trebalo da je P1= 01001001=49h

Skretanje u levo - P1=01010100 – IN1 i IN3 na visokom naponskom nivou, umesto P1=01000101=45h

Blok za kretanje u nazad, koji nigde nije pozvan. P1=01011000 – IN2 i IN3 na visokom naponskom nivou – L293D nema opciju vraćanja u rikverc.

4

Page 6: Primena mikrokontrolera na primeru robota koji prati liniju

Za takmičenje je pripremljen poligon sa slike Sl.6. Na adresi http://www.kmitl.ac.th/~kswichit/LFrobot/LFrobot.htm može se videti takmičenje između robota kog smo analizirali i sličnog projektovanog uz upotrebu Motorolinog mikrokontrolera 68HC11, gde se analizirani predstavio mnogo bolje. Možemo primetiti sledeće:

- Za prostu primenu koja je bila zadata, 2051 je mnogo bolje rešenje zbog brzog odlučivanja, prostije strukture, pa samim tim i lakšeg programiranja.

- Uprkos greškama koje u primetne u pogramu, robot ipak radi, i to bolje od konkurentnih, pa postoje dve mogućnosti – ili šema povezivanja sa slike nije tačna, ili je projektant zlonamerno izbacio program s greškom na internet.

- Na demonstraciji se jasno vidi da se analizirani robot kreće po pravoj liniji u cik-cak, i da je samo zahvaljujući brzom odlučivanju mikrokontrolera 2051 pobedio na takmičenju, postavlja se pitanje o stručnosti Tajlandskih studenata koji su učesvovali na takmičenju.

- Po sudaru i skretanju sa putanje oba robota su nastavila da se kreću nekontolisano, dokaz da while petlja sa početka programa nije ispunila zadatak.

Sl.6 – poligon

5