Table of Contents

Andrei-Gheorghe NEGRU (78535) - Nume proiect

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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.

Descriere generală

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.

Hardware Design

Lista piese

Piesa Cantitate Specs
Placa de baza + alimentare 12V1ATMega324
Motor stepper117HS8401S
Driver stepper1DRV8825
Motor servo1FT90M
Senzor de lumina4Modul cu fotodioda
LED-uri8LED verde 5mm
Butoane3Push button
Rezistente3470 ohm/0.25W
Rezistente81 kohm/0.25W
Pin header mama21×8
Pin header tata31×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.

Software Design

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.

Rezultate Obţinute

Concluzii

Download

Arhiva contine fisierul sursa si fisierele Eagle(cele de la hardware design).

negru.zip

Bibliografie/Resurse

Resurse hardware

Resurse software

Alte resurse