When Digi International headquarters moved into a new location in Hopkins Minnesota in January, 2019, we worked with a signage company to create a sign to display prominently on our building. It was the perfect time to incorporate some of our own IoT technology. This article describes how we designed a back-end control system that enables us to change the sign colors for special events and holidays.
First, here are some views of the sign prior to installation, being installed, and in normal operation.
The initial design was to create a hardware solution for the sign that uses customized off the shelf parts and common standards. The intent is that the sign would be able to support whatever effect or software we wanted to create on the sign for future products. We didn't want to be limited by the hardware.
Let's have a look at the technologies we utilized to put this all together.
If you are familiar with theater lighting standards and lighting for your favorite band, you may have run into a lighting standard called DMX. DMX is a great standard, easy to understand, and has been around for a long time. DMX started out as a "serial" RS-485 (very similar to RS-232) standard. DMX512 specifically allows 512 8 bit "channels" to be sent and updated around 40 times a second. This allows rapid changing of values. DMX is still going very strong, but has some other standards that help support it. Specifically ArtNet, and sACN. TRhese "network" your DMX protocol.
If you follow the maker community, you may find that with LED's there are a lot of fun projects taht you can by using special addressable Red/Green/Blue (RGB) LED's from places like Adafruit or Sparkfun. Many of these devices are listed as 5050 LED, WS2812, WS2811 or NEOPixels Lights. They can come in single LED packs, or a complete strip of RGB LED's. Each LED has the three colors. If you are not familiar with color science, for lighting, red, green, blue are the primary colors for lighting. Together with these three colors, you can represent any color. In our sign we used a similar RGB strip, but is designed for outside sign usage. One particular concern was the ability to work in very cold temperatures.
In order to convert and manage the significant number of lights that we have to control, we wanted to use a network connection. With one network connection, we can send the control data from the network to the DMX interfaces. With each color using one DMX channel, and one RGB LED using three DMX channels, we are limited to 512 / 3 = 170 RGB LED's that we can control per DMX stream (or universe as it is called in DMX terms). The converter we used has 4 DMX physical channels for the ability to address 170 * 4 = 680 RGB LED's. In our sign design we wound up using around 420 LEDs.
This converter will take the DMX signal and convert it to the serial protocol that is needed for the RGB LED bus (5050,WS2812,WS2811) This will directly connect to the lights and the power supplies that power the strips. In our design, we used one strip for EACH letter. The strips can be variable in length, as long as they don't go over 170 LEDs.
With all of the lights now networked, how do we remotely address the converters? We used a cellular connected Digi IX14 industrial cellular router. This device connects via cellular networks and allows connections in and out of the box to the Internet. This box also will run Python. The intent is to have local programs running that will send the higher speed streams to the DMX lights, and take a much slower signal from the Internet. If you're interested in the python that was written, it is hosted out here https://bitbucket.org/dschleede/dmxlite/src.
If you have worked with remote devices that are specifically not directly connected to a LAN, you know how much of a pain it can be if the device goes off line, or changes IP, or other items when the device is not performing to your designed standard.
One of the great strengths of using enterprise device management, such as Digi Remote Manager (DRM), is that you can roll out changes to your code and manage your device(s). This especially imperative if you have multiple devices to update. If one day have these signs at every Digi location, for example, we can simply roll out the code and make all signs act as one.
We are also working on the Python code base to take control input (not OSC commands) from Digi Remote Manager. This means one place to send commands, and all signs will change at once. Even though we have just one sign for now, the DRM control was great in helping diagnose and test the system, as device access is trivial, and recovery of the device was simple if we ran into any issues with the device or code.
During development, we did find that our Python program was a little bit too busy running its "busy loop" looking for input. This showed up under the CPU load for the device. The Python program has a parameter that helps manage this, so from the alerts from DRM, we were able to do better tuning of the Python program to reduce the CPU load. It's also nice to see what the temperature is on the device and specifically in the cabinet on the roof. There were some summer days where the cabinet was quite warm.
Open Sound Control was another protocol we used. Although this is similar to the MIDI controls, it allows the ability to map controls and buttons to any variable. For our initial design we used a Program on Andriod called TouchOSC. This allows us to create our own control panel and send control messages via the network to the IX-14 controller. The IX-14 python will accept the OSC messages and convert them in any way we choose with our python program to DMX, or more specifically, ArtNet Network UDP messages.
The smart phone app for controlling the sign
We demonstrated an initial prototype to the Digi International leadership team, and presented the concept at a company meeting. Like all IoT projects, an early proof-of-concept can help test out theories and ideas and ensure that you have all the pieces you need to ensure success.
The idea and prototype were very well received, and we had the go-ahead to fully pursue the project.
The completed IoT prototype of the sign project
The design of the sign also included some standard white lights that are triggered with an electric eye that will turn the white lights on and off during the night. The intent is that the RGB lights are not running all of the time, and only work on special occasions. Using the IX-14 and OSC, we integrated a 110v relay that turns off the white lights and simultaneously activates the RGB lights and converts.
Currently, the Python code has some modules to include to program simple functions for different colors (dynamic color changing), but it can also set up a static color as well.
One of the great aspects of the sign is that with the ArtNet to DMX converter, I can record DMX streams and play them back. In the future, we can use pixel mapping programs to play animations on the sign and then play them back with one simple OSC control. Right now however, we can change each letter to a static color only. Below is an early example of rotating colors for each letter.
All of this technology was wrapped up in one NEMA case that has been attached to the sign outside. We used DIN rail mounting for the devices to make the install clean. The photo shows a close-to-production version of the cabinet.
Nema enclosure for the sign controls
We have changed the sign colors for several occasions and holidays. The following pictures show the sign as viewed by travelers on the nearby Highway 169 at night on these occasions.
9/11/2019 - Sign changed to red, white and blue, commemorating the lives lost in the 911 attack
Purple pride: the Minnesota Vikings football opener, September 2019
Pumpkin orange in celebration of Halloween, October 2019
In the future we plan on doing some pixel mapping of the letters. This will allow us to use motion within the letters. For example, for holidays we could have a pumpkin or Easter bunny bouncing across the letters, stars flying through the letters during the annual Perseids meteor shower, or a waving U.S. flag for Independence Day.
One of the more interesting ideas is the ability to be able to respond to external items. For example, we could for example play an animation of fire when the temperature gets above 95 degrees F. Seems like their is no end in sight for the creativity that can be expressed in the sign... and all powered by Digi connectivity and standard off-the shelf-components.