PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fertiges RN-Projekt: Sprachausgabeboard RN-SPEAK



Frank
17.05.2004, 22:30
Der Roboter lernt sprechen!

Sprachausgabeboard RN-SPEAK ist fertig

Hallo,

ich hatte es ja vor einer Weile schon angekündigt, im Zuge unserer Diskussion um den Sprachausgabe-Artikel von Manfred. Ein kleines Board das sich ideal für Roboter eignet!
Endlich ist es fertig geworden, die Hardware ging eigentlich recht flott, aber mit der Software hat es etwas gedauert. Das Board verfügt nämlich über eigenes Betriebsystem damit es wirklich einfach angesteuert und mit Messages besprochen werden kann.

Das Board speichert bis zu 252 Messages (insgesamt maximal 270 Sekunden). Die Messages können aus Wörtern, Wortbruchteilen oder ganzen Sätzen bestehen. Durch gezielte Ausgabe dieser Messages können neue Wörter oder Sätze gebildet und somit auch Messdaten, Spannungen oder einfach nur eine herzliche Begrüßung ausgegeben werden.
Die Ansteuerung dieses Boards ist besonders einfach und wahlweise über einen I2C-Bus oder RS232 realisierbar. Ein einfacher Befehl gibt eine beliebige Message aus. Der eingebaute NF-verstärker sorgt auch in größeren Räumen für genügend Lautstärke. Alternativ kann das Board auch ohne Controller Standalone betrieben und mittels Taster bedient werden.
Die Möglichkeiten sind einfach unbegrenzt.
Und das beste: Das Board wird per I2C-Bus angesteuert, also 2 Leitungen reichen aus! Auch die Stromversorgung kann über den I2C-Bus erfolgen (wenn Stecker nach Roboternetz-Norm vorhanden ist).

Als hier die Leistungsmerkmale auf einen Blick:


Sprachboard kann mit ein, zwei oder drei Sprachchips vom Typ ISD 2590 bestückt werden (somit ergibt sich eine Aufzeichnungskapazität von bis zu 4 ½ Minuten, je nach Anzahl der eingesteckten Sprachchips)
Bis zu 252 unterschiedliche Messages können aufgezeichnet werden. Wahlweise ganze Sätze, Wörter oder Wortbruchteile
Das bespielen des Sprachboards ist kinderleicht. Eine mitgelieferte PC-Software überträgt WAV-Dateien in Sekunden auf das Board. Keine umständliche Sound-Bearbeitung etc, sondern einfach WAV-Dateien im Dialog auswählen, Board mit RS232 verbinden und Board neben PC legen. Das war es! Eine Statistik mit Messagecode und Messagelänge kann dann ausgedruckt werden.
Alternativ kann das Board auch durch einfachen Tastendruck besprochen.
Einfache Verbindung zu einem Controller über RS232 oder I2C Schnittstelle
Controller (wie z.B. das RNBFRA-Board, RN-Control aber auch C-Control etc) können über einfachen I2C-Befehl bestimmte Messages oder Wörter kombiniert ausgeben lassen.
Kann Huckepack mir anderen Roboternetzboards verschraubt werden
Keine Stromversorgung notwendig, das Board wird über den I2C-Bus mit Energie versorgt. Wird der I2C-Port nicht genutzt, so benötigt man 5V!
Das Board verfügt über einen zusätzlichen NF-Verstärker damit auch in einem lautem Umfeld genügend Power für einen größeren Lautsprecher vorhanden ist. Die Lautstärke ist einstellbar
Das Board verfügt über eigenes Betriebsystem und kann somit auch bei Bedarf umprogrammiert werden
Mehrere Boards kombinierbar durch andere I2C Slave Adresse
Nur halbe -Europakartengröße entsprechend Roboternetz-Norm
Unterstützt alle Controller mit I2C Schnittstelle


Hier ein paar Bilder:



http://www.robotikhardware.de/bilder/rnspeakdiagrammklein.jpg

http://www.robotikhardware.de/bilder/rnspeak5klein.jpg

Die Software zum überspielen von Messages:

http://www.robotikhardware.de/bilder/rnspeaksw1.gif

http://www.robotikhardware.de/bilder/rnspeaksw2.gif


Eine ausführliche Anleitung, Bauteileliste, Schaltplan ist im Download-Bereich zu finden. Siehe https://www.roboternetz.de/phpBB2/dload.php?action=category&cat_id=16
Platine,Software und/oder Bauteile können bei Bedarf auch wieder über http://www.robotikhardware.de bezogen werden

Gruß Frank

Frank
12.03.2005, 17:27
Aktuelle RN-Speak Firmware 2.0 ist da:

Aufgrund vieler Anregungen gibt es nun RN-Speak mit einer erweiterten Firmware (Betriebsystem). Dadurch ist die Ansteuerung per I2C und Rs232 als auch die Bedienung des Boards noch einfacher. Zudem gibt es einige wichtige Erweiterungen, siehe unten.

Achtung: Wenn RN-Speak (IC RNSPK1 oder Bausatz) in den letzten Monaten (nach dem 1.11.04) erworben wurde, bekommt man sogar Firmware gratis, ansonsten für ein paar Euro die die Weiterentwicklung sicherstellen sollen. Siehe unter Software bei http://www.robotikhardware.de



Hier die Leistungsmerkmale von RN-Speak-Board mit der neuen Firmware 2.0
Rot markiert sind die Änderungen gegenüber der Vorgänger-Firmware RNSPK1



Sprachboard kann mit ein, zwei oder drei Sprachchips vom Typ ISD 2590 bestückt werden (somit ergibt sich eine Aufzeichnungskapazität von bis zu 4 ½ Minuten)
Bis zu 255 unterschiedliche Messages können aufgezeichnet werden. Wahlweise ganze Sätze oder Wörter
Das bespielen des Sprachboards ist kinderleicht. Eine mitgelieferte PC-Software überträgt WAV-Dateien in Sekunden auf das Board. Keine umständliche Sound-Bearbeitung etc. sondern einfach WAV-Dateien im Dialog auswählen, Board mit RS232 verbinden und Board neben PC legen. Das war es! Eine Statistik mit Messagecode und Messagelänge kann ausgedruckt werden.
Die I2C und RS232 Schnittstelle wurde angeglichen, nun sind nahezu die gleichen Befehle per I2C oder RS232 verwendbar
Auch die Aufnahmesteuerung ist nun per I2C oder RS232 machbar
Pause-Befehl in Schritten von 20ms bis 5 Sek genau definierbar
Jetzt auch Rückmeldung wenn Nachichten ausgesprochen wurden. Damit kann die Sprache besser mit dem Hauptprogramm synchronisiert werden.
Per I2C kann abgerufen werden wieviel Spachbefehlsbytes von RN-Speak noch abgearbeitet werden müssen.
Verschiedene Baudraten einstellbar frei 300,2400,9600,19200 und 38400 Baud
I2C-Slave ID per I2C oder RS232 beliebig änderbar. Somit können auch mehrere Boards kombiniert werden
Die eingestellte Baudrate und Slave ID werden fest im EEprom gespeichert
Ringbuffer für I2C-Befehle, somit schneller Bustakt (Standard 100 khz I2C Hardwareunterstützung)
Alternativ kann das Board auch durch einfachen Tastendruck besprochen werden
Kein Umschalten zwischen RS232/I2C oder Tasten mehr notwendig. Alle Schnittstellen werden gleichzeitig überwacht, dies erleichtet die Bedienung und den Test erheblich
Übersichtlichere Rückmeldungen per RS232. Mit einem Terminalprogramm läßt sich per RS232 sogar die I2C-Bus Kommandos und Rückmeldungen überprüfen
Einstellbare Aufnahmeverzögerung um den Chip optimal besprechen zu lassen
Einfache Verbindung zu einem Controller oder PC über RS232 oder I2C Schnittstelle
Controller (wie z.B. das RNBFRA-Board, RN-Control, RN-Mega8 aber auch C-Control etc) können über einfachen I2C-Befehl bestimmte Messages oder Wörter kombiniert ausgeben lassen.
Ansteuer-Beispiele für RN-Control in der Doku und auf Robotikhardware-CD
Kann Huckepack mir anderen Roboternetzboards verschraubt werden
Keine Stromversorgung notwendig, das Board wird über den I2C-Bus mit Energie versorgt. Wird der I2C-Port nicht genutzt, so benötigt man 5V!
Das Board verfügt über einen zusätzlichen NF-Verstärker damit auch in einem lautem Umfeld genügend Power für einen größeren Lautsprecher vorhanden ist. Die Lautstärke ist einstellbar
Das Board verfügt über eigenes Betriebsystem und kann somit auch bei Bedarf umprogrammiert werden
Nur halbe – Europakartengröße



Ansteuerbeispiele für RN-Control-Board:



'################################################# ##
'rnspeakbeispiel1.bas
'Beispiel: zu RN-Speak
'Das Minimalbeispiel demonstriert wie einfach das
'Sprachboard RN-Speak mit RN-Control per I2C angesprochen wird
'Es werden einige Messages direkt nacheinander ausgesprochen
'und zwischen zwei Messages eine Pause eingelegt
'Das Hauptprogramm wird während der Aussprache weiter ausgeführt
'es wird somit nicht gewartet bis alles ausgesprochen wurde.
'
'Dieses Beispiel benötigt RN-Speak mit Firmware 2.0 oder höher
'
'Autor: Frank
'Anleitung findet man unter http://www.Roboternetz.de im Download Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'################################################# #############


' ------------- Hier die üblichen RN-Control Anweisungen --------------

$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 9600


Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1

Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
' ------------- Ende der üblichen RN-Control Anweisungen --------------


'Das Hauptprogramm zum Ansteuern von RN-Speak Beispiel

Declare Sub Rnspeak_playmsg(byval Message As Byte)
Declare Sub Rnspeak_pause(byval Milli As Word)

Const Rnspeakslaveid = &H52 'Beliebig änderbar

Wait 2 'Warte bis RN-Speak bereit (falls Board gerade erst mit Spannung versorgt wurde)

Print "Testprogramm"

I2cinit

Rnspeak_playmsg 1
Rnspeak_pause 1000 '1000 Milisekunden (1 Sek) Pause
Rnspeak_playmsg 2
Rnspeak_playmsg 3
Rnspeak_playmsg 4
Rnspeak_playmsg 3
Rnspeak_playmsg 2
Rnspeak_playmsg 1
Print "Fertig"
End


'Hilfreiche Unterfunktionen für RN-Speak (weitere können leicht definiert werden)

'Funktion die eine bestimmte Message ausspricht
Sub Rnspeak_playmsg(byval Message As Byte)
Local Befehle As String * 4
Befehle = "rnm" + Chr(message)
I2csend Rnspeakslaveid , Befehle , 4
End Sub


'Funktion die eine Pause zwischen zwei Messages legt
Sub Rnspeak_pause(byval Milli As Word)
Local Befehle As String * 4
Local Wert As Word
Local Bwert As Byte

Wert = Milli / 20
Bwert = Wert
Befehle = "rno" + Chr(bwert)
I2csend Rnspeakslaveid , Befehle , 4
End Sub


Und ein weiteres Beispiel bei dem gewartet wird bis RN-Speak alle Messages ausgegeben hat:



'################################################# ##
'rnspeakbeispiel2.bas
'Beispiel: zu RN-Speak
'Das Minimalbeispiel demonstriert wie einfach das
'Sprachboard RN-Speak mit RN-Control per I2C angesprochen wird
'Es werden einige Messages direkt nacheinander ausgesprochen
'und zwischen zwei Messages eine Pause eingelegt
'Demonstriert wird auch, wie mit einer Funktion gewartet werden
'kann bis RN-Speak Messages ausgesprochen hat. Man kann so das
'Hauptprogramm besser mit den Messages synchronisieren
'
'Dieses Beispiel benötigt RN-Speak mit Firmware 2.0 oder höher
'
'Autor: Frank
'Anleitung findet man unter http://www.Roboternetz.de im Download Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'################################################# #############


' ------------- Hier die üblichen RN-Control Anweisungen --------------

$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000 'Quarzfrequenz
$baud = 9600


Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1

Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
' ------------- Ende der üblichen RN-Control Anweisungen --------------


'Das Hauptprogramm zum Ansteuern von RN-Speak Beispiel

Declare Sub Rnspeak_playmsg(byval Message As Byte)
Declare Sub Rnspeak_pause(byval Milli As Word)
Declare Function Rnspeak_bufferbytes() As Byte
Declare Sub Rnspeak_fertig()


Const Rnspeakslaveid = &H52 'Beliebig änderbar
Dim B As Byte

Wait 2 'Warte bis RN-Speak bereit (falls Board gerade erst mit Spannung versorgt wurde)
Print "Testprogramm"

I2cinit

Rnspeak_playmsg 1
Rnspeak_pause 1000 '1000 Milisekunden (1 Sek) Pause
Rnspeak_playmsg 2
Rnspeak_playmsg 3
Rnspeak_playmsg 4
Rnspeak_playmsg 3
Rnspeak_playmsg 2
Rnspeak_playmsg 1
Rnspeak_fertig 'Warte bis alles ausgesprochen unf führe dann Hauptprogramm weiter

Sound Portd.7 , 400 , 450 'BEEP
Print "Fertig"
End


'Hilfreiche Unterfunktionen für RN-Speak (weitere können leicht definiert werden)

'Funktion die eine bestimmte Message ausspricht
Sub Rnspeak_playmsg(byval Message As Byte)
Local Befehle As String * 4
Befehle = "rnm" + Chr(message)
I2csend Rnspeakslaveid , Befehle , 4
End Sub


'Funktion die eine Pause zwischen zwei Messages legt
Sub Rnspeak_pause(byval Milli As Word)
Local Befehle As String * 4
Local Wert As Word
Local Bwert As Byte

Wert = Milli / 20
Bwert = Wert
Befehle = "rno" + Chr(bwert)
I2csend Rnspeakslaveid , Befehle , 4
End Sub


'Function ermittelt wieviele I2C-Bytes von RN-Speak noch beachbeitet/ausgesprochen
'werden müssen
Function Rnspeak_bufferbytes() As Byte
Local Bwert As Byte
I2cstart
Bwert = Rnspeakslaveid + 1 'Lese Adresse für rn-speak ist um 1 Byte höher
I2cwbyte Bwert
I2crbyte Bwert , Nack
I2cstop
Rnspeak_bufferbytes = Bwert
End Function


' Diese Funktion wartet bis alle Befehle und Messages von RN-Speak ausgesprochen wurden
Sub Rnspeak_fertig()
Local Bwert As Byte
Do
Bwert = Rnspeak_bufferbytes()
waitms 500
Loop Until Bwert = 0
End Sub



Die aktuelle überarbeitete Anleitung / Bauanleitung ist bereits im Download-Bereich.
https://www.roboternetz.de/phpBB2/dload.php?action=category&cat_id=16
Hardware-Änderungen sind praktisch nicht notwendig, also auch Board Version 1.0 kann die neue Firmware nutzen! Beachten muss man nur den Hinweis mit den Widerstandsbrücken falls nicht alle 3 Sprachchips eingesteckt werden (siehe Doku).

Mfg
Frank