HamBird Draft v0.9 Deutsch

A ham radio pager on your keychain. Months on one coin cell.

HamBird is a paging system for amateur radio on the 70 cm band. Instead of POCSAG it uses chirp spread spectrum (CSS): more range, drastically less energy and a receiver barely larger than its display. This page is a draft and a basis for discussion.

Frequency
434.900 MHz
Modulation
CSS, SF9
Sensitivity
−129 dBm
Power
1 × CR2032
Runtime (target)
over 6 months
Transmitter
50 W and more

This is how the HamBird reports: DB0SP has paged DL1XYZ, the e-ink turns the page and beeps. The display stays put even without power.

Why CSS instead of POCSAG?

POCSAG dates back to the 1980s and needs a signal well above the noise. CSS, known from LoRa, still decodes reliably at about −12.5 dB below the noise floor. That translates directly into range: the same coverage with a fraction of the TX power, or much more coverage at the same power.

For the receiver, the other side of the coin matters even more: chirp correlation is extremely frugal in hardware (Semtech silicon), and the HamBird protocol lets the receiver sleep almost all of the time. Only that makes a coin cell realistic as the sole power source.

A chirp: the frequency rises linearly across the symbol. From this signature the correlator fishes the signal out of the noise.
Diagram: an FM-FSK signal sticks +5 dB above the noise, while the CSS signal sits at −15 dB SNR below the noise and still decodes
CSS stays decodable below the noise, FSK needs headroom above it.
Range
Roughly 20 dB of link-budget advantage over narrow-band FSK. Shadowed areas, indoors and fringe locations become reachable.
Energy
Short, robust frames plus scheduled RX windows: the receiver spends more than 99.9 % of its time in deep sleep.
Robustness
Spreading makes the signal immune to narrow-band interferers and frequency drift. Important with a small chip antenna on a keychain.

Range at 50 W TX power (estimate)

ItemValue
TX power 50 W+47 dBm
TX antenna (omni, exposed site)+3 dBi
Cable + cavity filter−3 dB
RX sensitivity SAMR34 (SF9/125 kHz)−129 dBm
Chip antenna on the tiny PCB≈ −12 dBi
Allowable path loss≈ 164 dB
EnvironmentRadius
Urban
Worn on the body (−5 to −10 dB) more like 10 to 15 km.
≈ 20 km
Suburban, fringe
Looser development, less shadowing.
≈ 30 to 40 km
Open country
≈ 25 to 30 km with a 30 m mast, 50 km and more from a truly exposed site.
radio horizon

The chip antenna is the biggest minus item, and that is exactly what CSS absorbs: −129 dBm sensitivity at SF9 versus about −110 dBm for a typical POCSAG receiver, a lead of roughly 20 dB. Terrestrially, buildings, vegetation and Earth curvature set the limit (Hata model, transmitter at 30 m, receiver at 1.5 m), not the TX power.

From a voice call on the repeater to the notification

HamBird listens on an ordinary repeater, DB0SP for example. When a callsign is spoken there, the matching receiver is paged via CSS. Pure simplex transmission, no return channel.

  1. 1

    Repeater

    A fellow ham calls you by voice on the repeater, e.g. DB0SP.

  2. 2

    RX audio

    An off-the-shelf receiver feeds the audio into the Raspberry Pi.

  3. 3

    VOSK

    Offline speech recognition spots your callsign in the ongoing traffic.

  4. 4

    CSS transmitter

    The SX1268 generates the chirp, the PA raises it to site-grade power.

  5. 5

    Keychain

    Your HamBird wakes in the next RX window, beeps and shows the call on e-ink.

VOSK monitors the repeater, your callsign is the trigger

The Raspberry Pi runs VOSK, a fully local speech recognizer with no cloud and no internet required. It listens to the repeater audio around the clock, looking for callsigns: spoken out (“Delta Lima …”) as well as spelled using the ICAO alphabet.

Once your callsign is detected, a call frame goes out to your HamBird within seconds. The transmitter also remembers the last 16 detected callsigns and broadcasts them at longer intervals, so every HamBird sees who has recently been active on the repeater.

A small web dashboard on the Pi shows live what the recognizer hears, which calls were triggered, and whether beacon and PA are running cleanly.

The display on the 1.54″ e-ink: 200 × 200 pixels in black, white, red and yellow. Repeater and UTC time at the top next to the red alert banner, the paged callsign in large type below it, and at the bottom the callsigns heard last, from the latest broadcast.

One beacon per minute, the heartbeat of the system

The protocol is compact and optimized entirely for receiver energy. Transmissions use 434.900 MHz with spreading factor SF9; 439.700 MHz is under discussion as a possible alternative. Every minute the transmitter sends a beacon as a time signal. The receivers synchronize their clocks to it and open the radio only at the expected beacon time, a few milliseconds per minute.

Beacon, time signal, once per minute Call frame Broadcast with the last 16 callsigns

The three frames

All three frames start the same way: chirp preamble, sync byte, then a header of message type and one byte transmitter / time slot. Only then follows the type-specific payload.

Beacon every minute, airtime ≈ 0.12 s

Call when VOSK detects a callsign, ≈ 0.17 s

Broadcast about every 10 minutes, ≈ 0.53 s

LoRa PHY common header beacon call broadcast tinted: new in draft v0.9

Transmitter / time slot: who sent this, and when?

One byte, two nibbles: the upper nibble is the transmitter ID (0 to 15, so up to 16 HamBird transmitters in one region), the lower one the time slot. The minute is divided into 16 slots of 3.75 seconds each (0 to 15); every frame carries the number of the slot it was sent in. The receiver thus knows not just the minute but the second, can trim its clock on every frame, and remembers which transmitter a call came through. Above all, several transmitters can share the frequency: each station gets fixed slots, and a station’s beacon, call and broadcast (under one second in total) fit comfortably into one slot. In simplex operation the transmitters cannot hear each other, but they do not collide either.

Do we need a 0x55/0xAA preamble?

No, bit-pattern wake-up comes from the FSK/POCSAG world. With CSS the preamble consists of upchirps that the radio chip generates and detects in hardware; bytes like 0x55 0xAA simply do not exist on the air interface. The standard length of 8 symbols (≈ 33 ms at SF9/125 kHz) is enough because, thanks to beacon sync, the receivers know exactly when to listen. The one exception: after a battery change the receiver listens continuously for up to 60 s until it catches its first beacon.

Callsigns: 6 bytes, used properly

ASCII wastes space: with 8-bit characters, 6 bytes would end after 6 characters, and DK0ABC/P would no longer fit. Callsigns, however, only need 38 symbols (A to Z, 0 to 9, “/”, end). Packed as a base-38 number, up to 9 characters fit into the same 6 bytes (38⁹ < 2⁴⁸). Example: DL1XYZ becomes the digit sequence 4 12 28 24 25 26 and thus one 48-bit number. The callsign itself is the device ID, the receiver simply compares 6 bytes.

Time synchronization

The minute beacon carries the UTC minute, the time-slot nibble carries the second. The receiver’s crystal only has to stay accurate for one minute, and even a watch crystal with a generous capture window can do that.

RX window and announce

Between beacons the SAMR34 sleeps deeply. The beacon’s “announce” field says whether a call or broadcast follows in this minute. Only then does the receiver stay awake for the few extra milliseconds needed. Simplex without a return channel: the transmitter repeats calls in the following minutes instead of waiting for acknowledgements.

All frames on 434.900 MHz (alternatively possible: 439.700 MHz) with SF9, 125 kHz bandwidth, CR 4/5 and CRC-16 from the LoRa PHY. The transmitter / time slot byte costs no airtime: in all three frames it still fits into the same coding block. All content is transmitted unencrypted, as amateur radio regulations require for these frequencies.

SF9 as the baseline, SF10 for comparison

SF10 would add 3 dB of link budget (roughly 25 % more radius) but doubles every airtime, and with it the beacon RX window and the receiver’s average current. That is why HamBird starts with SF9; switching later via firmware update would be possible.

SF9 (baseline)SF10 (comparison)
Sensitivity−129 dBm−132 dBm
SNR limit−12.5 dB−15 dB
Symbol duration4.1 ms8.2 ms
Airtime beacon / call / broadcast0.12 / 0.17 / 0.53 s0.25 / 0.29 / 1.0 s
Beacon RX window≈ 100 ms/min≈ 250 ms/min
Average current≈ 12 µA≈ 25 µA
CR2032 realistic≈ 16 months≈ 8 months
Urban range≈ 20 km≈ 25 km

The receiver: barely larger than its display, awake for months

HamBird receiver on a keychain in front of a keyboard: black case, red contact button, 1.54-inch e-ink display showing the HamBird logo
Mock-up: the HamBird on its keychain. The e-ink keeps its display even without power.
Exploded view of the receiver: PCB with SAMR34, case frame with inserted CR2032 coin cell, red contact button, case cover and e-ink display module, next to a match for scale
Mock-up: four parts, PCB, display, frame and cover. The match sets the scale, not a single connector too many.
Processor and radio
Microchip SAMR34Cortex-M0+ with integrated Semtech CSS transceiver, a single chip for everything.
Antenna
Chip antennaCeramic, right on the PCB. Possible thanks to the CSS link budget.
Display
1.54″ e-ink200 × 200 px in black, white, red and yellow. Keeps its image without power, updates only on a new call.
Alert
TransducerBeeps when your own callsign is called.
Power
1 × CR2032One coin cell, target: more than six months of runtime.
Contact button
Finder contact displayPressing the red button shows the owner’s contact details on the display. Whoever finds the keychain knows where it belongs.
Status check
Blue LEDFlashes briefly every 10 seconds. One glance is enough to see that the HamBird is running.
Update
USB bootloaderFirmware updates via the USB port, no programming adapter needed.

Energy budget (draft)

StateCurrentShareContribution to average
Deep sleep (RTC running)≈ 2 µA> 99.9 %≈ 2 µA
Beacon RX window≈ 5 mA≈ 100 ms/min≈ 8 µA
E-ink update + alert≈ 10 mAa few s/day≈ 2 µA
Average≈ 12 µA
CR2032 gross220 mAh÷ 12 µA≈ 18,300 h ≈ 25 months
CR2032 realistic≈ 65 % usablepulse derating≈ 143 mAh, ≈ 16 months

A back-of-the-envelope calculation as a basis for discussion. The derating respects the chemistry: a CR2032 is built for about 0.2 mA of continuous load. The mA pulses of the RX window and e-ink updates must come from a buffer capacitor, otherwise the cell voltage sags and part of the capacity goes unused. Capture window, crystal drift and alert frequency add further variables. Even calculated conservatively, the “more than six months” target keeps a safety factor of roughly 2 to 3.

Cost per receiver (estimate)

Component≈ € per unit (batch of 10)
Microchip SAMR347.00
1.54″ e-ink BWRY 200 × 20010.00
Chip antenna + matching network2.00
Crystals (32.768 kHz + TCXO)2.50
Transducer (piezo)1.50
USB socket, CR2032 holder + cell2.00
Passives, LDO, buffer capacitor2.50
PCB, 4-layer (batch of 10)3.00
Enclosure (3D-printed in-house)1.50
Total material≈ €32

With shipping, customs and a scrap reserve, realistically ≈ €35 to 40 per sample device; assembly counted as own work (external assembly: €5 to 10 more). Display and SAMR34 account for a good half of the cost. In a batch of 100 the unit price drops to roughly €22 to 25.

The transmitter: a means to an end

On the transmitter side there is deliberately nothing exotic, only standard parts any ham can source. All the intelligence lives in the protocol and the receiver.

  • Raspberry Pi (mini format): VOSK speech recognition, protocol logic, beacon timing and web dashboard.
  • Semtech SX1268: generates the CSS signal on 434.900 MHz with SF9.
  • Mitsubishi RA60H3847M1: PA module (378 to 470 MHz), raises the signal to site-grade power.
  • RX receiver: an off-the-shelf receiver feeds the repeater audio (e.g. DB0SP) to the Pi.
  • Web dashboard: monitor for speech recognition, triggered calls, beacon status and PA.

Transmitter cost (estimate)

Core transmitter≈ €
Raspberry Pi (mini format) + SD card30
SX1268 module (with TCXO)8
Mitsubishi RA60H3847M1 PA module100
Heatsink + fan25
Power supply 12.5 V / ≥ 15 A50
Transmitter PCB + low-pass parts25
Shielded enclosure (aluminium, weatherproof)40
Small parts, sequencer, DC converter20
Subtotal≈ €300
Site accessories≈ €
70 cm cavity band-pass filter (used/kit)90
Antenna (omni)80
Coax cable + connectors40
RX receiver for the repeater audio (used)40
Subtotal≈ €250

Total ≈ €550, depending on sourcing €500 to 650, a one-time cost: a single transmitter serves any number of receivers. No driver stage is needed, at +22 dBm the SX1268 delivers more than the roughly 50 mW the RA60H3847M1 needs for rated output; if anything, an attenuator belongs in between. Don’t underestimate the power supply: at about 40 % PA efficiency, 60 W of RF means a good 150 W of input power.

Roadmap: from the idea to a HamBird on your keychain

Receiver

  • Design the schematic.
  • Route the PCB in KiCad, publish it on GitHub and have it manufactured.
  • Assemble the finished PCBs and develop the firmware with e-ink driver and USB bootloader. Large parts are already available as open source on GitHub.
  • Design the enclosure and produce it by 3D printing.
  • Start production of at least 10 sample devices.

Transmitter

  • Design the transmitter with power amplifier (at least 60 watts) as a PCB.
  • Develop the software: VOSK speech recognition, SX1268 control via SPI, protocol stack and web dashboard.
  • Mount it in a shielded enclosure on the roof of an exposed site.
  • Be sure to include a low-pass filter between the SX1268 and the PA and a cavity band-pass filter in front of the antenna: because of possible harmonics, for a clean TX signal.

Measurement drives

  • Validate the range estimate with measurement drives in urban, suburban and open terrain.