Line Follower Tank

Introducere

Proiectul nostru constă în crearea unui roboțel care să urmărească o linie neagră pe o suprafață albă. Această idee ne-a venit văzând importanța de care se bucură roboții Line Follower în facultate, existând și competiții pentru aceștia. Totuși, scopul nostru nu este să câștigăm o astfel de competiție ci doar să facem robotul să nu părăsească linia neagră.

Hardware Design

Am utilizat următoarele componente:

  • plăcuța cu ATMEGA 16 de la prima etapă
  • punte H L298N

l298n1.jpg

  • șasiu cu șenile

plate_1-250x250.jpgtracks-1-250x250.jpg

  • cutie de viteze Tamiya

gearbox-1-250x250.jpg kit-senile-motoare.jpg

  • linie de senzori QTR 8A

  • 8 diode 4148
  • 2 rezistențe de 0.47 Ω
  • 4 baterii

Componentele hardware ale proiectului se asamblează în modul următor:

Schema pentru asamblarea motoarelor și a punții H așa cum am simulat în Proteus:

Software Design

Software-ul pentru acest proiect a fost scris folosind vim, Geany, Notepad++.

Deoarece senzorul întoarce valori apropiate când se află pe alb și când se află pe negru am fost nevoiți să folosim ADC(pentru că altfel robotul ar observa ambele culori ca 0 logic). Astfel este nevoie de o funcție de inițializare ADC și de preluare a unei valori de pe un port folosind ADC. Astfel setăm valoarea senzorului în funcție de o valoare de referință determinată experimental și care poate să difere în funcție de cât de alb este albul pe care va merge tancul.

Algoritmul este următorul:

Inițializare porturi(ieșire sau intrare). Doar PORTA este de intrare, celelalte fiind setate de ieșire.
while(1)
→→Inițializare PORTC = 0.
→→Citire senzori folosind ADC.
→→Dacă senzorul 0 și senzorul 7 sunt pe negru
→→→→Motoarele se opresc.
→→Dacă senzorul 6 sau senzorul 7 sunt pe negru
→→→→Robotul se întoarce spre dreapta.
→→Dacă senzorul 0 sau senzorul 1 sunt pe negru
→→→→Robotul se întoarce spre stânga.
→→Dacă toți senzorii au aceeași valoare(valabil doar pe suprafețe perfect albe, și la o reglare a senzorilor la aceeași distanță de suprafață)
→→→→Robotul se oprește(toți senzorii pe alb, sau toți senzorii pe negru).

În urmărirea unei linii tancul nu ar trebui să meargă în spate, astfel că am eliminat această posibilitate. Au rămas 3 situații:

  • mers în față
Motorul din dreapta merge în față.
Motorul din stânga merge în față.
  • întoarcere spre dreapta
Motorul din dreapta merge în spate.
Motorul din stânga merge în față.
  • întoarcere spre stânga
Motorul din dreapta merge în față.
Motorul din stânga merge în spate.
  • oprire
Motorul din dreapta stă.
Motorul din stânga stă.

Am păstrat în cod 3 macrouri pentru testarea motoarelor, comentate cu #if0…#endif. Este recomandat ca înainte de a verifica tancul, să verificați dacă motoarele funcționează cum ar trebui. Astfel puteți fi siguri că nu a apărut vreo problemă hardware(fir sărit, alimentare necorespunzătoare).

Codul îl găsiți în arhivă: tanccod.zip

Rezultate Obţinute

Tancul funcționează și urmărește linia neagră pe font alb. Totuși este posibil ca valoarea de referință pentru ADC să se modifice în funcție de suprafața pe care e folosit tancul.

Aici sunt cateva poze cu proiectul:

16052011492.jpg 16052011493.jpg

16052011494.jpg 16052011495.jpg

Rezultatul se poate observa și aici:

Concluzii

Este foarte frumos să construiești un robot dar este o activitate care consumă mult timp. Am descoperit că debug-ul pe hardware e mai greu de făcut decât cel în software. Dar mereu duce la rezolvarea problemelor sau cel puțin la descoperirea lor.

Partea software a proiectului a fost ceva mai simplă decât parte hardware. Dar dacă senzorul luat ar fi fost bun și ar fi respectat propriul datasheet(“With a strong reflectance, such as when the sensor is over a white surface, its output voltage will tend towards 0 V; with very weak reflectance, such as when the sensor is over a black surface, its output voltage will tend towards Vcc”) programarea ar fi fost mult mai ușoară, putând evita folosirea ADC.

Download

Bibliografie/Resurse

pm/prj2011/dloghin/line_follower335.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