A handheld retro game console with tilt controls, featuring 9 games on an 8x8 LED matrix. Designed at Maakleerplek.
| Component | Quantity | Description | Link |
|---|---|---|---|
| ESP32-C3 | 1 | Microcontroller (any ESP32-C3 dev board) | Amazon |
| WS2812 8x8 LED Matrix | 1 | 64 RGB LEDs in 8x8 grid | Amazon |
| ADXL345 | 1 | 3-axis accelerometer module (I2C) | Amazon |
| USB Charger Board | 1 | LiPo charging module with protection | Amazon |
| LiPo Battery | 1 | 3.7V lithium polymer battery | Amazon |
| Threaded Inserts | 4 | M3x5x7 heat-set inserts for enclosure | Amazon |
| M3 Screws | 4 | M3x6mm hex socket button head | Amazon |
| M3 Screws | 4 | M3x12mm hex socket button head | Amazon |
| Walnut Wood | 1 | 3.2mm x 115x368mm sheet | Gravierbedarf |
| Black PLA | 1 | 3D printer filament for enclosure | |
| Jumper wires | 7 | For connections |
| WS2812 Pin | ESP32-C3 Pin |
|---|---|
| VCC | 5V |
| GND | GND |
| DIN | GPIO 10 |
| ADXL345 Pin | ESP32-C3 Pin |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO 8 |
| SCL | GPIO 9 |
Print the enclosure parts in black PLA:
- tilt_box.stl - Main enclosure body
- tilt box grid.stl - Grid overlay
Cut the following from the wood and plexi.dxf file:
- Walnut wood (3.2mm thickness): Front frame
- Clear acrylic/plexi: Screen cover
Solder the components according to the wiring diagram:
The LED matrix needs a diffuser layer to blend the individual LEDs into a smooth display:
- Diffuser: Use a white plastic bag or similar translucent material between the LED matrix and the plexi cover
- Optional darkening: Adding a dark PVC film (e.g. available at Lukas Creative) provides additional darkness to the screen, improving contrast
- Insert the M3x5x7 threaded inserts into the 3D printed enclosure using a soldering iron
- Mount all electronics inside the enclosure
- Stack the layers: LED matrix -> diffuser -> (optional dark film) -> plexi -> walnut frame
- Secure with M3x6mm screws (front) and M3x12mm screws (back)
Switch between games by flipping the board upside down.
Navigate a ball through a randomly generated maze. Tilt to move the yellow ball to the red goal. A rainbow animation plays when you win.
A simple ball that leaves a fading trail as it moves. Tilt to control direction.
A glowing ball with a smooth gradient effect that follows your tilt movements.
Classic snake game. Tilt to change direction and eat the red food to grow. Don't hit yourself!
Break the colored bricks at the top with a bouncing ball. Tilt left/right to move the paddle.
Avoid falling obstacles. Tilt left/right to move your player at the bottom. Score increases as obstacles pass.
Displays scrolling text: "maakleerplek"
Cycles through animated patterns:
- Spiral rainbow
- Wave
- Rainbow gradient
Classic falling block game. Tilt left/right to move pieces, tilt forward to rotate, tilt backward for fast drop.
Requires ESP-IDF v4.3+.
# Source ESP-IDF environment
source ~/esp/esp-idf/export.sh
# Build
idf.py build
# Flash
idf.py flash
# Monitor serial output
idf.py monitor- Tilt: Move/control in all games
- Flip board: Switch to next game
- Keep level during startup: Calibrates the accelerometer
The WS2812 LEDs use GRB color format. Pixels are addressed row by row, 0-63.



