Calliope, Spracherkennung und MicroBlocks

Hallo zusammen,

ich habe den Spracherkennungssensor von DFRobot auch mit dem Calliope v3 und MicroBlocks auszuprobiert. Die Beiträge von Lutz und Michael hier im Calliope-Forum Erweiterungen zur Spracherkennung konnten ein großes Interesse bei mir wecken. Der Beitrag von Mahesh Yadav Getting started with the DFRobot Voice Recognition Sensor bei Hackster.io hat mir dann in mehreren Videos und Beispielprogrammen wichtige Nutzungsdetails aufgezeigt. Der Sensor ist preiswert und macht Spaß! Ja, es ist total einfach und eindrucksvoll, den Calliope mit gesprochenen Befehlen zu steuern … und nebenbei übt der Sensor die klare Aussprache der Befehle.

MicroBlocks verfügt bereits über eine Library für diesen Voice Recognition Sensor, programmiert von José García Yeste. Mir habe es mir nicht nehmen lassen, die Library zu überarbeiten und die Programmierung zu vereinfachen. In der ursprünglichen Version musste man nämlich bei der Nutzung vorhandener Befehle ständig ins Datenblatt schauen. Der Sensor wandelt erkannte Texte in Befehlsnummern um und diese Begehlsnummern müssen bei der Programmierung in der Entscheidungskette mit if … then … else eingetragen werden. Ich habe die vorhandenen Befehle und deren Nummern in einem Block verfügbar gemacht, so dass der Programmcode wirklich lesbar wird. Ich gehe davon aus, dass die Library in der verbesserten Form bald fest in MicroBlocks eingebaut sein wird. Bis es soweit ist, könnt ihr die hier anhängende Datei in MicroBlocks nachladen … der Menüpunkt heißt „füge Modul hinzu“ und dort lässt sich auch eine Datei von der eigenen Festplatte nachladen.

Der Sensor wird über I2C mit dem Calliope verbunden. Hierbei ist zu beachten, dass DFRobot die Kontakte leider anders angeordnet hat als sie am Calliope-Grove-Adapter A0 anliegen. Ich habe das dem Sensor beiliegende Kabel verwendet und über ein Grove-Kabel mit vier Dupont-Steckern (male) die Kontakte richtig sortiert. rot–rot (3.3V), schwarz–schwarz (GND), grün–gelb (SDA), blau–weiß (SCL).

Viel Erfolg bei euren Experimenten!

Herzliche Grüße
Ralf

2 „Gefällt mir“

… und hier kommen zwei Dateien, die Voice Recognition Library für MicroBlocks und das Testprogramm

Voice Recognition 20251004.ubl (5,5 KB)

test-voice-recognition.ubp (14,1 KB)

1 „Gefällt mir“

Heute morgen wurde die neue Version MicroBlocks IDE v2.0.69 veröffentlicht. Die neue Library zur Spracherkennung ist bereits verfügbar! Übrigens: über den nachfolgenden Link wird sofort das Testprogramm geladen. :smiling_face_with_sunglasses:

1 „Gefällt mir“

Hallo Ralf,

über I2C programmiert werden kann eigentlich nur die Wachzeit und die Lautstärke. Da fehlt mir einiges z.B. Reset auf Werkseinstellungen, ein gelerntes Wort löschen, …
Hast du dazu mehr heraus gefunden?

Es gibt im Beispiel Code auch noch die UART Schnittstelle. Geht damit mehr als über I2C?

Löscht das Kommando zum Löschen immer alle gelernten Wörter und ich muss von vorne anfangen? Oder kann ich eins bzw. nur das letzte (per Sprachbefehl) löschen?

Und wie erfahre ich die ID eines gelernten Wortes? Nur durch hinterher ausprobieren?

FG Lutz

1 „Gefällt mir“

Hallo Lutz,
die Verarbeitung der Sprachbefehle findet ausschließlich auf der Zusatzplatine statt. Die 121 vordefinierten Sprachbefehle sind im Wiki https://wiki.dfrobot.com/SKU_SEN0539-EN_Gravity_Voice_Recognition_Module_I2C_UART zu finden. Die Zusatzplatine hat die Aufgabe, 121 vordefinierte und bis zu 17 selbst gesprochene Befehle zu erkennen und in eine Zahl umzuwandeln.

Du suchst programmierbare Optionen? Ja, man kann die Zeit einstellen, die der Sensor nach dem letzten Sprachbefehl wach bleiben soll … standardmäßig sind das wohl 15 Sekunden. Und dann lässt sich einstellen, ob man als sprachsteuernder Mensch eine Antwort des Sensors bekommt, ob er einen Befehl verstanden und in eine Zahl umgewandelt hat. Diese Antwort lässt sich ausschalten (mute = true) und in ihrer Lautstärke einstellen … Lautstärke 10 bis 12 finde ich okay, bei größeren Werten (bis 20) scheppert der eingebaute Lautsprecher ziemlich. Die Folge der Sprachbefehle „I want to delete“ und „delete all“ sollte eigentlich alles löschen.

Für den Informatiker ist es ziemlich befremdlich, dass er seine Befehle sprechen und nicht tippen soll. Ja, du kannst den Befehl „display smiley face“ auch ohne Sprechen mit dem Block „voice play command 62“ in das Programm einbauen, aber das erscheint mir ziemlich sinnlos als Anwendung für einen Spracherkennungssensor.

Jetzt zu den nutzerdefinierten Sprachbefehlen. Mit dem Befehl „learning wake word“ bzw. dem Block „voice play command 200“ definierst du einen eigenen Aufwachbefehl, z.B. „hallo Calliope“ … den Befehl musst du dreimal hintereinander in möglichst gleicher Weise sprechen, damit er gespeichert wird. Nein, eintippen lassen sich die Sprachbefehle nicht. Der Sensor möchte dich hören. Der nutzerdefinierte Aufwachbefehl wird als Befehl 1 gespeichert, womit es dann zwei gleichwertige Aufwachbefehle „hello robot“ und „hallo Calliope“ gibt.

Die 17 nutzerdefinierten Sprachbefehle für die Programmierung müssen nach meiner bisherigen Erkenntnis nacheinander eingegeben werden. Nach dem Befehl „Learning command word“ gibst du deinen ersten Programmierbefehl „schalte das Licht an“, der dann als erster nutzerdefinierter Befehl mit der Nummer 5 gespeichert wird. Anschließend gibst du deinen zweiten Programmierbefehl „schalte das Licht aus“ ein, der dann als zweiter nutzerdefinierter Befehl mit der Nummer 6 gespeichert wird. Wenn du mit der sequenziellen Eingabe deiner nutzerdefinierten Sprachbefehle fertig bist, sagst du „exit learning“. Jetzt kannst du den Spracherkennungssensor mit „hallo Calliope“ aufwecken und eine Lampe mit „schalte das Licht ein“ und „schalte das Licht aus“ steuern. Dafür muss der Calliope auf den Befehl 5 und den Befehl 6 reagieren. Command Words/Wake-up Words & ID Table

Mir ist es bisher nicht gelungen, einen einzelnen weiteren Befehl hinzuzufügen. Ich musste immer alle nutzerdefinierten Sprachbefehle zusammen neu einsprechen … ein bisschen doof, aber ich bin trotzdem von dem Spracherkennungssensor begeistert … einfache Bedienung und super Spracherkennung.

Die Programmierung über UART habe ich mir bisher noch nicht angesehen. Ich glaube allerdings nicht, dass hier die Programmierung anders als über I2C funktioniert.

Beste Grüße
Ralf

1 „Gefällt mir“