Proiectul presupune realizarea unui robot care se va deplasa pe o suprafata alba si va urmari o linie neagra.Cu ajutorul unor senzori va detecta linia neagra si se va deplasa de-a lungul ei.In cazul curbelor, robotul le va urma.
In realizarea proiectului am folosit urmatoarele componente: Placa imprimata de la etapa I, pe care am atasat-o de o placa sasiu de care sunt legate doua servomotoare conectate la doua roti si doi senzori optici (in sensul de deplasare al robotului). Tot de sasiu am legat alimentarea (formata din opt baterii de 1.5 V legate in serie) de 12 V. Placa de la etapa I este alimentata direct de la 12 V prin intermediul mufei care face legatura cu regulatorul de voltaj, output-ul fiind de 5 V.Asadar servomotoarele si senzorii sunt alimentate la o tensiune de 5V . Intensitatea curentului prin servomotoare este de 100mA. Cand unul din senzori intalneste culoarea neagra, roata de pe partea acestuia se opreste, iar roata de pe partea opusa se roteste cu viteza maxima. Cand ambii senzori sunt pe culoarea alba, ambele motoare merg inainte cu viteza maxima.
Am conectat alimentarea (cele 8 baterii inseriate) la mufa ce are conexiune directa cu reductorul de tensiune.
Pentru functionalitatea senzorilor am folosit circuitul de mai jos in care am conectat la dioda respectiv tranzistorul senzorilor optici, doua rezistente (o rezistenta de 10K ohm → legata direct de colectorul tranzistorului, o rezistenta de 470 ohm inseriata cu dioda)
* Cele doua servomotoare cu cele doua roti (fiecare servomotor fiind conectat separat la cate o roata)
Initial servomotoarele au fost fabricate cu un mecanism ce le permitea o rotatie de doar 180 grade Pentru a facilita o rotatie completa (360 grade) am adus mici modificari :
Am ajuns la aceasta concluzie deoarece la rotirea in sens invers a oricarui motor, potentiometrul se seta pe valoarea 0 si astfel roata se bloca;
* Cu ajutorul a doua distantiere, am atasat alimentarea (cu cele 8 baterii inseriate).
La alimentare am atasat un buton care imi intrerupe/porneste robotul.
void move_forward() {
channelA(MOTOR_DREPT, MAX);
channelA(MOTOR_DREPT, MIN);
channelB(MOTOR_STANG, MIN);
channelB(MOTOR_STANG, MAX);
PORTB = MOTOR_STANG;
PORTA = MOTOR_DREPT;
}
Functia care face acest lucru este urmatoarea:
void move_right_engine() {
channelA(MOTOR2, MAX);
channelA(MOTOR2, MIN);
PORTB = MOTOR1;
}
Robotul functioneaza dupa cum ne-am propus.Am testat robotul atat pe circuite create de mine cat si pe cele de la facultate si am observat o functionare corecta a acestuia.
Mentionez ca viteza cu care parcurge un circuit este decenta.Deoarece senzorii sunt foarte apropiati de motoare, robotul poate lua curbe destul de “stranse” foarte precis.
Avand in vedere ca senzorii sunt suficient de departati unul de altul, robotul functioneaza pe circuite proiectate cu linii negre atat groase cat si subtiri.
Am obtinut o aderenta buna a rotilor plasand bateriile astfel incat centrul acestora de greutate sa “cada” deasupra rotilor.
Am atasat si cateva poze cu “produsul” final:
A fost un proiect interesant, mai ales datorita faptului ca am realizat ceva practic. Ne-a placut si faptul ca am dobandit abilitatea de a face lipituri si am capatat indemanarea de a lucra cu un letcon. Lucru in echipa ne-a ambitionat. Chiar daca am intampinat si probleme la care nu ne asteptam, le-am rezolvat cu darzenie.
Datasheet ATMega16: doc2466.pdf
Datasheet Senzori RPR-220: rpr-220.pdf