Autorul poate fi contactat la adresa: bogdan.nutu97@gmail.com
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.
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.
Nume piesa | Cantitate | Link |
---|---|---|
Placuta de baza PM2019 | 1 | - |
Kit FlexyBot cu 2 motoare | 1 | https://www.robofun.ro/flexy-bot-2-motoare?search=flexy |
Driver de motoare L298N | 1 | https://www.optimusdigital.ro/ro/drivere-de-motoare-cu-perii/145-driver-de-motoare-dual-l298n.html |
Bara cu 8 senzori IR reflectivi QTR-8A | 1 | https://www.optimusdigital.ro/ro/senzori-senzori-optici/1029-bara-de-senzori-infrarou-reflectivi-qtr-8a.html |
Modul DC-DC Boost de 2A | 1 | https://www.optimusdigital.ro/ro/surse-ridicatoare-reglabile/169-modul-dc-dc-boost-de-2a.html |
Powerbank 10400mAh | 1 | - |
Fire, conectori | >10 | - |
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 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.
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:
Mai multe detalii despre implementare si cod puteti gasi in fisierul README.txt, din arhiva care poate fi descarcata din sectiunea Download.
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:
Pe langa acestea, am incarcat si 3 filmulete pentru a exemplifica cum functioneaza proiectul, cu 3 trasee diferite.
Le puteti gasi la urmatoarele linkuri:
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.
Arhiva proiectului: Proiect Line Follower
Arhiva contine urmatoarele fisiere: