Introduction: ISS Tracking Globe

About: Electrical Engineering Instructor at University of Santiago de Chile.

The International Space Station is one the pinnacles of human technology and who wouldn’t like to know his location at every minute? Of course, no one.

So, in this Instructables we are going to show you how to build a location tracker using leds, a stepper motor and a NodeMCU. The globe with his base were bought at a local craft store and all the other components could be purchased at any online electronics supplier.

It was supposed to be an afternoon project, but it took us (a two members group) almost two days to build it, mainly by rusted programming skills and mechanical problems trying to assembly it all together, but by following this Instructables (instead of winging it like us) it should not take a person more than an afternoon to build it once the material have been acquired.


  • Hot glue gun.
  • Small electric Drill.
  • Needle .


  • 24 x Leds.
  • 3 x 74HL595.
  • 1 x Power supply 5V.
  • 1 x NodeMCU.
  • 1 x Stepper motor + driver.
  • Wires
  • 1x 47k Resistor (value not critical, can be anything from 10k to 100k).
  • 1x 250 Ohm Resistor 0.5W .
  • 1 x Plastic straw (or anything to attach the shaft of the motor to the globe).

Step 1: Latitude Indicator - Adding LEDs

To indicate the latitude of the ISS we're going to use LEDs mounted on the support of the globe, for this we need to:

  • Mark the equator on the arc of the support followed by increments of 5 degrees in both directions.
  • Use a hot needle (by a candle in this case) to poke holes in the markings.
  • Pass the long legs of the LEDs (anodes+) through the holes and the short legs (cathodes-) over the support.
  • Solder the cathodes together using wire.

Step 2: Latitude Indicator - LED Controller

Now we need a means to power the LEDs, for this we will use 3 shift registers (74HC595). The diagram for the circuit is presented in the above image.

This circuit will have a 5V power input (in order to use the same supply for the stepper), in this case the voltage supplied by a modified phone charger..

The other 4 inputs are the Serial data (SER), Serial Clock (SCLK), Register Clock (RCLK) and Output Enable (OE). The register clear input will not be used so it's connected to 5V by a pull-up resistor.

Note that using a single resistor is not the best practice when driving multiple LEDs, in this situation it can be forgiven as we plan to only light one LED at a time.

After building the circuit and hooking up the inputs to a 12 V supply and an Arduino you can use the provided code to test if everything's working, you should see a single LED lighting up that "moves" along the arc.

Step 3: Longitude Indicator

As the on LED hoovers over the globe signaling the latitude of the ISS the globe itself will rotate under it to match the longitude, for this a small stepper motor is used to control the position of the globe.

We drill a hole in the support to make room for the shaft of the stepper motor that is later glued to the bottom of the globe while the body of the motor is glued to the base of the support.

Depending on the stepper you are using the driver will change to, in this case we are using the 28BYJ-48 stepper motor and ULN2003 driver on breakout board. so we will need to control 4 digital inputs to make the motor spin.

Step 4: Getting Real-time Location of the ISS

Now that we have means to show the latitude and longitude on the globe, we need to get the actual values for them from the ISS in real time.

The test code for this step is the following:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

// WiFi Parameters
const char* ssid = "XXXXX"; 
const char* password = "XXXXX";

void setup() {

while (WiFi.status()!= WL_CONNECTED) {
void loop() {
// Check WiFi Status
if (WiFi.status() == WL_CONNECTED)
	{   HTTPClient http;  //Object of class HTTPClient

	int httpCode = http.GET();   //Check the returning code  

	if (httpCode >0) { // Parsing

		const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + 100;
		DynamicJsonBuffer jsonBuffer(bufferSize);
		JsonObject& root = jsonBuffer.parseObject(http.getString());

		// Parameters
		const char* message = root["message"];
		const char* lon = root["iss_position"]["longitude"];
		const char* lat = root["iss_position"]["latitude"]; 

		// Output to serial monitor

		Serial.print("Longitude: ");
		Serial.print("Latitude: ");
	http.end();   //Close connection

This program connects the NodeMCU to the WiFi, then connects to the API, get the data and print it to by serial.

Step 5: Putting It All Together

Now that we have the longitude and latitude of the ISS we need to write some code to use the previously built indicators to show the Spacial Station position on our globe!

The additional code needs the following:

  • A function to move the stepper a single step while remembering the active coils.
  • A function to light a single LED using the shift registers.
  • A pair of linear functions to relate the longitude and latitude to a position for the stepper motor and an on LED correspondingly.
  • To use the previous portions to control the indicators accordingly to the ISS position.

The code for this portion is attached below (the digital pins used to control the stepper and the shift register can be selected there fin the initial definitions for your preferred wiring).

Step 6: Enjoy Your ISS Globe Tracker!

Position the arc of LEDs over England (the initial position of the stepper is longitude 0° at the Greenwich meridian) and plug the whole system to the 5V supply. Now you and everybody lucky enough to share office/house/shop with you can know the position of the ISS over the globe at any moment by looking this neat piece of decoration!

Maps Challenge

Second Prize in the
Maps Challenge