Robot supraveghere video
Introducere
Proiectul consta in implementarea unui robot ce va supraveghea video o incapere/un apartament. Acesta se va plimba prin casa si va filma cu ajutorul unei camere video. Feed-ul video va fi transmis catre o aplicatie suport(pe Windows si/sau pe Android) folosind o comunicatie Bluetooth sau va fi stocat pe un card SD. Din cauza frecventei scazute de transmisie, filmarea se va face doar in momentul in care robotul se afla in repaus pentru o calitate a imaginii ridicata.
Descriere generala
Lista piese
Modul Arduino Uno
Modul Bluetooth HC-05
Modul Camera OV7670
Modul cu Driver de Motoare Dual L298N Rosu
Senzori Ultrasonici x2
Fire de legatura
Acumulatori
Motoare x4
Corp robot(roti, placute pentru suport, suruburi etc)
Interactiune module
Modulul Arduino Uno va reprezenta creierul proiectului. Acesta va face comunicarea intre celelalte module. Modulul Bluetooth HC-05 va face comunicarea intre robot si aplicatie suport. Acesta va primi de la modulul Arduino feed video pe care il va trimite mai apoi aplicatiei si va transmite diversele comenzi primite de la aplicatie catre Arduino pentru a fi procesate. Modulul de camera va filma imprejurimile si va transmite output-ul la Arduino si apoi spre aplicatie. Modulele de Driver vor avea scopul de a transmite curent catre motoarele ce vor misca robotul. Conexiunile intre module vor fi realizate prin fire.
Hardware Design
Placuta arduino este alimentata la o tensiune de 5V ce vine ca output de la puntea H. Puntea H este alimentata la o tensiune de 12 V. Puntea este conectata la arduino prin intermediul pinilor 2-7. Pinii (7;5) si (2;4) vor trasmite tensiunea Low si High pentru fiecare motor, astfel setand sensul de deplasare(cand 7 si 4 sunt High, iar 5 si 2 sunt Low se va deplasa inainte). Pinii 6 si 3 au rolul de a seta procentajul de tensiune transmisa catre motoare. In mod normal, modificarea tesniunii ar fi facuta pentru schimbarea vitezei de deplasare, aici insa este facuta pentru a asigura ca tensiunea de alimentare nu este prea mare si motoarele nu se prajesc. Cei doi senzori ultrasonici sunt conectati la placuta prin intermediul pinilor 8-11. Modulul Bluetooth, deoarece necesita comunicare seriala, este conectat la pinii RX si TX.
Modulul Bluetooth este conectat la GND-ul de pe placuta, in timp ce restul pieselor sunt conectate la un ground “global” ce vine de la alimentare.
A doua placuta arduino este alimentata similar cu prima. De la aceasta se alimenteaza prin pin-ul de 3V3 camera OV7670. Se vor folosi atat pinii digitali 2-8 si 11, cat si pinii analogici A0-5.
Schema electrica motoare + bluetooth: (TODO)
Schema electrica camera:
Software Design
Biblioteci folosite:
SoftwareSerial.h
stdint.h
avr/io.h
util/twi.h
util/delay.h
avr/pgmspace.h
Partea soft a fost in intregime dezvoltata pe Arduino IDE. Pe partea de miscare, exista urmatoarele functii:
in setup se seteaza pinii de input si output(2-7 output pentru motoare si 8,10 input si 9,11 output pentru senzorii ultrasonici). Se initializeaza, de asemenea, o variabile SoftwareSerial pentru a seta comunicatia cu modulul Bluetooth
in mers_inainte, se trimite semnal de Low si High pe pinii corespunzatori fiecarui motor prin digitalWrite astfel incat deplasarea sa se faca in fata. Folosind analogWrite, se modifica tensiunea de alimentare si viteza la una potrivita, apoi se foloseste un delay de 400 de milisecunde pentru a se face deplasarea
mers_inapoi este similara cu functia anterioara; singura diferenta este inversarea pinilor de High si Low intre ei pentru ca miscarea sa se faca invers
rotire_stanga se foloseste de logica de rotire a tancurilor: rotile din stanga se misca intr-o directie, cele din dreapta se misca in cealalta(ambele cu aceeasi viteza) si astfel se produce rotirea pe loc; sensul de rotire este dat de rotile care se deplaseaza in fata, si anume cele din stanga
rotire-dreapta este similara cu functia anterioara; asa cum am specificat si mai sus, sensul de rotire este dat de rotile ce se deplaseaza in fata, adica cele din dreapta
resetare_roti: pentru a opri miscarea motoarelor, pinii cu tensiunea High trebuie setati pe Low; pentru a nu verifica de fiecare data ce pin e pe High, se seteaza toti pinii digitali folositi pentru motoare pe Low
senzor_fata: aceasta functie preia distanta fata de primul obiect de la senzorul ultrasonic; se porneste transmiterea ultrasunetului prin setarea tensiunii pe High pe pinul de trigger, se asteapta sa se trimita sunetul(10 microsecunde), apoi se opreste trimiterea; la final se preia valoarea obtinuta de pe pinul de echo folosindu-se functia pulseIn; aceasta va reprezenta durata totala de miscare a sunetului, se va folosi o simple regula de 3 simple pentru a calcula distanta pana la primul obiect
senzor_spate functioneaza la fel ca functia anterioara, doar ca se folosesc pinii corespunzatori senzorului din spate
move_alone: aceasta functie permite robotului sa se miste “singur”; se verifica data se poate misca in fata folosind senzorul din fata, in caz pozitiv se va deplasa in fata, altfel se va roti aproximativ 360 de grade pana cand nu mai exista obstacole; in cazul in care nu gaseste un astfel de loc, se va misca inapoi
loop se foloseste de urmatoarea logica: se verifica daca exista vreun mesaj primit pe placuta Bluetooth; daca da, se verifica ce mesaj si se aplica comanda primita(daca s-a primit o comanda valida) si se reseateaza rotile pentru a opri miscarea in cazul in care s-a facut; de fiecare daca se verifica daca robotul este setat sa fie pe modul de miscare automata, caz in care se misca singur
Pentru filmare, logica programului este urmatoarea:
se foloseste protocolul I2C/TWI pentru transferul datelor de la camera la placuta
in setup se initializeaza protocolul, se initilizeaza camera si se fac setarile de rezolutie si culoare
in loop se incepe sa se capteze imaginea in format 320p x 240p
citirea si transmiterea imaginii se face de la stanga la dreapta, de sus in jos
imaginea e trimisa serial pentru a fi afisata pe aplicatia de pe PC
Diagrama Setup miscare:
Diagrama Loop miscare:
Rezultate Obţinute
Robotul se plimba singur(Video). Camera reuseste sa capteze imagini la framerate destul de scazut, insa momentan doar conectata direct la calculator.
Robot:
Imagini obtinute cu camera:
Concluzii
In urma acestui proiect, am realizat ca transmiterea si inregistrarea video sunt mult mai grele decat par.
Download
Cod robot, camera si aplicatie pentru viziualizarea imaginilor de la camera:
Descriere si utilizare arhiva
Continut arhiva:
folder-ul camera contine codul pentru placuta corespunzatoare camerei
folder-ul miscare_din_bluetooth contine codul pentru miscarea robotului prin Bluetooth
folder-ul SerialPortReader contine aplicatia pentru vizualizarea imaginilor de la camera
Vizualizare imagini:
se conecteaza placuta la calculator si se porneste aplicatia SerialPortReader
se selecteaza portul la care e conectata placuta arduino
se porneste din start si se asteapta afisarea imaginilor
Jurnal
29/04/2022: Comandare piese initiale si creare pagina wiki.
12/05/2022: Miscare robot si update functionare hardware/software.
29/05/2022: Update wiki milestone 2: adaugare rezultate si update design hardware & software
02/06/2022: Adaugare versiune finala: filmare + miscare
Bibliografie/Resurse