Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul ales consta intr-un robot care se isi va schimba pozitia in functie de intensitatea luminoasa, asemeni cu floarea soarelui. Robotul va folosi senzori de lumina pentru a determina intensitatea luminoasa si doua motoare(stepper + servo) pentru a misca robotul.
Aceasta aplicatie reprezinta o simpla implementare a modului in care panourile fotovoltaice sunt orintate pentru a produce cat mai mult curent sau a unui parasolar smart.
Fiecare dintre cei 4 senzori de lumina va trimite o tensiune analogica(in functie de intensitatea luminoasa) catre microcontroller. Acesta decide care dintre acestia se afla mai aproape de sursa de lumina si va indica motoarelor sa orienteze “floarea” in directia determinata anterior. Motorul stepper va fi folosit pentru a roti robotul in planul solului, iar cel servo pentru a schimba unghiul de inclinatie al “florii”. De asemenea vor exista si 4 led-uri care sa indice care dintre senzori a inregistrat valoarea intensitatii luminoase cea mai mare, usurand astfel debug-ul.
Lista piese
Piesa | Cantitate | Specs |
---|---|---|
Placa de baza + alimentare 12V | 1 | ATMega324 |
Motor stepper | 1 | 17HS8401S |
Driver stepper | 1 | DRV8825 |
Motor servo | 1 | FT90M |
Senzor de lumina | 4 | Modul cu fotodioda |
LED-uri | 8 | LED verde 5mm |
Butoane | 3 | Push button |
Rezistente | 3 | 470 ohm/0.25W |
Rezistente | 8 | 1 kohm/0.25W |
Pin header mama | 2 | 1×8 |
Pin header tata | 3 | 1×40 |
Schema electrica a circuitului contine elementele adaugate in plus la placa de baza. De asemenea pentru realizarea schemei am folosit schema pentru placa de baza(pm2018.sch), utilizand in noua schema etichetele deja definite.
Imaginea de mai sus reprezinta doar partea noua din schema. In imaginea urmatoare este desenata intreaga schema electrica.
Mediu de lucru
Librarii utilizate
Detalii de implementare
Prin intermediul intrarilor analogice (PA0-3) si folosind ADC, preiau cate o valoare in intervalul 0-1023, care reprezinta intensitatea luminoasa.
0 = Lumina intensa
1023 = Intuneric
Pentru a determina pozitia fiecarui motor folosesc cate 2 senzori. Daca diferenta dintre intensitatile luminoase masurate de catre cei 2 senzori este mai mare decat o eroare(delta > 10) atunci motorul se misca cu un increment prestabilit in directia senzorului care a inregistrat o valoare mai mica.
Pentru a controla motorul servo folosesc modul FastPWM al timer-ului 1 (PD5). Frecventa semnalului este de 50Hz(T = 20ms). In functie de factorul de umplere (OCR1A) reglez pozitia axului motorului.
Pentru motorul stepper folosesc modulul drv8825. Astfel ca modalitate de stepping folosesc valoarea default(normal step = 1.8 grade; precizia este suficienta). Pentru a schimba sensul rotatiei modific valoarea bitului DIR(PB3 = 0/1). Pentru a roti motorul un pas trebuie ca pe pin-ul STP(PD4) sa apare o tranzitie low-high. Astfel motorul poate fi controlat cu un semnal dreptunghiular cu orice valoarea a factorului de umplere > 0. Frecventa semnalului da viteza motorului.
Pentru debug folosesc LED-urile conectate pe pinii PC0-7. De asemenea pentru control am adaugat 3 butoane pe pinii PA4-6.
Arhiva contine fisierul sursa si fisierele Eagle(cele de la hardware design).
Resurse hardware
Resurse software
Alte resurse