Before covid, there was a massive wall of flip dot displays tiled together in the lobby of one of the buildings at my work. It had a Microsoft Kinect sensor on it, and whenever you got close enough it would cast a silhouette of your body onto the wall that would mimic your motions. It was incredibly fun and made a really satisfying shimmering noise when in use, as the metallic disks flickered back and forth across the screens. Here's a video (not of the same wall) that gives an idea of what it was like:
When everyone eventually started returning back to office, the wall had fallen into disrepair. An important 3rd party service it used on boot-up had been killed off while everyone was working from home, and the original maintainers of the wall had since left the company as well. Some folks attempted to revive it, but after several weeks of fruitless effort it was deemed not worth the time investment anymore. The panels were taken down and posted as up for grabs on the internal Makers email list. Naturally I grabbed a few and attempted to make a mini version of the original wall for myself!
I felt the first step was to make a chassis to hold together the panels, so I bought some aluminum L-bracket from Home Depot and salvaged some aluminum T-slot rail from the recycle bins at work. Here's a progress shot of the backing frame coming together. The T-slot rails are being cut down to size and joined together
I drilled and cut aluminum L bracket down to size to hold the panels onto a larger rigid frame that was made from the T-slot rails.
Here is the final result of the frame I built for the panels! The two triangular supports on the back can be adjusted to allow it to be angled more steeply upright, and the power supplies + raspberry PI will be mounted on the rails behind the display.
Originally the display driver code was prototyped on an Arduino Uno. The mess of wires and a Raspberry Pi in the next photo was what I finally got working. I decided to go with a Raspberry Pi because there were convenient libraries for using cheap Intel RealSense depth cameras. The Raspberry Pi output is sent to a logic level shifter to convert from 3v to 5v, then finally that signal goes to a RS485 converter which the displays require. There is a lot small magnetic fields around the display to flip the discs, so they use RS485 twisted cabling to handle the large amount of electrical noise generated.
I was having issues for the longest time getting the code to work on the Raspberry Pi even though it was working fine on the Arduino. This took an EMBARRASSINGLY long time to realize and I finally had to break out the oscilloscope and decode the data being sent from each device to find the delta (next image is how it was supposed to look). I was actually sending 3 extra empty bytes in front of each intended byte... there was a single line in my code where I accidentally converted an Arduino 'byte' type to 'int' which is 4x the size. 🤦♂️
Here is an example of drawing text and individual pixels [TURN SOUND ON]. I wrote a simple library for drawing text, lines, points, and raw black/white bitmaps to the screen.
This next video came from experimenting with finding the max refresh rate of the displays, which happens to be about 10 fps [TURN SOUND ON].
I ended up getting a fourth panel! After playing with it more I felt it definitely didn't have enough pixels to use it the way I wanted. After fixing a slew of other issues regarding data corruption when passing depth cam frames between processes on the raspberry pi, I finally got that portion of it working!
This was the main attraction of the flip dot wall to me; it's the tribute to the massive wall that these panels came from, and the bare minimum I'd do to feel like the project was a success, and now it is!
After this I added on a few minigames to the project, mostly just because I could and it made the display feel more functional and fun. I started with making a quick clone of Flappy Bird, which I called "Flippy Bird" (good name idea, Chris!)
Then I added a lava lamp simulation with the rendering concept of metaballs (not meatballs).
Then finally I added pong because why not!
I'm super happy I put in the time to finish this project, and maybe in the future I'll add some more cool features like chatGPT or Google Gemini integration if the depth camera I have has a microphone in it I can use. If you'd like to see the code I used to create this project, you can find it in this repo, on my Github