Eine
sprechende GPS-Uhr auf ARDUINO-Basis
In Bearbeitung
In
letzter Zeit habe ich mich speziell mit der Umsetzung elektrischer
Daten
in
Sprachinformationen beschäftigt. Dabei entstand auch die Idee zum
Sprechen von Zeit- und
Datumsinformationen, so wie sie u.a. von den inzwischen sehr preiswert
erhältlichen kleinen
GPS-Empfangsmoduln bereitgestellt werden. Während für Navigationszwecke
dabei immer immer ein sog. GPS-FIX mit Empfang von mindestens 3
Satelliten erfolgen muss, stehen die gewünschten Zeitdaten bereits bei
minimalem GPS-Satellitenkontakt zur Verfügung. Zu ihrem Empfang
sollte es somit immer genügen, wenn die Empfangseinheit in
der Nähe eines Fensters zu platziert wird. Die daraufhin mit hoher
Genauigkeit bereitgestellten Daten müssen zur Steuerung eines
Sprachmoduln lediglich noch entsprechend
aufgearbeitet werden. Für diese Aufgabe wählte
ich Mikrocontrollerboards des Typs ARDUINO "Pro Mini" in der
3.3V-Version. Mit ihrer
Hilfe gestaltete sich auch die Zusammenschaltbarkeit mit
GPS-Empfänger-
und Sprachmodul besonders einfach. Weitere
Angaben zu den an dieser Stelle
infrage kommenden GPS-Moduln und auch zu den ARDUINO-Bausteinen "Pro
Mini"
finden sich z.B. hier [1].
Abb.1 Musterboard der
sprechenden Uhr ( Taster 2 und Taster 3 derzeit ohne Funktion )
GPS-Modul hier nicht sichtbar
Als
Sprachmodul wurde der "DFPlayer" von Fa. DFROBOT verwendet
[2],[3],[4]. Er lässt sich über seine serielle Schnittstelle
ansprechen
und erlaubt dabei den gezielten Aufruf von bis zu 256, vorher auf
einer einsteckbaren Micro-SD-Speicherkarte ablegbaren
MP3-Sprachsegmenten. Um Mess- bzw. hier Zeit- und Datumswerte als
Sprachinformation ausgeben
zu können, verarbeitet ein ARDUINO-Mikrocontrollerprogramm die vom
GPS-Empfänger kommenden Navigations- und Zeitdaten und
bereitet sie zur Steuerung der Sprachmoduln auf. Dazu werden sie in der
jeweils benötigten Folge aneinandergereiht und über den
seriellen Bus übertragen.
Abb.1
zeigt den Musteraufbau einer daraufhin erstellten Sprachdecodereinheit.
Der Anschluss des hier nicht sichtbaren GPS-Moduls erfolgt über
eine lediglich dreiadrige
Kabelverbindung ( Masse, Versorgungsspannung und Ausgangsdaten
des GPS-Bausteins ).
Die Schalter "S1-S4" und der Taster "Ta1" dienen dem Aufruf der
verschiedenen Betriebsfunktionen. Sind "S1" und "S2" in Stellung "OFF",
erfolgt jeweils zur vollen Minute eine Sprachausgabe der Stunden und
Minutenwerte. Durch Einschalten von "S2" lässt sich diese Ausgabe
bei Bedarf auch unterdrücken.
Ein kurzes Niederdrücken des Tasters "Ta1" bewirkt eine einmalige
Sprachausgabe von sowohl Datums-, als auch Zeitinformationen, wobei
neben Stunden- und Minuten- hierbei auch die aktuellen Sekundenwerte
gesprochen werden. Das Einschalten des elektrisch parallel zu "Ta1"
angeordneten Schalters "S1" bewirkt eine kontinuierliche Sprachausgabe
genannter Daten.
Mithilfe von "S3" und "S4"
können die gesprochenen Zeitwerte an die jeweils gültigen
mitteleuropäischen Verhältnisse angepasst werden.
Die Funktionen der Schalter und
des Tasters ( die in Abb.1 erkennbaren weiteren Taster sind derzeit
noch ohne Funktion ) geht
auch aus "Tabelle1" hervor:
|
OFFEN
|
GESCHLOSSEN
|
Ta1/S1
|
------
|
Sprachausgabe
von Datums- und
Zeitinformation ( Std./Min./Sec. )
|
S2
|
Sprachausgabe
von Zeitinfo ( Std./Min. )
zur vollen Minute
|
deaktiviert
|
S3
|
Zeitinfo
in GMT
|
Zeitinfo
in MEZ ( GMT+1 Stunde )
|
S4
|
Zeitinfo
in GMT
|
Zeitinfo
in MESZ ( GMT+"2 Stunden )
|
Tabelle 1
Abb.2 zeigt das
Gesamtschaltbild der sprechenden Zeit- und Datumseinheit. Anzumerken
ist dabei noch, dass die Brücke "JP1" immer dann zu
öffnen ist, wenn Programme zum Prozessor auf dem "Pro Mini"
hochgeladen werden sollen. Zum
Thema "Programmierung des ARDUINO "Pro Mini" sei hier aber auch noch
einmal auf
die Ausführungen in [1] verwiesen.
Abb.2 Gesamtschaltbild
Für
den Aufbau der ersten Muster wurde das Platinenlayout nach Abb.3
entworfen. Ursprünglich war
dabei beabsichtigt, den Sprachbaustein über den
3.3V-Spannungsausgang des
ARDUINO-Boards zu versorgen. Erst nachdem die ersten Musterplatinen
verfügbar^waren stellte sich dann aber heraus, dass die
Belastbarkeit des Ausgangs von max. 150mA nicht ausreichte, um
hierüber sowohl den GPS-Empängerbaustein, als auch den
Sprachbaustein ( wenn
dieser im oberen Lautstärkebereich betrieben wird ) versorgen zu
können. Aus diesem Grunde wurden an der Platine nachträglich
einige
kleine, aus Abb.3 ersichtliche Änderungen vorgenommen. Danach darf
die Versorgungsspannung allerdings nur noch im Bereich von 3.5-5V
liegen.
Wer das Arduino-Board dennoch mit einer höheren Spannung (
grundsätzlich sind
am RAW-Eingang des "Pro Mini" bis zu 12V zulässig ) betreiben
will, der sollte dem
Sprachmodul
einen separaten Spannungsregler mit ausreichender Belastbarkeit ( z.B.:
7805 ) spendieren. Zukünftige Platinenversion werden entsprechend
korrigiert sein.
Abb.3 Musterboard mit
Korrekturen ( durchbrochene Leiterbahn bei "X" end zusätzliche
Drahtbrücke )
MP3-
Sprachsegmente und ihre Nutzung
Zur
Erzeugung eigener und Bearbeitung bereits vorhandener Sprachsegmente
lassen sich sehr gut Programme, wie z.B. das kostenlos aus dem Internet
herunterladbare AUDACITY verwenden. Es erlaubt Tonaufzeichnungen per
Mikrofoneingabe, aber auch eine Weiterverarbeitung bereits vorhandener
Sprachdateien. Dazu gehört z.B. eine ggf. notwendige
Pegelanpassung oder auch das Abschneiden nicht benötigter Vor- und
Nachlaufzeiten. Die dabei meist verwendeten Dateiformate sind WAV und
MP3. Um Dateien auch im MP3-Format ablegen zu können, ist
allerdings bei AUDACITY einmalig auch noch das Zusatzprogramm LAME zu
installieren.
Eine
weitere Möglichkeit der Sprachsegmenterzeugung ermöglichen
auch spezielle Eingabeprogramme, so wie es sie beispielsweise bis vor
kurzer Zeit auch noch von der amerikanischen Telefongesellschaft
AT&T
gab. Hiermit konnten via PC-Tastatur eingegebene Worte oder auch
komplette Texte in WAV-Dateien umgesetzt und später mithilfe von
z.B. AUDACITY in das MP3-Format gewandelt werden. Nachdem dieses Angebot offenbar aber leider
nicht
mehr zur Verfügung steht, wobei die deutsche Sprache dabei in der
letzten Zeit ohnehin schon nicht mehr unterstützt wurde, gibt
es als Alternativlösung aber andere Programme, mit deren Hilfe man
via Tastatur eingegebene Worte oder Texte in Sprache wandeln und als
Audiofile ablegen kann. Passende Suchbegriffe sind "TTS" bzw. "text to
speech". Mehr zu diesem
Thema hatte ich in Zusammenhang mit einem anderen Projekt aber z.B.
auch hier [5] beschrieben.
Über den seriellen Dateneingang des DFPlayer's lassen sich
MP3-Files aufrufen. Dazu müssen sie auf der zugehörigen
Micro-SD-Speicherkarte in ein dort unter dem Namen "mp3"
anzulegendes Unterverzeichnis kopiert
worden sein. Verwendbare Filenamen sind "0000.mp3" bis "0255.mp3".
Zum Aufruf eines bestimmten
MP-Segmentes, wie z.B. "0123.mp3", muss im Programmcode
lediglich der Befehl "mp3_play(123);" eingefügt werden. Weiterhin
erforderliche Maßnahmen erledigt die zugehörige Library.
Der Inhalt der einzelnen Segmente kann entweder aus einem Wort,
einem Satz, einem kompletten Romantext oder aber auch z.B. nur einer
einzelnen Ziffer, bzw. einem Buchstaben bestehen. Zur Realisierung einer Sprachausgabe
von z.B.: "DIE UHRZEIT IST SECHZEHN UHR FÜNFUNDVIERZIG"
können
der benutzte Satz "DIE UHRZEIT IST" und auch das Wort "UHR" unter einer
für sie vorher festgelegten, im zulässigen Bereich
liegenden numerischen Ordnungszahl abgelegt werden, um damit ihre
spätere Aufrufbarkeit zu ermöglichen. Zeitwerte sind im
Programmcode dagegen üblicherweise als numerische oder im
Stringformat vorliegende Variablen verfügbar. Zur
Weiterverarbeitung bietet sich für Letztere eine vorherige
Wandlung in einen numerischen Wert an.
Nachdem ich z.B. die zur Sprachausgabe benötigten MP3-Segmente
"NULL" bis "NEUNUNDFÜNFZIG" unter den Namen "0100.mp3" bis
"0159.mp3" abgelegt hatte, gestaltete sich ihr Aufruf besonders
einfach. Ist der zu sprechende Wert beispielsweise als numerische
Variable mit dem Namen "Wert" verfügbar, so konnte ein
Sprachaufruf auf einfachste Weise erfolgen, indem hierzu der
Codebefehl: "mp3_play(100+Wert);" verwendet wurde.
Damit sich eine für das
menschliche Ohr angenehm anzuhörende Sprachwiedergabe ergibt, ist
anzustreben, dass Begriffe, auch wenn sie sich aus mehreren
Sprachsegmenten zusammensetzen, in der
schnellstmöglichen Folge ausgegeben werden. Bei meinen ersten
Programmen habe ich im Anschluss an alle Sprachausgabebefehle jeweils
einen DELAY-Befehl eingefügt. Mit ein wenig zusätzlicher
Reserve musste er immer entsprechend der jeweiligen Ausgabezeiten
gewählt werden. Schwierig
wurde es allerdings, wenn es galt aus Variablen aufgerufene Segmente
abzudecken, wenn diese total unterschiedliche Längen haben
konnten.
Hier musste sich dann am längsten vorkommenden Segment
orientiert werden, was bei allen kürzeren dann aber zu
unschönen zusätzlichen Pausenzeiten führte.
Es gab aber eine Lösung, mit der sich das Problem in den Griff
bekommen liess. Dazu diente das an Pin 16 des DFPlayer verfügbare
Busy-Signal. Mit seiner Hilfe liess sich eine Enderkennung von
Sprachsegmentausgaben realisieren. Nachdem ich im Internet auch noch
eine entsprechende arduinotaugliche Routine mit offenbar
zuverlässiger Funktionalität fand, stellte das einen
erheblichen Fortschritt dar. Ich werde sie in alle meine entsprechenden
Programme "einbauen" und hoffe damit diesen lästigen Schwachpunkt
für immer beseitigt zu haben.
Version
einer "sprechenden Uhr" mit RTC-Zeitbasis ( RTC = Real Time Clock )
Die oben beschriebene
GPS-Version der "sprechenden Uhr" erfordert zum Empfang der für
sie benötigten Zeitinformationen zumindest ein Minimum an
Satellitenkontakt. Um für bestimmte Anwendungen auch hiervon
unabhängig sein zu können, sollte auf jeden Fall auch noch
eine Version mit nur von einem RTC-Baustein ( RTC = Real Time Clock )
stammenden und somit quarzgesteuert abgeleiteten Zeitdaten realisiert
werden. Hierfür geeignet sind fertig erhältliche kleine
Platinen mit darauf befindlichem RTC-Chip ( z.B. DS1307 ) und
zugehörigem Steuerquarz, so wie sie z.B. für wenige Euros via
EBAY erhältlich sind. Ihr Anschluss erfolgt dabei über
I2C-Bus.
Abb.4 RTC-Version der
"sprechenden Uhr"
Einige Probleme hatte
ich anfänglich mit dem Setzen des DS1307-Moduls entsprechend der
aktuellen Datums- und Zeitwerte. Hier erwies sich ein kleines INO-File,
so wie es von dieser Seite [6] heruntergeladen werden kann als sehr
hilfreich. Vor dem eigentlichen Uhrenprogramm ist es
einmalig zum ARDUINO "Pro Mini" hochzuladen und hat dabei einzig die
Aufgabe, die Datums- und Zeitwerte des RTC-Moduls ( bis zu einer ggf.
später einmal erforderlich werdenden Überschreibung ) auf die
gewünschten Werte zu setzen.
Hier können
alle zugehörigen ARDUINO-Sketche, sowie die verwendete MP3-Library
und
ein
Satz der beim Musteraufbau benutzten
MP3-Sprachsegmente heruntergeladen werden. Für
Letztere
ist auf der in Verbindung mit dem Sprachspeicherbaustein verwendeten
Micro-SD-Speicherkarte ein Unterordner mit dem Namen "mp3" anzulegen.
Dort hinein sind die einzelnen MP3-Dateien zu kopieren.
ANMERKUNG:
Werden bei der GPS-Version besonders in der Einschaltphase noch
ungültige Daten
gesprochen,
so deutet das auf unzureichenden GPS-Satellitenempfang hin. In diesem
Fall gilt es einen Moment zu warten und die Empfangseinheit bei nicht
eintretender Besserung ggf. an einer günstigeren Stelle zu
platzieren (
Fensternähe ).
Linkliste
E-Mail
contact via: