This project demonstrates an implementation of a game piece set inspired by the popular Rummikub, the main distinction and starting point being the ability to reprogram the pieces (for example, for quick shuffling, or to use the pieces for other games).
The project contains two main types of hardware modules: the reprogramming board and the pieces themselves. The pieces are placed on the board in up to 15 stacks, with electrical connections made through magnetic pogo connectors (both between any two pieces and for piece-to-base links). When the pieces are placed correctly, the reprogramming function can be activated. The pieces contain no batteries or other components requiring periodic maintenance, as the displays used retain their state long-term in the absence of power. The board receives power via USB-C at 5V.
For practical reasons, the number of pieces to assemble is one suited to a demo, sufficient to demonstrate the connectivity and communication mechanisms. Even so, the design was conceived to work for a large number of pieces (100+), which among other things motivated the power supply approach.
The essential characteristics of the presented implementation are:
Essentially, this is my attempt at trying to get the best of both worlds - the simplicity of a physical piece set with the software-driven freedom of general purpose displays.
A USB-C breakout board powers both the Raspberry Pi Pico 2W, and a step-down regulator that provides the 3.3V power rail (the Pico's internal 3.3V output is unused).
As part of the piece programming protocol, the stacks must be turned on in prefix sequence (stack 1, stacks 1 and 2, …). For this, two chained 8-bit serial-parallel registers feed gate inputs of 15 P-channel MOSFETs, one per piece stack.
Two data signals (DATA, LATCH) are shared across all stacks simultaneously. Each stack is connected to the base board by a 4-pin magnetic pogo connector pair, the other 2 lines serving to power the pieces. The DATA UART line is daisy-chained up the stack through each piece, while LATCH is shared and provides simple signals.
The ATtiny404 listens and forwards on the DATA lines while waiting for signals on LATCH.
The E-Paper display is configured and updated via unidirectional SPI, provides output signals via dedicated pins.
Certain pins are exposed through a 2×3 pin header unpopulated footprint on the PCB, intended to be accessed through a pogo pin clip. Most importantly, these allow firmware flashing through UPDI, while also providing debugging utility.
TODO: software
Per-piece components:
| Qty | Manufacturer | Name | Description/Purpose |
|---|---|---|---|
| 1 | Microchip | ATtiny404 | MCU |
| 1 | GoodDisplay | GDEM0097F51 | E-Paper display |
| 1 | RTLECS | MG0425BE | Magnetic Pogo Connector (M/F pair) |
| 1 | generic | 100nF MLCC | MCU decoupling |
| 1 | Jushuo | AFC24-S18FIA-HF | Display FPC Connector Assembly |
| 3 | generic | 470 resistor | Series Termination |
| 1 | generic | 10K resistor | Pull-up |
| 3 | JSCJ | MBR0530 | Display Charge Pump |
| 1 | Vishay | SI1308EDL-T1-GE3 | Display Charge Pump |
| 1 | Taiyo Yuden | NR3015T100M | Display Charge Pump |
| 7 | generic | 4.7uF/25V MLCC | Display Charge Pump |
| 3 | generic | 1uF/50V MLCC | Display Charge Pump |
| 1 | generic | 2.2 resistor | Display Charge Pump |
Base plate components:
| Qty | Manufacturer | Name | Description/Purpose |
|---|---|---|---|
| 1 | Raspberry Pi | RPi Pico 2W | MCU Dev Board |
| 1 | GroundStudio | USB-C Module | USB-C Breakout Board |
| 2 | TI | SN74HC595 | 8-bit Shift Register |
| 1 | Pololu | D36V28F3 | 3.3V 3.6A Step-Down Regulator |
| 1 | STMicroelectronics | BAT48 | Schottky Diode |
| 2 | generic | 100nF MLCC | Shift Register Decoupling |
| 3 | generic | 100nF capacitor | Stack Line Bulk |
| 1 | generic | 1mF capacitor | Stack Line Bulk |
| 2 | generic | 5.1K resistor | USB CC Pull-down |
| 1 | generic | 470 resistor | Series Termination |
| 17 | generic | 10K resistor | Pull-up |
| 15 | Diotec | MMFTP3401 | Power Gating PMOS |
| 15 | RTLECS | MG0425BE | Magnetic Pogo Connector (M) |