モーターの動作を音声でしたい。「動け」と言えば動く、「止まれ」と言えば止まる。その前の段階として、この記事では、音声によりLEDの点灯を制御してみます。
(注:Pytnonのバージョンは3.12系です。3.13系では動作が確認できませんでした)
まず、次のパッケージをインストールする必要があるそうです。
・speech recognition (音声認識パッケージ)
・pyfirmata (Arduinoとの通信パッケージ)
では、インストールしてみます。




インストールが成功しました!
次に、マイクからの音声入力をテストします。プログラムは以下の通りです。

これを実行します。まず、「おはよう」と言ってみます。

次に、「こんにちは」と言ってみます。

プログラムは無事に動いているみたいです。
次は、LEDの点灯制御をシリアル通信で行ってみます。今度は、Arduino IDEに次のプログラムを入力します。
int data;
void setup()
{
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite (LED_BUILTIN, LOW); //initially set to low
Serial.println("This is my First Example.");
}
void loop()
{
while (Serial.available())
{
data = Serial.read();
}
if (data == '1')
digitalWrite (LED_BUILTIN, HIGH);
else if (data == '0')
digitalWrite (LED_BUILTIN, LOW);
}
入力できたらArduinoのuploadしてください。uploadが終了したらシリアルモニターを開きます。

ではシリアルモニターの入力窓に「1」と入力してみましょう。すると、ビルトインLEDが点灯します。では、入力窓に「0」と入力してみましょう。LEDが消灯します。これで、シリアル通信を介して、LED(あるいは外部機器)が制御できることがわかります。

次に、この動作をpythonで実行してみます。今度は、VisualStudioCodeで以下のプログラムを入力します。

プログラムが入力できたら、ターミナルで実行してみます。

これで、pythonからもLEDが制御できることがわかりました。画面上で「b’This is my First Example.\r\n’」と表示されていますが、これは先に示したArduinoIDEに入力したプログラムの8行目が実行されています。すなわち、pythonのプログラムとArduino上にuploadされたプログラムが通信を行っている様子がわかります。
では、mic.pyとled_serial.pyを融合して、mic_to_led.pyを作成します。

プログラムが入力できたら、実行してみます。ターミナル上で「py mic_to_led.py」と入力します。

これで、「おはよう」というとLEDが点灯し、それ以外の言葉を言うとLEDが消灯するシステムができました!!
【追記】上のプログラムでは一定時間、音声入力がないと、異常終了してしまいます。そこで、例外処理を加えました。それが、次のプログラムです。



コメント