Rewrite README with full project spec, hardware, and build order
This commit is contained in:
@@ -1,41 +1,33 @@
|
|||||||
# planeMapper
|
# planeMapper
|
||||||
|
|
||||||
A local ADS-B radar display on a 6-colour e-ink screen. Receives live aircraft positions via RTL-SDR, renders them on a map centred on a ~100nm radius, and refreshes the e-ink display every 60 seconds.
|
A wall-mounted ADS-B radar display in a picture-frame form factor. Receives live aircraft positions via RTL-SDR, renders them on an OpenStreetMap base map centred on a home airfield (~100nm radius), and refreshes a 6-colour e-ink display every 60 seconds.
|
||||||
|
|
||||||
## Concept
|
Designed to sit on a desk or hang on a wall — always on, no interaction required, no glare.
|
||||||
|
|
||||||
- Pi 5 decodes ADS-B signals from a USB RTL-SDR dongle
|
|
||||||
- dump1090 exposes a live JSON feed of aircraft positions
|
|
||||||
- A Python script pulls the feed, renders a map image with aircraft overlaid
|
|
||||||
- Image is pushed to a Waveshare 7.3" 6-colour e-ink HAT via SPI
|
|
||||||
- Wall-mounted, always-on, low power
|
|
||||||
|
|
||||||
## Hardware
|
## Hardware
|
||||||
|
|
||||||
| Item | Link | Notes |
|
| Item | Notes |
|
||||||
|------|------|-------|
|
|------|-------|
|
||||||
| Raspberry Pi 5 | — | Already owned |
|
| Raspberry Pi Zero 2W | Deployment target. Build and test on Pi 5 first. |
|
||||||
| Nooelec NESDR Smart v5 RTL-SDR dongle | [Amazon](https://www.amazon.com/Nooelec-RTL-SDR-SDR-100kHz-1-75GHz-Enclosure/dp/B01HA642SW) | 0.5PPM TCXO, SMA input. Alternative: RTL-SDR Blog V3 |
|
| Nooelec NESDR Smart v5 RTL-SDR dongle | 0.5PPM TCXO, SMA input. Needs micro-USB OTG adapter on Zero 2W. |
|
||||||
| FlightAware 1090MHz ADS-B antenna | [Amazon](https://www.amazon.com/Flightaware-1090MHz-Aviation-Receiver-Software/dp/B09P19H1Q8) | Purpose-built for 1090MHz, 5.5dBi |
|
| FlightAware 1090MHz ADS-B antenna | Purpose-built for 1090MHz, 5.5dBi |
|
||||||
| Waveshare 7.3" 6-colour e-ink HAT | [Amazon](https://www.amazon.com/gp/product/B0D9K193FY) | E-Ink Spectra 6 (E6), 40-pin GPIO, SPI, driver board included |
|
| Waveshare 7.3" 6-colour e-ink HAT | E-Ink Spectra 6, 800×480, 40-pin GPIO, SPI |
|
||||||
|
|
||||||
**Estimated cost:** ~$200 USD
|
|
||||||
|
|
||||||
## Software Stack
|
## Software Stack
|
||||||
|
|
||||||
1. **dump1090** — decodes ADS-B from RTL-SDR, serves JSON at `http://localhost:8080/data/aircraft.json`
|
- **dump1090** — decodes ADS-B from RTL-SDR, serves JSON at `http://localhost:8080/data/aircraft.json`
|
||||||
2. **Python script** — fetches JSON, renders map image using Pillow, pushes to display via Waveshare driver
|
- **Python + Pillow** — fetches JSON, renders map image
|
||||||
3. **Waveshare Python library** — handles SPI communication with the e-ink HAT
|
- **Waveshare Python library** — SPI driver for the e-ink HAT
|
||||||
4. **OpenStreetMap tiles** — base map, pre-cached for the local area
|
- **OpenStreetMap tiles** — base map, pre-cached for the local area
|
||||||
|
|
||||||
## Pipeline
|
## Pipeline
|
||||||
|
|
||||||
```
|
```
|
||||||
RTL-SDR dongle
|
RTL-SDR dongle
|
||||||
→ dump1090 (ADS-B decoder)
|
→ dump1090
|
||||||
→ JSON feed (aircraft positions, headings, altitudes, callsigns)
|
→ JSON feed (positions, headings, altitudes, callsigns)
|
||||||
→ Python renderer (Pillow)
|
→ Python renderer (Pillow)
|
||||||
→ map image with aircraft overlaid
|
→ map image
|
||||||
→ Waveshare SPI driver
|
→ Waveshare SPI driver
|
||||||
→ e-ink display
|
→ e-ink display
|
||||||
```
|
```
|
||||||
@@ -44,36 +36,29 @@ Refresh loop runs every 60 seconds.
|
|||||||
|
|
||||||
## Map Design
|
## Map Design
|
||||||
|
|
||||||
- Centred on home airfield
|
- Centred on home airfield, ~100nm radius
|
||||||
- ~100nm radius coverage
|
- OpenStreetMap base tiles (pre-cached)
|
||||||
- Base map from OpenStreetMap
|
- Aircraft plotted as rotated arrows aligned to heading
|
||||||
- Aircraft plotted as rotated arrows (heading-aligned)
|
- Short track line behind each aircraft
|
||||||
- Callsign and altitude label per aircraft
|
- Callsign and altitude label per aircraft
|
||||||
- Colour-coded by altitude band (6 colours available)
|
- Colour-coded by altitude band (6 colours match display palette)
|
||||||
- Home airfield marked
|
- Home airfield marked
|
||||||
|
|
||||||
## Aircraft Icons
|
## Colour Bands (altitude)
|
||||||
|
|
||||||
- Rotated triangle/arrow pointing in direction of travel
|
The Waveshare E-Ink Spectra 6 supports black, white, red, yellow, blue, and green — mapped to altitude bands TBD during development.
|
||||||
- Short track line behind showing recent path
|
|
||||||
- Colour coded by altitude band or aircraft type
|
|
||||||
- Size optionally coded by aircraft category (heavy/medium/light)
|
|
||||||
- Differentiation options: commercial vs GA, helicopters, military
|
|
||||||
- Could highlight a known squawk code (owner's own aircraft)
|
|
||||||
|
|
||||||
## Build Order
|
## Build Order
|
||||||
|
|
||||||
1. Get ADS-B receiving working — RTL-SDR dongle + dump1090, confirm aircraft visible
|
1. RTL-SDR + dump1090 — confirm aircraft visible in JSON feed
|
||||||
2. Get base map rendering — OpenStreetMap tiles, 100nm radius circle centred on airfield
|
2. Base map — render OSM tiles at correct scale, 100nm radius
|
||||||
3. Plot aircraft on map — pull live positions from dump1090 JSON, draw heading arrows
|
3. Aircraft overlay — pull live positions, draw heading arrows and labels
|
||||||
4. Push to e-ink — convert image, send via Waveshare library, set refresh loop
|
4. E-ink output — push image via Waveshare library, set 60s refresh loop
|
||||||
5. Polish — airspace boundaries, callsign labels, altitude colour coding, frame/mount
|
5. Polish — airspace overlays, altitude colour coding, frame and mount
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- E-ink only consumes power on refresh — extremely low idle draw
|
- E-ink only draws power on refresh — very low idle draw, suits always-on use
|
||||||
- Display powered directly from Pi GPIO, no separate PSU needed
|
- Pi Zero 2W runs the full stack comfortably given the relaxed 60s refresh cycle
|
||||||
- Pi Zero 2W could work as a low-power dedicated host once software is built and optimised on Pi 5
|
- OTG adapter required to connect RTL-SDR dongle to the Zero 2W's single micro-USB port
|
||||||
- ESP32/Pi Pico not suitable — no USB host for RTL-SDR dongle
|
- Lat/lon to pixel coordinate conversion is the trickiest part of the renderer
|
||||||
- Script estimated ~100-150 lines of Python
|
|
||||||
- Hardest part: converting lat/lon to pixel coordinates within the display dimensions
|
|
||||||
|
|||||||
Reference in New Issue
Block a user