DesignSpark Electrical Logolinkedin
Menu Suche
Ask a Question

16 Apr 2019, 13:25

Eine erste Begegnung mit dem Grove-Spracherkennungs-Kit für Arduino

Ein erster Blick, Ausprobieren der verschiedenen Module und Bau eines sprachgesteuerten MP3-Players.

In einem vorherigen Blogbeitrag habe ich mir das Grove-Starterkit für Arduino angesehen und war beeindruckt davon, wie schnell und einfach es war, einfache Projekte zum Laufen zu bringen. Dadurch erhielt ich einen Eindruck des Grove-Systems von Seeed. Also dachte ich mir, ich sehe mir mal an, was ein anderes Kit zu bieten hat. Die audio-bezogenen Anwendungen der Spracherkennung erschienen mir recht attraktiv.

Das ist im Kit enthalten

Das Spracherkennungs-Kit (174-3226) wird in der üblichen transparenten grünen Box von Grove geliefert und enthält ein Base Shield sowie jeweils einen IR-Empfänger, IR-Sender und MP3-Player, eine RTC (Echtzeituhr) sowie Spracherkennungs-Module und die erforderlichen Kabel. Mir ist aufgefallen, dass das RTC-Modul eine CR1225 Lithium-Zelle benötigt, die nicht im Lieferumfang enthalten ist. Daher bin ich froh, dass ich das Kit nicht am Weihnachtsmorgen geöffnet habe!

Die Module

Das Grove-System verwendet sein Base Shield als einfache Methode, die verschiedenen Module mit einem Arduino zu verbinden. Generell fand ich es vorteilhaft, die Informationen und Beispiele für jedes Modul einzeln durchzugehen, bevor ich mit den für das Kit bereitgestellten Beispielen weitermachte.

IR-Sender und IR-Empfänger

Die Einführung in die Infrarotmodule im Seeed-Grove-Wiki verwendet sowohl das Sende- als auch das Empfangsmodul, um die Kommunikation von 2 Arduinos untereinander zu realisieren. Glücklicherweise hatte ich ein weiteres Base Shield aus dem Starterkit. Sollten Sie dieses Glück nicht haben, können Sie die Module auch direkt mit einem Arduino verbinden.

Der IR-Empfänger wird an Port D2 des Base Shield angeschlossen.

Der Sender wird an Port D3 angeschlossen.

Ich habe die Grove-Infrarot-Bibliothek von GitHub heruntergeladen und in der Arduino-IDE installiert. Die Bibliothek enthält auch Beispiel-Sketches – einen für jedes Modul. Somit brauchte ich nur die Beispiele einzeln nacheinander zu öffnen und mit dem angeschlossenen passenden Modul auf das Arduino hochzuladen. Richten Sie anschließend die beiden Module aufeinander und öffnen Sie dann den seriellen Monitor in der Arduino-IDE. Setzen Sie, falls dies nicht bereits der Fall ist, die Baudrate auf 115200. Sie sollten Folgendes sehen:

RTC-Modul

Nachdem ich die erforderliche Batterie beschafft und eingesetzt hatte, konnte ich das RTC-Modul ausprobieren. Auch hier ging es darum, die Anweisungen im Seeed-Wiki zu befolgen, was das Herunterladen und Installieren der Bibliotheken und das anschließende Öffnen und Hochladen des Beispiel-Sketches nach dem Bearbeiten der folgenden Zeilen, um die richtige Zeit einzustellen, erforderte.

clock.fillByYMD(2013,1,19); //Jan 19,2013

clock.fillByHMS(15,28,30); //15:28 30"

clock.fillDayOfWeek(SAT); //Saturday

Im Fenster des seriellen Monitors konnte ich dann sehen, dass die korrekte Zeit ausgegeben wurde.

Spracherkennung

Die Spracherkennung ist so voreingestellt, dass sie auf 22 verschiedene Befehle reagiert.

Ich habe die Anweisungen für die ersten Schritte befolgt und den bereitgestellten Sketch auf das Arduino hochgeladen.

Ich fühle mich immer ein wenig verunsichert, wenn ich elektronische Bauteile darum bitten muss, Dinge für mich zu erledigen. Und das, obwohl ich durchaus gern leblose Objekte beschimpfe, wenn sie auf die eine oder andere Art nicht miteinander funktionieren.

Wecken Sie das Modul mit dem Wort „Hicell“ auf. Ob es zuhört, erkennen Sie daran, dass eine rote LED aufleuchtet. Wenn Sie ihm dann einen der vordefinierten Befehle erteilen, sollte es – wie in diesem Beispiel – den Befehl im Fenster des seriellen Monitors anzeigen.

Vergewissern Sie sich, dass die Baudrate diesmal auf 9600 eingestellt ist.

Ich fand heraus, dass der Hicell-Befehl am besten funktionierte, wenn ich mich in der Nähe des Mikrofons befand. Einmal hat es „Go“ mit „Down“ verwechselt, doch meistens erkannte es, was ich sagte, wenn ich es nur deutlich genug sagte. Ich vermute, dass es besser für Projekte geeignet ist, bei denen sich der Benutzer in der Nähe des Mikrofons befindet, wie beispielsweise das Projekt im nachstehenden Video. Hier ist es am Lenker eines Rollers befestigt und nicht – wie beispielsweise Siri oder Alexa – irgendwo in einem Raum aufgestellt.

MP3-Player

Das MP3-Player-Modul speichert Musik auf einer microSD-Karte und spielt MP3-, WAV- und WMV-Dateien ab. Der Audioausgang erfolgt über eine 3,5-mm-Stereobuchse. Auch hier gibt es Bibliotheken, die heruntergeladen und installiert werden müssen, sowie eine Reihe von Anweisungen, die Sie befolgen müssen.

Wie in den vorherigen Beispielen wird der serielle Monitor zur Interaktion mit dem Modul verwendet, und zwar über einfache Befehle, die zur Wiedergabe, Pause, Fortsetzung der Wiedergabe usw. an den Player gesendet werden. Ich habe mich vergewissert, dass der serielle Monitor auf 9600 Baud eingestellt ist, den Befehl „P“ gesendet und es wurde tatsächlich Musik über die Kopfhörer abgespielt.

Nun zum Player mit Sprachbefehlen.

Bau eines sprachgesteuerten MP3-Players

Die Anweisungen für das Kit umfassen die Einrichtung der Sprachsteuerung zum Ein- und Ausschalten des Fernsehers sowie den Aufbau eines sprachgesteuerten MP3-Players. Ich habe es kurz mit dem TV-Projekt versucht, was jedoch mit der letzten Staffel von „Fortitude“ kollidierte. Dies und die Tatsache, dass ich mich mehr für das Musik-Projekt interessierte – was keine Überraschung für Sie sein wird, wenn Sie meine letzten Blog-Beiträge gelesen haben – bewogen mich dazu, dieses Projekt nicht weiter zu verfolgen. Das Spracherkennungsmodul verfügt außerdem über mehr musikbezogene Sprachbefehle, mit denen man herumprobieren kann.

Der Teil des Wikis, in dem erklärt wird, wie man den sprachgesteuerten MP3-Player einrichtet und ausführt, wurde nicht sonderlich gut übersetzt. Daher kann es etwas schwierig sein, die Anweisungen zu befolgen. Den MP3-Player habe ich an Port D2 des Base Shield und die Spracherkennung an D5 angeschlossen. Ich habe einige Musikdateien auf eine microSD-Karte kopiert. Wenn Sie einen Musiktitel für die Wiedergabe festlegen möchten, müssen Sie die Dateien umbenennen, sodass sie mit einer Zahl beginnen. Beispiel: Die Zeile in einem Sketch:

SpecifyMusicPlay(1);

spielt eine Musikdatei mit dem Namen 001****.mp3

Einige Titel habe ich umbenannt, andere hingegen so belassen, um zu sehen, wie sich der Player verhalten würde.

Dies ist der Teil des Sketches, der die Sprachbefehle festlegt:

void loop()
{
    int a=0;
    if(speech.available())
    {
        a = speech.read();   // Read the return value from the Speech Recognizer
        switch (a)
        {
            case 3:      //  speech command : Play music
            SpecifyMusicPlay(1);   // MP3: play the name of "001"
            break;
            case 4:   //  speech command : Pause
            PlayPause();    // MP3: pause music
            break;
            case 19:   //  speech command : Start
            PlayResume();  // MP3: continue music
            break;
            case 5:   //  speech command : Next
            PlayNext();    // MP3: play next song
            break;
            case 6:   //  speech command : Previous
            PlayPrevious();  // MP3: play previous song
            break;
            default:
            break;
        }

Sobald der Beispiel-Sketch hochgeladen war, sagte ich „Hicell“ und anschließend „Play music“ (Musik abspielen) – und genau das hat der Player gemacht. Ich bin die anderen Sprachbefehle durchgegangen und er reagierte wie erwartet. Mit „Next“ (Weiter) wurde der nächste nummerierte Titel wiedergegeben. Allerdings konnte ich ihn nicht dazu bewegen, Titel abzuspielen, deren ursprüngliche Dateinamen ich unverändert gelassen hatte. Ich fragte mich, ob ich den Befehl „Loop“ (Schleife) dazu verwenden könnte, ihn dazu zu bringen, die übersprungenen Titel abzuspielen. Dazu habe ich den Sketch bearbeitet und ein paar Zeilen hinzugefügt:

case 12: //speech command : Go

PlayLoop(); // MP3: loop all songs

Ich habe die nummerierten Titel von der microSD-Karte entfernt, den Sprachbefehl „Go“ (Los) ausprobiert und tatsächlich wurden die Titel abgespielt. Auch wenn sich dadurch nicht mehr alle gewünschten Titel auswählen lassen, bedeutet dies doch, dass Sie nicht alle Musikdateien umbenennen müssen. Das ist insbesondere dann von Vorteil, wenn Sie sehr viele Dateien auf Ihrer SD-Karte speichern.

Praktische Anwendung

Es kam mir in den Sinn, dass man gut unterwegs Musik würde hören können, wenn das Mikrofon für die Spracherkennung am Kragen einer Jacke befestigt wird, während der MP3-Player selbst – mit einem 9-V-Akku versehen – in einer Tasche verstaut ist. Das Spracherkennungsmodul würde ein langes Kabel benötigen und offenbar ist das längste Kabel, das Seeed anbietet, 50 cm lang (179-3728). Man könnte jedoch einfach mithilfe von 2 Adapterkabeln (179-3734) ein längeres Kabel herstellen oder aus den entsprechenden Buchsen (179-3735) eine Kupplung zum Verbinden von Kabeln herstellen. Verpackt in einem robusten Gehäuse könnte Sie möglicherweise genau das dazu motivieren, Ihre Neujahrsvorsätze in Sachen Fitness in die Tat umzusetzen.

I currently look after production at AB Open. I have a background in the arts, environmental conservation and IT support. In my spare time I do a bit of DJing and I like making things.

16 Apr 2019, 13:25

Kommentare