Back to all projects
HardwareEmbedded Systems / Space

International Space Station (ISS) Tracker

A 3D printed Arduino device that physically points at the International Space Station in real-time, calculating orbital position using GPS coordinates, WiFi connectivity, and the SGP4 propagation algorithm.

How It Works

The tracker combines orbital mechanics with precision motor control to create a physical pointer that follows the ISS across the sky. When the station passes overhead, the device rotates to track its position in real-time.

🛰️ TLE Data Fetching

The device connects to WiFi and fetches Two-Line Element (TLE) data via HTTP GET requests. TLEs contain the orbital parameters needed to predict the ISS position at any given time.

📍 GPS Location

A GPS module provides the tracker's precise ground coordinates—latitude, longitude, and altitude. This reference point is essential for calculating the relative position of the satellite.

🧮 SGP4 Algorithm

The Simplified General Perturbations 4 (SGP4) algorithm propagates the TLE data to calculate the satellite's position at the current timestamp. It accounts for Earth's oblateness, atmospheric drag, and other orbital perturbations.

📐 Coordinate Transform

The satellite's Earth-Centered Inertial (ECI) coordinates are transformed to azimuth and elevation angles relative to the observer's position—the angles needed to point the tracker.

⚙️ Motor Control

A stepper motor handles azimuth rotation (horizontal sweep) while a servo motor controls elevation (vertical tilt). Together they provide smooth, precise pointing across the full sky.

The Math

SGP4 is the same algorithm used by NORAD to track objects in low Earth orbit. It takes the six Keplerian elements encoded in TLE format and propagates them forward in time, accounting for gravitational harmonics, solar radiation pressure, and atmospheric drag at low altitudes.

The transformation from satellite position to pointing angles involves converting from the ECI reference frame to the topocentric horizon frame centered on the observer—essentially answering "where in my sky is this object right now?"

Hardware Components

  • Arduino Microcontroller: The brain of the operation, running the C++ firmware that coordinates all components.
  • ESP8266/ESP32 WiFi Module: Enables internet connectivity for fetching current TLE data from online APIs.
  • GPS Module: Provides precise observer location and accurate UTC time for orbital calculations.
  • Stepper Motor: High-precision rotation for azimuth control with fine angular resolution.
  • Servo Motor: Fast, responsive elevation adjustment for vertical tracking.
  • 3D Printed Enclosure: Custom-designed housing for all electronics and mechanical components.

Software Stack

  • C++ / Arduino: Firmware written in C++ for performance-critical orbital calculations on the microcontroller.
  • SGP4_vallado: David Vallado's reference implementation of the SGP4 algorithm, ported to C++ by Grady Hillhouse. Based on the companion code for "Fundamentals of Astrodynamics and Applications".
  • TinyGPS++: Lightweight GPS parsing library for extracting location and UTC time from NMEA sentences.
  • WiFiS3 + ArduinoJson: WiFi connectivity for HTTP requests and JSON parsing for TLE data from online APIs.
  • QMC5883LCompass: Magnetometer driver for compass heading calibration and orientation reference.
  • LiquidCrystal_I2C: LCD display driver for showing satellite position, azimuth, and elevation data.
✓ CompletedView source →