Improving the local arcade
We all need spaces to visit/relax in outside of the house, and for maker Nick Lombardy, that is his local barcade called Coin-Op in Chattanooga, Tennessee. After it had reopened, Lombardy was approached by the owner of the arcade to build a giant gaming device out of glass blocks that could display images, animations, and even interact with patrons.
LED and power considerations
During the wall’s construction, which was named “BoneBlocker,” Lombardy had to first determine the best way to arrange, power, and control such a large number of RGB lights- all while staying at a reasonable cost. Given his prior experience with NeoPixels, he decided to go with a dense strip of the ubiquitous WS2812B LEDs for running his tests. The initial block had four columns with 11 LEDs each, giving a total of 44 LEDs per block. However, the entire system would have 112 blocks, meaning the power draw would be far too great at 1500 watts. Instead, only half the LEDs would be illuminated in each column to cut the density by a factor of two and yield only six pixels per column.
Block by block
The large wall was built in a corner of the arcade and mounted within a sturdy wooden frame for extra stability. From here, Lombardy applied a generous amount of hot glue to the strips as they unspooled from the top of the wall and cascaded down. The strips were run individually to prevent large sections of the system from going dark due to a fault, and they were all terminated at a series of buses that distribute power and signals.
Sending signals
The original tests were run on an Arduino Mega 2560 which leveraged the FastLED library for quickly outputting data to the strips. And even though it had plenty of GPIO, the Mega’s relatively slow clock speed and USB interface meant the maximum framerate was around 3-5 fps, which is too slow to play a game that requires quick inputs. Solving this challenge meant swapping out the Mega for eight WT32-ETH01 boards that support Ethernet connectivity and are controllable via WLED over a web interface. One quick addition of logic-level converters meant Lombardy was ready to start writing some software.
Going from game to screen
Most LED matrix projects run the game directly on the microcontroller, but due to the distributed nature of the control scheme and requirement for fast screen updates, a more powerful host was needed. Lombardy wrote his Tetris-inspired game for a Node.js webserver and leveraged the popular Three.js library for 3D graphics. Every time the game screen updates, it sends calls to the WLED web API for displaying the latest pixel colors.
The controller
Players are able to interact with the game thanks to a much smaller version of the display mounted onto an X/Y pivoting mount that is similar to a traditional joystick. But unlike a joystick, the top is another glass block that contains 185 LEDs for showing animations and giving player feedback. The block, speaker, and sensors were all mounted onto a wooden podium structure that sits at player height to mimic the feel of an arcade cabinet.
Lighting it all up
As seen in this video by Lombardy, the controller works great for translating the player’s movements into gamepiece translations/rotations that the wall could display. To read about the process of building BoneBlocker, you can read Lombardy’s project write-up here on his blog.