GyroCube is a wireless tangible interface for music and media art, based on ESP32 and IMU sensor fusion. It transmits orientation data (Quaternions) via OSC over UDP to any compatible software (Max/MSP, TouchDesigner, Unity, etc.).
| Design Overview | Exploded View |
|---|---|
![]() |
![]() |
| PCB Layout | Case Assembly |
|---|---|
![]() |
![]() |
Open Hardware Prototype Evolution (2023)
| Core Module | Charging | Live Demo | Final Stack |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Case Parts | Assembly | Structure | Full Kit |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Wireless OSC Transmission: Real-time data streaming over WiFi.
- IMU Sensor Fusion: Stable quaternion data using Madgwick/Kalman filtering, with gain/memory tunable from the web interface.
- Raw IMU Streaming: Raw accelerometer/gyroscope samples broadcast alongside the filtered quaternion stream.
- Battery Monitoring: Periodic battery voltage sampling, included in every data packet.
- Status LED: Onboard LED indicates the device is powered and running.
- Deep Sleep Mode: Battery saving with wake-up on motion/button.
- Web Interface: Easy configuration of WiFi and OSC targets (no hardcoding needed).
Microcontroller: ESP32 (WROOM/DevKit)
IMU Sensor: MPU-9250 (I2C)
| Component | ESP32 Pin | Note |
|---|---|---|
| MPU-9250 SDA | GPIO 21 |
I2C Data |
| MPU-9250 SCL | GPIO 22 |
I2C Clock |
| Main Button | GPIO 4 |
Wake up / Function |
| AP Switch | GPIO 32 |
Toggle Access Point Mode |
| Status LED | GPIO 18 |
Lit once setup completes |
| Battery Sense | GPIO 33 |
Voltage divider input for battery level |
| Battery | VIN |
3.7V LiPo (via TP4056) |
(See full schematics in hardware/pcb/schematics/)
-
Firmware:
- Open
firmware/GyroCube_v1/GyroCube_v1.inoin Arduino IDE. - Install required libraries (see dependencies).
- Select Partition Scheme: "No OTA (Large APP)" (Important!).
- Upload to ESP32.
- Open
-
Configuration (First Run):
- Switch the AP Toggle (
GPIO 32) to ON position. - Connect to WiFi network:
GyroCube_<ID>(Password:123454321). - Open browser at
http://192.168.1.4. - Enter your WiFi credentials and Target IP (computer running Max/MSP).
- Save and Reboot.
- Switch the AP Toggle (
-
Software:
- Open
software/MaxMSP/GCube_Receiver.mxf. - You should see incoming quaternion data.
- Open
-
Alternative Receivers:
software/GyroCubeReceiver: standalone Windows (.NET/WinForms) UDP receiver with a live 3D cube visualizer.software/GyroCubeUnity: Unity project with UDP receiver scripts for driving aGameObject's rotation from GyroCube data.
Standalone Arduino sketches for bring-up and maintenance, in firmware/utilities/:
- EEPROMEraser: Wipes the ESP32's emulated EEPROM (useful for resetting a unit to factory defaults).
- I2CScanner: Scans the I2C bus and reports the address of any connected device (useful for verifying MPU-9250 wiring).
Full component list is available here: Download BOM CSV.
Key Components:
- MCU: ESP32-WROOM-32D
- IMU: MPU-9250 (via I2C)
- Power: TP4056 Charger + 3.7V LiPo Battery
- Switch: Slide Switch (SPDT) & Tactile Button (6x6mm)
- LEDs: 3mm Red/Green Common Anode
- PCB: Gerber files ready for manufacturing are available in
hardware/pcb/production/. - Case: 3D printable STL files are in
hardware/mechanical/stl/:NN.2023.002.002_Case_Half_01_v16.stlβ case, half 1NN.2023.002.003_Case_Half_02_v16.stlβ case, half 2NN.2023.002.004_Vibration_Isolation_Platform_v5.stlβ vibration isolation platform (internal mount)
βοΈ Legal Notice & Prior Art:
This project represents legacy R&D work (2020β2023). The core technology is based on research published in Springer Nature (July 2023) and serves as a Defensive Publication.
For detailed IP status, priority proofs, and patent notices, please refer to LEGAL.md.
License: Apache 2.0. See LICENSE for details.











