Features โข How It Works โข Getting Started โข Documentation โข Contributing
DiceMaster is a revolutionary educational device that combines physical interaction with digital learning. Built with six high-resolution screens embedded in a dice form factor, it creates engaging, hands-free learning experiences through motion-based interaction.
Originally designed for language learning, DiceMaster detects shaking, rotation, and orientation to trigger dynamic content changes across all screens. Students can learn vocabulary, grammar, and more through interactive flashcards, quizzes, and gamesโall without touching a single button.
DiceMaster was showcased at the SeriousPlay 2025 conference, demonstrating its potential for game-based learning and pedagogical innovation. Stay tuned for research findings and student feedback!
- ESP32-powered screens with full-color JPEG support
- Animated GIF playback capability
- Multi-language text rendering (Arabic, Chinese, Cyrillic, Devanagari, and more)
- Dynamic orientation-aware content display
- IMU-based motion detection (MPU6050 6-axis sensor)
- Shake detection with configurable sensitivity
- Automatic orientation detection (which side is facing up/down)
- Screen rotation compensation for optimal readability
- ROS2-based architecture for flexible game development
- Create custom games with simple Python classes
- Asset-based design: JSON text files, images, and animated GIFs
- Hot-swappable games without system restart
- Custom SPI protocol with CAN-bus-like addressing
- Chunked image transmission for large media files
- Priority-based message queue for responsive UI
- DMA-optimized data transfer for performance
- Comprehensive Python API built on ROS2
- Extensive documentation for beginners and maintainers
- Example games and strategies included
- Modular architecture for easy extension
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Raspberry Pi Central โ
โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Game โโโโโถโ Chassis โโโโโโ IMU Sensor โ โ
โ โ Strategy โ โ Manager โ โ (Motion) โ โ
โ โโโโโโฌโโโโโโ โโโโโโโฌโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ โ โ
โ โ Screen Commandsโ โ
โ โผ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Screen Bus Managers (SPI) โ โ
โ โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโผโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ
โ ESP32 โ โ ESP32 โ โ ESP32 โ
โ Screen โ โ Screen โ โ Screen โ
โ 1 & 2 โ โ 3 & 4 โ โ 5 & 6 โ
โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ
- Sensors Detect Motion: IMU tracks shaking, rotation, and orientation
- Games React: Your Python strategy responds to sensor events
- Content Updates: Text, images, or GIFs are sent to specific screens
- Screens Display: ESP32 modules render content with proper rotation
- Learning Happens: Students interact naturally through physical manipulation
Want to create your first educational game? Check out our comprehensive guide:
๐ Beginner's Game Development Guide
Learn how to:
- Create a "Hello Dice" game in 30 minutes
- Use text, images, and animated GIFs
- Respond to shaking and rotation
- Build interactive quizzes and flashcards
from dicemaster_central.games.strategy import BaseStrategy
from dicemaster_central_msgs.msg import MotionDetection
class MyGame(BaseStrategy):
_strategy_name = "my_game"
def start_strategy(self):
# Subscribe to shake detection
self.create_subscription(
MotionDetection, '/imu/motion',
self.on_shake, 10
)
# Display content on all screens
self.display_greeting()
def on_shake(self, msg):
if msg.shaking:
# Change content when shaken!
self.display_next_question()| Guide | Description | Audience |
|---|---|---|
| Beginner's Guide | Step-by-step tutorial for creating your first game | Game Developers |
| Developer Guide | In-depth system architecture and maintenance | System Developers |
| CLAUDE.md | Quick reference for AI-assisted development | All Developers |
| Protocol Specification | Complete SPI communication protocol | Hardware/Firmware Developers |
| Hardware Guide | Assembly and hardware configuration | Hardware Engineers |
| Software Setup | Installation and deployment instructions | DevOps/Administrators |
DiceMaster/
โโโ DiceMaster_Central/ # Raspberry Pi ROS2 codebase
โ โโโ dicemaster_central/ # Main Python package
โ โ โโโ games/ # Game system core
โ โ โโโ hw/ # Hardware interfaces (SPI, I2C, IMU)
โ โ โโโ managers/ # Game manager and lifecycle
โ โ โโโ media_typing/ # Protocol implementation
โ โโโ examples/ # Example games and strategies
โ โ โโโ games/
โ โ โ โโโ chinese_quizlet/ # Language learning example
โ โ โโโ strategies/
โ โ โโโ shake_quizlet/ # Motion-based quiz strategy
โ โโโ launch/ # ROS2 launch files
โโโ DiceMaster_ESPScreen/ # ESP32 Arduino firmware
โโโ DiceMaster_ROS_workspace/ # ROS2 build workspace
โโโ docs/ # Documentation
- Raspberry Pi 4 (or Compute Module 4)
- 6ร ESP32-S3 boards with 480ร480 IPS displays
- MPU6050 6-axis IMU sensor
- Custom 3D-printed dice enclosure
- Power supply and wiring harness
- ROS2 Humble (built from source for Raspberry Pi)
- Python 3.10+ with custom packages
- Arduino IDE for ESP32 firmware
- Custom
py-spidevlibrary (8KB buffer support)
Full assembly and build instructions coming soon!
We're finalizing documentation for:
- 3D printing the enclosure
- PCB assembly and wiring
- Raspberry Pi configuration
- ESP32 firmware flashing
- Complete system integration
Want to be notified? Star this repo and watch for updates! โญ
A language learning game that displays vocabulary questions with image hints. Shake to cycle through questions!
- Top Screen: Question text ("What is this in Chinese?")
- Bottom Screen: Answer (e.g., "็ซ" - cat)
- Side Screens: Four hint images
- Interaction: Shake to change question
A diagnostic tool that cycles through all screens with test messages.
- Verifies all screens are working
- Tests SPI communication
- Demonstrates screen addressing
We welcome contributions from the community! Whether you're building new games, improving documentation, or enhancing the core system, your help is appreciated.
- ๐ฎ Create Games: Share your educational game strategies
- ๐ Improve Docs: Help make our guides clearer
- ๐ Report Issues: Found a bug? Let us know
- ๐ก Suggest Features: Have ideas? We're listening
- ๐ง Submit PRs: Code contributions welcome
# Clone with submodules
git clone --recursive https://github.com/DanielHou315/DiceMaster.git
# Build ROS2 workspace
cd DiceMaster/DiceMaster_ROS_workspace
source prepare.sh
colcon build --symlink-install
# Run tests
cd ../DiceMaster_Central/dicemaster_central
python3 -m pytest tests/DiceMaster Team - University of Michigan Shapiro Design Lab
- Lead Developer: Daniel Hou
DiceMaster stands on the shoulders of amazing open-source projects:
- ROS2 Humble - Robot Operating System 2
- imu_tools - IMU filtering and orientation estimation
- Madgwick Filter - Orientation algorithm by Sebastian Madgwick
- Arduino-ESP32 - ESP32 Arduino core
- GFX Library for Arduino - High-performance display library
- U8g2 - Universal graphics library with multi-language font support
- JPEGDEC - Optimized JPEG decoder
- U-M Shapiro Design Lab for supporting this research project
- SeriousPlay 2025 conference for providing a platform to share our work
- The ROS2 community for incredible tools and support
- All educators who provided feedback during alpha testing
This project is licensed under the MIT License - see the LICENSE file for details.
You are free to use, modify, and distribute DiceMaster for educational and commercial purposes.
- ๐ Issues: GitHub Issues
- ๐ฌ Discussions: GitHub Discussions
- ๐ง Email: Daniel Hou
- ๐ข Lab: U-M Shapiro Design Lab
Made with โค๏ธ by the Shapiro Design Lab at the University of Michigan
Empowering education through interactive technology