Line follower

Introducere

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.

Download

Bibliografie/Resurse

Resurse hardware

pm/prj2012/dtudose/1.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0