Welcome, fellow radio nerd! 👋 This here is a school project all about turning a dirt-cheap Quansheng UV-K1 (a.k.a. UV-K5 V3) handheld radio into a dedicated Morse code trainer. You flash some custom firmware, the radio forgets it was ever a radio, and boots straight into a little CW classroom. Costs about $20!!
📱 What the heck is a Quansheng K1?
The Quansheng UV-K1 (sold in some places as the UV-K5 V3) is a tiny, wildly popular dual-band ham radio handheld. It became famous because it is cheap and its firmware can be completely rewritten by hobbyists. People have crammed spectrum analyzers, FM radios, and little games onto it.
This project takes that hackability and points it at one job: teaching you Morse code. The radio part (transmitting, receiving, antennas) is switched completely off. No license needed to practice — it just beeps at you and quizzes you, like a pocket flash-card machine that speaks in dits and dahs.
📝 The boring-but-important specs
| Radio | Quansheng UV-K1 / UV-K5 V3 |
|---|---|
| Brain (MCU) | PY32F071 (newer chip than the original UV-K5 V1) |
| Screen | 128 × 64 monochrome LCD (ST7565) |
| Input | The radio's own rubber keypad (numbers do the answers!) |
| Price | Roughly $15–$30 depending where you look |
| Sound | Built-in speaker sidetone — adjustable tone & WPM |
| License | Open source (Apache-2.0), built on the F4HWN & NR7Y firmware |
🤓 Why learn CW on a $20 radio?
Morse code (CW) is still one of the most fun and efficient ways to make contacts on the ham bands. The trouble is, dedicated code-practice gadgets and fancy apps can get pricey, and computer trainers chain you to a desk. The whole pitch of this project:
- It's the cheapest "accessory" in ham radio. A spare K1 costs less than a night out, and doubles as a learning tool you keep in your pocket.
- No computer, no internet, no desk. Practice on the couch, on the bus, in line at the store. It's a self-contained little classroom.
- No license required to start. Nothing transmits. It only makes beeps and asks you what you heard.
- It's adaptive. The trainer watches which characters trip you up and drills those harder — just like a good teacher.
- It's already in your shack. Tons of hams already own a K-series Quansheng. Flash a second one and you've got a trainer for free-ish.
🎓 The Trainer Modes (the fun part)
Every mode works the same friendly way: the radio plays a bit of Morse, shows you up to four answers, and you press the matching number key (1–4). It grades you instantly, keeps score, and quietly tracks your weak spots. There are four modes:
1. 📈 Koch — the classic ladder
Starts you with just a couple of characters at full speed, and automatically adds a new character once you're getting groups clean. It climbs from single letters → pairs → triples → whole words. This is the proven "Koch method" that real CW teachers swear by.
2. 🧐 Confuse — drills your mix-ups
Keeps a little "confusion matrix" of the characters you personally get mixed up (like U vs V or 5 vs H) and feeds you those look-alike pairs until you can tell them apart cold.
3. 💬 Phrase — real ham shorthand
Plays common words, abbreviations, and prosigns you'll actually hear on the air (73, CQ, QTH, BK…) so the code starts sounding like language instead of random letters.
4. ⚡ Rapid — on-air realism
Fires off callsigns, words, numbers, and US state abbreviations, multiple-choice style, to build the quick recognition you need for contesting and rag-chewing.
⌨️ The keypad cheat-sheet
📷 Screenshots from the lil' screen
Here's what the trainer actually looks like on that 128×64 LCD. (Drawn to scale, pixel-faithful — the real backlight is this greeny color.)
Phrase Rapid
(These are faithful mockups of the trainer's actual on-screen layout — swap in real device photos here once you've got the K1 in hand!)
🔌 How to flash it (right from your browser!)
The amazing part: you don't need to install anything. The K-series flashes over a web tool called UVTools2 using WebSerial, straight in Chrome, Chromium, or Edge. Here's the drill:
💾 Step 0: Back up your calibration FIRST
Before anything, use UVTools2's Dump Calib mode to save a
calibration.dat file. If anything goes sideways, this is your lifeline.
Tip: rename the file with the radio's serial number so you don't mix units up.
🔥 Step-by-step flash
- Plug the radio into your computer with a Quansheng USB programming cable (the USB-C one, or the Baofeng/Kenwood double-jack cable).
- Put the radio into DFU / flash mode: hold the PTT button while turning it on. (On the trainer build, the bootloader still works this way, so you can always re-flash.)
- Open UVTools2 in Flash mode in Chrome / Edge.
- Choose the trainer firmware
.binfile on your computer. - Click Flash Firmware, then pick the serial port for your radio when asked.
- Watch the progress bar. When it's done, the radio restarts — straight into the CW trainer. 🎉
docs/ folder. Totally optional — skip it if you just want to
copy code.
🏗️ Building it yourself (for the brave)
If you'd rather compile from source, the repo ships a Docker helper and a CMake
Trainer preset that strips out all the RF features and leaves a lean,
mean morse machine. See the project's CLAUDE.md and README.md
for the full toolchain steps.
🛒 Where to buy a K1
You'll want a Quansheng UV-K1 or UV-K5 V3 (make sure it's the newer PY32-based version). Grab one here:
🎓 Graduated? Come join BKG!
Here's the deal: this trainer isn't the destination — it's school. Once you can actually copy code, the real fun is getting on the air with other CW ops. That's what BKG is for. Learn the code here first, then come hang out with the crew and put those dits and dahs to work. 📡