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.
- 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)
| Item | Value |
|---|---|
| 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 |
| Environment | Radius |
|---|---|
| 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
Repeater
A fellow ham calls you by voice on the repeater, e.g. DB0SP.
- 2
RX audio
An off-the-shelf receiver feeds the audio into the Raspberry Pi.
- 3
VOSK
Offline speech recognition spots your callsign in the ongoing traffic.
- 4
CSS transmitter
The SX1268 generates the chirp, the PA raises it to site-grade power.
- 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.
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
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 duration | 4.1 ms | 8.2 ms |
| Airtime beacon / call / broadcast | 0.12 / 0.17 / 0.53 s | 0.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
- 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)
| State | Current | Share | Contribution 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 mA | a few s/day | ≈ 2 µA |
| Average | ≈ 12 µA | ||
| CR2032 gross | 220 mAh | ÷ 12 µA | ≈ 18,300 h ≈ 25 months |
| CR2032 realistic | ≈ 65 % usable | pulse 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 SAMR34 | 7.00 |
| 1.54″ e-ink BWRY 200 × 200 | 10.00 |
| Chip antenna + matching network | 2.00 |
| Crystals (32.768 kHz + TCXO) | 2.50 |
| Transducer (piezo) | 1.50 |
| USB socket, CR2032 holder + cell | 2.00 |
| Passives, LDO, buffer capacitor | 2.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 card | 30 |
| SX1268 module (with TCXO) | 8 |
| Mitsubishi RA60H3847M1 PA module | 100 |
| Heatsink + fan | 25 |
| Power supply 12.5 V / ≥ 15 A | 50 |
| Transmitter PCB + low-pass parts | 25 |
| Shielded enclosure (aluminium, weatherproof) | 40 |
| Small parts, sequencer, DC converter | 20 |
| Subtotal | ≈ €300 |
| Site accessories | ≈ € |
|---|---|
| 70 cm cavity band-pass filter (used/kit) | 90 |
| Antenna (omni) | 80 |
| Coax cable + connectors | 40 |
| 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.
HamBird