こんばんは!
今回はマイクモジュールmax4466を使ってひろった音の大きさがわかるような装置を作りました。
概要
マイクモジュールで音を拾い、拾った音の大きさをArduinoで読み取る。
音の大きさを0.00~1.00で表す。
その音の大きさによってLEDを光らせる。
使用するもの
・Arduinoメインボード(https://amzn.to/2vkPIUH)
・USBケーブル(https://amzn.to/2UHhntl)
・ブレッドボード(https://amzn.to/38eNi8u)
・ジャンパワイヤ (https://amzn.to/39uBU8T)
・LED(https://amzn.to/2TvEPGc)
・抵抗100Ω(https://amzn.to/2snlNWT)
・マイクモジュールmax4466(https://amzn.to/36sFp0f)
マイクモジュールについて
今回使うmax4466はとてもシンプルです。
3ピンあり、右からOUT、GND、VCCとなっています。
使い方はとてもシンプルで、電源を与えて、増幅された信号がVCCの半分のバイアスでOUTピンから出てきます。
VCCは2.4~5.0Vに接続することが可能ですが、3.3Vが理想らしいので今回はArduinoの3.3Vのピンに接続します。
よってOUTピンから出てくる電圧は無音なら
3.3 / 2 = 1.65[v]
となります。
手順
まずハード側からやっていきます。
最初にマイクモジュールをピンとはんだ付けしていきます。
次にOUTピンをArduinoのA0ピンに、GNDピンをArduinoのGNDピンに、VCCピンをArduinoの3.3Vピンに接続します。
そして、LED、抵抗を以下の図のように接続します。
これでハード側は終了です。
次にプログラムを書いていきます。
Arduino IDEを開いて次のコードを書き込んでいきます。
1 2 3 4 5 6 7 | const int led1 = 8; const int led2 = 9; const int led3 = 10; const int led4 = 11; const int led5 = 12; double sound = 0; double volts = 0; |
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
sound = analogRead(0);
volts = (sound * 5.0/3.3) / 1024 ;
Serial.println(volts);
if (volts > 0.55) {
digitalWrite(led1, HIGH);
}
if (volts < 0.55) {
digitalWrite(led1, LOW);
}
if (volts > 0.65) {
digitalWrite(led2, HIGH);
}
if (volts < 0.65) {
digitalWrite(led2, LOW);
}
if (volts > 0.7) {
digitalWrite(led3, HIGH);
}
if (volts < 0.7) {
digitalWrite(led3, LOW);
}
if (volts > 0.8) {
digitalWrite(led4, HIGH);
}
if (volts < 0.8) {
digitalWrite(led4, LOW);
}
if (volts > 0.9) {
digitalWrite(led5, HIGH);
}
if (volts < 0.9) {
digitalWrite(led5, LOW);
}
}
プログラムの説明をしていきます。
まず、const int led1 = 8
などによりLEDのピン番号を定義します。
constというのは、変数の値を変更せず定数として宣言する際に使う修飾子です。
LEDのピン番号は変更しないので定数としてしまいます。
次にsetup()内ではpinMode(8, OUTPUT)
などにより先ほど定義したLEDのピンを出力にし、Serial.begin(9600)
でシリアル通信を開始しています。
次にloop()内を見ていきます。
まず、sound = analogRead(0)
により、A0ピンから電圧の値を読み取ります。アナログピンで読み取った電圧は0~5[v]を0~1023の値に変換されてます。
先ほど述べた通り、今回の場合、無音の時のA0ピンに入力される電圧は1.65[v]なので値としては
sound = (1.65 * 1024) / 5 = 337.92 ≒ 338
となっています。
すごくわかりにくいので、これを0~1で表すために
volts = (sound * 5.0/3.3) / 1024 ;
という計算式を書きます。
これでvoltsは0~1の範囲で表され、無音の時は0.5、音量最大の時は1が値として読み取られます。
最後に読み取った値(音量)によってLEDを光らせる個数を変えるようにif文を使って条件分岐をしています。
LEDの点灯についてはこちらの記事を参考にしてください
このコードを書き込んで、スマホなどから音楽を流し、近づけたり遠ざけたりするとLEDの光る個数が変わると思います。
製作過程を動画にしたのでぜひご覧ください。
まとめ
今回はマイクモジュールを使って音量を測定することができました。。
マイクモジュールによってひろった音を録音したりすることもできるそうです。
スマホなんかも作れたりするんでしょうか…
今回はこれで終わります。
ではまた!