This shows you the differences between two versions of the page.
|
pm:prj2026:vlad.radulescu2901:radu_mihai.voinea04 [2026/05/06 10:00] radu_mihai.voinea04 [Jurnal] |
pm:prj2026:vlad.radulescu2901:radu_mihai.voinea04 [2026/05/23 00:29] (current) radu_mihai.voinea04 [Rezultate Obţinute] |
||
|---|---|---|---|
| Line 43: | Line 43: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | ==== Mediu de Dezvoltare ==== | ||
| - | <note tip> | + | **PlatformIO IDE** (VS Code) cu două environment-uri: ''env:car'' și ''env:remote''. |
| - | Descrierea codului aplicaţiei (firmware): | + | Framework Arduino pe ESP32-S3, compilator Xtensa GCC (ESP-IDF toolchain). |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| - | </note> | + | |
| + | ==== Biblioteci 3rd-Party ==== | ||
| + | |||
| + | ^ 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 | | ||
| + | |||
| + | ==== Algoritmi și Structuri ==== | ||
| + | |||
| + | * **Differential drive mixer** — ''left = y + x'', ''right = y − x''; PWM = ''|mix| × speed × MAX_DUTY / 10000'' | ||
| + | * **Servo rate integration** — task la 100 Hz integrează rata joystick în poziție float, mapată la µs (500–2500) | ||
| + | * **UDP frame reassembly** — ''chunk_bitmap[128]'' pentru deduplicare; double buffer PSRAM cu swap zero-copy la completare | ||
| + | * **BLE Coded PHY** — Extended Advertising 125 Kbps (FEC); ''WRITE_NR'' la 50 Hz; ''motorsStop()'' automat la deconectare | ||
| + | * **ADC calibrare** — medie 64 samplee la startup; deadzone + normalizare asimetrică → [−100, +100] | ||
| + | * **FreeRTOS core pinning** — Core 0: Wi-Fi + video; Core 1: BLE + control | ||
| + | |||
| + | ==== Surse și Funcții Implementate ==== | ||
| + | |||
| + | **''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 | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| - | ====== Ansamblu final ====== | + | Masinuta: [[https://youtu.be/yV8iQhhMfLA]] |
| + | |||
| + | Telecomanda: [[https://youtu.be/jgnJoZh3GZg]] | ||
| + | ===== Ansamblu final ===== | ||
| {{:pm:prj2026:vlad.radulescu2901:ansamblu_final_1_voinea_radu_mihai_335ca.jpeg?750|}} | {{:pm:prj2026:vlad.radulescu2901:ansamblu_final_1_voinea_radu_mihai_335ca.jpeg?750|}} | ||
| {{:pm:prj2026:vlad.radulescu2901:ansamblu_final_2_voinea_radu_mihai_335ca.jpeg?750|}} | {{:pm:prj2026:vlad.radulescu2901:ansamblu_final_2_voinea_radu_mihai_335ca.jpeg?750|}} | ||