サウンドセンサモジュールをArduinoで動かします。
目次:
今回の目的
ELEGOOのチュートリアル「Sound Sensor Module」をチュートリアル通りに動かします。
※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。
サウンドセンサモジュール
直訳和訳が多いELEGOOのチュートリアルタイトルですが、今回は「Sound Sensor Module」と英語表記そのものでした。以降カタカナで「サウンドセンサモジュール」と呼びます。
表面にはコンデンサマイク、可変抵抗、LED。8ピンICには「LM393」の刻印があり、これは2回路入りコンパレータのようです。
外部端子となるピンヘッダは4本。シルク表記は「AO」(Analog Output)、「G」(GND)、「+」(VCC)、「DO」(Digital Output)。
チュートリアルの回路図によれば、「AO」はコンデンサマイクと可変抵抗でVCC(5V)を分圧して、コンパレータによるバッファ(ボルテージフォロア)を介したアナログ出力。
「DO」はコンデンサマイク出力と、VCC5Vを可変抵抗で分圧した基準電圧とを入力するコンパレータのデジタル出力です(コンデンサマイク出力に基準電圧を超える変化が発生すると出力が0↔1で変化する)。
器材接続
サウンドセンサモジュールの「AO」、「G」、「+」、「DO」をそれぞれArduinoのA0、GND、5V、D3につなぎます。
測定値を表示させるため、USBはパソコンに接続します。
スケッチ
今回はデジタル出力用、アナログ出力用の2つのスケッチがあります。どちらもライブラリ読み込みも無い短いスケッチです。
オリジナルのものを少し変えております。
《デジタル用スケッチ》
void setup() {
pinMode(13,OUTPUT); // LEDを出力に設定
pinMode(3,INPUT); // 「D3」を入力に設定
}
void loop() { // 以下延々と繰り返す
int val=digitalRead(3); // 変数「val」に「D3」読み取り値を代入
if(val==HIGH){ // 変数「val」がHighの場合、
digitalWrite(13,HIGH); // LED出力をHighにする(点灯)
}else{ // 変数「val」がHighでない場合、
digitalWrite(13,LOW); // LED出力をLowにする(消灯)
}
}
デジタル用スケッチは、センサモジュールの「DO」出力がHighならArduinoのLEDを点灯、Lowなら消灯します。
《アナログ用スケッチ》
void setup() {
pinMode(13,OUTPUT); // LEDを出力に設定
Serial.begin(9600); // シリアルポートを9,600bpsで開く
}
void loop() { // 以下延々と繰り返す
val=analogRead(A0); // 変数「val」にセンサ出力読み取り値を代入
digitalWrite(13,HIGH); // LED出力をHighにする(点灯)
delay(val); // 変数「val」の値だけ停止
digitalWrite(13,LOW); // LED出力をLowにする(消灯)
delay(val); // 変数「val」の値だけ停止
Serial.println(val,DEC); // 変数「val」をシリアル出力
}
}
アナログ用スケッチは、センサモジュールの「AO」出力を読み取り、その値をシリアル出力します
読み取り値だけ「delay()」で停止するので、大きな値が連続するとシリアル出力(とLED点滅)がゆっくりになります。
動作
《デジタル用スケッチ》
トリマ抵抗を調整しつつ、マイクに向けて声を出します。
近隣への騒音を恐れているのもありますが、トリマを最大まで調整してもLEDがなかなか反応しませんでした。
口を近づけつつ息を吹き付けるように声を出すと反応しやすいようです。カラオケのマイクと同じ具合?ですね。
《アナログ出力用スケッチ》
まず、チュートリアル通りのシリアルモニタ出力ですが、
モジュールの出力電圧を1024bitで読み取り、値を連続して表示してくれてます。
マイクに向けた声で表示される数値は変わるようなのですが、よくわかりません。
可変抵抗をぐるぐる回せば数値が上下するのですが、どうすれば感度が高まるのやら。
そこで、モジュールの出力「AO」「DO」の電圧波形を確認しました。
波形を見ると分かりやすいです。改めて可変抵抗を調整します。
さらに、シリアルモニタではよくわからなかったので、表示をシリアルプロッタに切り替えました。
意外と時間軸が長かったので、小声ながら一曲歌ってみました。
変化がわかりやすくなりました。ただ、マイクとしてこれでよいのかは疑問です。ヒゲのように跳ねている部分をノイズとして無視するべきか、あるいはこれこそ音声と見なしてよいのか。。。
このモジュールのアナログ出力を音声認識?等として活用するとなると、奥が深そうです。
所感
スケッチも原理もシンプルなものでした。
前述のようにアナログ値としての音声データを活用するとかであれば難しそうですが、デジタル値で照明をON/OFFする、などであればハードルは低目かもしれません。
0 件のコメント:
コメントを投稿