SIMON SAYS + TIC-TAC-TOE GAME BOX
Arduino circuit programmed for Simon Says and Tic-Tac-Toe, housed in a custom laser-cut box with push-buttons illuminated with Neo-Pixels. See video demo
I tried my hand at being a maker to create Simon Says and Tic-Tac-Toe game box! I programmed an Ardunio Uno with the game logic, assembled special Neo-Pixel Illuminated pushbuttons, and designed a custom laser cut a box of basswood. This write-up serves as part-instructable, part-portfolio piece, and 100% look at this cool thing I am very proud to say I made!
I completed this as an individual project to demonstrate understanding and command of circuits, specifically reading inputs and manipulating outputs. The assignment required me to build something to accept input (i.e., users pressing pushbuttons) and do something with it, in the form of output (i.e., neo-pixel colors, buzzer sounds, and game logic). I love vague assignments because they allow for the most freedom and creative expression.
I decided to custom-build every component, from the code to the buttons, so I could understand all the functionalities and nuances.
This process began with an initial, proof of concept prototype. Using tactile buttons, LEDs, and an Arduino Uno, I built a sample 4-button Simon Says game on a breadboard. The primary goal of this step, and all proof-of-concept prototypes, is to understand the practicality, challenges, and affordances before investing time or resources into a fully fleshed out solution.
In this initial prototype, I realized that the Arduino Uno didn’t have enough digital pins to support nine buttons and nine LEDs. I built a multiplexer, but it overloaded the circuit. I researched multiplexers, but realized they wouldn’t ship to me in time. I tried a different circuit (Teensy Arduino) because it had several more pins, but realized I would have a lot of debugging in my future.
Finally, I found Neo-Pixels: RGB (red, green, blue) lights that can represent the full color spectrum, be easily manipulated together, and only require a power line, a ground line, and one digital pin. Adafruit has an excellent Neo-Pixel library, which makes them easy to manipulate and work with. Iterating on my initial prototype code to use Neo-Pixels instead of LEDs simplified the logic and gave me more flexibility.
- Arduino Uno
- 11 LED Illuminated Pushbuttons – 30mm Square
- 11 Neo-Pixels, but be prepared with more in case some don’t work
- Piezo buzzer
- 2 pieces basswood (6in x 24in x 1/8in), plus a cheaper / thinner piece to test your design
- Wire. Lots of wire. If you think you have enough, get more.
- General soldering and assembly tools (pliers, scissors, soldering hands, etc.)
I purchased LED Illuminated pushbuttons that came with a blue LED inside. I could have easily left those in the button and played Simon Says with nine blue illuminated buttons. But I like a challenge. I decided to replace the LEDs with Neo-Pixels because a) Simon Says is far cooler with colored lights instructing your moves and b) in order to play tic-tac-toe, each player needed a unique color to represent their territory on the game board.
To get custom colored lights, I had to put some kind of RGB light in the button. I thought to use a RGB LED, but each requires four pins, which complicated my pin-scarcity problem; that didn’t sound like a problem I wanted to solve. While the thought of soldering eleven Neo-Pixels inside of push buttons sounded daunting, it sounded like a task with a huge pay-off.
I tried different wires and decided that the thin, breadboard wires were the best for the job because I could easily fit six wires (ground in / out, power in / out, and digital in / out) through the pushbutton’s plastic LED holder. I clipped the plastic heads off of each wire, stuck electric tape on the ends to avoid crossed wires, and fed the wires through each of the buttons.
A wise maker advised me to test every step of the way, to help narrow down the point of failure, should something go wrong. Following his advice, I tested frequently. I ran a simple circuit program after on each Neo-Pixel and button after soldering it together. This way, when I strung together the final eleven buttons, I didn’t have to find out the hard way that button #4 wasn’t assembled correctly.
Laser cutting has to be my favorite prototyping tool ever, if only because I love the aesthetic and smell of the burnt wood. When I thought about what structure should house my game, I knew it would be some variation of laser-burned wood.
I used MakerCase to get an SVG file for the finger-joint pattern of my box. I imported the file into Illustrator, added my functional components (holes for buttons, space for buzzer to be heard, etc) and designed the sides of the box. I wanted a stark contrast between the light wood and dark etching, so I covered the wood surface in masking tape. As the wood is laser cut, the masking tape protects the other wood from residual burns, leaving clean lines.
The computer scientist in me absolutely loved programming the Arduino Uno. While I spent a bulk of my time on the code and logic, I’d never admit to that being the challenging part. That was the fun part. The most challenging aspect of this project was the physical prototyping, circuitry, and uncertainty about the overall feasibility. I am trained as a computer scientist, so thinking logically and incrementally comes natural. I often joke that debugging as a computer scientist involves stepping through in search of a stray parenthesis or semi-colon, whereas debugging as an engineer is to be mistrustful of every wire, circuit, and hardware because who knows what’s working or not.
Would I do it again? Absolutely. See video demo!
I completed this as an individual project for CS6452, Prototyping Interactive Systems with Gregory Abowd. I did all of the coding, circuitry, and design for the game box.
for files and code
I am working to format, refine, and refactor code to upload to GitHub. Contact me if you would like a copy of the Arduino code, laser cut files, or assembly details.