Proiectul ales de noi este cunoscut in domeniul roboticii sub numele de Line-Follower Robot. In princpiu, acesta are un singur task de realizat si anume sa se deplaseze urmarind un traseu predefinit. Traseul poate fi reprezentat ca o linie colorata in contrast fata de fundal (in cazul nostru, o linie neagra pe fundal alb).
De ce am ales acest proiect? Motivul principal il constituie interesul fata de domeniul Inteligentei Artificiale, care are un rol important in progresul tehnologic al oamenilor. IA se ocupa cu studierea modului in care se poate simula inteligenta umana pentru extinderea capabilitatilor functionale ale masinilor si pentru a facilita interactiunea om-masina. Robotelul nostru este inteligent prin faptul ca poate raspunde la stimuli – prin utilizarea unor senzori, acesta va putea urmari cu exactitate traseul.
Care este scopul acestui proiect? In urma realizarii proiectului ales, ne vom familiariza atat cu proiectarea de scheme electrice si implementarea lor in hardware, cat si cu programarea software folosind un microcontroller si aplicatii specializate.
In continuare vom prezenta schema bloc a proiectului:
Mod de functionare
Pentru a ghida masina dupa traseu, vom folosi 5 senzori pe care ii plasam in fata. Sistemul de senzori va transmite semnale analogice catre un comparator. Acesta transforma informatia primita in valori binare pe care le transmite mai departe microcontroller-ului. Utilizand datele de la senzori acesta va determina actionarea motoarelor in mod corespunzator.
Mai intai, vom preciza ca am pornit cu o masinuta din comert. De la ea, am folosit sasiul, rotile si motoarele. Este vorba despre un motor pentru tractiune si un motor pentru controlarea directiei. Am folosit, de asemenea, placuta cu microcontroller, realizata la laborator.
Microcontroller
Senzori
Folosim 5 senzori si luam in calcul faptul ca linia neagra care reprezinta traseul pentru masina are o grosime de 2 cm. Un senzor consta intr-o fotodioda (receptorul) si un led IR (transmitatorul).
Cum functioneaza? Led-ul emite lumina IR. Daca sub led, suprafata este alba, atunci lumina este reflectata si captata de fotodioda. Daca suprafata este neagra, atunci razele emise nu vor mai fi reflectate.
Fotodioda are o proprietate speciale si anume, aceea ca sub influenta luminii, rezistenta ei electrica scade. Pentru a sesiza schimbarile de rezistenta, se foloseste un divizor de tensiune sau setam o tensiune de referinta folosind un potentiometru.
UPDATE: Din cauza unor probleme cu fotodiodele, am fost nevoiti sa schimbam fotodiodele si ledurile de mai sus cu senzori intregi.
Schema:
Asa arata acum placuta cu senzori:
Motoare
In primul rand, nu putem conecta un motor direct la microcontroller deoarce acesta din urma nu poate asigura curentul necesar pentru functionarea motorului. Prin urmare, controlul motoarelor este realizat folosind o punte H si anume L293NE. Puntea H primeste input de la microcontroller si genereaza output-ul corespunzator pentru motoare. Aceasta permite controlarea vitezei si a sensului de rotatie a motoarelor.
L293NE
Acesta permite cuplarea celor doua motoare datorita existentei a 2 canale (pinii 1-8, respectiv 9-16). Un canal se activeaza prin pinii de enable (EN). Pe primul canal se conecteaza motorul de tractiune, iar pe al doilea cel pentru directie. L293 are 4 intrari (1..4 A) si 4 iesiri (1..4 Y). Pinii de input reprezinta output-ul de la microcontroller, iar pinii de output reprezinta input-urile pentru motoare. Vcc1 va decide valorile high/low pentru tensiunea de intrare, iar Vcc2 este tensiunea la care dorim sa functioneze motoarele.
Schema:
Facem o observatie in legatura cu pinii de iesire: pinii 3 si 14 reprezinta terminalul negativ, iar pinii 6 si 10, cel pozitiv.
Alimentare placuta
Pentru a alimenta placuta cu microcontroller, am realizat un regulator de tensiune la 5V. Output-ul lui se duce catre pinii 10 (Vcc) si 11 (GND) ai microcontroller-ului.
In final, proiectul arata asa:
Am folosit WinAvr si avrusbboot pentru a incarca programul pe placuta.
Algoritmul folosit este urmatorul:
Am reusit sa obtinem un robotel care merge inainte si inapoi, dar care nu ia curbele bine deoarece are viteza prea mare. Tot din cauza vitezei prea mari, masina opreste cu intarziere. O alta problema aparuta este aceea ca nu poate sa ia viraje sub un unghi mic din considerente mecanice.
In aceasta sectie am dori sa facem cateva observatii ce speram ca vor fi de folos studentilor care vor aborda acest proiect. In primul rand, folosirea unei masinute din comert nu este cea mai buna solutie. Ar fi fost indicat sa cumparam toate piesele separat si sa le asamblam noi. In al doilea rand, recomandam sa folositi senzori si nu fotodioda + led ir separat. Ar mai fi si problema cablurilor care nu numai ca arata rau, dar si incurca - in acest sens recomandam pcb-ul. Nu in ultimul rand, aveti grija sa alimentati separat motoarele, pentru a avea suficienta putere ca sa se efectueze virajele si nu uitati sa limitati viteza in curbe folosind pwm.
In concluzie, proiectul a fost interesant, educativ si ne-a facut placere sa lucram la el.
Acesta este codul folosit pentru programarea placutei: cod_pm.zip
Datasheet ATMEGA16
Datasheet L293
Datasheet LM324
Datasheet QRD1114