Professional Documents
Culture Documents
NIŠ
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
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
1
Sl.2 – šema robota Sl.3 – šema IR senzora i
komparatora
#include d:\mc51\8051io.h
#include d:\mc51\8051reg.h
extern register unsigned char
speedleft,speedright;
register unsigned char high,low,flag,time;
Run()
{
char sensors;
sensors = (P3 &=0x0f); Ukoliko se registruje niže logičko stanje
na P3.0, a P3.1,P3.2 i P3.3 su na visokom,
if((sensors & 0x01)==0) { dok su P3.4-P3.7 neaktivni, prvi senzor je
TurnRight(); registrovao crnu liniju, izvršava se blok
flag = 1; } TurnRight – skretanje u desno.
Ako je P3.3 na nižem logičkom stanju,
else if((sensors & 0x08)==0) { izvršava se blok TurnLeft – skretanje u levo.
TurnLeft(); Ukoliko senzori 2 i 3 registruju crnu
flag = 2; } traku, P3=00001001, punom brzinom oba
else if(sensors == 0x09) { motora se ide napred.
Forward(high); else if(((sensors==0x0b)||
flag = 0; } (sensors==0x0d))&&(flag==0))
3
Forward(low);
}
Ukoiko je logička sekvenca
Forward(char speed) P3=00001011 ili 00001101 (senzori 1 i 4 i
{ jedan od senzora 2 ili 3 registruju crnu
P1=0x64; traku), a kreće se brzo pravolinijski, robot
speedright = speed+10; usporava.
speedleft = speed; Greška - else if blok nije završen
delay(time); komandom else
} gde je trebalo definisati postupak u slučaju
mogućih neobradjenih kombinacija P3
TurnRight() 00000011,00000101,00001010,00001100
{ odnosno 03h,05h,0ah,0ch i kada se robot ne
P1=0x68; kreće brzo pravolinijski, niti slucaj skretanja
speedright = low+5; sa linije – P3=0fh.
speedleft = low; Greška u bloku Forward – speedright
delay(time); mora da bude jednaka speedright, uostalom
} obe ove promenljive su suvisne,
programiranje rada motora vrsi se preko
TurnLeft() porta P1. P1=01100100, znači P1.2, P1.5,
{ P1.6 na višem logičkom stanju, IN1, IN4 i
P1=0x54; START dugme uključeno. Nelogično, po
speedright = low+5; šemi trebalo da je kodovnje za
speedleft = low; Forward(high)=>P1=01100010=62h
delay(time); Forward(low)=>P1= 01xxxx00, gde je
} sadržaj bitova obeleženih sa x nebitan.
Skretanje u desno – P1=01101100 -
Reverse(char speed) IN1,IN2 i IN4 na visokom nivou – po šemi
{ bi trebalo da je P1= 01001001=49h
P1=0x58; Skretanje u levo - P1=01010100 – IN1 i
speedright = speed; IN3 na visokom naponskom nivou, umesto
speedleft = speed+5; P1=01000101=45h
delay(time); 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
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