Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul consta in contruirea unui robot care se deplaseaza in directia data de o linie continua (mai exact o linie neagra pe un fundal alb). Construirea robotului implica:
Am ales acest proiect pentru ca il gasesc a fi foarte interesant si pentru ca este o provocare pentru mine. Lucrand la acest proiect imi doresc sa invat cat mai multe si sa am un punct de start in acest domeniu.
Senzorii transmit microcontroller-ului ATMEGA datele stranse prin scanarea suprafetei deasupra careia se afla (acumularea informatiilor are loc periodic). Microcontroller-ul decide directia de deplasare pe baza datelor primite, transmitand valori diferite pentru deplasarea fiecarui motor. Fiecare motor primeste input de la microcontroller, in felul acesta stiind cu ce putere sa functioneze si regland directia de deplasare a masinii.
Componente | Cantitate |
---|---|
Placa de proiect PM | 1 |
Masinuta | 1 |
Motor cu perii | 2 |
Senzor infrarosu | 3 |
Punte H dubla / Driver de motoare dual | 1 |
Cablu AM la BM | 1 |
Baterie prin USB | 1 |
Schema electrica
Datele de intrare sunt primite de la senzori. Citirea datelor se face prin ADC pe porturile PA0-2 ale microcontroller-ului ATMEGA.
Datele de iesire sunt trimise la cele doua motoare. Transmiterea se face pe porturile PD0-1 si PD4-5. Pentru a regla viteza motoarelor in functie de moment, de folosesc porturile PD4 si PD5, al caror output este controlat de registrii OCR1A si OCR1B (PD4 - OC1B si PD5 - OC1A). Pentru ca cele doua motoare aveau nevoie de doua semnale de input, am trimis cate un semnal de 1 pe celelalte doua legaturi ramase (pe proturile PD0 si PD1).
Pentru ca am trei senzori, i-am folosit pe primul si pe ultimul pentru a identifica pozitia masinii in functie de linie: daca senzorul din stanga primeste o valoare mai mare decat senzorul din dreapta fata de un anumit prag testat, inseamna ca masina se afla prea in dreapta liniei si reglez motoarele (motorul din dreapta se va misca mai repede pentru a repozitiona corect masina); in cazul opus, inseamna ca masina se afla prea in stanga liniei si se regleaza motoarele (motorul din stanga se va misca mai repede pentru repozitionare). In cazul in care nu sunt detectate niciuna din aceste diferente nu exista motiv de repozitionare si se va transmite masinii o viteza egala pentru motoare.
Am folosit urmatoarele: gcc-avr binutils-avr avr-libc.
Un robot functional, care urmareste o linie neagra (dreapta si cu usoare curbe). Precizia si acuratetea rezultatelor nu etse intotdeauna cea dorita pentru ca au fost folositi cate un singur senzor pentru directii (fiecare foarte puternic afectat de lumina la un moment dat).
Robotul poate fi observat in urmatoarele imagini:
Poate fi urmarita functionarea aici: https://www.youtube.com/watch?v=Nfhxidawru4
A fost un proiect pentru care a meritat toata munca, un proiect care m-a invatat mai bine diferenta intre teorie si practica si care sunt greutatile care pot sa apara pe parcurs la dezvoltarea unui proiect.
A fost primul proiect pe care l-am construit de la zero (atat pareta hardware cat si partea software), iar pentru aceasta este unul dintre cele mai interesante proiecte la care am lucrat.
Arhiva cu sursa si MAkefile-ul poate fi descracata de aici: Cod proiect