サウンドレベルメータ
概要
ボリュームを回転させると回転量に応じた数のLEDが点灯。また、マイクにより周囲の音量に応じた数のLEDを点灯させることが出来ます。
使用するリーフ
以下のリーフを使用します
Type | Name | Q’ty |
---|---|---|
AZ62 | Connector Cover | 2 |
AI03 | MIC&VR&LED | 1 |
AX07 | Back to back | 1 |
AP02 | ESP32 MCU | 1 |
AV04 | 2V~4.5V | 1 |
AZ63 | Nut Plate | 2 |
AAA battery holder | 1 | |
AAA battery | 3 | |
M2*8mm screw | 2 | |
M2*12mm screw | 2 | |
φ10x2mm magnet | 1 |
リーフの組み立て
下図のようにリーフを組み立てましょう。
ソースコード
Arduino IDEで下記のプログラムを書きましょう。
//=====================================================================
// ESP32 Sound level meter
//
// (c) 2021 LEAFONY SYSTEMS Co., Ltd
// Released under the MIT license
// https://opensource.org/licenses/MIT
//
// Rev.00 2021/04/01 First release
//=====================================================================
// LED4-6:VR level display
// LED1-3:MIC sound pressure level display
#define LED1 14 // D6 IO14
#define LED2 15 // D7 IO15
#define LED3 17 // D8 IO17
#define LED4 16 // D9 IO16
#define LED5 5 // D10 IO5
#define LED6 23 // D11 IO23
#define MIC 26 // A2 IO26
#define VR 39 // A3 IO39
unsigned int dataVR;
unsigned int dataMic;
//-----------------------------------------------
// Get VR and MIC data
//-----------------------------------------------
void getSensorData(){
dataVR = analogRead(VR);
dataMic = analogRead(MIC);
Serial.println("---------------------");
Serial.print("MIC = ");
Serial.println(dataMic,DEC);
Serial.print("VR = ");
Serial.println(dataVR,DEC);
}
//-----------------------------------------------
// Turn the LEDs on and off according to the VR and MIC values.
//-----------------------------------------------
void dispSensorData(){
if (dataVR < 1500){
digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,LOW);
}
else if (dataVR >= 1500 && dataVR < 2600){
digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,HIGH);
}
else if (dataVR >= 2600 && dataVR < 3600){
digitalWrite(LED4,LOW);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
}
else{
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
}
if (dataMic < 400){
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
}
else if (dataMic >= 400 && dataMic < 600){
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,HIGH);
}
else if (dataMic >= 600 && dataMic < 950){
digitalWrite(LED1,LOW);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
}
else{
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
}
}
void setup(){
Serial.begin(115200);
Serial.println("start!!");
pinMode(LED1, OUTPUT);
digitalWrite(LED1, LOW);
pinMode(LED2, OUTPUT);
digitalWrite(LED2, LOW);
pinMode(LED3, OUTPUT);
digitalWrite(LED3, LOW);
pinMode(LED4, OUTPUT);
digitalWrite(LED4, LOW);
pinMode(LED5, OUTPUT);
digitalWrite(LED5, LOW);
pinMode(LED6, OUTPUT);
digitalWrite(LED6, LOW);
pinMode(MIC, INPUT);
pinMode(VR, INPUT);
// Startup test(LED)
digitalWrite(LED1,HIGH);
delay(200);
digitalWrite(LED2,HIGH);
delay(200);
digitalWrite(LED3,HIGH);
delay(200);
digitalWrite(LED4,HIGH);
delay(200);
digitalWrite(LED5,HIGH);
delay(200);
digitalWrite(LED6,HIGH);
delay(200);
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,LOW);
delay(200);
}
void loop() {
getSensorData();
dispSensorData();
delay(100);
}
実行結果
ボリュームを回転させると回転量に応じた数のLEDが点灯します。マイクにより周囲の音量に応じた数のLEDが点灯します。
最終更新 June 30, 2021