On-device gesture classification for a smart water bottle using TinyML on Arduino Nano 33 BLE Sense.
| Metric | Value |
|---|---|
| Validation Accuracy | 93.7% |
| Drinking Detection | 97.3% |
| Idle Detection | 98.0% |
| Model Size | 21.8 KB flash |
| RAM Usage | 1.8 KB |
IMU Data → Feature Extraction → Dense NN → Gesture Classification → BLE → Web UI
- Data Collection — 1,200 labeled gesture windows from 9-axis IMU
- Classification — 4 classes: Idle, Lifting, Drinking, Placing Down
- Inference — Quantized int8 model runs on-device at real-time
- Notification — BLE to React web app + ntfy.sh mobile push alerts
- MCU: Arduino Nano 33 BLE Sense (nRF52840)
- Sensor: LSM9DS1 9-axis IMU (accelerometer + gyroscope)
- Communication: Bluetooth Low Energy
Input (189) → Dense (32) → Dense (16) → Dense (16) → Output (4)
Trained with Edge Impulse, quantized to int8 for deployment.
- Real-time activity classification with confidence scores
- Configurable hydration reminder intervals
- Activity history logging
- Mobile push notifications via ntfy.sh
TinyML Arduino TensorFlow Lite Edge Impulse React BLE Python
TU Hamburg — TinyML Course Project


