Build instructions for a LED Arcade table

Table with controller
Table with controller

This instructable shows you how to build an LED table with some retro arcade games. All material together is about 300-350 Euros with the most expensive parts being the LEDs and the laser cut parts.
The LED Arcade table has the following programs:

  1. Pong
  2. Tetris
  3. Snake
  4. Rainbow animation
  5. Stars animation

The original design and code of this table was done by Klass De Craemer. His project can be found at https://sites.google.com/site/klaasdc/led-table

Usually you can finish this table within a weekend if you have all the required tools and needed parts.

Rainbow animation
Rainbow animation
Tetris!
Tetris!

 

 

 

 

 

 

 

 

Step 1: Things you need

Hardware

  • IKEA Lack table 25 Euro
  • 1m aluminium Angle 40 x 20 mm
  • 2m aluminium Tee 20 x 20 mm
  • 4 metal corners 30 x 30 mm
  • 8 M6 screws (20 mm)
  • 8 M6 nuts
  • 8 wood screws (20 mm, suitable for the metal corners)
  • 412 x 412 x 3mm acrylic glass, 25 Euro, e.g. from evonik

Electronics

  • 5 m WS2812 RGB LED strips , 30 led / m, 70 Euro, e.g. from watterott
  • Teensy 3.1 micro controller, 18 Euro, e.g. from watterott
  • Teensy OctoWS2811 Adapter, 9 Euro, e.g. from watterott
  • Sparkfun USB Host Shield, 23 Euro, e.g. from watterott
  • Arduino Proto Shield, 4 Euro, e.g. from watterott
  • Power Supply 80 W, 5 V, 24 Euro, e.g. from watterott
  • 1m Cat 6/7 cable with RJ-45 plugs
  • 50 cm power cable, 3 pole
  • power entry module, 6 Euro, e.g. from reichelt
  • IEC power cord, 3m, 4 Euro, e.g. from reichelt
  • retractable USB hub, 17 Euro, e.g. from pearl
  • wired Xbox360 controller, 25 Euro
  • 2 m stranded wire 1 mm, red and black
  • stacking bar, 1 Euro, e.g. from reichelt
  • pin header and pin sockets
  • 40 cm stranded wire red and black
  • 1 m stranded wire of other color than red and black
  • socket and plug, 2 pole, for LED power supply

Laser cutted parts (3 mm)

For best results prime the parts and paint them white. Be careful to not use too much paint, otherwise you have to rework them before assembling.

Tools

  • soldering iron
  • multifunctional rotary tool
  • hand saw (a japanese saw works great)
  • multimeter
  • side cutter
  • hole saw
  • screw driver
  • hot glue gun
  • adhesive tape
  • insulate tape

Step 2: Build the table

At first build the table according to the original build instructions. Usually the instructions are within the package containing the table. Additionally you can download the instructions online.

In the end the table should look like this.

Step 3: Cut the hole in top of the table

First mark a 420 x 420 mm square at the top of the table. In order to have it centered properly it should have a margin on every side of 65 mm.

20140713_113641Now start with the multifunctional rotary tool to cut into the table on one side of the square, starting in a corner. The thickness of the table top is only 3 mm so it doesn’t have to be a deep cut. When the length of the cut is about 50 mm use the hand saw to cut the rest the side. The table top is filled with cardboard material which should also be cut.

ATTENTION
Don’t cut through the bottom of the table top!

If you are finished with the first side, cut the remaining 3 sides of the square in the same way.

With the square completely cut out it should be possible to remove the top plate within it by using a slotted screwdriver pulling the plate upwards. Beneath the plate is a cardboard honeycomb structure, which can easily be removed from the bottom.

Finally cut two 40 x 40 mm centered holes into the bottom plate on each closed side.

The end result should look like the table on the picture above.

Step 4: Integrate USB hub

20140713_114740
1: Loosen the table top

First we have to remove the table top. Therefore we have to lose 4 screws in the corners of the table (see picture 1). After this, we are able to simply remove the table top.

Now mark the center of a side of the table. Next we use a hole saw to cut a hole into this side where the USB hub will be mounted (picture 2). In the end you should have a nice hole in the side (picture 3). Now insert the USB hub into the hole (picture 4). If the USB hub won’t fit, you need to enlarge the hole with a rasp.

20140713_120714
2: Saw a hole
20140713_115535
3: The hole should be centered.
20140713_122244
4: Insert the USB hub

 

 

 

 

 

 

 

 

 

 

 

 

 

Step 5: Embed power entry module

20140713_123515
1: Drill large hole

Create a large hole by drilling some holes next to each other from the top in the center of the other side of the table, where the USB hub is NOT installed (picture 1). Insert a pole through the hole down to the ground and use it to make some free space in the cardboard within the side part. Next drill a hole from the inside at the top of the side (picture 2, the hole with the cable).

20140713_123612
2: Position of the power cable

Now cut a hole of the size of the power entry module from the outside at the bottom of the side (see location at picture 3). Insert the power cable into the hole at the top inside (picture 2) and use the pole to push it down to the hole for the power entry module.

20140713_123344
3: Power entry module at the bottom

Connect the cable to the power entry module by soldering the 3 wires within the power cable to the according pin of the power entry module.

  • Protective ground = yellow/green cable
  • Neutral conductor = blue cable
  • Phase = brown cable

When all cables are connected please double check the connections using a multimeter. If all connections are correct, insert the power entry module into the hole.

 

ATTENTION
This power cable carries mains electricity and is therefore dangerous! If you haven’t been trained in handling this, ask a friend with proper training to help you!

Step 6: Add mount for power supply and electronics

20140713_134631
1: Connection of angle and corners

Cut the angle into two 444 mm long pieces using a metal saw. Drill some holes into each end of the angles and bolt the corner and the angles together (picture 1). Mount the power supply on the angles 65 mm from one end with the connectors directed to the near end and fix it using insulating tape (picture 2).

20140713_135018
2: The mounted power supply

Now fix the angles with wood screws and the corners in the center of the table about 55 mm from the top. The side with the power supply should be directed to the side with the power cable. The approximate position can be seen at picture 3.

20140713_134615
3: The mount centered underneath the table

 

 

 

 

 

 

 

 

 

 

Step 7: Solder electronics

Teensy

20140713_141555
1: The Teensy with pin headers

First we have to separate the VIN from VBUS voltage of the teensy board using a sharp cutter. The exact location can be found at the bottom of the official site.

Next we solder pin headers to the bottom side of our Teensy (picture 1).

2: Teensy on WS2811 adapter
2: Teensy on WS2811 adapter

 

 

Now we plug the Teensy onto the OctoWS2811 adapter board with Teensy’s USB socket and the OctoWS2811 RJ-45 sockets facing in different directions (picture 2) and solder the pins to the adapter board (picture 3).

20140713_141709
3: Soldering the WS2811 adapter back side

 

 

 

 

 

 

 

 

Arduino Proto shield

20140713_141738
5: Proto shield with sockets, reversed
20140713_141749
4: Proto shield with sockets

Solder some socket terminal strips to the front side of the proto board as shown on picture 4 and 5. The socket with VIN, GND etc.  shown in in fornt of picture 4 is dual. All sockets in the prototyping area are used by the Teensy, the sockets outside for the USB host shield.

 

20140713_141803
6: Proto shield back side

Flip the proto shield to the backside. Connect the following pins using silver wire or wire straps:

  • Teensy VIN to Arduino VIN
  • Teensy GND to Arduino GND
  • Teensy 13 to Arduino 13
  • Teensy 12 to Arduino 12
  • Teensy 11 to Arduino 11
  • Teensy 10 to Arduino 10
  • Teensy 9 to Arduino 9
  • Teensy 3.3V to Arduino 7
  • Teensy 15 to Teensy 16
  • Arduino GND to Arduino GND (both pins next to each other)

The connections should be like the connections on picture 6.

USB Host shield

20140713_141856
7: USB host shield with stacking bars

Solder some stacking bars to the bottom of the USB host shield (picture 7).

The sparkfun USB host shield generates VBUS itself from VIN. Unfortunately if VIN is 5V, VUSB is too low for the motorized USB hub to work properly. So we need to fix that:

Cut the path on the backside of the host shield shown on picture 8. Afterwards solder a wire to VIN as shown in picture 9.

8: Path to cut on back side
9: Wire to bridge VIN and VUSB

 

 

 

 

 

 

Power supply cable for LEDs and controller

10: Solder power supply cable.
10: Solder power cable.

Now solder 10 cm heavy stranded wire of red and black and 40 cm of the according smaller stranded wire together and connect it to the socket. Your cable should look like similar to picture 10.

Step 8: Assemble electronics

Power

1: Connect mains power cable
1: Connect mains power cable
2: Connect LED power cable
2: Connect LED power cable

First connect the mains power cable to the power supply (picture 1). Again, if you aren’t sure which cable to connect to which connector, ask somebody to help you.

Now connect the LED/controller power cable  to the power supply.

  • Red -> V+
  • Black -> V-

 Controller

3: Plug Teensy to Proto shield
3: Plug Teensy to Proto shield

Attach the Teensy with the OctoWS2811 adapter to the Proto Shield. The direction is shown in picture 3. Connect the power cable to the Proto shield. Use the inner sockets. Red goes to VIN, black to GND (picture 4). The  names of the pins are found on the bottom of the Proto shield.

4: Connect power cable for controller
4: Connect power cable for controller

 

 

 

 

 

 

Now it’s time to add the USB Host shield. Plug it into the sockets with the USB socket directing to the same direction as the micro USB socket of the teensy (picture 5). Turn the controller up side down and insulate the bottom with insulation tape (picture 6). Alternatively you can use a 3d printed, for example this one (picture 7).

5: Attach USB Host Shield
5: Attach USB Host Shield
6: Insulate Proto Shield bottom
6: Insulate Proto Shield bottom
7: 3d printed arduino mount
7: 3d printed arduino mount
8: Fix electronics
8: Fixate electronics

 

 

 

 

 

 

 

 

 

 

 

Fixate the controller sides to the mount with some rounds of insulating tape (picture 8). Don’t block the RJ-45 sockets! Finish this step with plugging in the USB hub.

Step 9: Build grid

Assembling

1: Glue parts A to the bottom plate
1: Glue parts A to the bottom plate

Put the bottom plate on a mat to prevent gluing it to your desk. Now start to gluing the parts A to the bottom plate leaving out the border row. Next rotate the bottom plate through 90° and add the parts B. Now you start directly on the border. Finally there are only 2 sides at the border left. Glue the parts C to these sides. In the end the complete grid should look picture 2.

20140717_233559
2: Complete grid

 

ATTENTION
Look out that the grid isn’t distorted and that all parts at the top have the same height.

Add LED strips

3: Cut between soldering pads
3: Cut between soldering pads

Cut the LED strip into 12 smaller strips with 12 LEDs on each and remove the silicon encasement. You can cut the strip safely between the soldering pads (picture 3).
Arrange the LED strips in a zig-zag path (the arrow on the LED strip gives the direction, see picture 4). Use adhesive tape to fix the LED strips with the LEDs filling the holes in the bottom plate (picture 5).

5: Fix LED strips with tape
5: Fix LED strips with tape
4: Direction arrow alternates.
4: Direction arrow alternates.

 

 

 

 

 

 

 

Prepare CAT6/7 cable

Cut the CAT6/7 cable in two halves. Afterwards  remove the coating and the shielding so you have at least 20 cm of each wire pair free.

Solder LED strips

6: Solder TP cable
6: Solder CAT6/7 cable

Now it’s time to solder the CAT6/7 cables to the LEDs. Every 2 LED strips a new pair will be soldered. The white containing wire has to be soldered to the GND pad, the colored to DIN pad (picture 6).

  • row 1: cable 1, orange
  • row 3: cable 1, blue
  • row 5: cable 1, green
  • row 7: cable 1, brown
  • row 9: cable 2, orange
  • row 11: cable 2, blue

The green and blue wires of cable 2 are not needed.

Afterwards we need to connect the data pads of each LED strip pair. Therefore we solder a 75mm wire to the DOUT pad on the other end of the first strip of the pair and to the DIN pad of the second strip (picture 7).

7: Connect DATA
7: Connect DATA
20140718_002325
8: Power supply for LED strips

Next we need to solder the wires for the power supply of the LED strips. These wires are soldered to the other end of the strips. Connect the GND and VIN of every LED strip.  Keep in mind that the position of GND and VIN alternates between the LED strips. This can be seen in picture 8.

If all LED strips are connected, add a plug with some stranded wire to the middle of the grid to connect the power supply (picture 9). The final result can be seen in picture 10.

9: Power supply plug
9: Power supply plug
20140718_010705
10: Complete LED wiring

Step 10: Test electronics

Install Arduino & Teensyduino

Now it’s time to test the electronics and see, if everything works as expected.
First we have to program the micro controller. The Teensy micro controller is programmable through the Arduino IDE, so your first step should be to download and install it. The necessary compiler and libraries needed for the Teensy are included in an add-on you need to install.

Install libraries

OctoWS2811

The OctoWS2811 is a library for Teensy especially written for controlling huge amounts of LEDs. It controls up to 8 channels simultaneously and leaves enough computation power for other tasks. Download the zip archive and unzip the contained folder to the Arduino library directory (for Windows this is usually C:\Program Files (x86)\Arduino\libraries).

USB_Host_Shield_2.0

The USB Host Shield 2.0 library allows the usage of USB devices. It is used for the LED table to read the control events from the Xbox360 controller. Install it according to the instructions found at the library’s github repository.

spi4teensy3

spi4teensy3 is a needed library for using the USB_Host_Shield_2.0 library on a Teensy. Install this library by downloading the zip from github, extracting the directory spi4teensy-master, rename that directory to spi4teensy3 and move it to the Arduino library directory.

Compiling firmware

1: Arduino IDE
1: Arduino IDE

Go to https://github.com/cemonds/led-table and download the zip of the repository. Unarchive the zip file and open the firmware.ino project with the Arduino IDE. Now select Teensy 3.1 from the listTools -> Board. Afterwards press the verify button to compile the firmware (picture 1).
If everything is right it will show the message Done compiling after a few moments.

Programming the micro controller

Now connect the Teensy to your computer with a micro USB cable (picture 2). Connect the grid to your power supply (picture 3) and to the OctoWS2811 adapter (picture 4). Now switch on the power supply and hit Upload in the Arduino IDE. The firmware is now compiled and uploaded to the Teensy. After a short while the Arduino IDE shows the message Done uploading. and the Teensy will restart. A few moments later LED grid should show the name of the first program.
Extend the USB hub by touching it and plugin in the Xbox360 controller. You should now be able to switch the menu items by pressing left or right on the directional pad.

Step 11: Integrate grid

Unplug the grid’s power supply and signal cables. Attach the table top on the table stand. Insert the grid installing the power and signal cables through the holes in the bottom of the table top. Connect the tables to the power supply and the micro controller board.

1: The table with the attached grid
1: The table with the attached grid

Step 12: Add cover

1: Glue the corners
1: Glue the corners

Cut the aluminium tees with 45° angle so they form together a square with the side length, matching the acrylic glass plate. Use hot glue to attach the aluminium to the acrylic glass (picture 1). The rough side of the acrylic glass directs to the top in picture 1. In the end the cover should look like the cover in picture 2. Finally put the cover on top of the grid (picture 3).

2: The finished cover
2: The finished cover
3: Mount the cover
3: Mount the cover

Step 13: Play!

Menu

The software consists of 2 parts. The first part is the menu. It is automatically started, when the table is switched on. The menu shows the number of the currently selected application and the name. You can select another application with left and right on the directional pad of the Xbox controller. To start an application press start. When running an application start takes you back to the menu.

Pong

Pong is a two player game, but right now it’s only single player, so you play against a computer controlled player. You control the blue player with the up and down buttons of the directional pad. The game ends if one player reaches a score of 5 points.

Tetris

You control the block with left and right on the directional pad to move the block horizontally and down to move it one row down. If you need to rotate the block, you can push the yellow Y button.

Snake

You control the snake with the directional pad. Don’t press the button to move the snake directly to the direction it is coming from, or the game will instantly end.

Rainbow and Start

No control here, it just looks nice.

Finish.

Now your own LED Arcade table is finished. We hope you enjoyed reading the instructions and building the table. If you have questions and problems, just add a comment to the page or send a tweet.

Have fun!

Added High striker and LED Table projects

Today I added a short description of the High striker and my LED Arcade table projects. Right now there isn’t much content about these projects, but I’m working on some more information. Expect build instructions for the LED table within the next week. Additionally some more pictures for both projects will follow. Maybe I’ll find some time next week, to write a little post about the Maker Faire Hannover. It definitely deserves a post.

 

 

Jenkins slave building android maven project

Today I tried to add an android project to our Jenkins continuous integration system. Since it is build by maven, I didn’t expect any trouble. In order to build android apps, maven needs a manual installed android SDK, so I logged into the dedicated jenkins slave (a minimal amd64 linux system with no X11) and downloaded the SDK for linux, using wget. Since no direct internet traffic is allowed in our company, I had to use the proxy server.

The first problem arose when I tried to download the different platforms and components for android. Usually you download these parts by using a graphical tool, included in the SDK, but since this machine didn’t have any graphics configured, this won’t work. It took me some time to discover the parameter

--no-ui

, which runs the tool without a graphical interface. Now I tried

./android update sdk --no-ui

, but since the machine hadn’t a direct internet connection, the download of the components didn’t work. My attempts of defining the proxy with the usual linux way by setting the “http_proxy” variable or setting the java system proxy information by adding “-Dhttp.proxyHost=proxy -Dhttp.proxyPort=80″ to the android script failed. Normally you would change the proxy information by using the graphical interface, but as told before it wasn’t available.

The solution I came up with, was using the proxy configuration file from a different machine. So I put the file androidtool.cfg containing the proxy settings in the /home/<user>/.android directory and voilà, downloading the platforms and components did work.

Nevertheless the maven build didn’t finish. Since the system was using amd64 libraries, the androidtool used by maven couldn’t find some libraries, it uses as 32bit versions. I just needed to install them with a short

apt-get install lib32z1 lib32gcc1

and everything worked like a charm. :-)

Impressions CeBIT

Last week I visited the CeBIT exhibition in Hannover. I was there for the last 2 days, friday and saturday, luckily I had tickets for “free”.
The first event I attended was a speech on ways and services to use facebook for commerce. It was held by a company dot.Source and it was quite interesting. During the 20 minutes the lecturer gave a summary about ways to connect something like an online shop with facebook and harness the power of the social graphs of the individual user. I wasn’t aware about most the examples he gave but they showed up as some good starting points for digging deeper into this field. All of those services gave me the impression, that spikee (a project by some friends and me, right now in stealth mode) is on the right direction.

The rest of the day was filled with wandering through the halls and wondering about all those small asian companies selling the same mice, head phones and 3d glasses, next to manufacturers of glassesless 3d displays. There was one company exposing some speakers, demonstrating the sound (or should I say maximum volume?) with some old german summer hit:

I passed this booth several times, everytime with this song in my ears. If I had my booth next to this company I would have gone crazy.

Saturday I attended the CeBIT AppZone conference. I managed to see 3 keynotes, at first Sascha Lobo. He is a famous german blogger, known for his fancy hair style. In his keynote he talked about the iOS walled garden and the openness of android and why he thinks, openness in form of HTML5 will win this battle. He made some good points which enforced me to take a deeper look in android development.

Direct following was a keynote by the intel employee Peter Biddle in which he gave an introduction to the intel AppUp program. As far as I understood it’s an initiative to provide tools for platform independent apps. It was nice to see, but nothing which changes my mind.

The third and last keynote I attended was performed by Gustav Söderström, the vice president for products at Spotify. He presented the spotify application, which is basically some kind of subscription service for music, unfortunately not available in germany right now. Really impressing was the incorporation of social functions into spotify with shared playlists, dynamical playlists out of facebook walls etc.. He communicated the passion for music very well.

I left the conference after this keynote and went to meet my friends at the StarCraft II final of the intel extreme masters world championship, which was also being held at CeBIT. Although I don’t know much about the game it was fun to watch them play.

In my opinion CeBIT is only interesting if you know upfront what you want to see there. Walking through all the halls with the same stuff over and over can be very annoying. So I would give you the advice for next year: Take a look into the program and search for events you might like. If you find some, than go there. If you are only interested in new technology you better stay at home and watch some newscasts about it.

The first App arrives App Store

The GigCrasher made it. It is available in the App Store under http://itunes.apple.com/en/app/gigcrasher/id420294176?mt=8. You could think, this would be the end of a story, but it seems the story had just begun. Unfortunately it started other than planned with some trouble, so I had to create a new version with a bugfix, which is right now waiting for the review by apple. As a bonus there are also new features included, namely facebook and twitter integration. The danger lies in devastating reviews in the app store, which can ruin your app forever. so you have to take an unplanned night shift.

But I was really surprised by some users living in the united states or in switzerland. I thought it would take longer to have users from other countries and outside my circle of acquaintances trying out my app. I see this as an incentive to steadily enhance the app. On tuesday I’m going to meet with a friend of mine for discussing a GigCrasher version for webOS. It would be great, to have the service available for other platforms, too. webOS does seem to be a lot smaller than the iPhone market, maybe this would be a chance to become a major player on one platform. There are also the first requests for a android version. Now is the question, what direction should be taken? New features for the iPhone or expansion to new platforms? Android and a webapp integrated in facebook do look as the most interesting things I could do, if you think about the technologies I could explore. I have the dim feeling, the near future will be more stressful than the last few weeks. There are also other projects which need their time after all.

GigCrasher project description online

While I’ll have to wait for Apple to review my GigCrasher iPhone app I found some time to describe this app here in the projects section. So if somebody is interested in the technologies used in the iPhone client or the JEE server, this is the place where he can find some information about them. If you have further questions or ideas for this, feel free and use the comments section to let me know.
Right now the site doesn’t contain much information, but I’m working hard to fill it with some interesting content. I have some ideas for interesting things to blog about, but right now I’m too busy with getting some of my projects on the site. I hope I’ll have some more time in the near future to write something about current topics.