Made with

The satellite that went quiet for 41 days

Edited October 24, 2026Share link · Read-only

Request edit accessWhen the owner approves, you get an invite link and code by email.

Yeoul-1 above the night side of Earth
Yeoul-1 above the night side of Earth
An Acard example blog post. The cubesat Yeoul-1, the Hanbit University space club, everyone in it and the radio amateur in Chile are all made up.

Hajin Seo9 min read

Ground station lead, Hanbit University space club

Spent three years building a satellite the size of a milk carton, and 41 days not knowing if it was alive.

At 3:12 a.m. on May 21, the green streak disappeared from the blue waterfall on my laptop. That was Yeoul-1's last signal. Or so we believed for 41 days.

A satellite the size of a milk carton

Yeoul-1 is a 1U cubesat: 10 cm on each side, 1.18 kg. Eleven of us built it over three years, and on May 12, 2026 it went up into a 520 km sun-synchronous orbit. It had one job: circle the Earth and send our school's name down at 9,600 bps.

Key numbers

1,180 g
Mass
520 km
Altitude
95 min
One orbit
41 days
Days of silence

Words in this post

The satellite sends a beacon[1]A short "I'm alive" signal the satellite sends at fixed intervals., the ground station follows a frequency bent by Doppler[2]The frequency rises as the satellite approaches and falls as it leaves, about ±10 kHz per pass., and the watchdog[3]A timer that forces a restart when the computer stops answering. inside restarts a stuck computer.

  1. beacon: A short "I'm alive" signal the satellite sends at fixed intervals.
  2. Doppler: The frequency rises as the satellite approaches and falls as it leaves, about ±10 kHz per pass.
  3. watchdog: A timer that forces a restart when the computer stops answering.

Day 9: the signal stopped

The first eight days went well. On each of the 4-6 daily passes over Seoul, the rooftop antenna picked up the beacon. But the battery voltage was slipping a little every day.

Battery voltage after launch (daily mean)
Battery voltage after launch (daily mean)Battery: D1이(가) 4.02V로 가장 높고, D9이(가) 3.49V로 가장 낮아요.0V2V4V6VD1D2D3D4D5D6D7D8D9VD1 · Battery: 4.02VD2 · Battery: 3.98VD3 · Battery: 3.93VD4 · Battery: 3.87VD5 · Battery: 3.81VD6 · Battery: 3.74VD7 · Battery: 3.66VD8 · Battery: 3.58VD9 · Battery: 3.49VD9 · 3.49V
Battery voltage after launch (daily mean)
항목Battery
D14.02V
D23.98V
D33.93V
D43.87V
D53.81V
D63.74V
D73.66V
D83.58V
D93.49V
Below 3.50 V the satellite was designed to drop into safe mode on its own.

On the early pass on day 9 the signal cut out after three minutes. Nothing on the next pass, or the next day. The nights on the roof staring at a laptop began.

The rooftop ground station
The rooftop ground station
The slanted streak on the waterfall
The slanted streak on the waterfall

What we heard for 41 days

We didn't give up. Over 41 days we recorded every one of the 203 passes over Seoul, and emailed 51 amateur radio stations in 23 countries asking them to tell us if they heard anything.

What 203 passes came down to
What 203 passes came down toPasses recorded 203 중 Decoded 0으로 전체 전환율은 0%입니다.Countvs. previousPasses recordedPasses recordedPasses recorded: 203203—Something above the noiseSomething above the noiseSomething above the noise: 383818.72%Doppler matched our orbitDoppler matched our orbitDoppler matched our orbit: 111128.95%DecodedDecodedDecoded: 000%
What 203 passes came down to
단계값이전 단계 대비 전환율
Passes recorded203—
Something above the noise3818.72%
Doppler matched our orbit1128.95%
Decoded00%
Eleven passes were clearly Yeoul-1. Our 9,600 bps decoder still produced nothing.
The signal we expected vs. the one we got
Expected
9,600 bps GMSK, 1 W, every 10 s
Actual
12 WPM Morse, 0.1 W, every 2 min
The safe mode we wrote cut power to a tenth and spoke only Morse code to save energy. Nobody had a Morse decoder running.

One email from Chile

On the morning of day 42, an email came from Marta Vidal, a radio amateur in Punta Arenas, Chile. The attached waterfall showed a thin, slanted green streak. The subject line: "Is this yours? It is beeping."

"The beeps were too regular to be a person. So I looked up the orbit tables." - Marta Vidal
Stations that heard the safe-mode beacon (days 42-47)
Stations that heard the safe-mode beacon (days 42-47)값: Punta Arenas, Chile이(가) 9passes로 가장 높고, Sapporo, Japan이(가) 3passes로 가장 낮아요.0passes2.5passes5passes7.5passes10passesPunta Arenas, ChilePunta Arenas, ChilePunta Arenas, Chile: 9passes9passesHobart, AustraliaHobart, AustraliaHobart, Australia: 6passes6passesTromsø, NorwayTromsø, NorwayTromsø, Norway: 5passes5passesHanbit rooftopHanbit rooftopHanbit rooftop: 4passes4passesSapporo, JapanSapporo, JapanSapporo, Japan: 3passes3passesPasses heard
Stations that heard the safe-mode beacon (days 42-47)
항목값
Punta Arenas, Chile9passes
Hobart, Australia6passes
Tromsø, Norway5passes
Hanbit rooftop4passes
Sapporo, Japan3passes

That night we re-ran every recording from the past 41 days as Morse. The decoder was forty lines of Python.

Code
cw_decode.pypython
# Yeoul-1 safe-mode beacon: decoding 0.1 W Morseimport numpy as npdef cw_envelope(iq, rate, tone_hz, win=0.02):    t = np.arange(len(iq)) / rate    mixed = iq * np.exp(-2j * np.pi * tone_hz * t)    # pull the drifting tone down to 0 Hz    n = int(win * rate)    return np.convolve(np.abs(mixed), np.ones(n) / n, "same")def to_morse(env, rate, wpm=12):    dot = 1.2 / wpm                                   # at 12 WPM one dot is 0.1 s    on = env > np.percentile(env, 80) * 0.5    edges = np.flatnonzero(np.diff(on.astype(int))) + 1    runs = np.diff(np.r_[0, edges, len(on)]) / rate    return "".join("." if r < 2 * dot else "-" for r, o in zip(runs, on[np.r_[0, edges]]) if o)
Pull the drifting tone to 0 Hz first, then split dots and dashes by length.

It was rebooting 45 times a day

The first decoded line read "YEOUL1 SAFE BAT 3.41 RST 1847": battery at 3.41 V and 1,847 restarts. Over 41 days that is about 45 a day, roughly once an orbit.

The loop Yeoul-1 was stuck in for 41 days
The loop Yeoul-1 was stuck in for 41 daysEnter Earth's shadow → Voltage dips → Watchdog reboot → Charge in sunlight → Enter Earth's shadowEnter Earth's shadow · The battery heater turns on🌑EnterEarth'sshadowVoltage dips · Drops below 3.3 V for a moment🔋VoltagedipsWatchdog reboot · Thinks the computer froze🔁WatchdogrebootCharge in sunlight · Wakes up in safe mode again☀️Charge insunlight
Cycle stages
OrderStageNote
1Enter Earth's shadowThe battery heater turns on
2Voltage dipsDrops below 3.3 V for a moment
3Watchdog rebootThinks the computer froze
4Charge in sunlightWakes up in safe mode again
Power over one orbit (95 min)
Power over one orbit (95 min)Solar charge: 20이(가) 2.2W로 가장 높고, 60이(가) 0W로 가장 낮아요.0W1W2W3Wmin001010202030304040505060607070808090900 · Solar charge: 1.9W10 · Solar charge: 2.1W20 · Solar charge: 2.2W30 · Solar charge: 2.2W40 · Solar charge: 2.1W50 · Solar charge: 1.9W60 · Solar charge: 0W70 · Solar charge: 0W80 · Solar charge: 0W90 · Solar charge: 0W0 · Heater draw: 0W10 · Heater draw: 0W20 · Heater draw: 0W30 · Heater draw: 0W40 · Heater draw: 0W50 · Heater draw: 0W60 · Heater draw: 1.6W70 · Heater draw: 1.6W80 · Heater draw: 1.6W90 · Heater draw: 1.6W
Power over one orbit (95 min)
항목Solar chargeHeater draw
01.9W0W
102.1W0W
202.2W0W
302.2W0W
402.1W0W
501.9W0W
600W1.6W
700W1.6W
800W1.6W
900W1.6W
In the shadow (60-95 min) the 1.6 W heater pulled the battery down all at once.

Getting one command up

The heater was the cause, and the fix was simple: one command to switch it off in shadow. The catch was that in safe mode the satellite only listens for commands for 40 seconds per pass.

Recovery steps

Recovery steps
Step 1 of 5Refine the orbit

Nine of Marta's recordings refined the orbit and cut our Doppler prediction error from 3.1 kHz to 0.4 kHz.

Step 2 of 5Rehearse the command

Tested 31 times on the spare unit that the command lands inside 40 s.

Step 3 of 5First try fails

Day 47: the antenna rotator froze up and we missed it.

Step 4 of 5Second try works

Day 48, 8:41 p.m.: the reply "ACK HTR OFF".

Step 5 of 5Back to normal mode

Day 51: the 9,600 bps beacon was back.

The day after the command, reboots went from 45 a day to zero. The battery was back at 3.86 V within three days.

If we built it again

Why that safe-mode signal?

Morse can be heard by ear even when very weak. That part was right. What we got wrong was not being ready to listen for it.

What changes on the next satellite?

The heater only turns on above 3.6 V.

The safe-mode beacon decoder runs at the ground station from day one.

What is Marta doing now?

Her name is at the top of the Yeoul-2 ground station partner list, and there is a postcard from Punta Arenas on our clubroom wall.

✓Add the safe-mode decoder to the default ground station setup
✓Add a voltage floor to the heater rule
Turn the list of 51 partner stations into a public page
Launch Yeoul-2 (aiming for late 2027)

What we heard for 41 days wasn't noise. The satellite was talking the whole time; we were just listening in the wrong language. Next time we'll keep one more ear open from the start.