Paddle-Adapter zum Nachbauen

← Morsetrainer

Ein echtes Morse-Paddle oder eine Morsetaste kabellos am Morsetrainer: Ein kleiner Bluetooth-Adapter meldet sich als Tastatur an – am iPhone, iPad, Android-Gerät, Mac oder PC, ohne Treiber und ohne App-Installation. Hier findest du alles, um ihn selbst zu bauen: Teileliste, Schaltplan, fertige Software und ein Gehäuse für den 3D-Drucker.

Zu löten sind nur fünf Drähte: drei zur Klinkenbuchse, zwei zum Akku.

Downloads

Gehäuse

Gehäuse von obenOberteil innenSeite mit KlinkenbuchseSeite mit USB-CBoden

Ein echtes Morse-Paddle kabellos am Morsetrainer: Der Seeed XIAO nRF52840 Plus meldet sich per Bluetooth als Tastatur an (funktioniert mit iPhone, iPad, Android, Mac und PC – ohne Treiber, ohne App-Installation). Punkt-Hebel = Taste [, Strich-Hebel = Taste ] (deutsche Tastatur: „ü“ und „+“); den iambischen Keyer übernimmt der Morsetrainer. Keine Strg-Tasten: Zweimal Strg löst auf dem iPhone einen Kurzbefehl aus und nimmt der App den Ton.

DateiInhalt
schaltplan.svgSchaltplan (im Browser öffnen)
paddle_adapter.uf2fertige Software zum Aufspielen per Ziehen und Ablegen
paddle_adapter/paddle_adapter.inoQuelltext (Arduino)
gehaeuse/3D-Druck-Gehäuse: oberteil.stl, boden.stl (siehe gehaeuse/README.md)
LIZENZ.mdCC BY-NC-SA 4.0 – nachbauen, verändern, weitergeben mit Namensnennung, nicht kommerziell

Überblick – das ist zu tun

  1. Teile besorgen (Abschnitt 1).
  2. Löten: Klinkenbuchse an D0, D1, GND; Akku an BAT+/BAT− (Abschnitt 2, schaltplan.svg).
  3. Software aufspielen: am einfachsten die fertige Datei paddle_adapter.uf2 per Ziehen und Ablegen (Abschnitt 3) – dafür brauchst du keine Arduino-Software. Nur wenn du die Software ändern willst: Abschnitt 4.
  4. Koppeln mit iPhone/Mac/Android (Abschnitt 5).
  5. Im Morsetrainer „Geben“ → „Paddle“ wählen und mit dem Tastentest prüfen.

Tipp: Schritt 3 kannst du schon vor dem Löten machen – der XIAO braucht dafür nur das USB-Kabel.

1. Teile

TeilHinweis
Seeed Studio XIAO nRF52840 Plus(die normale oder die Sense-Version geht auch)
Klinkenbuchse 3,5 mm Stereo: reichelt EBS 35 (Ledino KB3SPRS)mit Gewindehals M6 × 0,5 und Mutter – wird in der Gehäusewand festgeschraubt
LiPo-Akku 1S 3,7 V: reichelt RD XT 650 S1 (RED POWER, 650 mAh, 58 × 18 × 9 mm)Modellbau-Akku, vermutlich ohne Schutzschaltung – die Software schützt ihn (siehe unten)
Litze, 2 Schrauben M2,5 × 10 (Senkkopf, selbstschneidend)für den Boden des Gehäuses
Gehäuse aus dem 3D-Druckergehaeuse/oberteil.stl und gehaeuse/boden.stl

Ohne Schalter: Der Adapter braucht keinen Ein-/Ausschalter. Nach 15 Minuten ohne Benutzung schläft er und braucht dann unter 1 µA (auch der Spannungsteiler der Akkumessung ist abgeschaltet); ein Druck auf den Punkt-Hebel weckt ihn.

Wie lange hält der Akku? (Schätzung) Verbunden ca. 1–2 mA → eine volle Ladung reicht für etwa 2–3 Wochen Dauerbetrieb, im Alltag für mehrere Monate. Im Schlaf begrenzt nur noch die Selbstentladung des Akkus (ca. 2–3 % im Monat): Bei 20 % Restladung sind das etwa ein halbes Jahr bis zur kritischen Spannung. Deshalb bei längerer Pause etwa alle 3 Monate laden; für Lagerung über Monate auf ca. 50–60 % laden und den Akkustecker ziehen.

Tiefentladeschutz: Sinkt die Akkuspannung unter 3,4 V, blinkt die rote LED 5× und der Adapter schläft. Er lässt sich erst wieder wecken, wenn der Akku über USB geladen ist. So wird der Akku ohne eigene Schutzschaltung nicht tiefentladen.

Der XIAO hat das Ladegerät schon eingebaut (TI BQ25101): Akku an die Lötflächen BAT+ / BAT− auf der Rückseite, USB-C anstecken – er lädt (rote Lade-LED leuchtet). Die Software stellt den Ladestrom auf 100 mA (gut für Akkus ab ca. 150 mAh; für kleinere Akkus in der .ino LADESTROM_100MA = false → 50 mA).

2. Aufbau (siehe schaltplan.svg)

KlinkenbuchseStift an der EBS 35 (Datenblatt KB3SPRS)XIAO
Spitze (Tip) – Punkt2 (außen, neben Stift 4)D0
Ring – Strich3 (gegenüber, vorn)D1
Hülse (Sleeve) – Masse1 (dickster Stift, mittig am Gewindehals)GND
Schaltkontakte4 und 5frei lassen

Lage der Stifte von unten gesehen: klinke_unterseite.svg. Im Zweifel mit dem Multimeter prüfen: Stecker einstecken, Durchgang von der Steckerspitze zum Stift messen.

AkkuXIAO
+ (rot)BAT+ (Lötfläche Rückseite)
− (schwarz)BAT− (Lötfläche Rückseite)

Der RD XT 650 S1 hat einen JST/BEC-Stecker. Entweder eine passende JST/BEC-Buchse an zwei Litzen zum XIAO löten (dann lässt sich der Akku abziehen – empfohlen), oder den Stecker abschneiden: immer nur einen Draht schneiden und sofort isolieren, damit sich die Enden nie berühren.

2a. Ins Gehäuse einbauen (siehe gehaeuse/README.md)

  1. Oberteil umgedreht hinlegen (Deckel unten).
  2. Klinkenbuchse: Gewindehals von innen durch das Loch in der rechten Stirnwand stecken (leicht schräg einführen), außen Unterlegscheibe und Mutter aufschrauben und festziehen. Lötstifte zeigen zum Deckel.
  3. XIAO: mit der Bauteilseite zum Deckel zwischen die beiden Rippen legen, die USB-C-Buchse in die Öffnung der linken Stirnwand (Buchse zuerst, dann die Platine ablegen). Der Anschlag hinter der Platine hält sie beim Einstecken.
  4. Akku in die linke Spur legen, Kabel zum XIAO führen (unter der Platine ist Platz für die Drähte an BAT+/BAT−).
  5. Boden auflegen und mit 2 Schrauben M2,5 × 10 anschrauben. Leisten im Boden drücken den XIAO gegen die Rippen, die Mulde hält die Klinkenbuchse.

Alle Drähte auf der Rückseite des XIAO (der Seite ohne Bauteile, zum Boden hin): Die Bauteilseite mit den LEDs liegt am Deckel unter dem Lichtfenster und muss flach bleiben. D0/D1 (linke Kante) und GND (rechte Kante) sind die ersten beiden Pins neben der USB-C-Buchse – die Drähte von unten an die Halblöcher löten, möglichst wenig Lötzinn auf der Oberseite. Leisten und Rippen lassen dort 7 mm frei. Dünne Litze (0,14 mm²), unter der Platine zur Klinkenbuchse führen.

3. Software aufspielen – ohne Arduino (einfachster Weg)

Du brauchst nur ein USB-C-Datenkabel (manche Kabel können nur laden – dann erscheint kein Laufwerk).

  1. XIAO mit dem USB-C-Kabel an den Mac anschließen.
  2. Den winzigen Reset-Knopf (neben dem USB-Anschluss, mit „RST“ beschriftet) zweimal schnell hintereinander drücken. Die LED pulsiert, und im Finder erscheint ein neues Laufwerk (meist „XIAO-SENSE“).
  3. Die Datei paddle_adapter.uf2 aus diesem Ordner auf das Laufwerk ziehen.
  4. Das Laufwerk verschwindet von selbst, der XIAO startet neu und die blaue LED blinkt kurz jede Sekunde – die Software läuft und wartet auf eine Bluetooth-Verbindung. (macOS meldet eventuell „Volume nicht korrekt ausgeworfen“ – das ist normal und schadet nicht.)

Erscheint kein Laufwerk: anderes Kabel probieren, schneller doppelt drücken, anderen USB-Anschluss nehmen.

Im geschlossenen Gehäuse (Reset-Knopf nicht erreichbar): USB-C-Kabel anstecken, beide Paddle-Hebel 10 Sekunden gedrückt halten → grüne LED blinkt 3× → das Laufwerk erscheint; weiter mit Schritt 3. Doch nichts aufspielen? Einfach das USB-Kabel abziehen – der Adapter startet wieder die bisherige Firmware und ist sofort benutzbar. Bricht ein Kopiervorgang mittendrin ab, bleibt er im Update-Modus: Kabel wieder anstecken und die Datei erneut aufs Laufwerk ziehen. Der Griff geht nur am USB-Kabel (im Akkubetrieb passiert nichts) und erst, wenn diese Firmware einmal drauf ist. Mit einer Morsetaste (nur ein Kontakt) geht der Griff nicht – dann kurz ein Paddle einstecken oder in der Arduino IDE auf Hochladen klicken (Abschnitt 4, die IDE startet den XIAO selbst neu).

4. Software ändern – mit der Arduino IDE (nur bei Bedarf)

Nur nötig, wenn du Einstellungen ändern willst (z. B. Schlafzeit, Ladestrom). Einmalig einrichten:

  1. Arduino IDE 2 von https://www.arduino.cc/en/software herunterladen und in „Programme“ ziehen.
  2. Arduino IDE öffnen → Menü Arduino IDE → Einstellungen … → Feld „Zusätzliche Boardverwalter-URLs“: https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json eintragen → OK.
  3. Menü Werkzeuge → Board → Boardverwalter … → nach „Seeed nRF52“ suchen → „Seeed nRF52 Boards“ installieren (NICHT „Seeed nRF52 mbed-enabled Boards“). Dauert ein paar Minuten.
  4. Rosetta (nur Mac mit Apple-Chip): Das Hochlade-Werkzeug des Seeed-Pakets ist ein Intel-Programm. Fragt macOS beim ersten Hochladen nach „Rosetta installieren“ – bestätigen. Oder vorab im Terminal: softwareupdate --install-rosetta --agree-to-license
  5. python-Befehl (macOS-Stolperfalle): Das Seeed-Paket ruft beim Übersetzen den Befehl python auf, den macOS nicht mehr mitbringt. Ohne diesen Schritt bricht das Übersetzen mit „xcode-select: Failed to locate 'python'“ ab. Einmalig im Terminal (fragt nach deinem Mac-Passwort): Danach die Arduino IDE einmal beenden und neu starten.
    sudo mkdir -p /usr/local/bin
    sudo ln -sf "$(python3 -c 'import sys; print(sys.executable)')" /usr/local/bin/python

Jedes Mal, wenn du die Software änderst:

  1. Datei → Öffnen … → paddle-adapter/paddle_adapter/paddle_adapter.ino.
  2. Oben im Quelltext unter „Einstellungen“ ändern, was du möchtest.
  3. Werkzeuge → Board → Seeed nRF52 Boards → „Seeed XIAO nRF52840 Plus“ wählen.
  4. XIAO per USB anschließen, Werkzeuge → Port → den Eintrag /dev/cu.usbmodem… wählen.
  5. Auf den runden Pfeil nach rechts („Hochladen“) klicken. Unten erscheint „Hochladen abgeschlossen“ bzw. „Device programmed“.

Klappt das Hochladen nicht („Failed to upgrade target“ o. Ä.): Reset zweimal drücken (der XIAO geht in den Programmiermodus), unter Werkzeuge → Port den jetzt erscheinenden Port wählen und erneut hochladen.

Einstellungen oben in der .ino: Pins, Entprellzeit, Schlafzeit (15 min), Name, Ladestrom.

5. Koppeln und benutzen

  1. Adapter einschalten → blaue LED blinkt = wartet auf Verbindung.
  2. iPhone/iPad: Einstellungen → Bluetooth → „Morsepaddle DL2TTA 3F7A-1“ antippen (die 4 Zeichen sind bei jedem Adapter anders, siehe unten; „-1“ ist der Kanal, siehe „Mehrere Geräte“). Mac: Systemeinstellungen → Bluetooth → Verbinden. Android: Bluetooth → Gerät koppeln.
  3. Grünes Doppelblinken = verbunden. Danach verbindet er sich beim Einschalten von selbst.
  4. Morsetrainer → Geben → Paddle, dann „Tastentest“ aufklappen. Er zeigt „Empfangen: BracketLeft ↓ gedrückt“ beim Punkt-Hebel und „BracketRight“ beim Strich-Hebel. Sind Punkt und Strich vertauscht: in der App „Paddle tauschen“ einschalten.
LEDBedeutung
blau, kurzes Blinken jede Sekundewartet auf Verbindung
alle LEDs ausgetrennt nach 1 Minute Pause – Hebel drücken verbindet wieder (oder er schläft, siehe unten)
grün, 2×verbunden
blau, 1×, 2× oder 3× beim EinschaltenKanal 1, 2 oder 3
blau, einmal lang beim Halten beider Hebeljetzt loslassen = nächster Kanal
rot, 3× beim Einschaltenalle Kopplungen gelöscht
rot, 1×geht schlafen
rot, 5×Akku leer – schläft bis zum Laden (Tiefentladeschutz)
grün, kurzes Blitzen alle 2 Sekunden (nur am USB-Kabel)Akku wird geladen
grün, dauerhaft (nur am USB-Kabel)Akku voll (oder kein Akku angeschlossen)
Lade-LED neben der USB-Buchse (fest auf der Platine, unabhängig von der Software)leuchtet beim Laden

Morsetaste (Handtaste) statt Paddle

Einfach einstecken und im Morsetrainer Geben → Handtaste wählen – keine andere Firmware nötig. Die Taste muss zwischen Spitze und Hülse schalten (so sind fast alle Morsetasten verdrahtet); der Adapter sendet dann [, das die App bei „Handtaste“ als Taste nimmt. Die Länge von Punkt und Strich bestimmst du selbst.

Mehrere Geräte: drei Kanäle

Der Adapter merkt sich drei Geräte, z. B. iPhone, iPad und Mac – wie die „Easy-Switch“-Taste mancher Tastaturen. Jeder Kanal funkt mit einer eigenen Bluetooth-Adresse und steht als eigenes Gerät in der Liste: „Morsepaddle DL2TTA 3F7A-1“, „…-2“, „…-3“. Ein Gerät sieht nur „seinen“ Kanal – die anderen Geräte schnappen sich den Adapter deshalb nicht mehr weg, und niemand muss entkoppeln.

Mehrere Adapter in einem Raum (Kurs, Clubabend)

Jeder Adapter hat einen eigenen Namen: „Morsepaddle DL2TTA“ + 4 Zeichen aus seiner Bluetooth-Adresse (z. B. 3F7A), dahinter der Kanal. Die Adresse ist fest im Chip – alle Adapter bekommen dieselbe Firmware, nichts muss einzeln eingestellt werden.

6. Fehlersuche

ProblemLösung
Kein Laufwerk nach Doppeldruck auf ResetAnderes USB-Kabel (viele Kabel können nur laden); schneller doppelt drücken
Taucht in Bluetooth nicht aufBlinkt die blaue LED? Sonst schläft er (Punkt-Hebel drücken) oder der Akku ist leer → USB anstecken
Verbindet sich mit dem falschen GerätKanal wechseln (beide Hebel 3 s); beim Einschalten zeigt die Zahl der blauen Blinker den Kanal
Verbindet, aber Tastentest zeigt nichtsIn der App den Reiter „Geben“ wählen; Klinkenstecker ganz einstecken; mit Drahtbrücke D0–GND testen
Ein Hebel „hängt“Kontakt prellt/klebt → ENTPRELLEN_MS erhöhen (z. B. 8); Paddle-Kontakte reinigen
Punkt und Strich vertauschtIn der App „Paddle tauschen“ – oder die Drähte an D0/D1 tauschen

Getestet: Der Quelltext ist mit dem Board-Paket „Seeed nRF52 Boards“ 1.1.13 für „Seeed XIAO nRF52840 Plus“ ohne Fehler und Warnungen übersetzt; die UF2-Datei ist daraus erzeugt (Startadresse 0x27000). Erprobt mit Paddle und iPhone. Rückmeldungen gern über „💬 Rückmeldung“ im Morsetrainer.

Gehäuse drucken

DateiTeil
oberteil.stlDeckel mit Wänden: USB-C-Öffnung links, Loch für die Klinkenbuchse rechts, Rippen für Akku und XIAO, dünne LED-Stelle
boden.stlBoden mit Leisten für den XIAO und Mulde für die Klinkenbuchse, 2 Senkungen für M2,5 × 10

Außenmaße: 70 × 48 × 16 mm.

Halt der Teile: Alles wird geklemmt; nur der Boden ist mit 2 Schrauben befestigt.

Vorschau: vorschau_*.png. Schnitte: schnitt_xiao.png (quer) und schnitt_laengs.png (längs durch die Elektronik).

Drucken

Einbau: siehe ../ANLEITUNG.md, Abschnitt 2a.

Maße anpassen

Alle Maße stehen oben in gehaeuse.py, zum Beispiel Lage der USB-C-Buchse, Platinendicke und Spiel. Neu erzeugen mit python3 gehaeuse.py; nötig sind manifold3d, numpy und pillow.

Annahmen, die am echten Teil zu prüfen sind:

Passt etwas nicht, den Wert in gehaeuse.py ändern und neu erzeugen.

Lizenz

© 2026 Holger Behrens, DL2TTA. Bauanleitung, Schaltplan, Software und Gehäuse stehen unter CC BY-NC-SA 4.0: Du darfst den Adapter nachbauen, die Unterlagen verändern und weitergeben – mit Namensnennung, nicht kommerziell (z. B. keine fertigen Adapter oder Bausätze verkaufen) und Veränderungen unter denselben Bedingungen.

Fragen oder Verbesserungen? Im Morsetrainer unten auf „💬 Rückmeldung“ tippen. 73 de DL2TTA