International Space Station Tracker/Pointer





Introduction: International Space Station Tracker/Pointer

Digital Life 101 Challenge

Runner Up in the
Digital Life 101 Challenge

There’s a growing movement of people who believe that our space agencies are underfunded and that humanity isn’t paying enough attention to our present accomplishments and future plans in space exploration. Well, I know one way to direct attention to something: Point at it. This is the first prototype of the International Space Station orbit tracking pointer. If that name isn’t explanatory enough, its one job is simply to point directly at the ISS wherever it is in space, a small but constant reminder of what humanity is capable of.

Watch the YouTube video for a quick intro to the project!

Rough parts list:

Step 1: Code

All the code I used for the project can be found at the project repository on GitHub. The code compiles using mbed on the Nucleo F401RE development board.

To use the code, follow the steps below.

1. Create an mbed account at

2. On the GitHub repository, click the "Save Zip" button and download to your hard drive.

3. On mbed, click the "Import" button, then the "Upload" tab. At the bottom, click the "Choose File" button and navigate to the zip file. Click the "Import!" button to import the code as a program in your mbed workspace.

4. You will also need the import the mbed library to your program. Under the import wizard, navigate to the "Libraries" tab, search "mbed", and drag the official mbed library to your program workspace on the left.

5. In the "main.cpp" file, edit the set_time variable on line 68. This is the time that the board will assume every time it is powered up (this is the biggest limitation of the prototype - that it does not have a persistent clock). This value is in Unix time, so you can use to find the current time or convert a time in the future.

6. Also in "main.cpp," enter in the two-line element set of the satellite you wish to track on lines 90 and 91. For the International Space Station, you can use the first entry on this page:

7. Finally, enter your location details into the variables on lines 94 through 96.

8. Compile "main.cpp" using the "Compile" button and save the build file to your Nucleo board.

Step 2: Assembly

For the pointer itself, you only need a stepper motor for azimuth control and a 180 degree servo for elevation. How it looks is up to you! I used a wooden base, and aluminum Actobotics parts to make everything look nice. Everything bolts together, so it’s great for prototyping, and if I get tired of it, I can just take it apart and build something new. I also used a slip ring so that the main shaft can spin indefinitely without twisting up the servo wires. The slipring I bought needed to be "adjusted" so it could fit in the shaft. I used my wood lathe for this, which I'm pretty sure was a violation of the warranty.

Note that if you change the gearing ratio for the stepper motor, you will also need to adjust the code to account for the change.

Step 3: Wiring

Wiring is pretty straightforward.

1. Put the Adafruit motor shield on top of the Nucleo board.

2. Connect the stepper motor to M1 on the motor shield.

3. Connect the servo to S1 on the motor shield.

4. Connect a 9 or 12 volt power supply to the power terminal block on the motor shield.

5. Wire a resistor of 5 to 10 kOhm between pin 4 and the 3.3v pin on the motor shield. Repeat with pin 5. These are pull up resistors for the i2c signal pins (how the motor shield communicates with the Nucleo board).

6. Cut the trace on the motor shield that goes to 5 volts for logic, and solder a jumper to allow the board to run on 3 volt logic.

Step 4: Powering Up

Before powering up, point the arm at true north. The stepper motor doesn't have feedback to know which way it's pointing so it needs to be initialized. Remember that when you power up the board, it assumes the time you have coded into it.

The ISS orbits the earth every 90 minutes so the speed of motion is roughly on the order of a minute hand on a clock: slow enough that it’s not really interesting to watch it, but fast enough that it’s in a new place every time you glance over.

Step 5: Improvements

As I've noted, this is just a first prototype, a proof of concept, and it's not extremely functional or user-friendly. Things I’d I would include in version 2.0:

  • A real time clock with a battery backup. Right now I have to hardcode the time, which means any time power is disconnected, the time needs to be recoded. This is probably the biggest limitation of the system.
  • Switch the servo out with another stepper motor. Having to flip 180 degrees is cumbersome and makes the motion not as smooth. You'd have to have some kind of feedback for this though.
  • Internet connectivity to automatically download the latest orbital data. Right now, the two line element set for the ISS is hardcoded. Just for the sake of accuracy, it would be nice to be able to have the latest parameters as they come out. This would also allow you to track satellites other than the ISS.
  • LCD screen to show relevant information - azimuth and elevation, epoch, straight line distance, etc.

A few of these features have been implemented in a version of the device created by Patrick Ferrell.

For more info, visit my website or YouTube channel.



    • Microcontroller Contest

      Microcontroller Contest
    • Spotless Contest

      Spotless Contest
    • Science of Cooking

      Science of Cooking

    We have a be nice policy.
    Please be positive and constructive.




    A really great project that I would like to build but I am stuck for a parts list for Actobotics. Does anyone have one? Also the author talks of a second version which would have a real time clock and that would help. Any news on that?

    Hi, it is a really nice project and I am trying to reproduce it. I just would like to know how do you do to run the Nucleo board without having it connected to à PC?
    Thank Grady I am a big fan of your work!

    Great project. I'm thinking of making one for the science museum where I volunteer.

    Can you give any more detail on the slip-ring arrangement you used? Did you buy or build?

    I used this:

    I think a homemade slip ring wouldn't be too hard, but just keep in mind that it's not just for power, but signal as well, so it has to be a really good connection.

    I'm hoping to make this for a school project and have little robotics experience. Is it possible to get a more details kit/item list? Thank you.

    Very cool... I know my son would love to build this (Big Space Nut) But he is into the Arduino Boards and I know I would need to help with that part. Has anyone done or have you done an Arduino based design at all?

    The Arduino Uno does not have the memory to hold all the code. The Arduino Mego board could probably handle it just fine.

    A great project,I was thinking could this be modified for a solar tracker that could charge say phones etc .

    Is it a idea that could consider.


    this mechanical SETUP can also work for an antenna tracker for FPV RC plane or helicopter

    this mechanical SETUP can also work for an antenna tracker for FPV RC plane or helicopter