An open-source 3D-printed smart glove that measures finger flexion using stretch sensors and transmits data via Bluetooth Low Energy (BLE) to an Android app in real-time.
OpenPrintSense is an open-source project that combines 3D printing, hardware, and software to create a wearable finger tracking system. The key innovation is a fully 3D-printed flex sensor that uses conductive TPU filament - as the sensor bends, its electrical resistance changes, allowing precise measurement of finger flexion. Data is transmitted wirelessly via BLE to an Android smartphone.
The 3D-printed sensor combines flexible TPU with conductive filament. When you bend your finger:
- The conductive filament stretches
- This increases the electrical resistance
- The microcontroller reads the resistance change via analog input
- The bend angle is calculated and sent to the app
- ๐ฎ Gesture-based game controllers
- ๐ค Robot hand control
- ๐ฅ Rehabilitation therapy tracking
- ๐ต Musical instrument interfaces
- ๐ Motion capture for research
- Microcontroller: Seeed XIAO nRF52840 Sense
- Power: USB-C or 3.7V LiPo battery
- Wires: For connecting sensor to microcontroller
- Flexible Base: Bambu Lab TPU 90A - Flexible structure
- Conductive Element: Recreus FilaFlex Conductive - Variable resistance sensing
The 3D model is available in /CAD Files/OpenPrintSense.step - compatible with all major CAD software and slicers.
3D Printed Sensor โโโฌโโ A0 (Analog Input)
โ
โโโ GND (with pull-down resistor)
- Print the TPU base at 230ยฐC, bed 35ยฐC
- Print conductive filament at 250ยฐC with 105% Flow
- Use multi-material printing or manual filament swap
- Ensure good layer adhesion for reliable conductivity
- BLE service with multiple characteristics
- Real-time sensor reading and transmission
- Manual calibration support via BLE
- Unique device ID for multi-glove setups
- Material Design UI with dark theme
- Real-time flex percentage display
- Manual calibration workflow
- Multi-language support (English/German)
- Device ID display
- Install Arduino IDE
- Add Seeed nRF52 board support:
- Go to
File โ Preferences - Add to "Additional Board URLs":
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
- Go to
- Install "Seeed nRF52 mbed-enabled Boards" from Board Manager
- Select
Seeed XIAO nRF52840 Senseas your board - Open
/nRF52840/nRF52840.inoand upload
- Open
/AndroidAppin Android Studio - Wait for Gradle sync to complete
- Build and install on your Android device (API 26+)
- Put on the glove
- Connect via the app
- Press "Start Calibration"
- Fully bend your finger โ Press "Set Min"
- Fully extend your finger โ Press "Set Max"
- Done! The app now shows accurate flex percentage
| UUID | Name | Properties | Description |
|---|---|---|---|
19B10001-... |
Stretch | Read, Notify | Flex percentage (0-100%) |
19B10002-... |
Raw | Read, Notify | Raw sensor value (0-1023) |
19B10003-... |
Device ID | Read | Unique device identifier |
19B10004-... |
Min Cal | Read, Write | Calibration min value |
19B10005-... |
Max Cal | Read, Write | Calibration max value |
19B10006-... |
Calibrated | Read, Notify | Calibration status |
OpenPrintSense/
โโโ CAD Files/
โ โโโ OpenPrintSense.step # 3D model for printing
โโโ nRF52840/
โ โโโ nRF52840.ino # Arduino firmware
โโโ AndroidApp/
โ โโโ app/
โ โ โโโ src/main/
โ โ โโโ java/ # Kotlin source code
โ โ โโโ res/ # Layouts, drawables, themes
โ โโโ build.gradle.kts
โ โโโ settings.gradle.kts
โโโ LICENSE
โโโ README.md
Edit in nRF52840.ino:
const char* DEVICE_ID = "SG-002"; // Change for each gloveThe firmware can be extended to support multiple flex sensors for full hand tracking.
| Problem | Solution |
|---|---|
| Upload fails | Double-tap RESET button to enter bootloader mode |
| App can't find device | Enable Bluetooth AND Location on Android |
| Raw value always 0 | Check sensor wiring to A0 pin |
| Calibration not working | Ensure you're connected before calibrating |
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
E-Mail: mailto:kontakt@paulbuda.de
โญ If you find this project useful, please give it a star!
