06/2014 - 09/2014
The Handheld Tetris Game makes playing Tetris a lot of fun: you can listen to the Tetris theme played through the speaker, control the game using built-in accelerometer, and feel the vibrations produced by the vibration motor. However, there are also some inconveniences: its size makes it difficult to carry around, and it uses a special 2S LiPo battery charger to recharge. After finding myself playing the game less and less due to these inconveniences, I decided to make another version that's easy to carry around and USB rechargeable.
Enter the Tiny Tetris, a lightweight, pocketable, and USB rechargeable Tetris game console. It features a monochrome 16x8 LED display with 16-level adjustable brightness, a 5-way navigation switch, and a laser-cut acrylic enclosure. In addition to playing Tetris, you can also play Snake, or create 16x8 pixel art using the Paint program on this device. It comes in three different colors: red, green, and blue.
n the video, I show the three programs I wrote for the Tiny Tetris, and talk about both the mechanical and electrical design. Check out the pictures and accompanying descriptions below for more detail. The design files and source code for this project are available here.
I used EAGLE for the schematic and PCB design. As shown on the schematic, the Tiny Tetris is powered by a 3.7V LiPo battery, and is rechargeable through the Micro USB port. A TPS61240 boost converter provides a 5V supply to both the ATmega32U4 microcontroller and the HT16K33 LED driver. It also features a 5-way navigation switch, two pushbuttons for adjusting the LED brightness, a pushbutton latching power switch, and a power-on indicator LED.
In v1.1, I increased the hole size for the LED matrices in order to reduce the overall thickness of the device (explained later). In v1.2, I replaced the ATtiny85 µC with the ATmega32U4, because there aren't enough GPIOs left to implement the "auto power-off on low battery" feature, which requires two GPIOs (one for measuring the battery voltage and the other for turning off the power). In v1.3, I changed the location of the µC reset button to avoid accidental press.
To efficiently assemble the PCBs, I ordered a polyimide film PCB stencil from OSH Stencils for quick and precise application of solder paste. After the SMD components are placed, the PCB goes in a toaster oven for a reflow soldering process that lasts approximately 4 minutes, during which the temperature is monitored with a thermocouple thermometer.
In order to debug the circuit and explore the possibility of adding new features, I used an X-Acto knife to cut unwanted traces, and extremely thin 30 AWG wire to make new connections. I also used a Weller hot air rework station for quick and easy replacement of faulty or damaged components.
In order to easily access the components under the LED matrices for debugging and rework, I made the LED matrices removable by soldering these female headers to the PCB. Starting from v1.1, the hole size for these headers is increased so that they sit lower on the PCB. This reduces the overall thickness of the device by almost 10%.
Underneath the PCB is a 700 mAh LiPo battery with a thickness of only 3mm. Four M2x6mm female/female and four M2x4mm female/male standoffs are used to secure the PCB within the enclosure. The male portion of the f/m standoff goes through the mounting hole on the PCB, and the f/f standoff is then attached to it. Eight M2 screws are then used to fasten the top and bottom enclosure pieces to the standoffs (shown later).
The enclosure is made from 1/8" cast acrylic sheet. I first designed the enclosure in SolidWorks, and then used CorelDRAW for adding gradients (3D engraving) and arranging the pieces. The special cuts on the side pieces allow the center portion to bend just enough when pressed to trigger the pushbuttons on the PCB.
Using the 3D engraving feature on the laser cutter, I created the countersinks on the enclosure by simply drawing a circle filled with greyscale gradient around each screw hole in the design file. I also 3D engraved the area around the navigation switch so that the switch can move freely without a large opening on the enclosure, and the area around the micro USB port so that all the different micro USB cables can easily plug into the device.
The most important thing I learned from making the enclosure is to take kerf - the width of the portion of material that the laser burns away - into consideration when designing parts for laser cutting. It took me quite a few tries to get all the dimensions correct.
The power button is on the top, and the micro USB port and the ISP header are on the bottom. On the left side, there are two buttons for adjusting the display brightness, and windows for two LEDs that indicate power and charging respectively. On the right side, there is a button for resetting the microcontroller.
I wrote these three programs for the Tiny Tetris, which are stored on the device at the same time. After powering on the device, you can run any one of the three programs by selecting it in the menu.
To prevent damaging the LiPo battery, the Tiny Tetris turns itself off when the battery is low. After the low battery symbol flashes for 3 seconds, the GPIO (on the ATmega32U4) connected to the latching power switch circuit goes from LOW to HIGH. This signal toggles the state of the latch, and consequently disconnects the battery from the boost converter.