
Muscle intent in → bionic motion out.
EMGBand / Hand Bionic is a full-stack, open hardware kit that turns forearm muscle signals into predictable, servo-safe hand motion. It is built to be hackable, reproducible, and fast to demo: one bill of materials, one firmware pair (ring + hand), one Flutter app to calibrate and ship.
Designed for makers, researchers, and product teams, EMGBand focuses on reliability, safety, and repeatability. The repo bundles manufacturing-ready assets (Gerbers, BOMs), production photos, a tested ESP32 firmware pair, and a Flutter app that makes calibration and demos straightforward.
- 🔍 What this repo delivers
- 🖼️ Quick gallery
- 🧭 Platform at a glance
- ⚙️ Architecture snapshot
- 📚 Deep dives
- 🚀 Fast start
- ✨ Tech highlights
- 📜 Licence
- 🙏 Thanks
![]() |
![]() |
![]() |
Wearable EMG ring + controller blocks from the latest build.
- Hardware you can fabricate: KiCad projects for the MyoBand EMG front-end, hand controller, and modular sensor blocks. Gerbers, pick-and-place, and reference photos are ready for a quick manufacturing turn.
- Firmware that guards the hardware: ESP32 (ring + hand) stack with EMG filtering, intent classification, BLE services, OTA hooks, and stall-safe servo control so experiments stay repeatable and safe.
- App that closes the loop: Flutter client to scan, pair, stream EMG, calibrate thresholds (Line/Radar), push configs, and swap control modes without reflashing.
- Media to build confidence: Photos and demo videos to set assembly expectations before you order or solder.
See how the wearable comes together before diving into schematics or code.
![]() 📸 Assembled unit 1 |
![]() 📸 Assembled unit 2 |
![]() 📸 Assembled unit 3 |
![]() 🖼️ Side profile |
![]() 🔬 Sensor block close-up |
![]() 🔗 Strap view |
Live demo videos
If embeds do not autoplay in your viewer, use the direct links: Demo1.mp4 · Demo2.mp4.
| Layer | Highlights |
|---|---|
| 🛠️ Hardware | Low-noise EMG front-end, modular controller blocks, ready-to-manufacture assets, BOMs aligned to the photos you see. |
| 🧠 Firmware | ESP32 (ring + hand), FreeRTOS, NimBLE, OTA-ready, Line/Radar classifiers, servo current and motion guards to avoid stalls. |
| 📱 App | Flutter UX for BLE JSON control, half-float EMG streaming, auto pair/connect, per-user calibration, and live plots. |
Signal path in two stages: capture and clean EMG on the ring, classify intent and drive actuators on the hand controller. Calibration data lives in the app and syncs over BLE when you change modes.
![]() ⚡ Raw EMG capture |
![]() 🔎 Line thresholds |
![]() 🔁 Radar/Spider matching |
![]() ✅ Match confidence |
![]() ➖ Similarity metric |
![]() 📱 Flutter app in action |
- Hardware overview, IC map, and board variants: hardware/README.md
- Firmware flow, EMG filters/classifiers, BLE/OTA services: firmware/README.md
- App BLE flows, JSON protocol, half-float decode, and UI cues: app/README.md
- Fabricate / assemble: pick your board set from hardware; use the included Gerbers and assembly files to keep builds consistent with the photos.
- Flash firmware: open
firmware/Embeddedin VS Code + PlatformIO, select the target (ring/hand), and runpio run -t upload. - Pair with the app: run the Flutter app (see app/README.md), scan and save Hand + MyoBand, then start EMG streaming.
- Calibrate deliberately: choose Line or Radar, adjust thresholds/templates, push to devices, and watch the live plots to confirm stability.
- Demo safely: use the stall/over-activity protections while you tune grip strength or motion ranges.
- Half-precision EMG streaming keeps BLE lean; float32 reconstruction happens in the app for analysis.
- Dual control modes: Line (summed thresholds for fast response) and Radar/Spider (template similarity, ≥70% match) for finer intent mapping.
- Safety nets: relax-before-use gating, over-activity clamps, current-based stall detection on servos, watchdog-backed tasks, and OTA hooks for quick fixes.
- UX polish: LED/buzzer cues, auto reconnect, smoothed charts, per-grip calibration profiles, and JSON-based control that is easy to script.
This project is licensed under the GNU GPLv3.
Compared to permissive licences like MIT, GPLv3 requires that if you modify this code and distribute your version (including in commercial products), you must also release your changes under the same GPLv3 licence and provide the corresponding source code.
This way, everyone can benefit from improvements built on top of this project.
If this licence causes issues for your intended use, feel free to contact me – I’m open to discussing alternatives.
Huge thanks to contributors, early testers, and the open-source toolchains that made this build possible. Enjoy hacking, and share what you build.














