Charlie Brown Christmas Special Christmas Display
My dad is a fan of the Charlie Brown Christmas Special, and for a while has talked about wanting to include characters from Charlie Brown in our Christmas lights display. A couple years ago, my sister kicked that off by cutting out and painting “Snoopy fighting the Red Baron” to go on top of our shed.
But my dad didn’t just want Charlie Brown and Linus to be outside as part of the display; he also wanted to play an audio clip from the Christmas special, from when Charlie Brown gets frustrated with directing the play and yells “Isn’t there anyone who knows what Christmas is all about” and is answered by Linus.
In addition to playing the audio when someone presses a button, he also wanted to have the lights on the display scene change, especially when Linus says “Lights, please.” So while my sister worked on additional plywood cutouts of Linus and Charlie Brown, I started working on electronics.
In all, we needed a large, easily visible button to put out near the street for people to press, three controllable spotlights (one each for Snoopy, Charlie Brown, and Linus), setup for a speaker, and something to tie it all together.
For the button we used a big, red, illuminated button from SparkFun, which my dad mounted to an electrical box, and attached to a “Press Here” sign that my sister made. To power the internal LED on the button, we put an old 9V wall transformer in the box, with the plug replaced with disconnect wire connectors.
For the display’s control center, my dad picked up a tool box, which we divided into two levels. On the bottom, we put power supplies for the electronics, and on the top we mounted the main components. The whole box acts as one unit, with a single power cord going out which supplies all of its contents. Additionally, my dad mounted a four-outlet electrical box to the side of the toolbox to be the connection point for the three spotlights (with an extra outlet for future expansion).
The central computer for this project was a Raspberry Pi. I chose this over other options, e.g. Arduino, because the Pi has native support for audio, both in that it has a standard 3.5 mm audio jack built in, and that it’s pretty trivial to find the necessary software or libraries to play audio on it.
To control the spotlight outlets, I used an 8-relay board. The relay board required 5V inputs, while the Pi’s controllable GPIO pins only output 3.3V. To control the relays, and as working space for plugging other low-voltage items, like the button, I mounted a small breadboard in the toolbox next to the Pi. The relay control setup is a simple transistor setup to take the 3.3V regular GPIO output up to 5V.
Also included on the breadboard was a test button, plugged in parallel to the main button outside. This made it easier to test the audio and relays before we rigged up the main button, and it’s always a good thing to have in case something stops working.
For the audio, I bought a small amp with a 3.5mm audio input and connected that directly to the Pi with the shortest 3.5mm cable I have ever seen. This was connected to a pair of outdoor speakers my dad happened to have. Here’s the assembled box:
For software, I wrote my own sequencer setup in Python, using the GPIO library. The
sequencer setup lets me specify the light sequence as a time + lights to set on/off, and
was pretty easy to adjust when I found out the audio clip I was using was missing a bit a
the end (Linus: “And that’s what Christmas is all about, Charlie Brown”). For audio
playback, I was lazy and couldn’t find a sufficiently easy-to-use audio library for Python
in under 5 minutes, so I just ran the command-line wav
file player, aplay
, as a
subprocess.
The Pi itself runs Arch Linux, because I wanted a minimalist distro, and didn’t need any fanciness from Raspibian. The actual software for running the lights and audio is set up as a package, so if I need to change it, I can just makepkg on my computer, then install it with the package manager. Startup is handled by a Systemd service which runs the Python script whenever the Pi turns on.
Put all together, and here’s what it looks like: