You are on page 1of 6

VISOKA TEHNIČKA ŠKOLA

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

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
Sl.2 – šema robota Sl.3 – šema IR senzora i
komparatora

Sl.4 – raspored senzora

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


2
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.h
extern register unsigned char
speedleft,speedright;
register unsigned char high,low,flag,time;

main() U main bloku zadata je početna sekvenca


{ bitova za P1=01000000 čime se P1.6 stavlja
P1=0x40; na viši naponski nivo i deklariše kao ulaz,
P3=0xff; znači uslov za izvršenje programa je
high = 80; uključen taster, a ostali pinovi su na logičkoj
low = 30; nuli, deklarisani kao izlaz. Ujedno, nisko
flag = 0; naponsko stanje na P1.7 uključuje LED
time = 50; diodu. Početna sekvenca P3=11111111,
Start(); čime se ceo port P3 deklariše kao ulazni.
while(1) { Maska postavljena na P3 briše sadržaj
P3|= 0x0f; pinova koji nisu konektovani da ne bi došlo
Run(); 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()
{
char exit,key;
exit =1;
while(exit)
{
key = P1; Start blok proverava while petljom da li
if((key & 0x40)==0) exit=0; je došlo do promene logičkih stanja porta P1
} i ukoliko nije, program se dalje ne izvršava.
}

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

You might also like