ISS Lamp - NTP clock - Artpiece

My "standalone" take on the ISS lamp lights up when the spacestation is overhead. It doubles as a NTP controlled clock.. with a VFD display.

Similar projects worth following
The ISS lamp runs on an Arduino UNO stacked with a POE-enabled ethernet shield.

The idea was to make a standalone version of this [ ], which didn't need to be connected to a PC. mission.. sort of accomplished

It lights up a powerfull LED whenever the International Space Station passes by.
Pass data is fetched via UDP from a server that scrapes, parses and caches it from using a python script.
A VFD display gives information about the next/current pass, (T-minus time, direction, and magnitude if available), the lamp also functions as an NTP controlled clock.

Everything is built into a lasercut flexbox [ ].

Future delelopment ideas include:
-Maybe implementing debug/service through an app or some sort of web interface.

Source code for the arduino, python script, and box (SVG) is freely available on github.

System overview:

  • The lamp fetches NTP and Spacestation pass data from the "cloud". 
  • Spacestation pass data is scraped and stored by the python script, which runs on a remote server. 
  • The pass data is fed to the ISS lamp on request.
  • NTP data is updated every 30 seconds, because the arduino itself is shit at keeping accurate time. :)
  • Server IP / UDP port are hardcoded into the arduino code.

Inside the lamp:

  • The POE module on the ethernet shield outputs 12V which is stepped down to 5V (replacing the arduino's built in regulator).
  • The VFD runs on 5V
  • The LED runs on 12V and is controlled using a darlington transistor (as a switch) through a PWM pin on the arduino.
  • Datasheet for the VFD found here

I've marked this project as complete, even though I always find an excuse to go back and tweak something...

  • 1 × Arduino Uno V1
  • 1 × Ethernet shield POE enabled
  • 1 × High Power LED from ..the bottom of a drawer... maybe originally from
  • 1 × POE injector
  • 1 × VFD display CU406SCPB-S21A

View all 6 components

  • Logging on the server side

    Robotto09/11/2014 at 22:01 0 comments

    I've noticed that the screen session containing the server program has terminated a couple of times (~once a month) now, and have added a logging feature in an attempt to debug the crash... Now we wait....

    I'm using this as a reference. 


  • Step it down a notch

    Robotto08/14/2014 at 11:03 0 comments

    The power dissipated in a linear regulator is equal to the current multiplied by the voltage drop (P=I*ΔV) 

    In my case the output voltage from the ethernet shield is 12V, and the arduino needs 5V, which gives a ΔV=12V-5V=7V

    The current draw of my entire setup is appoximately 500mA (0.5A) so the power in the regulator would be about: P=7V*0.5A=3.5W which is way more than the tiny regulator on the uno could handle.

    Therefore i've had to replace it with a 7805 regulator in a TO220 casing with added proper cooling... After a couple of months of running quite warm I decided that I was running it too close to it's maximum rating and exchanged the regulator with this step down converter from Now everything is nice and cool(er).

    • TO220 7805 regulator (unmounted) top left
    • Step down converter mounted on the Arduino:
      • input (+)= Vin (12V from the ethernet shield)
      • Output (+)= 5V
      • Ground (-) = GND

    Arduinos are nice and easy to modify; Since they're open source the schematics and design files (open them with eagle) are freely available, so you can easily learn where to (de)solder :)

    BTW: The links to design files and schematics are for the first version of the Uno which is the one i use, for other (current) versions look at

  • An interesting challenge

    Robotto08/14/2014 at 10:47 0 comments

    I differentiate between regular and visible passes of the space station (setting showAll=f or =t in the call to from the python script)

    The list of regular passes contains ALL of the passes, the list of visible passes contains a 'subset' of these that are visible.

    Regular passes always start and end at 10degrees elevation because visibility is neglected, but visible passes sometimes start higher in the sky and therefore later than the corresponding 'regular' pass

    I had fun discovering this, and writing the bit of code that discerns which of the regular passes to disregard, since they are also in the list of visible passes albeit some of the visible passes are delayed..

    Keeping in mind that the spacestation has a ~90 minute orbital period i can quite easily determine that two pass-entries within a few minutes of each other must represent the same actual orbital flyby, and thus I can disregard the 'regular' pass, since the visible ones are way more fun :)

  • Conservation of vacumflourescence - A programmer's ramble

    Robotto08/08/2014 at 19:48 0 comments

    My latest update to the code is a displaybuffer, which is used to store a string before it is printed to the (vacumflourescent) display. 

    The buffer lets me do all sorts of nifty things to my data before printing it out to the display, and also saves me a bunch of write cycles: before, when i wanted the clock to print i printed the hours, a colon, the minutes, a colon and then the seconds.. Now i put those things in the displaybuffer string and send it all at once.. nice and tidy.

    It also let's me check the length of the data-to-be-printed, so i can determine where on the display the last caracter will be, and act accordingly: This is especially useful when doing countdowns (which I do a lot) since text blocks tend to get smaller and smaller as a spacestation pass approaches.

    In short: the displaybuffer helps me makes sure I don't leave behind stray characters from previous prints, and helps me cut down on (the theoretically limited number of) write cycles to the VFD.

  • Code review

    Robotto08/05/2014 at 18:22 0 comments

    Having my project up here on is doing wonders for my productivity, (as you can see on the project's github) I've redone the entire arduino statemachine, thereby squashing several bugs, I've externalized the VFD (display) functions into a full fledged arduino library, i've added geolocation IP lookup to the python code, and generally documented everything more nicely. .. yay hackaday! (and yay me)

  • Geolocation is now a thing that i do :)

    Robotto07/25/2014 at 01:01 0 comments

    Lamp location [LAT,LNG,TZ] is NO LONGER hardcoded into the python code. .. but is handled by IP address lookup using .. yay!

    I'm using maxmind's excellent free geolite database

  • Competition...

    Robotto07/25/2014 at 00:57 0 comments

    It seems i'm not the only one to be fascinated by the space station or VFD NTP clocks :)

View all 7 project logs

  • 1
    Step 1

    If you don't have the exact VFD lying around it should be quite easy to change the code to use an LCD. Just use lcd.h instead of vfd.h and ldc.print() instead of VFD.sendString()

View all instructions

Enjoy this project?



Jan wrote 06/15/2018 at 19:08 point

Fantastic idea! I LOVE following the ISS through the sky when it is visible every few days/weeks. But a standalone lamp is SO MUCH cooler than a app on my mobile....

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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