06-Implementation
GitHub Repozitáre
- Firmware: Firmware implementation
- Web Dashboard: Web Dashboard implementation
Prehľad
Systém Nodyne sa skladá z dvoch hlavných komponentov:
- Arduino Firmware - Beží na M5StickC Plus 2 zariadení
- Web Dashboard - Next.js aplikácia pre vizualizáciu a monitoring
1. Arduino Firmware
Technológie
- Platforma: M5StickC Plus 2 (ESP32-PICO-V3-02)
- Framework: Arduino (C++)
- IDE: Arduino IDE / PlatformIO
- Knižnice:
M5StickCPlus2.h- Hardvérová abstrakcia- Štandardné Arduino knižnice
Štruktúra kódu
Hlavné konštanty (Detekčné prahy):
- Strong Nod: 25° / 500ms
- Micro Nods: 15° / 12°/s / 3 kývnutia / 8s okno
- Slow Drift: 12° / 3s
- Freeze: 1.5° / 10s
- Side Tilt: 25° / 500ms
Globálne premenné:
- Kalibračné:
baselineRoll,baselinePitch - Stav:
isAlerting,alertReason - Buffer:
micronods[10](kruhový buffer) - Štatistiky:
maxRollDiff,avgMovement
Kľúčové funkcie
setup()
Inicializácia hardvéru, Serial (115200 baud), IMU, displeja, reproduktora. Welcome screen + automatická kalibrácia.
loop()
- Čítanie IMU (akcelerometer + gyroskop)
- Výpočet roll/pitch (
atan2()) - Výpočet rozdielov oproti baseline
- 5 detekčných algoritmov paralelne
- Kontrola prebudenia
- Update displeja
- Telemetria cez Serial
- Spracovanie príkazov z dashboardu
- Tlačidlá: A (kalibrácia), B (stop/štatistiky)
calibrate()
- Modrá obrazovka + inštrukcie
- Pauza 2s
- 50 vzoriek (20ms interval)
- Priemer →
baselineRoll/Pitch - Vynulovanie počítadiel
- Zvukové potvrdenie (800→1200→1500 Hz)
Detekčné algoritmy (zjednodušená logika)
Strong Nod: IF rollDiff > 25° po dobu > 500ms → Alert
Micro Nods: IF 3+ rýchle kývnutia (>15°, >12°/s) za 8s → Alert
Slow Drift: IF rollDiff 12-25° po dobu > 3s → Alert
Freeze: IF pohyb < 1.5° po dobu > 10s → Alert
Side Tilt: IF pitchDiff > 25° po dobu > 500ms → Alert
startAlert(reason, text)
Zapne červenú LED, zobrazí červenú obrazovku, odošle JSON alert do dashboardu.
stopAlert()
Vypne alarm, LED, zvuk, vynuluje timery.
playAlertSound()
Striedavé tóny 1000Hz/1500Hz každých 300ms.
updateDisplay()
Vykreslí monitoring obrazovku:
- Header: Názov + batéria (CHG indikátor)
- Stav: Monitoring (zelená) / ALERT (červená)
- Metriky: Fwd, Side, Nods, Move
- Warning level: Alert / Warning / HIGH RISK
- 2 progress bary (rollDiff, pitchDiff)
- Návod: "A:Cal B:Stop/Stats"
Serial komunikácia
Telemetria (JSON):
{
"type": "telemetry",
"rollDiff": 12.5,
"pitchDiff": 3.2,
"movement": 2.1,
"micronods": 1,
"isAlerting": false,
"battery": 85,
"charging": false
}
Príkazy:
CALIBRATE,STOP_ALERT,RESET_STATS,PING
Alert:
{
"type": "alert",
"reason": 1,
"reasonText": "Strong Nod"
}
Optimalizácie
EMA Filter: avgMovement = avgMovement × 0.95 + movement × 0.05
Kruhový buffer: Mikrokývnutia v poli micronods[10] s časovými značkami.
Kompilácia:
- Board: M5StickC Plus 2
- Upload Speed: 115200
- Flash: ~120KB
2. Web Dashboard
Technológie
- Next.js 16 - React framework s App Router
- React 19 - UI knižnica
- TypeScript - Typová bezpečnosť
- Three.js + @react-three/fiber - 3D vizualizácia
- Tailwind CSS - Styling
- Zustand - State management
- Web Serial API - Komunikácia so zariadením
Štruktúra aplikácie
2 hlavné stránky:
1. Landing Page (Domovská stránka)
- Prezentácia produktu Nodyne
- Prehľad 5 detekčných funkcií
- Vizualizácia dát a výsledkov testov
- Sekcia recenzií
- Kontaktný formulár
2. Dashboard (/dashboard)
Real-time monitoring interface s hlavnými komponentmi:
SerialConnectButton:
- Pripojenie k zariadeniu cez Web Serial API
- Automatická detekcia M5StickC Plus 2
- Konfigurácia: 115200 baud
- Stav pripojenia (Connected/Disconnected)
HeadVisualizer (3D):
- Načítanie GLTF 3D modelu hlavy
- Real-time rotácia podľa roll/pitch hodnôt
- Dynamické osvetlenie pri alarmoch
- Optimalizované pre výkon
DeviceStatusCard:
- Status pripojenia zariadenia
- Batéria (%), indikátor nabíjania (CHG)
- Posledná aktualizácia (timestamp)
AlertPanel:
- Zobrazenie aktívnych upozornení
- Typ alarmu (Strong Nod, Micro Nods, atď.)
- Vizuálne zvýraznenie
- Tlačidlo "Stop Alert" → posiela
STOP_ALERTpríkaz
TelemetryPanel:
- Roll/Pitch aktuálne hodnoty
- RollDiff/PitchDiff (rozdiel od baseline)
- Movement (celkový pohyb)
- Micronods count
- Progress bary pre vizualizáciu
HistoryTable:
- Časová os udalostí
- Typy: Alert, Calibration, System
- Timestamp, dôvod, detaily
Web Serial API integrácia
Komunikácia:
- Otvorenie sériového portu v prehliadači
- Čítanie JSON správ z Arduino
- Parsing typov:
telemetry,alert,stats,response - Odosielanie príkazov:
CALIBRATE,STOP_ALERT,GET_STATS
Parsovanie dát:
const data = JSON.parse(line);
if (data.type === 'telemetry') {
store.setRoll(data.roll);
store.setPitch(data.pitch);
store.setBattery(data.battery);
}
if (data.type === 'alert') {
store.setAlerting(true, data.reason, data.reasonText);
// Zvukové upozornenie v prehliadači
}
State Management (Zustand)
Store obsahuje:
serialPort- Referencia na sériový portisConnected- Boolean stavu pripojeniaroll,pitch- Aktuálne uhlyrollDiff,pitchDiff- Rozdiely od baselinemovement- Celkový pohybmicronods- Počet zaznamenaných kývnutíisAlerting,alertReason- Stav alarmubattery,charging- Stav batériehistory[]- Pole udalostí (timestamp, type, reason)
Akcie:
connectSerial()- Otvorenie sériového portudisconnectSerial()- Uzavretie portusendCommand(cmd)- Odoslanie príkazuaddHistoryEvent(event)- Pridanie do histórie
3D Vizualizácia (Three.js)
Implementácia:
- Použitie
@react-three/fiber(React wrapper pre Three.js) @react-three/drei- Helpers (OrbitControls, useGLTF)- GLTF model hlavy načítaný z
/models/head.glb - Rotácia aplikovaná na model:
rotation={[pitch * DEG2RAD, roll * DEG2RAD, 0]} - Ambient light + Point light (červené pri alerte)
- Fallback loading screen počas načítavania modelu
Optimalizácie:
- Lazy loading 3D modelu
- 60 FPS target s throttling
- Suspend pri neaktívnej karte
Vývoj
Skripty:
npm install # Inštalácia závislostí
npm run dev # Dev server (localhost:3000)
npm run build # Production build
npm start # Production server
Požiadavky:
- Node.js >= 18
- Prehliadač s Web Serial API
- USB pripojenie k M5StickC Plus 2
Features
- Real-time telemetria
- 3D vizualizácia hlavy
- Web Serial API integrácia
- História udalostí
- Vizuálne upozornenia
- Dark mode
- TypeScript type safety
Linky na kód
Navigation: ⬅️ Design · ⬆️ SDLC · ⬅️ Projekt · ➡️ Testing