This project is submitted for

Description

I am building a retro gaming display for my living room to play games like Tetris or Snake with a wireless controller while I am sitting on my sofa. 10 columns of WS2812 LED stripes are integrated in a lasercutted MDF frame, which is covered by a transparent wood veneer. The heart of the system is a Raspberry Pi A+ which is integrated in the MDF frame. This Pi is connected to an Arduino driving the LED stripes. Four 8x8 Matrix displays are combined to a highscore display which is also connected to the Pi via SPI.

The wireless controller is based on an ESP8266-IoT-board, which connects to the Pi over Wi-Fi. A Joystick and four Arcade buttons are used for game controlling. The controller is powered by a LiPo and could be charged by a microUSB connector.

Based on the python_games package coming with Raspbian, all games are written in Python.

Project Logs

After discussing this issue with several people who want to build their own matrix, I decided to sum up the main points in a project log.

In the newer versions of the Raspberry Pi with integrated Bluetooth like Pi3B/B+, ZeroW and the new 3A+, the hardware UART is used for the Bluetooth module. The second UART, which is connected to the extension header, is a software UART implementation. This second UART seems to be limited to 250kBaud. You can read more details on this website:

This project uses 500kBaud for transferring the LED data between Pi and Arduino. I am using an old, non-Bluetooth Pi A+. The only thing, I have changed, was adding this line at the end of the /boot/config.txt :

init_uart_clock=64000000

There is an option to change the UART configuration on newer Pis by connecting the hardware UART to the extension header and the software UART to Bluetooth:

Instead of the retro controller there is also a small Android app for game control. It provides the same functionality, so no additional controller hardware is needed if you already have an Android device.

In reply to a comment, I will describe how to apply the veneer paper to the MDF matrix. The veneer I have used, is called Microwood, which is a 0.1 mm veneer with paper backing.

Before the final full-surface bonding onto the MDF matrix, I did some pre-testing with the glue and the surface preparation of the MDF. To avoid paper curling after the adhesion, I used a solvent based all purpose adhesive (UHU black), which worked as expected. For testing purpose, the black laser cutting edge on the MDF surface was removed with sand paper:

The following image shows the veneer glued on the MDF sanded off (right) in comparison to the veneer glued on the more or less black MDF. For me, this difference was not enough to polish all the MDF parts and the final result proved me right.

Because of the paper backing, it is quite easy to apply the veneer and there is no problem with dissolving, although the veneer was rolled up when it arrived.

Running Python code on the Pi makes it so easy to realize new features. This is a quick preview of getting a weather forecast on the LED matrix. Using PyOWM to talk to OpenWeaterMap and some 10x10 pixel weather icons, that's it.

Thanks for Yours answer. I alredy find the option speed of tetris and changed it. I will try fix snake and pong speed. I changed PIXEL_X to 16 and PIXEL_Y to 32 in python and arduino codes. Here is my first public video with Youe project: https://goo.gl/H4hxR6

P.S. I have an idea to make an instruction how i build a changed Yours project for giant matrix and diferent controllers.

Thank you for the video, it looks absolutely fantastic, would be great to see an instruction. If you want you can also join this project on hackaday, I have many ideas how to change the python code for additional pixels.

Hello, there is no document right now, but I have started in the lower left corner and then zig-zag connected the stripes ending in lower right corner with the last pixel. Power is distributed to all the stripes from the lower side (you can see it on one of my first project logs).

very cool project and I just had a look to the software packages required. Obviously the MAX7219 library of the referenced source has changed a lot as it has been developed further on with new features.

Is there a quick fix to use the new library or is everybody using the previous version?

Just joined this project. I'm involved in a hack-a-thon event at work and this project is what we're going to use to get familiar with Python.My problem is that I can't find any of the supporting files to load into the Pi and the Arduino.

Very nice Porject, but i have many problems to run the phyton scripts on my rpi zero.This is my first contact with python an the 'controller_sim.py' returns an 'segment fault'. Also it is not possible to run the 'games_pi.py' script. The library 'socketserver' isn't found and i could not install the module PIL.

Hello, it's me again. Good news is that I finished the project in time. Here is a picture if you're interested with how it turned out: http://imgur.com/a/Kg2ey

For some reason I cannot reply to the other comments. However I had a question about the "boot logo" that the teensy displays during the Pi's boot. How did you create that? I am looking to change it however I'm not sure why but when I change the code, I get a crash. Thanks.

Thanks, eventually I want to have more games and whatnot added. I've been thinking about pacman but haven't figured out how I'd do it. I downloaded gimp and I've exported a picture both to .c and .h however I am not getting the hex values as you did. This is what I get:

I am back from summer vacation, sorry for the delay. It's been a long time ago, maybe I'm wrong. I tried gimp for sure, but maybe later I used a different tool to convert RGB bin data to Hex string, ending up with tools like Matlab/Octave or something else. If I find the tool again, I'll let you know.

hey man, really liking your project! I'm currently building a 32x32 Matrix very similar to yours and came across your project after I've already started. I've decided to use your program to run the matrix as a main goal of this was able to play pong, Tetris, and snake. Which yours does! However I'm having some issue with the code. When I play Tetris, the shape will show the entire time going down the board but after it lands, the shape disappears. It only does this for the first 12 or so led rows. Also the clock does not show properly. I've added links to 2 gifs that show the issues I'm having. If you'd be willing to help that'd be great. I'm only using a 16x32 panel right now as I'm working on the build part of the matrix. Your help is greatly appreciated

What do you mean changed in simulation mode first? If you mean tested, I changed the values however they did not reflect in the simulator. Snake works properly and uses the entire board. It is just the other ones that I am having issues with. I have yet to add the 4 8x8 LED's. Here is a screenshot of my options:

Also, I am currently using an Arduino Mega and RPi3. I was originally intending to use the teensy 3.6 however your provided sketch is not compatible with the teensy 3.6.

good news: somehow got the teensy to work so switched to that and it fixed most my problems. Now I just have to resize the various components. Pong doesn't use the proper borders and I can't find in the code where it specifies the borders. Also I can't change the clock size, I get a crash every time. Not sure if I'm changing them right

Hi - Thanks for sharing! Working on something very similar with my son for a Christmas project. Any chance of posting any of your code? Would give us a great starting point for our own project - this is, by a mile, the most ambitious project we've undertaken and we're a bit in over our heads.