I love Dan Goods' art installation at JPL "Pulse of Exploration". I am constantly amazed that we are constantly recieving little messages from the robotic explorers around the solar system. Its going on right now! I also believe there was a similar project on the internet somewhere in 2019, but I cannot find it. This is similar to the "is the ISS above right now" light.
I love cool light displays. LEDs are cool and I am obsessed.
This pulls data from JPL Eyes DSN.. This is the backbone of the project.
This project uses Adafruit CircuitPython. WS2812 light strips and their python library from adafruit. This project uses the sunrise-sunset API for automatic day/night modes.
My last series of updates add the ability to remotely turn on and off the lights, without having to log into the pi, or pull any plugs. These commands can be run from a computer on the same network, or you can add them to a home automation suite like Home Assistant. First you have to enable the port in your Pulse's config.json
file:
"expose_net_switch": true,
"expose_net_port": 9996
And then add this section to your Home Assistant configuration.yaml
:
command_line:
- switch:
name: The Pulse
unique_id: pulse_of_exploration
command_on: 'echo "ON" | nc dsn.local 9996'
command_off: 'echo "OFF" | nc dsn.local 9996'
command_state: 'echo "STATUS" | nc dsn.local 9996'
value_template: '{{ value == "ON" }}'
Check out the README files in each theme folder!
Currently done! If you have issues or improvements, add em to GitHub Issues and I'll take a look.
Item | Avg. Cost |
---|---|
Raspberry Pi 3b+ | $30 |
4GB or larger microSD card | $8 |
2A or more power adapter + cable | $5 |
WS2812b 5V light strip | $10 |
NOTE (Spring 2022): There is currently a global shortage of Raspberry Pi devices. It is more likely you will be able to pick one up from a local computer store for MSRP than online.
NOTE (Summer 2022): The latest release, raspios bullseye, has removed the default user pi
and its default password. I have updated the instructions to match, but there may be some issues that I don't catch.
- MicroSD adapter for your computer
- Knife
- Electrical tape
- (Soldering Iron, possibly)
First, you have to decide what your setup will look like. This guide will focus on a small desktop setup, but it is possible to run this program on any length of LED strip - provided you have the power supply to support it.
Each segment, the ground, signal, and sky, is optional. This will be presented to you during setup, but it should be decided before purchasing supplies. I had a few designs in mind while working.
There are three options for wiring the lights.
- Running power through the Raspberry Pi. This can power a few lights, but you hit current limits on the board.
- You can use a larger power supply, and wire the lights and Pi in parallel. This may require some of your own electric work.
- You can also use two separate power supplies for the Pi and lights. This wiring pattern allows you to turn the lights off without turning off the Pi.
Board | Power Draw with mild load (mA) | Lights you could power through the board with a 2 A Supply |
---|---|---|
Zero W | 300 | 30 |
3 B+ | 700 | 22 |
4 B | 800 | 20 |
If you are integrating this with another project, remember that the WS2812b lights need a pin that can output a PCM (or PWM, as I learned it) signal. By default the config uses GPIO 18
, but see the pinout for other options.
-
First, pick a Raspberry Pi. I have some 3B+'s lying around, so that's what I'll be using. Most models will work. If you are purchasing one for this project, I reccomend the Pi Zero W.
-
Download the the Raspberry Pi Imager to your computer.
-
If you are using a Windows PC and don't have access or simply dont want to dig into your router's DCHP assignments (or don't know what I just said), download bonjour services.
-
Connect the MicroSD card to your computer. Use the Raspberry Pi Imager to select
Raspberry Pi OS (Other) -> Raspberry Pi OS Lite
-
Click the Gear icon to set up the hostname, username, password, wireless LAN, and locale settings.
-
Flash the SD card image.
-
Remove the MicroSD card from your computer and put it in the Raspberry Pi.
-
Power on the Raspberry Pi by connecting the power cable. Wait for it to connect to your network (may take up to a minute or two).
-
Open a terminal on your computer (PowerShell, Terminal).
-
Connect to the Raspberry Pi via SSH. In the terminal, enter your credentials (replacing
$USER
and$HOSTNAME
with the username and hostname you set in the earlier step)ssh $USER@$HOSTNAME.local
-
Enter
yes
to the message that may appear:The authenticity of host 'raspberrypi.local (fe80::5865:c6fa:3262:1820%3)' can't be established. ECDSA key fingerprint is SHA256:G1RRXKWJnsGA7j/0oRljfqipTu5YVfbcdddXS7j8n74. Are you sure you want to continue connecting (yes/no/[fingerprint])?
-
Login to your user account with the password you set. While you type the password, the characters will not appear.
-
Install git.
sudo apt install git
-
Download the files from this repository.
git clone https://github.com/starmaid/pulseofexploration.git
-
Navigate to, make executable, and run the install script. Get a cup of tea, it will take some time.
cd ./pulseofexploration chmod +x ./install.sh ./install.sh
-
Turn off the Raspberry Pi, and then disconnect the power.
sudo poweroff
Wait for the Green STATUS LED to blink 10 times and then you can disconnect the power cable.
The next time you power on the RPi, it should run the lights sequence! You can test it before integrating with your system.
This is a series of steps that are a little complex to save the effort of learning to solder. If you have access to a soldering iron and different pin connectors, I recommend making your own wiring harness setup. However, that doesn't apply to most of my friends who will be reading this, so give it a shot.
-
Take your knife and pop the pins from the LED strip connector. You just have to press the raised section down, and then push out.
This is the raised section you are pushing down.
-
Wrap the end of the pin with electrical tape.
-
Connect the wires to the Pi. Check the wiring diagram to verify the pins.
If you have issues, submit an issue here on GitHub, or message/email me.
This is what a wiring harness could look like, if you have a 0.1" connector kit.
My own build was made out of Dollar Tree Redi-Board and hot glue, a good cheap building and drafting technique.
For this build, I used wiring diagram 1, with exactly 30 lights. I'm pushing my recommendations, but that's my responsibility if I burn out my pi.
This is the file you modify to configure your lights.
Variable | Effect |
---|---|
lights | the number of LEDs in each segment. |
pin | Which DIO pin the lights are connected to. Must be a PWM pin. |
brightness | Max brightness percentage for the lights. Scales all colors. |
RGBW | Set true if you have RGBW instead of just RGB lights. |
groundFirst | set true if the ground segment is closer to the RPi (as opposed to the sky) |
framerate | framerate for updating the sky LEDs |
theme | Set to the name of the folder your theme resides in inside ./data |
latitude | Latitude of your location to use in daylight calculation. |
longitude | Longitude of your location to use in daylight calculation. |
This program barely consumes any resources - 3% normally, 9% during web pulls (once every 5 sec), and maximum 30% load during startup, and maybe 30 Mb RAM. WiFi module usage exists, but is low, again only polling by default every 5 seconds.
WS2812b strip, draws about 55 mA/px
Board | Power Draw with mild load (mA) | Lights you could power through the board with a 2 A Supply |
---|---|---|
Zero W | 300 | 30 |
3 B+ | 700 | 22 |
4 B | 800 | 20 |
Remember, this is with no keyboard or display, which would increase draw. This forces you to setup and control it over SSH, which is easy.
The Zero does not have a 5V regulator that limits how much current you can pull through the traces, which gives you more flexibility.