Proiectul nostru este un robot line follower. Acesta merge pe o suprafață albă cu o linie neagră pe ea și încearcă să o urmărească. Ne-am gândit ca dintre toate proiectele de anii trecuți, line follower era cel mai impresionant și, cu toate astea, nu cu mult mai greu de construit. De asemenea se organizează și un concurs pentru studenții cursului de PM - încă un motiv pentru care line follower-ul ar fi mai motivant.
Descriere generală
În afară de plăcuța de la etapa 1, a trebuit să lipim încă un circuit de control a motoarelor, centrat pe circuitul integrat L298N. Schema bloc a acestui circuit este inclusă mai jos, cu excepția folosirii a 3 pini de control pentru fiecare motor, în loc de 2 cum este descris aici (nu avem porți logice NOT):
Elementele din care a fost construit robotul sunt:
Placă de bază cu microcontroller ATMega16
Driver de motor cu circuit integrat L298N
Șasiu și componentele sale:
roți
carcasă
2 motoare de maxim 6V și 1A
suport de baterii - 4 baterii AA 1.5V
linie de senzori de reflectanță - 8 senzori analogici
Hardware Design
Lista de piese
Placa de bază
Driverul de motor (se observă și L298N)
Carcasa Magician Robot Kit - se observă piesele enumerate la descrierea generală
Senzorul de linie Pololu QTR-8A cu output analogic
Senzorul de linie în faza de testare
Robotul în starea finală
Software Design
Am lucrat in mediul Linux cu tool-urile make si avr-gcc. Programul propriu-zis de control este inspirat din algoritmul de control PID, doar ca acesta nu putea fi implementat direct din cauza că viteza motoarelor nu era direct proportională cu tensiunea aplicată la bornele acestora. Din cauza aceasta nu se putea aplica un algoritm de calcul a vitezei proporțional cu eroarea de la senzori.
Varianta implementată de noi are următoarea schemă:
Citește valorile celor 4 senzori din partea stânga și dreaptă față de mijlocul barei de senzori.
Pentru senzorii din stânga marchează care-i senzorul cel mai depărtat de centru care detectează negru. Valoarea din această parte este proporțională cu senzorul găsit:
senzorul 1 de la margine - 3 puncte
senzorul 2 de la margine - 2 puncte
senzorul 3 de la margine - 1 punct
senzorul 4 este considerat mijlocul liniei - 0 puncte
Similar se procedează și pentru partea dreaptă a barei de senzori
Se calculează eroarea și pe baza acesteia unul din motoare este setat la viteză maximă iar celălalt la o viteză mai mică proporțională cu eroarea. De exemplu, daca se detectează linia neagră pe senzorul 1 și nimic in partea dreaptă, atunci motorul drept va lucra la maxim, iar cel stâng se va opri. Acesta este un control diferențial al motoarelor.
Uneori robotul va ieși prea de pe linie și nu va mai detecta nimic. Pentru a rezolva această situatie se memorează în ce parte a fost detectată linia ulima oară. Dacă robotul nu mai stie cum să meargă, se va uita în valoarea memorată și va încerca să revină pe linie.
Motoarele nu pot să meargă la viteză maximă deoarece va ieși prea des din linie, uneori atât de departe încât nu va putea să se întoarcă nici folosind valoarea memorată.
Rezultate Obţinute
Rezultatele se pot vedea în acest filmuleț:
Concluzii
Dacă am fi avut mai mult timp la dispoziție, testam mai mult motoarele și găseam o soluție pentru a le controla mai bine. Asta ne-ar fi permis un algoritm mai avansat și viteze mai mari.