マイクモジュールからの信号をトリガーにサーボモーターを動かす
サーボの電源は、1個であればArduinoからの5Vでも動作するが、マイクモジュールと併用するとマイクからの信号にノイズが乗るため、今回は外部から電源を供給する。
ちなみにServo.hライブラリを使うと、最大12個のサーボが制御できるとのこと。
#include <Servo.h> //サーボを使うためのライブラリの読み込み
Servo myservo; //サーボをアサインするための準備
//センサーから読み取った値を格納するための変数。0〜1023までの整数が入ってくるから int型で宣言
int val1 = 0;
void setup() {
//シリアルモニタで値の変化を確認するため、Serial.beginでシリアル通信つかうよ宣言
//115200は通信速度の設定
Serial.begin(115200);
//Arduinoの表面についてるLEDが13番ピンに接続されていて、それをアウトプットで使うよという宣言
pinMode(13,OUTPUT);
myservo.attach(3); // 3番のピンをサーボに使う
void loop() {
//arduinoのA0番ピンの値を読んで、val1に格納するよという意味
val1 = analogRead(A0);
//マイクセンサーは、2.5vを中心に波の形の変化をする。
//で、analogRead()は0〜1023(0v〜5vの電圧変化)なので、真ん中の512を引いて、
//その値の差=音量を取得する。普通に引き算するだけだと、マイナスの負の値も
//出てくるので、abs()で絶対値に変えて、val1に再び格納しなおす。
val1 = abs(512-val1);
//
if(val1 > 80){ // 音量の値が80を超えたら
// 13番のピンの電圧を上げる。つまりLEDが点灯する。
digitalWrite(13,HIGH);
myservo.write(100); //サーボを100度に
delay(100); //少し待つ
}else{
// 音量の値が80以下だったら、13番のピンの電圧を下げる。つまりLEDを消灯する。
digitalWrite(13,LOW);
myservo.write(10);//サーボを10度に
}
Serial.println(val1);
//analogRead()を使う場合、少しdelay()で待ち時間を設けると値が安定する。
delay(10);
}