Messwertausgabe im Sprachformat
Beispielanwendung: Sprachdecoder für GPS- und Temperaturdaten
In Bearbeitung
21. Juni 2013

Here is automatic translation made by GOOGLE:  http://translate.google.de/translate?hl=de&sl=de&tl=en&u=http%3A%2F%2Fwww.kh-gps.de%2Fmwp1.htm

   Hörprobe einer Daten-Sprachausgabe:    in Englisch:  http://www.kh-gps.de/mwp1_1.mp3     in  Deutsch: http://www.kh-gps.de/mwp1-d.mp3

Manchmal genügt schon ein neu auf den Markt gekommenes Bauteil oder eine neue Baugruppe, um ein vielleicht schon einmal in ähnlicher Form realisiertes Projekt aufs Neue zu überdenken oder gar neu zu beleben. So ging es mir jedenfalls mit dem erst seit kürzester Zeit von Fa. ELV verfügbaren Sprachausgabebaustein "MWP1" [1]. Dieser winzige Baustein erlaubt den einfachen Aufruf von bis zu 15 auf einer uSD-Speicherkarte im WAV-RIFF-Format ablegbaren Audiodateien. Nachdem der "MWP1" zudem relativ preiswert und einfach einsetzbar ist, schien er mir eine interessante Einheit u.a. auch zum Sprechen von Messwerten unterschiedlichster Art zu sein. Obwohl als Bausatz deklariert, wird das Board von ELV bereits soweit bestückt ausgeliefert, dass lediglich noch drei Steckbuchsen einzulöten sind. Über sie ist die Zuführung einer Betriebsspannung zwischen 3.5V und 12V ( nach Brückenänderung auch 2.8V bis 3.3V ) möglich und ein Lautsprecher mit 8-150 Ohm Impedanz direkt anschliessbar.  Durch unterschiedliche Beschaltung der mit dem Begriff "Tasten" bezeichneten 5pol. Leiste lassen sich die 15 möglichen, im binär codierten Format organisierten WAV-Sprachfiles abrufen ( Siehe dazu auch Tabelle 1 ).   


Abb.1   Grössenvergleich: ELV-Sprachausgabebaustein und uSD-Speicherkarte


Abb.2   MWP1-Board Oberseite

Zur Steuerung des Aufrufs der Sprachsegmente kann ein im Flash-Speicher eines Microcontrollers abgelegtes Programm benutzt werden. Sollen numerische Werte und ggf. auch noch Zusatzbegriffe oder -texte gesprochen werden, so sind diese vorher einmalig als WAV-Files auf der verwendeten Speicherkarte abzulegen. Gesteuert vom Programm lassen sie sich daraufhin in beliebiger Reihenfolge aufrufen. Üblicherweise werden für entsprechende Anwendungen die Sprachsegmente für die Ziffern 0-9 benötigt, so dass für sonstige Sprachausgaben lediglich noch 5 weitere mögliche Sprachsegmente verbleiben, was bedeutet, dass an dieser Stelle sehr haushälterisch verfahren werden muss.

Ein erstes Projekt: Sprachausgabe von GPS- und Temperaturdaten


Abb.3   erster Musteraufbau

In einer ersten Anwendung sollten verschiedene von einem GPS-Empfängerbaustein gelieferte Werte gesprochen werden. Dabei ging es um die Daten der aktuellen Bewegungsgeschwindigkeit ( in Km/h ), der Bewegungsrichtung ( in Grad ) und die jeweiligen Höhewerte ( in Metern ). Unabhängig von diesen von GPS-Empfänger bereitgestellten Daten sollten als kleiner Zusatz auch noch Temperaturwerte ( in Grad Celsius ) gesprochen werden können. Somit galt es, alle hierzu vorliegenden Daten in ein zur Ansteuerung des "MWP1" geeignetes Format zu wandeln. Das dazu benutzte Programm wurde in BASCOM erstellt und via ISP in den ATMEGA328P-Prozessor eines ARDUINO-UNO gebrannt ( Näheres zur Verwendung von ARDUINO-Boards in Verbindung mit BASCOM-Programmen findet man u.a. hier [8] ).
Die zusätzlich zum ARDUINO-Board noch benötigten Bauteile wurden gemäss Schaltbild Abb.5 auf einer aufsteckbaren Proto-Shield-Platine [2],[3] untergebracht. Hierbei erkennen wird die Verbindungen zwischen dem Sprachbaustein "MWP1" und dem Microcontrollerboard, sowie einen in seiner Funktion weiter unten noch näher zu beschreibenden 6fach-DIL-Schalter.  Dazu kommt die Anordnung um den im 1-Wire-Format angeschlossenen Temperatursensor "DS18B20" der Firma MAXIM.


Abb.4  verwendbares modernes GPS-Empängermodul: "NAVILOCK NL-621ETTL"
( Zur Grossdarstellung anklicken )

Als GPS-Empfänger sind alle Versionen geeignet, die serielle NMEA-Daten ( GGA- und RMC-Protokolle ) mit einer Datenrate von 4800bps oder 9600bps liefern ( USB- und Bluetoothvarianten können somit an dieser Stelle in der Regel NICHT benutzt werden ). Von mir erfolgreich benutze Empfängerbausteine findet man z.B. hier ( Abb.4 und [4],[5]).
Bei unbeschalteter Brücke "JP1" lassen sich GPS-Geräte anschliessen, die ihre Daten mit 9600bps liefern, wogegen nach Schliessen der Brücke mit einer Datenrate von 4800bps gearbeitet wird. Liegen die GPS-Daten mit RS-232-Pegelwerten vor, so sind sie an den Eingang des Transistors "Tr1" zu legen, wogegen mit TTL-Pegel bereitgestellte Signale direkt mit dem Porteingang PD.0 verbunden werden können und Transistor "Tr1" incl. Peripherie dabei entfallen.
Über die LED an Ausgang #D13 ( PB.5 ) wird GPS-Datenempfang signalisiert. Wenn die Diode jeweils nur 1x kurz in etwa Sekundentakt aufleuchtet, so besteht nur ungültiger GPS-Datenempfang und es muss entweder noch einige Zeit gewartet oder der Standort ( möglichst freie Rundumsicht in Richtung Himmel ) verändert werden. Sobald gültige GPS-Daten ( GPS-FIX ) erkannt wurden beginnt auch die Sprachausgabe.


Abb.5  Sprachdecoder für GPS-Daten als Zusatzshield zum Arduino-Board

Bei Sprachausgabesystemen ist man bestrebt, aus mehreren Ziffern bestehende Werte in schnellstmöglicher Abfolge zu sprechen und dazwischen liegende Pausenzeiten weitestgegend zu vermeiden. Dazu ist es allerdings erforderlich, dass eine Möglichkeit zur Enderkennung der einzelnen in unterschiedlicher zeitlicher Länge vorliegenden Sprachsegmente besteht. Im Originalzustand stellt der "MWP1" an dieser Stelle aber leider kein geeignetes Kriterium zur Verfügung. Auf seiner Platine befindet sich aber die LED "D2", die jeweils während der Sprachausgabedauer leuchtet. Durch einen kleinen Eingriffes gem. Abb.6 lässt sich das sie steuernde Signal aber abgreifen und an den IRQ0-Interrupteingang ( Port "PD.2" ) des ATMEGA328p auf dem ARDUINO-Board leiten. Die hierbei am Ende der jeweiligen Sprachsegmentausgaben zur Verfügung stehenden negativen Pulsflanken können jetzt zur Steuerung eines zeitlich optimierten Programmablaufs genutzt werden.  
Vom Anwender gewünschte Pausenzeiten zwischen den einzelnen Sprachausgabeblöcken lassen sich in 8 Stufen über die Schalter "S1-S3" ( siehe dazu Tab. 2 )
schalten. Mit den weiteren Schaltern "S4-S6" können die aus Tabelle 3 ersichtlichen unterschiedlichen Betriebszustände angewählt werden.
Wie schon weiter oben erwähnt, ermöglicht das "MWP1" den Direktanschluss eines Lautsprechers. Die hierbei verfügbare Lautstärke mag zwar für ruhige Räume genügen, wird aber in lauter Umgebung wie z.B. im Fahrzeugeinsatz nicht ausreichen. Die Auswahl eines optimierten Lautsprechersystems kann hier zwar noch gewisse Verbesserungen bringen, dürfte das Problem aber oftmals dennoch nicht lösen. In solchen Fällen liegt es somit nahe, noch einem zusätzlichen leistungsfähigen externen Verstärker einzusetzen. Dabei erwies sich auch seine  Anschaltung an den unsymetrischen gleichspannungsbehafteten Verstärkerausgang des "MWP1" als nicht ganz so trivial wie erwartet. Gute Ergebnisse konnte ich erst durch Einfügung eines ( wie auch aus Abb.5 ersichtlich ) Trenntransformators erzielen. Solche NF-Übertrager gibt es schon für wenige Euros [6] und aufgrund bestehender Verstärkungsreserven ist ihr Übersetzungsverhältnis dabei auch weitgehend unkritisch. Ich habe einen zufällig vorhandenen 1:10-Typ [7] verwendet und musste dann sogar noch den im Schaltbild mit "RV" bezeichneten Widerstand ( Experimentierwert: 100K Ohm ) zur Signalabschwächung einfügen. Das Ergebnis war jetzt ein maximaler Lautstärkepegel, der auch noch bei lauten Umgebungsgeräuschen mehr als ausreichend war.
Die generierten Sprachausgabesequenzen lassen sich bei Bedarf auch zur Modulation von Funkgeräten ( z.B. PMR446 ) verwenden. Dazu ist der unsymetrische Tonaugang an deren externen Modulationseingang zu führen und dabei auch wieder die bereits oben erwähnte Transformatorkopplung zu nutzen. Um während der Sprachausgabezeiten einen angeschlossenen Sender aktivieren zu können, wird über den ARDUINO-Anschluss #D12 ( Prozessor Port PD.4 ) ein entsprechendes Tastsignal bereitgestellt. Es ist via Transistor "Tr2" und Widerstand "Rx" verfügbar, wobei dieser Widerstand auch NUR in Verbindung mit einem angeschlossenen Funkgerät bestückt werden sollte.

FILENAME
SPEAKWORD[S]
ADDRESS TO MWP1
   4321
#D11, #D10, #D9, #D8
(PB.3, PB2, PB1, PB.0)


No Activity / Ruhezustand
1111

001.wav
One / Eins
1110

002.wav
Two / Zwei
1101

003.wav
Three / Drei
1100

004.wav
Four / Vier
1011

005.wav
Five / Fünf
1010

006.wav
Six / Sechs
1001

007.wav
Seven / Sieben
1000

008.wav
Eight / Acht
0111

009.wav
Nine / Neun
0110

010.wav
Zero / Null
0101

011.wav
Kilometers  in
0100

012.wav
Degrees / Grad
0011

013.wav
Altitude / Höhe
0010

014.wav
Meters   Temperature
0001

000.wav
Minus
0000

Tab.1 WAV-Sprachsegmente 

DELAY
S1
#A0
(PC.0)
S2
#A1
(PC.1)
S3
#A2
(PC.2)
2 Sec.
1
1
1
4 Sec.
0
1
1
8 Sec.
1
0
1
15 Sec.
0
1
1
30 Sec.
1
1
0
60 Sec.
0
1
0
120 Sec.
1
0
0
300 Sec.
0
0
0
Tab.2  Verzögerungszeit zwischen den Sprachausgaben
"1" = Schalter offen;  "0" = Schalter geschlossen

MODUS
S4
#A3
(PC.3)
S5
#A4
(PC.4)
S6
#A5
(PC.5)
SPEED ONLY
nur Geschwind.
0
1
1
SPEED  COURSE "OFF"
Geschwindigkeit und Kurs "Aus"
1
0
1
ALTITUDE  TEMPERATURE "OFF"
Höhe und Tem-
peratur "Aus"
1
1
0
Tab.3  Auswahl Sprachmodus
"1" = Schalter offen;  "0" = Schalter geschlossen


Abb.6   MWP1-Board Unterseite mit Abnahmepunkt für Busy-Signale ( siehe Text )
Zur Grossdarstellung anklicken


NF-Zusatzverstärker

Geeignete Zusatzverstärker findet man z.B. hier [2], wobei mir die Leistung der Minimalversion "M03N" von Fa. KEMO völlig genügt.


Abb.7  NF-Nachverstärker mit KEMO-Baustein


Abb.8  NF-Verstärkerbaustein von KEMO

NACHBAU

Das auf den ATMEGA328P-Prozessor des ARDUINO-UNO-Boards zu brennende HEX-File *  kann hier heruntergeladen werden:  http://www.kh-gps.de/mwp1.hex
Für die auf der Speicherkarte abzulegenden WAV- und das Konfigurationsfile ( Einstellung 2 = "Edge triggered" ) können die hier herunterladbaren Musterfiles benutzt werden:
US-Englischsprachige Version:  http://www.kh-gps.de/mwp1-gpsdec-us
Deutschsprachige Version       :  http://www.kh-gps.de/mwp1-gpsdec-deu

Wer eigene Sprachfiles erstellen möchte, der sei auf die entsprechenden Hinweise in Begleittext des "MWP1" verwiesen. Ich persönlich erstelle Sprachfiles entweder über das Mikrofon eines angschlossenen Headsets unter Verwendung der AUDACITY-Software oder durch Nutzung von:  http://www2.research.att.com/~ttsweb/tts/demo.php . Dieses geniale Programm ermöglicht die Wandlung eingegebener Textvorlagen in WAV-Files und kommt somit ohne jegliche eigene Spracheingabe aus. Dabei ist allerdings zuerst einmal ein zur jeweils benutzten Sprache passender Sprecher bzw. Sprecherin zu wählen. Wenn man bei einer anschliessenden probeweisen Sprachausgabe feststellen sollte, dass einzelne Passagen noch nicht ganz optimal klingen, dann lohnt es sich ( auch unabhängig von korrekter Rechtschreibung ) hier noch etwas mit dem Eingabetext zu "spielen". 
Beim Speichern der auf diese Weise generierten WAV-Files sollte der vom Programm vorgegebene kryptische Filename durch einen Namen eigener Wahl ersetzt werden.
Ich habe es mir zur Angewohnheit gemacht, die so erstellten Sprachsegmente anschliessend auch noch etwas nachzubearbeiten. Dazu kann die AUDACITY-Software benutzt werden, wobei ich persönlich allerdings den "Free Audio Editor" ( http://www.free-audio-editor.com ) bevorzuge, was aber letztendlich Gewohnheitssache ist. 
Bei der Bearbeitung geht es im Wesentlichen darum:
1. Leerzeiten am Beginn und am Ende der einzelnen Sprachfiles zu entfernen ( Tipp:  hier nicht zu knapp wegschneiden )
2. den Signalpegel des gesamten Files soweit anzuheben, dass in den Spitzen etwa 100% erreicht werden ( was sich dann später in höherer Lautstärke bemerkbar macht ) und
3. das Ganze in einem zum "MWP1" kompatiblen Format WAV-Format ( 8 oder 16 Bit-Depth und 8-48 KHz Sample Rate ) abzulegen.

* Wer ein UNO-Board mit DIL-Fassung für den Prozessor besitzt, dem sende ich nach Absprache auf privater Basis auch gern einen bereits mit dem Programm gebrannten ATMEGA328P.

LINKLISTE

[1] http://www.elv.de/Sound-direkt-vom-Chip-%E2%80%93-Mini-Wave-Player-MWP1/x.aspx/cid_726/detail_42440
[2] http://www.watterott.com/de/Shield-Proto-PCB-Rev3
[3] http://www.watterott.com/de/Stapelbare-Buchsenleisten
[4] http://www.watterott.com/de/Adafruit-Ultimate-GPS-Breakout-66-channel?x17283=3a8725f6bdeda5ce8c79a407571d6fa1
[5] http://www.ddcom24.de/shop/artikel_artikel_21958_name_GPS-Engine-Module-NL-621ETTL-Navilock-industry.html
[6] http://www.elv.de/audio-verstaerker.html
[7] http://www.reichelt.de/Trenntrafos/NFU-1-10/3/index.html?;ACTION=3;LA=446;ARTICLE=73042;GROUPID=3320;artnr=NFU+1-10
[8] http://www.kh-gps.de/bascom_arduino.htm

E-Mail contact via: