<- Bild 1: Aufbau mit Aufsteckplatine auf Arduino UNO.
Spielerei mit Arduino: Yaesu FT-857 lernt sprechen
Es ist erstaunlich, dass ein kleiner Mikroprozessor wie der ATMEL Mega328P mit einem Takt von nur zwanzig MHz mit ein wenig Aufwand fähig ist, eine Sprachausgabe zu realisieren. Für die Arduinos existiert eine prima Sprachausgabe-Bibliothek. Als ich davon las, brachte sie mich auf die Idee, meinem FT-857 das „Sprechen“ beizubringen – wenn auch rudimentär. Eine Hifi-Qualität darf man jedoch nicht erwarten – dennoch: verständlich ist jedes Wort.
Mit ein wenig Programmierung ist eine Sprachausgabe der aktuellen Frequenz relativ flott realisierbar. Zunächst ist das eine kleine Spielerei mit Hard- und Software, doch ein sehbehinderter oder gar blinder Mensch wird das vielleicht zu schätzen wissen, auf Knopfdruck die Frequenz genannt zu bekommen. Man betätigt einen Taster und die aktuell eingestellte Frequenz des Funkgerätes ertönt aus einem kleinen Lautsprecher. <- Bild 2: Minimalbeschaltung des Arduino UNO. Hier wird eine serielle Schnittstelle aus Software (Softwareserial) an Pin 11 und 10 verwendet, um mit dem Funkgerät mit 9600 Baud zu kommunizieren.
Minimal-Hardware
In der Minimalversion geht das so: Man nehme einen Arduino UNO, schließe an den Arduino-Pins drei und elf einen kleinen Lautsprecher an und an Pin8 einen Taster gegen Masse. Die Verbindung zum Funkgerät besteht aus nur vier Verbindungen (13,8 Volt, GND, TRX-TX und TRX-RX). Ist alles verdrahtet laut Bild 2, kopiert man beide Bibliotheken von der virtuellen DVD in das Verzeichnis Dokumente\Arduino\ libraries. Zuletzt kopiert man das Programm FT857-Talk.ino ebenso von der virtuellen DVD in Dokumente\Arduino\FT857-Talk, startet die Arduino IDE auf überträgt das Programm auf den Arduino UNO. Diese Minimallösung wurde mit fliegenden Drähten erfolgreich ausprobiert. Ob mit oder ohne Verstärker, es sich zwei Zeilen im Sketch FT857-Talk.ino anzupassen:
Macht man sich es einfach und schließt einen kleinen Lautsprecher (ohne Verstärker) an Pin 3 und Pin 11 des Arduino UNO an, dann gilt diese Zeile
Talkie voice; Und die Zeile //Talkie voice(true, false); ist mit – wie hier zu sehen - Kommentarzeichen „//“ zu versehen.
Schießt man – wie im folgenden beschrieben - einen NF-Verstärker an Pin3 des Arduino UNO an, dann gilt folgende Zeile Talkie voice(true, false); Und die Zeile //Talkie voice; Ist – wie hier zu sehen – auszukommentieren.
<- Bild 3: Belegung der CAT-Buchse am Transceiver FT857 und weitere, ähnliche Funkgeräte. Benötigt werden 13,8 V, GND, TXD und RXD.
…und mit NF-Verstärker
Praktischer und mechanisch stabiler ist jedoch eine Aufsteckplatine (die heißt bei Arduino „shield“) mit einem kleinen NF-Verstärker darauf. Als Platine fand ich ein sog. Proto-Shield, also eine Prototypen-Platine, die so gestaltet ist, dass man sie nach der Bestückung mit den Bauelementen auf einen Arduino UNO aufsteckt (Bild 1).
Das Shield trägt einen Spannungsregler 7805 (mit den entsprechenden Kondensatoren drumherum), der Arduino und Shield gemeinsam versorgt. Die dazu nötige Spannung wird, wie erwähnt, aus der CAT-Buchse des Transceivers abgezweigt. Prinzipiell kann man jeden NF-Verstärker, der gerade zur Hand ist, nutzen. In der Bastelkiste fand ich zwei NF-Verstärker-IC, einen alten TBA820, den es heute kaum noch gibt und einen neueren TDA7050. Letzterer ist sehr praktisch, der IC arbeitet bei geringen Spannungen zwischen 1,6 und 6 Volt.
<- Bild 4: Der TDA7050 benötigt zum Betrieb keine externen Bauelemente wie Kondensatoren oder Widerstände. Den Input liefert Arduino UNO Pin 3.
Genau richtig für eine Betriebsspannung von 5 Volt, mit der auch der Arduino UNO betrieben wird. Ein weiterer Vorteil des TDA7050 ist die Zahl der benötigten Bauelemente – und die ist Null! Lediglich zur Einstellung der Lautstärke kann man – muss man nicht - ein kleines Poti von 22k (oder ähnlich) vorsehen. Option: Auf dem Shield lässt sich mit einem Jumper einstellen, ob der Arduino UNO vom TRX mit Spannung versorgt wird – oder dieser eine eigene Spannungsversorgung aufweist. Weil es so praktisch ist, bleibt der Jumper gesteckt und die Spannung liefert der Transceiver für beide Platinen. Der Lautsprecher ist über eine Klemme angeschlossen, damit es möglich ist, ihn schnell auszutauschen. Der FT857 wird im Menü 20 auf CAT und im Menü 19 auf CAT Rate 9600 eingestellt.
<- Bild 5: Bewährt: Funkamateure setzen gern auf den LM386 als NF-Verstärker.
Die Software
Sie baut auf zwei Bibliotheken auf, welche dem Programmierer einen großen Teil der Arbeit abnehmen: Für die CAT-Steuerung verwende ich die von VE3BUX initiierte Klasse FT857D, die von Philippe, F6CZV weiterentwickelt und erweitert wurde. Sie wird kostenfrei zur Verfügung gestellt und liegt zurzeit in der Version 1.04 vor [3]. Aus dieser Bibliothek werden nur wenige Funktionen wie die Frequenz- und Betriebsmodeabfrage genutzt. Die zweite Bibliothek nennt sich talkie [2] und sorgt für die komplexe Sprachausgabe. Sie funktioniert wie ein Sprachchip TMS5220 von Texas Instruments aus den 80er Jahren (des letzten Jahrtausends) [4]. Dieser Chip wurde von Frank Palazzolo in Software „nachgebaut“ und in die Programmiersprache „C“ gegossen. Er schreibt: „Der TI TMS5220 Speech-Chip verwendet ein linear-prädiktives Dekodierungsverfahren, um Sprache aus sehr kompakten Daten zu erzeugen. Dieses Schema ähnelt sehr dem U.S. Federal Standard LPC-10e Codierungssystem, das kurz nach diesem Chip entwickelt wurde.“ Kurz und gut – diese Bibliothek verwendet eine Technik, die es ermöglicht, Sprache aus vergleichsweise wenigen Daten zu synthetisieren. Talkie kommt mit einigem Vokabular daher, das auf mehrere Vocab_*.h und *.cpp Dateien verteilt in englisch zur Verfügung steht und sowohl weibliche als auch männliche Stimmen zur Auswahl anbietet.
Für dieses Programm wurden männliche und weibliche Stimmen mit amerikanischen Akzent gemischt und aus mehreren bestehenden Vokabular-Dateien eine eigenes Vokabular (in den Dateien Vocab_MY.h und Vocab_MY.cpp) zusammengestellt, das nur diejenigen Buchstaben bzw. Wörter enthält, die für diese Aufgabenstellung unbedingt nötig sind. Das erspart viel Platz im Arbeitsspeicher und so benötigt dieser Sketch mit allen Drum und Dran nur etwa ein Drittel des im Mikrocontroller zur Verfügung stehenden Arbeitsspeichers von 32 Kilobytes. Die Erweiterung / Veränderung des Vokabulars macht es nötig, dass der Sketch nur mit dieser erweiterten Variante der talkie-Lib lauffähig ist – sie steht wie der Sketch selbst unten über einen Button zum Download bereit.
FT857-Talk2: Dieses Programm unterscheidet sich vom ersten lediglich in der Angabe des Betriebsmodus (FM, CW, LSB, USB etc.). Selten kommt es vor, dass dieser nicht richtig erkannt wird. Dann spricht der Sketch „U-N-K“, das hat der Programmierer in der Sprachbibliothek so festgelegt. Wenn Sie möchten, ändern Sie es in der Datei FT857D.cpp die Funktion getFreqMode(). FT8572-Talk2.ino gibt also Frequenz in Megahertz und Hertz aus und hängt den Modus hinten an.
Es ist noch Platz im Controller vorhanden. Das bedeutet: Jeder Anwender hat genug Speicherplatz zur Verfügung, das bestehende Programm um eigene Ideen zu erweitern und neue Funktionen zu implementieren. Als mögliche Erweiterung wäre denkbar: Statt einem mehrere Taster vorsehen, welche jeweils unterschiedliche Informationen über den Zustand des Funkgerätes liefern. In der Bibliothek stehen viele Methoden bereit, allerlei TRX-Parameter abzufragen und natürlich auch zu steuern (PTT, Shift, VFO-A oder VFO-B etc.). Ein Blick in die talkie-Bibliothek lohnt also.
Fazit Was den von mir verwendeten NF-Verstärker mit dem TDA7050 betrifft, so ist er nur geeignet, wenn es ruhig im Raum ist. Etwas mehr Lautstärke wäre sinnvoll. Probieren Sie ihre vorhandenen NF-Verstärker aus und hören, ob die Lautstärke ausreicht. Auch wenn Sie keinen Yaesu 857, 817, 818 oder einer der ähnlichen Transceiver dieses Herstellers besitzen, ist es reizvoll, mit der talkie-Bibliothek zu spielen und ihrem Funkgerät die Sprachausgabe zu lehren. Die Ausgabe von Sprache kann auch bei anderen Geräten sinnvoll sein, vielleicht haben Sie dazu Ideen, was für Sie das Richtige wäre?