Radial LED Projection ISS Tracker

A demonstration of an efficient way to use a fairly small number of addressable LEDs to convey polar coordinate information

Similar projects worth following
To convey directional, orientation, or polar coordinate data using fixed addressable LEDs it would have required quite a large number of them if we wanted to avoid decimating the data to a lower resolution. Alternatively we could mount the LEDs on a moving mechanism that would indicate the direction accurately. However this would either require expensive slip rings to ensure a noise free connection to the data lines, otherwise the Raspberry Pi would need to be mounted on the same structure as the LEDs and powered by a cheaper slip ring or by batteries.
As a compromise, this project uses a mirror rotated by a stepper motor. Light from fixed addressable LED strips are projected through a lens onto a circular screen. The directional resolution is limited only by the ability of the Raspberry Pi to microstep the stepper motor. As a proof of concept I've scripted the Pi to turns the mirror in sync with the longitude of the International Space Station. The LED colours convey the latitud

I wanted to explore using addressable LEDs to visualize orientation data, however the NeoPixel rings one can buy from Adafruit or from Ebay sellers tend to max out at 60 LEDs. I'd have to sacrifice resolution if the LEDs could not somehow be made to rotate. I also considered mounting an LED strip on some sort of gimbal machanism. The problem with this is approach is that unless the Raspberry Pi is mounted with the LEDs, there would need to be a highly reliable slip ring between them to communicate the RGB data.

Instead this project explores using a spinning mirror to reflect the light from the LEDs in different directions to visualize the orientation data. There is a trade-off with this approach. While the angular resolution is limited only by the microstepping resolution of the stepper motor used to spin the mirror, the information conveyed in the radial direction is of very low resolution. I've used only 36 APA102 RGB LEDs, or which only 9 or fewer are visible to the mirror at any one moment. The radial displacement of each projected LED also depends on the angle of the mirror. Although this problem can be reduced using a higher density of LEDs per strip, the issue never goes away entirely.

To visualize the location of the International Space Station, the longitude was mapped more or less directly to the rotation of the mirror. Latitude was mapped to the number of LEDs lit (i.e. one LED illuminates a spot on the circular paper screen for every 15 degrees of latitude between the ISS and the equator). The colour of the LEDs was also made to depend on the latitude. 90 degrees south (blue), 0 at the equator (green), 90 degrees north (red), with smooth linear colour transitions between those points. The ISS never goes further north or south than around 50 degrees, so the colours projected tend to sway between yellow and bluish-green as shown in the (x 200) time lapse gif above.

The are many directions in which I've considered taking this project:

  • Different input data sources - I've been planning to add ratiometric Hall effect sensors to estimate the direction of the magnetic fields in the vicinity of the device. The projected row of LEDs would then act like a compass needle.
  • Explore different surfaces on which to project: a sphere, a cone, the ceiling or a wall.
  • Spin the mirror much faster for persistence-of-vision effects
  • Instead of just one LED strip, try three or more LED strips along side each other in the cylinder.
  • Use more than one mirror so that all the LEDs can participate all the time, instead of less than a quarter being active in the current prototype.


Python27 source code used to test microstepping of the stepper motor using the SN754410NE, shifting RGB data through rhe APA102 strip, and the final script that accesses the ISS tracking JSON file and keeps the APA102 strip in sync with the mirror position.

gzip - 2.43 kB - 09/29/2018 at 18:07


  • 1 × APA102 addressable RGB LED strip (36 LED) Any addressable RGB LED strip could be made to work in this project
  • 1 × Stepper Motor This one I used was recovered from a CD-ROM drive
  • 1 × Raspberry Pi 2 Any Raspberry Pi should work
  • 1 × RyanTeck RPi MCB motor control board (with SN754410NE) A dual H-bridge motor driver which I'm using to drive the bipolar stepper motor
  • 1 × Cardboard, paper, and glue

View all 8 components

  • Keeping it all in sync for final assembly

    bornach09/29/2018 at 19:03 0 comments

    The challenging part was microstepping the stepper motor so that it stayed in sync with the APA102 strip.
    This stepper motor only has 20 steps in full rotation. If I had limited the motor control to full or half stepping, it would mean the orientation resolution would have been a 9 or 18 degrees. So I had to implement microstepping that would output a PWM to the GPIO pins controlling the SN754410NE. I couldn't use the built-in PWM of the RPi.GPIO library because it seems to be unstable and segmentation faults whenever I tried to use it for microstepping. So far I have it set to 2 degree resolution. Now for final assembly:

    The light from the portion of the LEDs that are illuminated should be redirected upwards by the rotating mirror that has been tilted at 45 degrees. This will need to be collimated using a hole cut in cardboard and focused with the help of a cheap magnifying glass.

    The exact geometry and lens focal length will ultimately determine how far to place the paper screen onto while the LEDs will be projected. This was also done with trial and error.

    The image shows the Raspberry Pi 2 with motor driver hat -- I've taken the precaution of using masking tape to avoid accidentally shorting the pins when I attach the LED strip.

  • Attaching Stepper Motor and Mirror

    bornach09/29/2018 at 18:45 0 comments

    I had initially tried a more complicated motor mounting method in order to accommodate the length of the wooden shaft, but then opted to glue the stepper motor directly to the cardboard disc, and instead just trim the wooden shaft down. Had I committed to doing this from the start, I would have trimmed the shaft down first before attaching the mirror to it.

    Drilling a small hole into a wooden shaft would have been much easier to do if it didn't have a breakable mirror glued to it.

  • Spinning Mirror Assembly

    bornach09/29/2018 at 18:37 0 comments

    The wooden shaft already had two slots. All I had to do was drill a hole perpendicular to one slot to fit the pin that would allow the mirror to pivot.

    A little trimming of the cardboard was needed to make sure that the mirror could be tilted to at least 45 degrees to the shaft. Everything is held together with two-part epoxy resin.

  • Testing the LED strip cylinder

    bornach09/29/2018 at 18:26 0 comments

    This step took a bit of trial and error. My first cylinder was too small and the beginning and end of the LED strip overlapped too much. I measured the overlap and remade a slightly bigger cylinder.

    It is a good idea the test the LED strip frequently after each step in the build to make sure I didn't damage anything. Here I wrote a simple APA102 test program in Python to run on the Raspberry Pi that toggles the GPIO pins to send the RGB data to the strip. This would have been more difficult to do with a WS2812 NeoPixel without the use of a prepackaged neopixel library.

  • Cylinder walls

    bornach09/29/2018 at 18:15 0 comments

    I didn't have a strip of cardboard long enough for the circumference of the disc, so taping two pieces together. The APA102 strip has an adhesive backing and will be stuck to these cardboard walls after they are taped to the disc to make a short open cylinder. It will look not very different from a Zoetrope

  • Sizing the disc

    bornach09/29/2018 at 18:04 0 comments

    I started  by measuring the length of the LED strip to figure out size of the circle. It so happened that this APA102 strip I bought on Ebay years ago had 36 LED chips. The circumference of the circle had to chosen so that LED spacing was as even as possible -- 10 degrees between LEDs. This took a bit of trial and error.

    The hole in the center of the disc should be big enough to accommodate the stepper motor shaft but not too wide as the motor had to be glued to the disc.

    I've soldered the wires to the stepper motor -- this is recovered from a CD-ROM drive. I had the option of wiring it as unipolar or bipolar. I chose the latter because I was going to use an H-bridge motor driver to make it spin.

View all 6 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates