Robot supraveghere video

  • Student: Hodoboc-Velescu Tudor
  • Grupa: 335CC

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

  • Mediu de dezvoltare folosit:
    • Arduino IDE
  • Biblioteci folosite:
    • SoftwareSerial.h
    • stdint.h
    • avr/io.h
    • util/twi.h
    • util/delay.h
    • avr/pgmspace.h
  • Aplicatii ajutatoare:
    • Se foloseste “Dabble” pentru comunicatia Bluetooth
    • Se foloseste o aplicatie de vizualizat feed-ul video ce vine pe un port serial

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

pm/prj2022/ndrogeanu/robot_supraveghere_video.txt · Last modified: 2022/06/02 14:29 by tudor.hodoboc
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0