This is a Go board game system that I named 'EmoGo / Emotional Go' (情碁 in Japanese). Two players take turns placing Go stones without any computer assistance. The first player places black stones, while the second player places white stones. Each Go stone displays facial expressions based on its state, making it easy to assess the overall game situation. Even people unfamiliar with Go rules can easily understand the game through these visual cues.
Check out the video of the gameplay here [Fig. 1].
I got inspiration from the web game SquishyGo ( https://puyogo.app/en ) [Fig. 2]. In SquishyGo, you use a mouse to place Go stones on a web browser. I thought it would be more fun if we could touch the Go stones, and they had facial expressions, so I made this.
Go is a territory-based game. In professional Go, the winner is determined by the size of the area enclosed by their own stones, where no stones are present. However, EmoGo follows the rules of "Pure Go, " where the winner is determined by the number of stones each player has on the board. Players can only place stones; they cannot move them once placed. Both players would end up with the same number of stones on the board. However, as shown in Fig. 3, there are specific conditions: if Go stones are completely surrounded by opponent's stones or the board's edge, these must be removed. In EmoGo, the key to winning is to remove the opponent's stones while ensuring that your own stones remain on the board.
When Go stones are surrounded by the opponent's Go stones, they display a crying face (Fig. 4). A Go stone with a crying face is called a "dead stone" and must be removed from the board. In traditional Go, players often forget to remove dead stones, but with this game board system, if you try to place a new Go stone before removing all crying face Go stones, any newly placed stones will also display crying faces, and the game cannot progress. This ensures that all "dead stones" are removed without any mistakes.
A Go stone that will become a dead stone on the opponent's next move displays a troubled face (Fig. 5). If your Go stones show this expression, it means you are in trouble. You must decide whether to save these stones or abandon them. In this game board system, the Go stones' expressions indicate whether the game state is favorable or unfavorable for you. As you become more familiar with the game, you can make moves that prevent your Go stones from showing this troubled expression. In other words, the expressions on the Go stones help players understand the rules of Go and enable them to develop basic tactical thinking.
The overall structure of this system is shown in Fig. 6.
Each module consists of the following parts:
Game controller x1 (Fig. 7): This device manages the entire game. It communicates with the Go board module via CAN to detect stone placement and instruct which facial expressions should be displayed on the Go stones.
- Rasbperry Pi 4 2GB
- Raspberry Pi 7 inch official touch display
- WAVESHARE 2-Channel Isolated CAN Expansion HAT for Raspberry Pi
Board Module x 25 ( for a 5x5 board ) (Fig. 8): Each grid on the Go board is a module. It notifies the game controller when a Go stone has been placed or tapped, and displays facial expressions on the Go stones as instructed by the game controller.
- Seeed Studio XIAO RP2040
- MCP2515 CAN Controller
- MCP2652 CAN Driver
Go Stone x25 ( for a 5x5 board ) (Fig. 9): Each stone notifies its board module when placed or tapped, and changes its facial expression according to instructions received from the board module.
This project integrates multiple general-purpose technologies rather than focusing on a specific one. In this article, I will explain what makes this system unique.
3.1 ScalabilityThis system was initially created with a 5×5 board, but can easily be adapted for other sizes, such as 7×7, 9×9, or 6×8. All Go board modules are designed to connect to a single CAN bus and can be added within the allowable range of the bus's electrical characteristics. Each Go board module measures 50mm × 50mm, and their bus and power lines are connected in a daisy chain using pin headers and pin sockets, enabling multiple modules to be linked together.
Auxiliary boards are used to connect the bus and GND at the top and bottom ends of the Go board, allowing the modules to be arranged in a square configuration. Power is also supplied through these auxiliary boards. The auxiliary boards connected in the top and bottom directions split the power supply line, making it possible to limit current supplied to each horizontal row of Go board modules. A single Go board module with its Go stone requires approximately 100mA of current. In this implementation, the power supply is split into three lines, with each line capable of handling up to 1A.
3.2 SynchronizationOne key feature I wanted to implement was synchronized flashing: when a Go stone is tapped, all connected stones (including the tapped one) would flash simultaneously. Since each stone needs to change its appearance or blink, it must communicate with the game management device. The challenge was achieving this synchronization efficiently.
While wireless communication allows for broadcasting, I avoided it due to potential interference at exhibition venues. I considered several wired communication protocols: SPI, I2C, RS485, and CAN. SPI and I2C were eliminated due to broadcast communication limitations. Although RS485 supports both individual and broadcast communication with board modules, it requires implementing a custom protocol. This additional processing could overburden the RP2040, potentially causing synchronization issues.
Ultimately, I selected the CAN protocol because its controller implements both individual and broadcast communication natively. This choice reduces the processing load on the RP2040 and minimizes synchronization problems. While equipping each board module with an MCP2515 CAN controller increases current costs, we anticipate future cost reduction by replacing the XIAO RP2040 with the XIAO RA4M1, which would eliminate the need for separate CAN controllers.
Each board module is assigned a unique XY ID based on its position. Using this ID, communication is handled through the following CAN IDs:
- 0x4XY: Sent from the game controller to instruct a Go stone to change its facial expression or prepare for blinking
- 0x6XY: Sent from a board module to the game controller when a Go stone is placed, removed, or tapped
- 0x1FF: Broadcast to all stones prepared for blinking, triggering them to flash simultaneously
For example, to make only the stones numbered 0x12 and 0x14 blink (as shown in Fig. 10), the process works as follows:
- The game controller sends message 0x02FF to stones numbered 0x12 and 0x14, putting these board modules into a blink-ready state.
- The game controller then broadcasts messages 0x1FF03FF (on) and 0x1FF0300 (off). Only the board modules in blink-ready state (0x12 and 0x14) respond to these commands, while all other modules ignore them. This enables synchronized blinking of just the selected Go stones.
This communication mechanism ensures that blinking occurs seamlessly, preventing any noticeable synchronization delays for the player.
The Go board module detects the presence of a Go stone using GPIO. The GPIO on the board module is pulled up and monitors changes via interrupt. When the GPIO state is HIGH, it indicates no stone is present; when LOW, it indicates a stone has been placed.
When the pin socket connects, power is supplied to the Go stone. The stone module then initializes its display and other necessary components. After initialization completes, the Go stone sets its GPIO to LOW, signaling to the board module that a stone has been placed.
When placing and removing Go stones, transient noise similar to chattering may occur. To mitigate this, the board module handles GPIO interrupts by detecting both HIGH-to-LOW and LOW-to-HIGH transitions. After the initial state change, the system waits 500 ms before rechecking the GPIO state to confirm whether the stone is genuinely placed or removed. Any GPIO changes during this waiting period are ignored.
This approach ensures reliable and stable detection of Go stone attachment and detachment.
3.4 Go Stone Design and Pin HeaderThe Go stones are cylindrical, with connecting pin headers at their base. The casing is designed to protect users' fingers from the pins. The pin header is offset from the center, preventing incorrect orientation during placement.
The pin header opening is angled at 45 degrees for easy attachment to the board module (Fig. 11). This design allows the interface to align naturally as the stone is rotated during placement. When placing a stone, the pin socket smoothly engages with the board module, creating a sensation of the stone being gently "pulled in" during connection.
One vision for the future of IoT envisions a world where environmental changes are recorded in a network, with objects responding accordingly. In this context, even a simple Go stone becomes network-connected, capable of communicating its state and reacting to changes. This project demonstrates the concept of "a world where everything is connected."
Exhibition participants offered insights aligned with this vision, suggesting that incorporating numerous everyday objects into IoT could open new possibilities in gaming and creative fields.
4.2 Physical InteractionWhile difficult to quantify, exhibition attendees' feedback revealed distinct differences from web-based games. Although games can be played through a browser with a mouse, the tactile experience of handling objects that provide real-time feedback adds a significant dimension to the experience.
Currently, the Go stones' expressions change only based on game state. However, if the system could detect how players handle the stones and reflect these interactions in the stones' reactions, it could enhance player engagement and emotional connection. This points to promising possibilities for deeper physical and emotional integration in IoT-enabled gaming experiences.
Reference:- Github: EmoGo
Comments
Please log in or sign up to comment.