ISS Tracking Lamp

About: Mechanical Engineer / Handmaker machine (often arduino based). I love science, space, physics and lasers! Hope you will enjoy my projects

Most of the time, i'm wondering where is the ISS looking up the sky. To answer this question, i've made a physical object to know exactly where is the ISS in real time.

The ISS Tracking Lamp is a Internet connected lamp which constantly tracks the ISS and displays it location on Earth’s surface (printed in 3D).

Bonus: the lamp also displays the sunny side of Earth with Neopixels!🌎🛰

So, in this Instructables, we are going to see the differents steps to build this lamp based on WEMOS D1 Mini, stepper motor, servo motor, laser and 3D parts.

I build all by myself, except for the 3D printed Earth, which was purchased on Aliexpress.

Software :

CAD & Parts :

  • 3D Printed Earth of 18cm diameter (purchased on Aliexpress : here )
  • 3D printed motor supports - designed with Fusion 360 and printed with Prusa i3 MK2S
  • Copper tube
  • Concrete base, made with The French Vikings

Hardware :

  • Microcontroller : Wemos D1 Mini (wifi antenna integrated)
  • Servo EMAX ES3352 MG
  • Stepper Motor 28byj-48 (with the ULN2003 driver board)
  • 10 NeoPixels LED
  • Laser of 405 nm wavelength
  • Limit Switch
  • 5V 3A Power Supply

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Modeling Parts in Fusion 360 and Printing

To mount all the hardware, we are going to create the core assembly base on 3D parts. The parts are available on Thingiverse here.

There are 3 parts :

1) The Support Stepper Longitude

This part is made for mounting the stepper motor, the WEMOS, the Neopixels strip and the copper tube

2) The Support Switch

This part is made for mounting the limit switch (use to indicate to the stepper the latitude -0°/-180°). It's screwed on the top of the stepper

3) The Support Servo Latitude

This part is made for mounting the servo motor. The Support Servo is mounted on the stepper motor

All the parts were printed on Prusa I3 MK2S, with black PETG filament

Step 2: Wiring and Assembling

This circuit will have a 5V 3A power input (in order to use the same supply for the stepper driver, the laser, the Neopixels and the WEMOS)

By the following Sketch, we need to solder the power supply directly to the elements above in parallel:

  • Stepper Driver
  • Laser
  • Neopixels strip (NB : there are 10 Neopixels in reality, not 8 as the sketch shows)
  • WEMOS

Next, we need to connect the different elements to the WEMOS :

1) The stepper driver following this list:

  • IN1->D5
  • IN2->D6
  • IN3->D7
  • IN4->D8

2) The servo motor following :

  • Data Servo Pin -> D1

3) The Neopixels strip following :

  • Data Neopixels Pin -> D2

4) The limit switch following :

The two pins of the switch to the GND and D3

Connect the limit switch in a manner that the circuit is opened/broke when we push on the switch (so the circuit is closed when nothing push on it). This is to avoid any wrong lecture due to a voltage peak.

Step 3: Arduino Code - Getting the ISS Position in Real Time

To drive the two motors to reach the position of the ISS, we need to get the position of the ISS in real time :

  • For that first we will use the API from Open Notify Here
  • Then, we need to parse the data to get simple value of the ISS location with the help of Parsing data : ArduinoJson Library (by Benoit Blanchon)
<p>#include <ESP8266WiFi.h></p><p>#include <ESP8266HTTPClient.h></p><p>#include <ArduinoJson.h></p><p>
// WiFi Parameters
const char* ssid = "XXXXX"; 
const char* password = "XXXXX";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid,password);
while (WiFi.status()!= WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting...");
    }
}</p>

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

<p>void loop() {<br>// Check WiFi Status
if (WiFi.status() == WL_CONNECTED)
	{   HTTPClient http;  //Object of class HTTPClient
	http.begin("http://api.open-notify.org/iss-now.json");</p><p>	int httpCode = http.GET();   //Check the returning code  </p><p>	if (httpCode >0) { // Parsing</p><p>		const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + 100;
		DynamicJsonBuffer jsonBuffer(bufferSize);
		JsonObject& root = jsonBuffer.parseObject(http.getString());</p><p>		// Parameters
		const char* message = root["message"];
		const char* lon = root["iss_position"]["longitude"];
		const char* lat = root["iss_position"]["latitude"]; </p><p>		// Output to serial monitor</p><p>		Serial.print("Message:");
		Serial.println(message);
		Serial.print("Longitude: ");
		Serial.println(lon);
		Serial.print("Latitude: ");
		Serial.println(lat);
	}
	http.end();   //Close connection
}
delay(50000);
}</p>

Step 4: Final Arduino Code

The following Arduino code get the ISS location to move the laser to the right place on the Earth's surface, and the getting the position of the sun to light up the concerned Neopixels to light up the surface of the Earth touch by the sun.

Bonus 1 : When the lamp is switched on, during the phase of initialization, the laser will point the position of the lamp (id : the position where the router is)

Bonus 2 : When the ISS is next to the lamp location (+/- 2° long. and +/-2° lat.), all the Neopixels will gently wink

Step 5: Enjoy Your ISS Tracker

You have made a ISS Tracking Lamp, enjoy!

First Time Author Contest

This is an entry in the
First Time Author Contest

Be the First to Share

    Recommendations

    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    16 Discussions

    None
    antoine.seveauThummarwitshW

    Reply 11 days ago

    Well this Arduino code is written to track the ISS, but if you can get the latitude and longitude of something else, you can track it (car, aircraft, boat, submarine, ...) The laser beam can reach nearly every points of the globe

    None
    TeladiThummarwitshW

    Reply 2 days ago

    So this means I can even track packages? Even if with packages we just have a tracking link. Not the geographic position. Or maybe there's a way to retrieve them?
    Anyway, inspiring stuff. Always good to know our possibilities.

    None
    JonasI3

    11 days ago

    Well done. what a great idea and implimentation. Inspiring even. Thanks for sharing.

    1 reply
    None
    ChrisD142

    11 days ago

    Oh PLEASE Make some more... at least one more n I’ll buy it ..... 👍
    ✌️❤️😁

    1 reply
    None
    antoine.seveauChrisD142

    Reply 11 days ago

    Try to make it first, i will be very glad to help you achieving this lamp!
    Thank you by the way :)

    None
    antoine.seveaugada888

    Reply 12 days ago

    i needed to wait 24h before publishing on Thingiverse. Now the link is available