Zur Startseite

Sprachmodul für Roboter

mit Magnevition Speakjet

Mein AREXX RP6 Roboter soll eine Sprachausgabe bekommen. Auf jeden Fall muß es eine "synthetische" Stimme werden. Was digitalisiertes menschliches, wie z.B. die Stimme aus Navis, geht für den Zweck gar nicht. Die Wahl fiel auf den Speakjet. Das ist ein Chip von Magnevition. Leider war der hier in Europa nirgends zu bekommen. Ich hab ihn in den USA bei Sparkfun geordert.

Der Chip kann als Standallone-Lösung maximal 16 vorprogrammierte Sprach/Geräusch-Sequenzen wiedergeben indem jeweils einer von 8 Eingängen entweder gegen Low oder High geschaltet wird. Das ist sozusagen die Billig-Lösung. Interessanter ist die Nutzung über den seriellen Eingang. Damit kann er unbegrenzte Sounds, deren Codes von einem externen Prozessor seriell rübergeschoben werden, wiedergeben.

Der Speakjet hat eine ganze Anzahl interner Oszillatoren, die Grundfrequenzen, Hüllkurven usw. erzeugen. Die Grundidee ist die Zusammenstellung von Sprachsequenzen und Geräuschen aus vorgegebenen Phonemen. Diese Phoneme sind je nach der Position im betreffenden Wort in Allophone geordnet. Es gibt ab Hersteller im Chip 72 Sprach-Allophone, 43 Soundeffekte und 12 DTMF Töne. Tonhöhe, Klangfarbe und Sprachgeschwindigkeit lassen sich ebenfalls programmieren. Zur Programmierung bietet Magnevition die kostenlose Software Phrase-A-Lator.

Das soll zur Einführung reichen.

Die von mir verwendete Schaltung ist simpel. Der Speakjet ist in den Anschlüssen logisch aufgebaut, das macht das Verständnis der Schaltung einfach:

Pin 1-4 und 6-9 sind die Eingänge für die Standallone-Ereignisse (wenn man sie denn nutzt). Nutzt man den seriellen Eingang 10, müssen sie gegen Masse (-5V) gelegt werden. Bei mir gibt es dafür die 8 Jumper links vom Chip.
Pin 5 ist Masse.
Pin 10 ist der serielle Eingang.
Pin 11 könnte eigentlich direkt auf VCC (+5V) liegen. Mit dem Taster und dem Widerstand, wie in dieser Scaltung, erlaubt er einen Reset des Speakjet. Das kann nützlich sein, wenn sich mal was aufhängt.
Pin 12 dient zum Ändern der Baudrate. Original ist sie 9600. Bisher hatte ich keinen Grund, das zu ändern.
Pin 13 setzt den Speakjet vom normalen Modus (Pin gegen Masse) auf einen Demo-Modus (Pin gegen VCC). In diesem Demo rattert der Speakjet vom Start an pausenlos das gesamte Repertoire der gespeicherten Soundschnipsel runter. Das ist ein guter Test, ob alles OK funktioniert.
Pin 14 ist VCC, hier ist das +5V. Laut Datenblatt sind 2,0 - 5,5V möglich.
Pin 15 geht auf High wenn der Datenpuffer bei serieller Übertragung zu voll wird. Dann wird über CTS (clear to send) gebremst und LED rot leuchtet.
Pin 16 geht auf High wenn der Chip "spricht". LED gelb leuchtet dann.
Pin 17 ist High wenn der Chip "ready for operation" ist, also praktisch immer, wenn eingeschaltet. LED grün leuchtet.
Pin 18 ist der NF-Ausgang.

Die NF ist am Pin 18 noch nicht sauber, sondern auf einen 32 KHz Rechteckträger moduliert. Um den vom Signal zu trennen, gibt es den zweistufigen Tiefpass R5-C3, R6-C4. Achtung, im Web geistern Schaltungen, wo die Kondensatoren mit 100nF angegeben sind. Laut Speakjet Datenblatt ist 10nF richtig. Ich habe mal probeweise 100nF reingesteckt und das Signal ist tot, weil praktisch die Nutzfrequenz gegen Masse abgeleitet wird. Also immer aufs Datenblatt vertrauen!
Zur Beschaltung des NF-Verstärkers ist nichts Besonderes zu sagen. Es ist die Standardschaltung für 200-fache Verstärkung aus dem Datenblatt des LM386.

 

     

Zum Aufbau des Moduls habe ich zweiseitige, durchkontaktierte und verzinnte Lochrasterplatten 50x50 mm benutzt. Auf eBay gab es die günstig in 5er Packs. Die Qualität ist sehr gut. Zum Entwurf nutze ich Lochmaster. Wie man oben sieht, sollte ein kleiner Lautsprecher in der Ecke unten mit auf die Platte. Das ging leider nicht. Ich habe schließlich wegen des besseren Klangs und der größeren Lautstärke einen handlicheren Lautsprecher genommen, der eine eigene Platte brauchte.

 

     

Der verwendete Lautsprecher tat ursprünglich seinen Dienst in einem DDR Taschenradio G1000. Die Lochrasterplatte wirkt wie ein Lautsprechergitter und braucht keinen Schalldurchbruch.

 


Die Software Phrase-A-Lator gibt die seriellen Daten auf einen RS232 Port aus. Mein Notebook hat nur die üblichen USB und der Speakjet will TTL-Pegel. Die Lösung ist dieses Adapterkabel mit der einfachen Bezeichnung: "USB auf RS232 TTL UART PL2303HX Konverter Adapter Kabel CP12005 F44". Gefunden hab ich es auf eBay für insgesamt unter 8,-€ einschließlich Versand. Angesteckt ans Notebook wurde es sofort gefunden, die Software hat es als virtuellen RS232 akzeptiert und der Speakjet mag es auch. Problem gelöst! Einziger Nachteil ist die fehlende Leitung für Flow-Control. Es gibt nur RXD, TXD, VCC und GRD. Wenn man sehr lange Datensätze rüber schiebt, gibt es Probleme, weil der Buffer verstopft. Normale Worte oder Sätze funktionieren aber problemlos. Die Stromversorgung des Moduls geht ebenfalls über den USB.

 

Dieses Video zeigt den Speakjet im Demo-Mode. Er rattert alle vorgespeicherten Soundschnipsel pausenlos runter, solange Betriebsspannung anliegt. Über das Kabel kommen keine Daten, nur die Spannung. Ton bitte etwas lauter stellen. Der Videoton ist bei der Aufnahme leider recht leise geraten.

 

Dieses Video zeigt den Speakjet mit serieller Datenfütterung von der Phrase-A-Lator Software. Inzwischen habt ihr sicher bemerkt, das er nur Englisch spricht. Ich vermute zwar, man könnte aus den Allophonen auch was Deutsches zusammenbasteln aber vermutlich klingt das ziemlich albern.

Hier unten seht Ihr abschließend einen kleinen Bascom Code, der den SpeakJet über einen ATmega8 ansteuert. Wichtig ist die Taktfrequenz von 8 MHz, die auch in den Fuses eingestellt werden muß. Ansonsten stimmt die Baudrate nicht!

$regfile "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
$baud = 9600

Wait 1
Printbin 20 ; 96 ; 21 ; 114 ; 22 ; 88 ; 23 ; 5 ; 191 ; 131 ; 8 ; 187 ; 191 ; 255     'Phrase "Test"
Waitms 500

End

Nach dem Einschalten sagt der SpeakJet sein übliches "Ready". Das hat nichts mit dem Programm zu tun. Dann, nach einer Sekunde spricht er das Wort "Test". Die Zahlen in rot sind Steuercodes für die Einstellungen und können zur Not enfallen. Die 20er-Codes (20-23) legen Lautstärke, Geschwindigkeit, Tonhöhe und Klangfarbe fest. Code 255 setzt am Ende die Werte auf Standard zurück. Das eigentliche Wort "Test" besteht also nur aus den Codes 191 ; 131 ; 8 ; 187 ; 191

Wen es interessiert, der kann sich auf dieser Seite die praktische Anwendung des SpeakJet in meinem AREXX RP6 Roboter ansehen.

 

nach oben