Proiectul își propune să implementeze o mașinuță teleghidată, cu o telecomandă dedicată și o cameră pentru a putea vizualiza împrejurimile. Datorită camerei cu direcție controlată prin două servomotoare, mașinuța poate fi folosită pentru a inspecta vizual locuri greu accesibile.
Proiectul a pornit de la ideea unei mașinuțe simple (fără cameră), controlată printr-o aplicație pe telefon, însă a evoluat până la utilizarea unei camere și a unei telecomenzi dedicate, cu un display integrat.
PlatformIO IDE (VS Code) cu două environment-uri: env:car și env:remote.
Framework Arduino pe ESP32-S3, compilator Xtensa GCC (ESP-IDF toolchain).
| Bibliotecă | Nod | Utilizare |
|---|---|---|
arduino-esp32 | Car + Remote | Wi-Fi, AsyncUDP, ADC, FreeRTOS |
esp32-camera | Car | Driver OV2640, captură JPEG, PSRAM |
NimBLE-Arduino | Car + Remote | BLE Coded PHY Extended Advertising |
LovyanGFX | Remote | Display ILI9341 parallel 8-bit, drawJpg() |
ESP-IDF LEDC | Car | PWM motoare DC (4 canale, 1 kHz, 10-bit) |
ESP-IDF MCPWM | Car | PWM servomotoare SG90 (50 Hz, 1 µs rezoluție) |
video_protocol.h / ble_protocol.h | Shared | Struct-uri și constante protocol custom |
left = y + x, right = y − x; PWM = |mix| × speed × MAX_DUTY / 10000chunk_bitmap[128] pentru deduplicare; double buffer PSRAM cu swap zero-copy la completareWRITE_NR la 50 Hz; motorsStop() automat la deconectare
car/main.cpp: initMotors, motorsDrive, motorsStop, initServos, servoTask, initCamera, sendFrame, cameraTask, initWiFiAP, initBLE
remote/main.cpp: onPacketReceived, videoTask, calibrateJoysticks, readAxis, controlTask, connectToCar, startBLEScan, updateSpeedLEDs, LGFX (clasă display)
include/: video_protocol.h — VideoPacketHeader, constante UDP; ble_protocol.h — ControlCommand, UUID-uri BLE
Masinuta: https://youtu.be/yV8iQhhMfLA
Telecomanda: https://youtu.be/jgnJoZh3GZg
design_circuit_voinea_radu_mihai_335ca.zip
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
car_main și remote_main