Scopul proiectului meu este realizarea unui robot care sa se plimbe autonom si sa poate ocolii obstacolele. Pentru asta robotul trebuie sa fie dotat cu senzori si cu cat sunt mai multi cu atat va fii mai precis.
Pentru realizarea acestui avem nevoie de o interfata pentru controlul motoarelor, de un modul pentru detectarea obstacolelor si de un modul de decizie. Proiectul este realizat pe un schelet de robot (tanc) pe care am pus 2 motoare, cate unul pentru controlul fiecarei senile. Modulul de detectarea a obstacolelor este realizat de un senzor de distanta(SHARP GP2D120XJ00F), iar decizia este luata de un microcontroler Atmega16. Pentru alimentare folosesc 8 baterii de 1.5 V. Cu 4 baterii alimentez placa de baza cu microcontrolerul, iar cu restul de 4 alimentez motoarele ce sunt controlate de o punte H.
Desenul schemei si simularile le-am realizat in Proteus.
Deoarece nu am gasit senzor de distanta in Proteus am folosit o rezistenta variabila pentru a simula detectarea obstacolelor si a realiza in linii mari programul pe care l-am incarcat in microcontroler.
Microcontroler Atmega16
Punte H L298N
LED
2* Rezistenta 0.47 ohmi
1* Rezistena 330K
8* Dioda 1N4148
Senzor Distanta SHARP GP2D120XJ00F
Proiectul a fost realizat in jurul placutei construita la laborator langa care am adaugat alta placuta ce contine controlul motoarelor(puntea H, cele 8 diode,rezisentele). Puntea H a fost alimentata de la baterie pe pinul de Vs, respecitv de la microcontroler pe pinul de Vss. La placuta ce contine puntea H am conectat si un LED care se aprinde cand senzorul va detecta un obstacol.
Mediul de dezvoltare: AVR Studio,WinAvr
Algoritmul se bazeaza pe citirea unui senzor din 200ms in 200 ms si daca acesta detecteaza ceva va seta pe “1” pinul unde este legat becul pentru a-l aprinde si se foloseste un algoritm pentru ocolire a obstacolului. Initial se vireaza la stanga,iar daca nu se poate trece de acest obstacol, robotul va merge inapoi si isi va schimba si directia de virare la intalnirea urmatorului obstacol. Sunt definite functii pentru modul de mers al robotului(inainte,inapoi,stanga,dreapta). Controlul motorului este realizat de catre puntea H conform specificatiilor din Datasheet. Pentru a vira la stanga sau la dreapta una din senile va merge in fata si cealalta in spate.
Pseudocod:
while(1) {
}
Senzorul se monteaza pe portul de ADC al microcontroler-ului, iar codul pentru citirea portului A a fost luata din laborator.
Tabel cu logica pentru controlul motoarelor.
Pentu mai multe detalii cititi codul sursa.
Implementarea acestui proiect a fost foarte incitanta. Dupa cateva drumuri facute pana la magazinul de componente si destul de mult debug, in final am reusit sa realizez ce mi-am propus. Pentru ca am avut doar un singur senzor care nici nu detecta la distante foarte mari, robotul mai avea uneori anumite probleme de detectie.
Proiectul trebuie inceput din timp deoarece duraza destul de mult partea de debug, comandarea pieselor, drumurile facute la magazinul de componente. Eu am comandat piesele de la robofun si am asteptat mai mult de o saptamana pentru a venii motorul. Restul de componente le-am gasit in stoc.
Datasheet L298N: http://www.datasheetcatalog.com/datasheets_pdf/L/2/9/8/L298N.shtml
Datasheet Atmega16: http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
Site componente : http://www.robofun.ro/