Line Follower - Bogdan-Constantin Nutu

Autorul poate fi contactat la adresa: bogdan.nutu97@gmail.com

Introducere

Tema proiectului meu este un robot de tip Line Follower, al carui scop este sa parcurga un traseu descris de o banda neagra pe un fundal alb. M-am decis sa construiesc un astfel de robot deoarece vazusem proiecte similare la diferite evenimente, insa nu mi-am pus niciodata problema cum as putea sa construiesc singur unul, asa ca proiectul la PM este o oportunitate buna. In plus, cred ca un astfel de robot este genul de proiect din care voi avea multe de invatat si reprezinta o provocare pentru mine.

Descriere Generala

Construirea unui robotel Line Follower nu implica folosirea unui numar foarte mare de componente hardware. Partea principala a robotelului este formata din sasiu, pe care voi monta restul de piese, la care se adauga cele 2 motoare.

Asadar, robotelul va avea 2 roti mari, atasate la cele 2 motoare, impreuna cu o roata mai mica, aflata pe partea din fata, care ajuta robotelul sa stea in echilibru si sa capete directia dorita.

Pe sasiu voi monta apoi placuta de baza, driverul de motoare, senzorii IR(care vor sta in partea din fata a robotelului) si sursa de alimentare.

Schema bloc a proiectului meu este urmatoarea:

Pe scurt, senzorii IR aflati pe bara din fata a robotelului vor analiza traseul si vor trimite informatii catre placuta de baza. Pe baza acestora, microcontroller-ul va decide care este directia in care trebuie sa se deplaseze robotelul pentru a urma banda neagra si va face acest lucru controland cele 2 motoare prin intermediul driver-ului.

Hardware Design

Lista de piese

In plus, pentru traseul robotelului am avut nevoie 4 coli carton duplex pe care le-am lipit intre ele si de banda izolatoare neagra.

Schema electrica

Schema electrica a proiectului meu este urmatoarea:

Initial, cand am inceput implementarea hardware a robotelului, mi-am propus sa alimentez placuta de la o baterie externa, la 5V, iar driverul sa il alimentez de la placuta. Nu am reusit sa fac acest lucru pentru ca driverul avea nevoie de o tensiune mult mai mare la intrare pentru a putea actiona cele 2 motoare.

M-am hotarat sa imi cumpar asadar o sursa DC-DC boost, pe care am folosit-o ca sa generez o tensiune mai mare pentru a alimenta driverul, intrucat dispuneam doar de cei 5V de la bateria externa. Sursa pe care am cumparat-o eu poate produce o tensiune de iesire de pana la 28V, avand la intrare o tensiune intre 2 si 24V. Am reglat tensiunea de iesire a sursei in jurul valorii de 10-11V, dupa care am alimentat placuta direct de la intrarea sursei, unde aveam cei 5V ai bateriei, iar driverul l-am alimentat de la iesirea modulului boost.

Software Design

Implementarea software am facut-o in limbajul C si am folosit compilatorul avr-gcc, ca la laborator. Incarcarea codului pe microcontroller am facut-o cu bootloader-ul pus la facultate.

Ca medii de dezvoltare, am folosit doar editorul Sublime.

Pentru a controla cele 2 motoare am folosit timerele 0 si 2(timer-ul 0 pentru motorul din dreapta, iar timer-ul 1 pentru motorul din stanga), pe modul Fast PWM, cu top la 0xFF si prescaler 1.

In cadrul proiectului am folosit o bara cu 8 senzori IR analogici, asa ca am avut nevoie de un ADC si de o valoare de prag pentru a stabili daca un senzor “vede” negru sau alb. Cei 8 senzori sunt conectati la pinii PA0…PA7. Pentru a stabili ce valoare de prag aleg(valoare peste care voi considera ca un senzor “vede” negru), am folosit un LCD pe care am afisat valorile celor 8 senzori in diferite momente. Pe baza acestor observatii, am ales valoarea limita 300.

Cele 2 motoare sunt conectate la un driver L298N. Apoi, fiecarui motor ii corespund 3 fire care pleaca din driver la placuta: unul de PWM si ceilalti 2 pentru directie. Ca pini de PWM, am folosit PB3 si PD7.

Functiile pe care le folosesc sunt:

  • left_engine_set_speed, right_engine_set_speed –> setez viteza unui motor la o valoare dorita
  • left_engine_init, right_engine_init –> configurez modul fast PWM si dau o viteza initiala motoarelor
  • ADC_init, ADC_get –> folosite pentru a citi valorile senzorilor(preluate din lab)
  • init_ports –> initializare porturi de PWM si directie pentru motoare
  • run –> functia de baza, in care se afla practic logica robotelului

Mai multe detalii despre implementare si cod puteti gasi in fisierul README.txt, din arhiva care poate fi descarcata din sectiunea Download.

Rezultate Obtinute

Nu am construit un Line Follower perfect, insa robotelul se misca bine si reuseste sa urmareasca banda neagra pe un traseu.

Are cateva mici probleme la plecare, din cauza bateriei de pe sasiu care este destul de grea si in cazul curbelor stranse.

Mai jos puteti vedea cateva imagini cu proiectul:

nutu_lf1.jpg

nutu_lf2.jpg

nutu_lf3.jpg

Pe langa acestea, am incarcat si 3 filmulete pentru a exemplifica cum functioneaza proiectul, cu 3 trasee diferite.

Le puteti gasi la urmatoarele linkuri:

Line Follower - Demo 1

Line Follower - Demo 2

Line Follower - Demo 3

Concluzii

Acesta a fost primul proiect de acest fel la care am lucrat si pot spune ca a fost o provocare pentru mine si m-am straduit sa iasa cat mai bine. Sunt multumit de rezultatul final, avand in vedere ca robotelul face ce trebuie si urmareste cu succes banda neagra de pe fundalul alb, asa cum se poate vedea si in demo-urile de mai sus.

Pe parcursul imprementarii proiectului am intampinat si unele probleme. De exemplu, am fost nevoit sa imi schimb microcontroller-ul cu altul, din cauza ca primul s-a ars pentru ca am alimentat placuta la o tensiune mai mare decat 5V din greseala.

Este adevarat ca robotelul este destul de greoi, insa m-am concentrat mai mult asupra scopului final al proiectului decat asupra performantei sale. Pentru mine a fost o experienta interesanta pentru ca am aplicat multe cunostinte din laboratoare, am invatat cum pot folosi senzorii IR si cum pot controla motoarele cu microcontroller-ul si driver-ul.

Codul sursa nu este unul foarte complex, dar am incercat sa il fac cat mai lizibil si modularizat.

Pentru a imbunatati performanta robotelului, pe viitor ma gandesc sa adaug in cod posibilitatea de a se redresa in cazul in care robotelul pierde banda neagra pe care trebuie sa se deplaseze. Deocamdata nu am implementat si acest aspect. In plus, as putea incerca sa imbunatatesc codul de acum pentru a obtine viteza mai mare.

Download

Arhiva proiectului: Proiect Line Follower

Arhiva contine urmatoarele fisiere:

  • line_follower.c –> Codul sursa
  • README.txt
  • Makefile –> compileaza programul si genereaza fisierul line_follower.hex, care va fi incarcat pe placuta
  • bootloadHID

Jurnal

  • 21.04.2019 –> Schema bloc + lista de piese
  • 22.04.2019 –> Lipit componente pe placuta de baza
  • 25.04.2019 –> Instalare bootloader pe placuta de baza
  • 30.04.2019 –> Realizare schema electrica a proiectului
  • 06.05.2019 –> Achizitionare sasiu, motoare, driver de motoare si senzori IR
  • 09.05.2019 –> Achizitionare modul boost, fire si alte componente auxiliare(distantiere, suruburi si piulite M2, M3, etc.)
  • 14.05.2019 - 21.05.2019 –> Implementare hardware
  • 16.05.2019 - 23.05.2019 –> Implementare software si testare

Bibliografie/Resurse

pm/prj2019/mlungoci/87538.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