Build an inexpensive
handheld Arduino color console

Handheld Arduino Color Tetris

If you love classic games like Tetris (source code) and Breakout you can now build an Arduino console to play games on the go and in color. Youtube gameplay demo.

Required components

Arduino Pro Mini 3.3V 8 MHz

As most inexpensive LCDs work at 3.3v the Arduino for this project works at 3.3v too.

At only 8MHz the Arduino Pro Mini 3.3v is slow by today's standards but fast enough for most classic games.

Other Arduinos or compatibles can be used in its place. If an 5v Arduino like the Uno is used you must use a Level shifter from 5v to 3.3v or you'll risk frying the TFT.

2.2" TFT 240x320 SPI

This high quality 2.2" TFT screen has an integrated ILI9341 controller and we will be connecting to it using Hardware SPI.

While the screen is sold as an 240x320 pixels TFT, we're going to use it at 320x240 pixels, rotated using a simple hardware configuration switch, making it more suitable for video games.

The size is perfect for a small handheld videogame and fast enough for most classic video game titles.

The TFT screen features an SDCART reader but for now we'll not be using it.

3-axis joystick

A joystick with 3 axis is used to control de videogame, horizontal and vertical plus fire.

The first two controls connect to the Arduino using 2 ADC pins and the fire button a regular digital pin.

Buzzer

Sound FX is an important component of Videogames. A small buzzer is present to provide sound feedback to the player. It can be used to play music and sound effects.

Other components

Build images

This photo shows the board already with most components except the TFT screen.

Instead of soldering the components directly to the perforated board both the Arduino and the TFT screen are placed on female headers, so that they can be easily removed and replaced without the need to solder.

At the top of the board there are five pins that allow a programmer to be connected and upload a sketch to the Arduino. This way we can upload game sketches without removing the Arduino from the board.

The joystick breakout is attached to the board using 4 screws. Alternatively it can be unsoldered from its breakout and soldered directly unto the board.

Two M3 screws can be seen here. They keep the battery holder on the backside secured to the board.

Backside showing the 4xLR6 battery holder. You can use rechargeable or non-rechargeable batteries, a 9v battery or even a 2S rechargeable LiPo.

Connecting the TFT screen to the Arduino

Arduino Pin TFT Pin
Vcc Vcc
Gnd Gnd
5 CS
4 RESET
6 D/C
11 SDI (MOSI)
13 SCK
9 LED
12 SDO (MISO)

Pins 11 to 13 are Arduino's hardware SPI pins. When hardware SPI is used, the Arduino SPI hardware handles all the communication overhead and we get more processing power for our code. Usually it also means the communication is faster.

Pins 5, 4, 6 and 9 are regular digital Arduino pins. 9 controls the backlight, without it there won't be any image on the TFT screen. Pin 4 resets the TFT controller when required. Pins 5 and 6 help with SPI communication by telling the TFT when data or commands are being sent.

Connecting the Joystick to the Arduino

Arduino Pin Joystick Pin
Vcc +5v
Gnd Gnd
A0 VRx
A1 VRy
2 SW

The joystick works well with only 3.3v supplied to the 5v pin.

Pins A0 and A1 are analogue pins and they tell the Arduino the direction the Joystick is being pushed.

When the joystick is pressed down a click is heard and a signal is sent to the Arduino.

Connecting the Buzzer to the Arduino

Arduino Pin Buzzer Pin
Gnd Buzzer -
3 Buzzer +

Buzzers only have 2 pins. The (+) pin is usually longer and has a + sign next to it.

Connecting the batteries to the Arduino

Arduino Pin Battery connector
Raw +
Gnd -

Connect the battery positive to the RAW pin on the Arduino.

4 rechargeable batteries will provide around 4.6v that will be converted into 3.3v by the onboard regulator.

Programming the Handheld Arduino color console

Congratulations. If you followed the instructions you'll be ready to upload a game.

To upload the game you'll need another Arduino or a serial programmer like the FTDI.

Arduino Pin Programmer (FTDI)
Vcc Vcc
Gnd Gnd
Tx Rx
Rx Rx
Rst Grn/DTR

A 0.1µF capacitor should be placed between the Rst/Reset pin on the Arduino and the DTR pin.

Get games for your Handheld Arduino color console

To test your build you can use download a Tetris version from
https://github.com/vilaca/Handheld-Color-Console made specially for this project.

More games will soon follow.