This is an old revision of the document!
Apostol Rares
331CA
RC Car with camera
Introducere
Proiectul meu consta in construirea unei masini cu telecomanda controlata de la distanta prin intermediul unei aplicatii Android, folosind Wi-Fi.
Masina va putea fi controlata în timp real din aplicatie, permitand deplasarea inainte și inapoi, precum și virarea stanga-dreapta printr-un volan implementat in aplicatie. Desi ar fi fost mai usor ca masina sa vireze doar din niste sageti, am dorit un control precis, bazat pe volan.
Un alt aspect important al proiectului este integrarea unei camere video montate pe masina. Aceasta va transmite video către aplicatia Android. Utilizatorul va putea astfel controla masina chiar si in afara campului vizual. Am folosit un ESP32 CAM pentru camera.
Comunicarea dintre aplicatie si masina se va face printr-o retea Wi-Fi locala. Pentru asta, un ESP8266 va fi pornit in mod access-point, iar celelalte dispozitive se vor conecta la aceasta retea.
Descriere generală
Un ESP8266 va fi pornit in mod AP cu o adresa IP statica, iar dispozitivul Android si ESP32-CAM(cel din urma tot cu o adresa IP statica, pentru usurinta) se vor conecta la aceasta retea. Telefonul va trimite date de control catre ESP8266, care va actiona asupra motoarelor. De asemenea, telefonul va accesa si pagina web pe care transmite ESP32-ul, si o va afisa in aplicatie, printr-un WebView.
Hardware Design
Piese:
ESP32-CAM
ESP8266
Driver motor L9110s
Modul USB to serial HT42B534 (pentru programarea ESP-ului)
2 x Suport baterii 4 x R6
Micro Servomotor SG90 180°
2 x Motor DC 3V-6V cu reductor 1:48
Masina lego
Intrerupator
Schema electrica:
Utilizare PINI :
Software Design
Flow program:
ESP8266 proceseaza comenzile, si controleaza servo-motorul si cele doua motoare. Pentru a primi mesajele, am folosit AsyncUDP, ca sa nu se blocheze cat timp proceseaza pachetele.
Program ESP8266:
Am folosit VsCode, PlatformIO.
ESPAsyncUDP.h, ESP8266WiFi.h, Servo.h
Program ESP32:
Am folosit tot VsCode si PlatformIO, dar am utilizat un exemplu de cod din acest
repo
Program Android:
Implementarea Software in detaliu:
Aplicatia Android
RCCarApp() - este o functie composable, care contine elementele care se afiseaza pe ecran: cele doua pedale, un slider din care se seteaza puterea motoarelor, si volanul. Contine cateva variabile care se schimba atunci cand utilizatorul interactioneaza cu componentele. Am folosit doua functii LaunchedEffect , care urmaresc schimbarile variabilelor si la modificari, lanseaza corutine, pentru trimiterea mesajelor si rotirea volanului.
suspend fun sendCommands() - pornita din LaunchedEffect, primeste ca parametri variabilele, si trimite un pachet UDP catre ESP8266, cu toate datele necesare pentru control: unghiul volanului, puterea, ce pedala este apasata.
Pentru afisarea camerei, am utilizat un WebView, care acceseaza pagina creata de ESP32.
Cod ESP8266
Se porneste in mod AP, cu o adresa IP statica, folosind WiFi.config()
Pentru procesarea pachetelor, am folosit o functie de callback, udp.onPacket , care se executa automat atunci cand este primit un pachet UDP. Aici, se transforma pachetul in string, si cu ajutorul functiei parse_message() se modifica niste variabile globale, folosite in loop(). Am ales sa folosesc AsyncUdp pentru a nu bloca executia in loop, asteptand un mesaj. Astfel, codul din onPacket se executa doar atunci cand este primit un pachet nou
In loop() , sunt controlate motoarele, in functie de variabilele globale. Se roteste servomotorul(am dat un delay de 20 de ms pentru a avea suficient timp), si sunt controlate puterea si sensul motoarelor din fata: pentru a merge inainte, pinii A trimit semnalul PWM, si pinii B sunt setati pe LOW. Pentru a da cu spatele, invers: pinii A sunt setati pe LOW, pinii B trimit PWM. Daca nicio pedala nu e apasata, atunci toti pinii sunt setati pe LOW.
* Cod ESP32 CAM
<note important>Am folosit codul de aici </note>
===== Rezultate Obţinute =====
<note tip>
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
</note>
===== Concluzii =====
===== Download =====
Github Android
Github esp8266
Github esp32 cam
===== Jurnal =====
Hardware-ul este aproape gata: mai trebuie conectate firele de la driver la motoare, dar vreau sa le lipesc. Am testat sistemul de servo directie. Pentru ca esp-ul nu are usb, a trebuit sa folosesc un convertor, si a durat ceva pana sa ma prind cum sa programez microcontrollerul. Din cauza asta, o sa astept pana cand codul este gata ca sa lipesc firele si sa fac designul final.
Camera trebuia sa fie OV2640 dar a venit altceva
Camera primita e rhyx-m21-45, care merge foarte prost.
Video servodirectie aici
Update 1:
cumva am stricat ESP32-ul, nu mai merge:). Aveam acasa un esp8266, o sa continui proiectul cu el, dar nu are camera. Am mai adaugat in plus in software: volan(se poate controla precis servomotorul), pedale de acceleratie si frana, si un slider de unde se alege viteza. Nu am pus inca rotile, dar toate piesele functioneaza.
Control motor
Ambele motoare
Control servo
Update 2
: am reusit sa pornesc ESP32-ul. Pentru ca am scris deja codul pentru controlul motoarelor pe esp8266, o sa continui cu ambele: esp32 pentru camera, esp8266 pentru motoare.
===== Bibliografie/Resurse =====
<note>
Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software
şi Resurse Hardware**.
</note>
Export to PDF