It all started off when I saw a project on Inventables about an LED sign they made. They put white LEDs behind colored acrylic and made a neat sign with illuminated letters. At the same time I read their post, I was playing with NeoPixels from Adafruit. NeoPixels are a string of full color LEDs that are individually controllable. This meant that I could make each LED any color. So I decided to take the idea of an illuminated sign and turn the volume up to 11. I wanted to make a sign that I could control the color. But if I can control each LED’s color individually, why not animate it too?
First, I hooked the NeoPixels up to the Raspberry Pi, loaded Node.js on it and started writing code that would control and animate the lights. This wasn’t an easy task. After long hours of dedication and perseverance, the lights came to life.
After I had the lights animating and changing color, I wanted a way to easily control it. I made an iPhone app to control the sign. I used Firebase to communicate between the app and the sign. Firebase is a realtime database that uses WebSockets to keep a persistent connection open with the server, so when the app sends data, the sign will be notified of the change and can update it’s animation or color. This means the app can make changes to the sign in realtime!
Firebase also handles user authentication, so I could create a separate account for each new sign I built and make sure that only the right person could change their own sign.
After building one for the startup I work at, Civil, other founders/friends wanted one too.
One for us
After I’d made five signs for other folks, my wife and I decided we wanted one for ourselves. But we didn’t have a logo. We thought about making one of our last name but we’re not the kind of folks who like putting their name in giant letters on buildings. Instead, we looked back at our wedding invites. We had made a low poly illustration of a heart and thought that would make a cool sign.
The sign is about 12" x 12" so we couldn’t really fit a Raspberry Pi in there very well. Instead, I wondered if a Particle Photon could drive the LEDs. The Photon is a small Arduino device that’s made for IoT. I’d played with the Photon in the past and been impressed by the cloud service they run for it.
The first step was to see if the Particle could drive the 60 LEDs in the sign off the power it gets from USB. I hooked up the NeoPixels to the Particle and started learning about Arduino programming.
Particle’s cloud service handles the communication to the device. They have a way of creating accounts and managing permissions, but it seemed overly complicated for what I wanted to do. So instead I created an AWS Lambda function that would check the user’s authentication (based on a Firebase user account), and then send the API call to Particle for their sign.
I wanted a realistic heart beat animation. At first I started trying to programatically create the effect. After lots of trial and error with Sin functions, I decided to try something else. I opened up After Effects and animated the pulsing effect with keyframes. I then exported the keyframe data and used those values to control the brightness of the sign. It worked great and was much faster than trying to create this effect programatically.
Now we have our wedding heart in our living room that’s always illuminated.
It’s been a lot of fun making the signs. If you want to know more about them, let me know!