This shows you the differences between two versions of the page.
iothings:proiecte:2025sric:kart_telemetry [2025/04/23 17:28] alexandru.maxim2801 created |
iothings:proiecte:2025sric:kart_telemetry [2025/05/29 18:30] (current) alexandru.maxim2801 |
||
---|---|---|---|
Line 6: | Line 6: | ||
Master: SRIC | Master: SRIC | ||
+ | |||
+ | ====== Kart Telemetry Dashboard ====== | ||
+ | |||
+ | ===== 1. Introducere ===== | ||
+ | Scopul acestui proiect a fost realizarea unui sistem de monitorizare în timp real a parametrilor dinamici ai unui kart. | ||
+ | Proiectul se bazează pe colectarea datelor prin senzori, transmiterea lor către un backend cloud (Firebase Realtime Database) și afișarea acestora pe o interfață web. | ||
+ | |||
+ | ===== 2. Funcționare și logică aplicației ===== | ||
+ | Sistemul este alcătuit din 3 componente principale: | ||
+ | |||
+ | 1. **Colectare de date**: Se realizează cu ajutorul a doi senzori: | ||
+ | a. **MPU6050** – pentru măsurarea accelerației pe 3 axe și rotației (gyro). | ||
+ | b. **DS18B20** – pentru măsurarea temperaturii. | ||
+ | |||
+ | 2. **Transmitere date**: Microcontrollerul **ESP8266** citește valorile de la senzori și le transmite prin conexiune Wi-Fi către Firebase Realtime Database. | ||
+ | |||
+ | 3. **Afișare în timp real**: O pagină HTML accesează periodic baza de date pentru a actualiza afișajul cu ultimele valori disponibile: | ||
+ | a. `kartStats/latest/accelX` | ||
+ | b. `kartStats/latest/accelY` | ||
+ | c. `kartStats/latest/accelZ` | ||
+ | d. `kartStats/latest/gForce` | ||
+ | e. `kartStats/latest/gyroZ` | ||
+ | f. `kartStats/latest/speed` | ||
+ | g. `kartStats/latest/temperature` | ||
+ | |||
+ | Pagina web afișează aceste date sub formă de text formatat, fără a necesita refresh manual. | ||
+ | |||
+ | ===== 3. Hardware folosit ===== | ||
+ | |||
+ | Componentele utilizate și conexiunile sunt prezentate în tabelul de mai jos: | ||
+ | |||
+ | ==== Hardware Connections ==== | ||
+ | |||
+ | === 🔌 Components Used === | ||
+ | * ESP32 Development Board | ||
+ | * MPU-6050 (Accelerometru, Giroscop, Termometru intern) | ||
+ | * DS18B20 (Senzor extern de temperatură) | ||
+ | * Breadboard | ||
+ | * Jumper Wires (male-male) | ||
+ | * Rezistor 4.7kΩ (pentru DS18B20 pull-up) | ||
+ | |||
+ | === 📌 Wiring Table === | ||
+ | ^ Componentă ^ ESP32 Pin ^ Descriere ^ | ||
+ | | MPU-6050 SDA | GPIO 21 | Interfață I2C - date | | ||
+ | | MPU-6050 SCL | GPIO 22 | Interfață I2C - ceas | | ||
+ | | MPU-6050 VCC | 3V3 (pe ESP32) | Alimentare 3.3V | | ||
+ | | MPU-6050 GND | GND | Împământare comună | | ||
+ | | DS18B20 DATA | GPIO 4 | Linie de date (cu rezistor de 4.7kΩ pull-up la 3.3V)| | ||
+ | | DS18B20 VCC | 3V3 (pe ESP32) | Alimentare 3.3V | | ||
+ | | DS18B20 GND | GND | Împământare comună | | ||
+ | | Breadboard | - | Distribuție VCC și GND către ambii senzori | | ||
+ | |||
+ | > 🧠 **Notă**: S-a folosit un breadboard pentru a partaja pinul de 3.3V al plăcuței ESP32 către mai mulți senzori, întrucât placa oferă un singur pin de alimentare 3V3. | ||
+ | |||
+ | Alimentarea s-a realizat prin portul USB. În cadrul testelor, s-a utilizat o sursă stabilizată de 5V pentru componentele analogice. | ||
+ | |||
+ | ===== 4. Tehnologii utilizate ===== | ||
+ | |||
+ | * **Arduino Framework (C++)** – pentru programarea plăcuței ESP8266. | ||
+ | * **Firebase Realtime Database** – backend cloud pentru stocarea și sincronizarea rapidă a datelor. | ||
+ | * **HTML + CSS** – pentru structura și stilizarea interfeței grafice web. | ||
+ | * **JavaScript + Firebase SDK v8** – pentru conectarea frontend-ului la Firebase și actualizarea valorilor live. | ||
+ | |||
+ | ===== 5. Procesare date ===== | ||
+ | |||
+ | Pentru a transforma datele brute în informații utile, au fost aplicate următoarele formule: | ||
+ | |||
+ | * **Viteza**: aproximată prin integrarea accelerației pe axa X în timp: | ||
+ | `v = ∫ a_x(t) dt ≈ v₀ + a * Δt`, | ||
+ | cu filtrare simplă și actualizare la fiecare ~100ms. | ||
+ | |||
+ | * **Forță G**: calculată folosind magnitudinea vectorului accelerației: | ||
+ | `gForce = √(aX² + aY² + aZ²)` | ||
+ | |||
+ | * **Temperatură**: | ||
+ | - **Internă (MPU6050)**: citită din registrul senzorului și convertită folosind formula specifică chipului. | ||
+ | - **Externă (DS18B20)**: conversie automată în grade Celsius cu ajutorul bibliotecii DallasTemperature. | ||
+ | |||
+ | * **Calibrare**: | ||
+ | - S-au aplicat offset-uri pentru accelerometru astfel încât la stare de repaus valorile să fie aproximativ `(0, 0, 1g)`. | ||
+ | - Valori mediate pentru câteva secunde la pornire pentru corectare. | ||
+ | |||
+ | ===== 6. Challenges și probleme întâmpinate ===== | ||
+ | |||
+ | * **Sudarea senzorului MPU6050**: La început, contactele senzorului erau instabile. A fost necesară sudarea manuală a pinilor pentru a asigura contactul ferm cu placa de dezvoltare. | ||
+ | | ||
+ | * **Calibrare accelerometru**: Valorile brute necesitau corecții. S-a realizat calibrarea empirică prin medierea valorilor în stare de repaus și aplicarea unor compensări în software. | ||
+ | |||
+ | * **Aproximarea vitezei**: Dificil de obținut o valoare exactă doar din accelerație; s-a folosit o formulă simplificată, fără integrare completă, dar cu o filtrare de zgomot. | ||
+ | |||
+ | * **Limitare alimentare 3V3**: Deoarece ESP32 are un singur pin de 3.3V, s-a folosit un breadboard pentru a distribui alimentarea la ambii senzori. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== 7. Referințe ===== | ||
+ | |||
+ | * [[https://ocw.cs.pub.ro/courses/iothings/laboratoare/2022/lab4]] | ||
+ | * [[https://ocw.cs.pub.ro/courses/iothings/laboratoare/2022/lab5]] | ||
+ | * [[https://randomnerdtutorials.com/esp32-firebase-realtime-database/]] | ||
+ | * [[https://github.com/mobizt/FirebaseJson]] | ||
+ | * [[https://github.com/mobizt/Firebase-ESP-Client]] | ||
+ | * [[https://randomnerdtutorials.com/arduino-mpu-6050-accelerometer-gyroscope/]] | ||
+ | |||