Ryan Malloy 9f2e88ecdd Add OG images, sitemap, and fix Dashboard description
- astro-opengraph-images: auto-generates 1200x630 PNG for all 50 pages
- Starlight Head override injects og:image via getImagePath helper
- site URL enables sitemap-index.xml generation
- Fix F1 Dashboard description (action cards, not satellite list)
2026-02-17 21:02:47 -07:00

170 lines
8.3 KiB
Plaintext

---
title: "Birdcage"
description: A generic AZ/EL positioner that doesn't care about wavelength — repurposing motorized satellite TV dishes for amateur radio tracking
template: splash
hero:
tagline: A generic AZ/EL positioner that doesn't care about wavelength
image:
file: ../../assets/carryout-g2.jpg
alt: Winegard Carryout G2 satellite dish — the white dome radome that inspired the project name
actions:
- text: Get Started
link: /getting-started/
icon: right-arrow
- text: Try Demo Mode
link: /guides/tui/#quick-start
variant: minimal
- text: Browse Guides
link: /guides/wiring/
variant: minimal
---
import { Card, CardGrid, LinkCard, Aside, Tabs, TabItem } from '@astrojs/starlight/components';
Birdcage turns salvaged RV satellite dishes into general-purpose AZ/EL positioners. Point them at LEO satellites, map the RF sky, capture images during passes — the hardware doesn't care what you're tracking or why.
## What it does
<CardGrid>
<Card title="Satellite Tracking" icon="star">
Search the sky catalog by name, track targets at 1 Hz, predict upcoming passes. Works standalone via the Craft API or with Gpredict through the built-in rotctld server.
[Tracking guide &rarr;](/guides/satellite-tracking/)
</Card>
<Card title="Camera Capture" icon="seti:image">
Manual, interval, and pass-event triggered image capture. Produces JPEG frames with JSON metadata and optional FITS output for scientific workflows.
[TUI guide &rarr;](/guides/tui/)
</Card>
<Card title="Radio Telescope" icon="sun">
2D RF sky mapping with `azscanwxp` — a firmware command that sweeps azimuth while cycling DVB transponders and logging RSSI at each grid point.
[Radio telescope guide &rarr;](/guides/radio-telescope/)
</Card>
<Card title="Signal Analysis" icon="bars">
Live RSSI monitoring, automated sweep peaking, DVB tuner access, and LNB polarity switching — all from the Signal screen.
[Signal screen &rarr;](/guides/tui/#f3--signal)
</Card>
<Card title="Motor Control" icon="setting">
Keyboard nudging, position presets, velocity tuning, configurable step sizes. Direct motor commands with safety gates to prevent accidental stow.
[Control screen &rarr;](/guides/tui/#f2--control)
</Card>
<Card title="Raw Console" icon="terminal">
Full firmware shell access through the TUI. 12 submenus, 100+ commands, with history and prompt-aware I/O.
[Command reference &rarr;](/reference/console-commands/)
</Card>
</CardGrid>
## The Sky Catalog
Birdcage doesn't maintain its own TLE files or orbital prediction engine. It talks to
[Craft](https://space.warehack.ing) — an open API that knows where everything is.
Search "ISS" and get its current azimuth and elevation from your location. Search "Moon"
and point the dish at it. The catalog covers LEO satellites, GPS constellations, geostationary
birds, deep space probes, and celestial bodies — anything with a known ephemeris.
The integration runs at three levels:
- **TUI Craft mode** (F2 → Craft tab) — search, select a target, hit Track. The dish follows at 1 Hz.
Pass predictions show rise time, peak elevation, and duration. Pass-state transitions
(AOS → TCA → LOS) feed the Camera overlay for automated capture.
- **MCP server** — `search_satellites`, `get_passes`, `get_next_pass`, and `get_visible_targets`
tools let any MCP client query the catalog and compose tracking workflows.
- **rotctld bridge** — Gpredict and other Hamlib-compatible controllers drive the dish via
the built-in TCP server on port 4533. Craft provides the orbital data; Gpredict does the math.
No NORAD catalog numbers to memorize, no TLE files to download, no prediction libraries to configure.
Type a name, get a position.
## The TUI
![Birdcage TUI — six screens shown in demo mode](/screenshots/tui-collage.png)
Six screens, one terminal. Everything from pass prediction to raw firmware commands:
- **F1 — Dashboard:** Four action cards — Point Dish, Monitor Signal, Scan Sky, and Stow — each jumping to the relevant screen
- **F2 — Control:** Motor nudging, presets, velocity controls, step size selector
- **F3 — Signal:** RSSI plots, DVB tuner status, sweep peaking, LNB diagnostics
- **F4 — System:** NVS settings, firmware identification, motor lifetime stats
- **F5 — Console:** Direct firmware shell with prompt-terminated I/O and command history
- **F6 — Camera:** Live capture overlay with manual, interval, and pass-event triggers
<Aside type="note" title="No hardware? No problem.">
Demo mode runs the full TUI with simulated data — every screen, every interaction. It's the fastest way to see what Birdcage can do.
</Aside>
<Tabs>
<TabItem label="uvx (no clone needed)">
```bash
uvx birdcage-tui --demo
```
</TabItem>
<TabItem label="From source">
```bash
cd tui/
uv sync
uv run birdcage-tui --demo
```
</TabItem>
</Tabs>
## Why "Birdcage"?
In ham radio, satellites are called "birds." The Carryout G2's white dome radome looks like a birdcage — and a birdcage catches birds from the sky.
It's also a nod to [saveitforparts](https://www.youtube.com/@saveitforparts). Gabe saves discarded RV satellite dishes "for parts." We took the parts and built a birdcage from them.
<Aside type="tip" title="Standing on the shoulders of saveitforparts">
This project builds directly on the open-source work of **Gabe Emerson (KL1FI)** and his
[saveitforparts](https://www.youtube.com/@saveitforparts) YouTube channel. Gabe documented
five different Winegard dish variants, wrote Python control scripts for each, and shared
everything on GitHub. Chris Davidson ([cdavidson0522](https://github.com/cdavidson0522/winegard-sky-scan))
figured out the G2's RS-422 wiring and discovered the built-in radio telescope mode.
Without their work, none of this would exist.
[Read the full story &rarr;](/journal/origins/)
</Aside>
## Supported hardware
Five Winegard dish variants are documented, with varying levels of testing:
| Variant | Connection | Status |
|---------|-----------|--------|
| Trav'ler (HAL 0.0.00) | RS-485 / RJ-25 | Supported (Gabe's original) |
| Trav'ler (HAL 2.05) | RS-485 / RJ-25 | Supported (Gabe's original) |
| Trav'ler Pro | USB A-to-A | Partially supported |
| Carryout (2003) | RS-485 / RJ-25 | Supported (different protocol) |
| Carryout G2 | RS-422 / RJ-12 | **Fully reverse-engineered** |
The Carryout G2 has the most complete documentation — over 100 firmware commands mapped across 12 submenus, NVS settings dumped, GPIO pins identified, and motor control characterized.
<LinkCard title="Firmware Variant Comparison" href="/reference/firmware-variants/" description="Detailed comparison table of all five variants: baud rates, motor commands, position formats, and protocol differences." />
## Where to start
<CardGrid>
<Card title="Getting Started" icon="rocket">
What hardware you need, how to connect, and your first satellite track.
[Start here &rarr;](/getting-started/)
</Card>
<Card title="Guides" icon="open-book">
Wiring, calibration, satellite tracking, camera capture, radio telescope, BLE wireless bridge.
[Browse guides &rarr;](/guides/wiring/)
</Card>
<Card title="Reference" icon="document">
100+ firmware commands, NVS settings, GPIO pin maps, hardware specs, serial protocol.
[See reference &rarr;](/reference/firmware-variants/)
</Card>
<Card title="Experiments" icon="star">
Solar monitoring, rain fade radiometry, hydrogen line astronomy, weather satellite imagery, and more — on-board DVB and external SDR.
[Browse experiments &rarr;](/experiments/)
</Card>
<Card title="Project Journal" icon="pencil">
Discovery stories, debugging sessions, and the ongoing narrative of reverse-engineering these dishes.
[Read the journal &rarr;](/journal/)
</Card>
</CardGrid>
## Project journal
This isn't just a reference manual. The [project journal](/journal/) captures the story of how we got here — the debugging sessions, the discoveries, the moments where a `?` in the right submenu revealed a whole new capability.
<LinkCard title="Read the journal" href="/journal/" description="Discovery stories, debugging sessions, and the ongoing narrative of this project." />