United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Grove - Arduino用音声認識キットについて

in_the_box_89da25fff3a10f30972b346a446b81a0c9d1038d.jpg

いろいろなモジュールを試しながら、音声認識MP3プレーヤーを作る

前回の私の記事では、「Grove - スタータキット(Arduino対応)」を紹介し、いかに速く簡単にガジェットのプロトタイピングが実行できるかをレビューした。このキットでSeeed社のGroveシステムの良さが分かったため、他にどのキットを紹介すべきか見てみたくなった。そこで今回は、「Speech Recognizer」を使った音声認識機能をレビューしてみたいと思う。

キットの内容

components2_d42f7053998587446fd957fe6f93e6d0ce36e34f.jpg

「Speech Recognizerキット (174-3226) は、Groveのいつもの透明のライトグリーンのボックスに入っている。中にはベースシールド、赤外線レシーバ、赤外線送信、MP3プレーヤ、RTC (リアルタイムクロック)、音声認識モジュールが1つずつと、必要なケーブルが入っていた。なおRTCモジュールにはCR1225リチウム電池が必要である。しかしキットには同梱されていなかったので別途調達しておく必要がある。

モジュール

Groveシステムでは、Arduino用のベースボードを装着し、そこに様々なモジュールを接続する。いつものように、各モジュールについて個別に説明し、それらのサンプルを紹介してから、このキット全体のサンプルを紹介する。

赤外線エミッタ及び赤外線レシーバ

IR_Send_Rec2_25091e9059417675d8c1158e5a8988761bfc6e63.jpg

Seeed GroveのWikiでは、赤外線モジュールので、送信モジュールと受信モジュールの両方を使用して、2台のArduinoを相互に通信させている。私は運がよく、スタータキットのベースシールドを持っていた。しかし、それがなくても、モジュールをArduinoに直接接続できる。

IR_Rec_fe3bdc363280406ad83274a24f7edd99595734cb.jpg

赤外線レシーバは、ベースシールドのポートD2に接続する。

IR_send_3a8f57a46054f8f6b31d75d5729cba97a7ce8280.jpg

赤外線エミッタは、ポートD3に接続する。

GitHubからGrove Infrared Libraryをダウンロードして、Arduino IDEにインストールした。このライブラリにはモジュールごとにサンプルスケッチが1つ含まれている。そのため、各サンプルを順番に開き、各モジュールが接続されているArduinoにアップロードするだけで済む。それが終わったら、2つのモジュールを相互に向けて、Arduino IDEのシリアルモニタを開く。ボーレートが設定されていない場合は、「115200」に設定すると、以下が表示される。

Infrared_Screenshot_b161eb690e27af3ecfdea1105d8205eeac64de81.png

RTC モジュール

RTC_175cf0fa40cd03f5b88f87288473a38a99ba4b17.jpg

ボタン電池を装着すれば、RTCモジュールを試すことができるようになる。再度SeeedのWikiに記載されている手順に従う。ライブラリをダウンロードしてインストールし、次にサンプルスケッチを開いて以下の行を編集して適切な時間を設定し、アップロードする。

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

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

clock.fillDayOfWeek(SAT); //Saturday

シリアルモニタウィンドウに、正確な時間が出力される。

RTC_ffa8dd77a8180c774f8926bcfbf6e8c1dd3bfbbc.png

音声認識モジュール

voice_rec_module_bae2185c4d1ed9506798c9b2ecf0eb523261e608.jpg

音声認識モジュールは、22種類のコマンドに応答するようプリセットされている。使用開始の手順に従って、提供されているスケッチをArduinoにアップロードすれば大丈夫だ。

モジュールに「Hicell」と話しかけると、赤色のLEDが点灯して声を認識していることが分かりる。次に、このサンプルのように、定義済みのコマンドの1つを発話すると、以下の画面のようにモニタウィンドウにコマンドが表示される。

Screenshot_from_2019-01-03_15-41-35_88ce676a95c3a49f2676718332e47d1fa837ac28.png

今回は、ボーレートが「9600」に設定されていることを確認する。

Hicellコマンドは、マイクに近づくとうまくいくようだ。「Down」と「Go」を混同したこともあったが、ほとんどの場合は、はっきりと発話している限り、私が言ったことを認識してくれた。そのため、SiriやAlexaのように室内に配置されているよりも、マイクがユーザーに近いプロジェクトのほうに適しているように思えた。例えば、以下の動画のような、スクーターのハンドルバーに取り付けられているプロジェクトなどだ。

 

MP3プレーヤー

MP3_e1db1e27b3b81dd3edb6fe9672730fa91b5c830a.jpg

MP3プレーヤモジュールは、micro SDカードに音楽を保存し、MP3 WAVファイル及びWMVファイルを再生する。オーディオ出力は、3.5mmのステレオジャックを通じて行われる。ここでも、ダウンロードしてインストールするライブラリと、従うべき明確な手順がある。

前のサンプルと同様に、シリアルモニタを使用してモジュールと通信し、簡単なコマンドをプレーヤに送信して「再生」、「一時停止」、「再開」などを行う。私は、シリアルモニタが「9600」ボーに設定されていることを確認し、「P」というコマンドを送信すると、確かに音楽がヘッドホンを通して再生された。

次に、プレーヤーに音声コマンドを試す。

音声制御のMP3プレーヤの作成

Voice_MP3_a2d2b71a2ba9ccab3f159223e0701190e896cfd2.jpg

このキットの手順には、音声制御をセットアップしてTVをオン/オフしたり、音声制御のMP3プレーヤを作成したりするための方法が記載されている。音声認識モジュールには、音楽を再生するための音声コマンドもたくさん用意されている。

音声制御のMP3プレーヤの設定及び実行方法について説明したWikiの部分は、あまり分かりやすく翻訳されていなかったため、その方法に従うのは少し難しいかもしれない。私はMP3プレーヤをベースシールドのポートD2に接続し、Speech RecognizerをポートD5に接続した。そして、複数の音楽ファイルをmicro SDカードにコピーした。再生する音楽トラックを指定したい場合は、ファイル名を数字で始まるように変更する必要がある。例えば、スケッチの行は次のようになる。

SpecifyMusicPlay(1);

これで、「001****.mp3」という名前の音楽ファイルが再生される。

私は2つのトラックの名前を変更したが、他のトラックはそのままにしてプレーヤでどうなるかを調べることにした。

以下は、音声コマンドを指定したスケッチの一部だ。

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;
        }

サンプルスケッチがアップロードされたら、「Hicell」と言い、次に「Play Music」と言うだけだ。私は他の音声コマンドも試してみたが、期待どおりの応答をした。「Next」と発話すると、次の番号のトラックが再生するが、元のファイル名のままにしておいた曲は再生できなかった。「Loop」コマンドを使用すれば、無視されたトラックを再生できかもと思い、スケッチを編集して、以下の2行を追加した。

case 12: //speech command : Go

PlayLoop(); // MP3: loop all songs

番号を付けたトラックをmicro SDカードから削除し、「Go」という音声コマンドを試すと、確かにそれらのトラックが再生された。これによって、聴きたい要素の一部が削除されるが、すべての音楽ファイルの名前を変更する必要がないことが分かった。特にSDカードに多数の音楽ファイルを保存しようとするときは、とても便利だ。

実際の応用

作ったのが以下の写真のモノだ。音声認識マイクをジャケットの衿に留め、MP3プレーヤをポケットに入れて、9Vのバッテリで動かせば、外出時に簡単に音楽を再生できることに気づいた。音声認識モジュールには長いケーブルが必要で、最長のSpeedは50cm (179-3728) のようですが、2本の変換ケーブル (179-3734) を使用して1本の長いケーブルにするか、又はカプラを使用して適切なソケット (179-3735) のケーブルを結合すると簡単だ。頑丈なケースに入れておけば、新年の抱負であるフィットネスを続ける心の支えになるかもしれない。

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.
DesignSpark Electrical Logolinkedin