Overview
We were inspired by the round-display flight-tracker trend and added a twist, combining a moon tracker with a flight tracker to make catching photographic shots easier.
This build takes the luck out of it. It pulls live aircraft positions for your area, computes where the moon actually is from your ZIP code, projects each plane forward along its heading, and warns you when one is about to pass close to, or straight across, the lunar disc. Two tiers of alert: NEAR when the plane and moon will share a telephoto frame, and TRANSIT when it crosses the disc itself.
It's small enough to sit on your camera's hotshoe, so it rides along with the rig you're already pointing at the sky.
The tracker queries the adsb.fi open ADS-B network for aircraft within 15 nautical miles, then converts each plane's latitude, longitude, and altitude into the same azimuth-and-elevation coordinates it uses for the moon. The moon's position is computed on the device itself, no API, no key; from a compact lunar ephemeris accurate to roughly a third of a degree.
Each aircraft is then flown forward in software along its reported track and ground speed, in five-second steps across the next five minutes, and the smallest angular separation from the moon is recorded. When a plane's closest approach falls inside the alert thresholds and is less than 90 seconds out, the display raises a banner: cyan for a near pass, pink for a transit. Tap it and you get the flight's route and details, looked up on the fly.
Four Screens
- RADAR: a live plan view of traffic around you, with the moon's bearing marked, alert banners, and each plane's callsign and altitude.
- LIST: every tracked aircraft ranked by how close it will come to the moon, with predicted separation and time to closest approach. Tap any row for flight details.
- MOON: current phase rendered to scale, illumination percentage, altitude and azimuth, and tonight's rise and set times in your local timezone.
- LOCATION: a touch keypad for your ZIP code, plus screen rotation. Both persist across power cycles, so you set them once.
Everything runs on an Adafruit Qualia ESP32-S3 driving a 2.1" round 480×480 capacitive touch display. The S3's 16 MB of flash and 8 MB of PSRAM leave room to hold a full-color framebuffer, run the trajectory math, and talk to the network at the same time, no extra boards, no GPS module, no sensors. The only wiring is one ribbon cable and USB-C for power.
The code is CircuitPython, so every parameter worth tuning, such as search radius, alert thresholds, refresh rate, prediction window, is a plain constant at the top of code.py file that you can edit over USB with no toolchain.
This uses an online database keyed by ZIP code for the United States. Folks outside the US may want to adjust the code to use other data.
Page last edited July 27, 2026
Text editor powered by tinymce.