Sourced from the Speedfactory installation, adidas was kind enough to leave us with two custom made flip-dot panels. These had sparked our attention since the moment they were installed in the project and for a while they had been collecting dust in a backroom of our office. Now that we had some time to play with these panels again, we built ourselves some connected communication boards for internal use in our office displaying birthdays, lunch time, Twitter mentions and other special company updates and messages.
Flip-Dot
“What is a flip-dot panel?” you might think. Well, simply said it is an electromechanical display with a very small pixel density and a minimal colour range. Our 100×40cm displays have a resolution of 70×28 dots which can either be black or white, nothing else. Each dot can be controlled individually to flip physically between its black and white side with a refresh rate of about 10 fps.
These flip-dots are produced by Alfazeta and come in panels of 7×28 dots. Our displays consist of 10 of these forming a 70×28 grid.
Slack Bot
The idea was to use the panels in our office to display internal updates and messages. Since Slack is our common communication software we thought it would be ideal if we could send messages to the flip-dot panels from within this software.
We quickly set up a Slack app with a /flipdot
slash command in our workspace and wrote a node.js server and client to catch any payload sent to it. This client painted the message to a canvas using an optimised pixel font and sent the image data to the flip-dot as a TypedArray.
This worked perfectly for text messages but we also wanted the ability to send images or even videos to the flip-dots.
Slack Bot v2
Instead of slash commands this turn we opted for a real Slack Bot that could be targeted for direct messages. Now we could write messages and send files to @Flip Dot
directly from our Slack workspace. The server and client scripts had to be slightly adjusted to handle the new bot and files types.
The video system required a bit of special attention because of the flip-dots low frame rate. We couldn’t simply stream a video in real-time, thus we worked out a promise based system that listens to completed writes by the flip-dot panel’s controller before painting the next frame.
The Client
Each flip-dot panel is controlled by its own Intel NUC (mainly because we had these on hand, but this could very well be substituted with a Raspberry PI). PM2 — a node.js process manager — is programmed to run on Windows startup. The manager starts our node.js client script and VirtualHub. This is a small software that handles communication between Javascript and the Yoctopuse — a micro controller that enabled us to connect the flip-dot panel to the NUC via USB.
PM2 also makes sure that scripts reboot when they crash and has some other handy features like a logging system.
Since we are not 24/7 at the office the NUC’s are programmed in their BIOS to power on every morning at 8:55h and a Windows task in scheduled at 19:00h every day to power off the machine. The BIOS is also programmed to power on the NUC automatically after a power failure. Together with the PM2 setup the installation handles itself completely without any human input.
USB Switch
Actually up till now that last line is not completely true. The flip-dot panels itself don’t have any power switch and need to be unplugged manually at the end of the day. To synchronise the flip-dots’ power states with the NUC’s schedule we attached 5v/220v relay modules to the power circuits and connected the input via USB to the NUCs. Now when the computer turns on it will send a 5 volt signal to the relay closing the power circuit of the flip-dot panel. When the computer shuts down no more power will be sent to the relay and the switch will cut the panel’s power supply.
More Fun
Now that we have a stable setup we can extend the functionalities of our office’s new message boards. The things we already made include:
- Anniversary Bot: scans our HR software for birthdays and Resn anniversaries of employees every day.
- Lunch Bot: listens to a sign from our office chef in the lunch channel.
- Beer Bot: scheduled to print its message on Friday’s end of day.
- Twitter Bot: printing mentions of @resn_has_no_i.
- Clock: a simple digital clock.
- Countdown: a countdown to a set date and time.
- Image and Video upload: displays the file and stores it for easy access later on.
Let’s see what else we can connect to our new toy!