使用带有 arduino 的 "big sound" 模块创建分贝计
Using a "big sound" module with arduino to create a decibel meter
我正在尝试创建一个声级计来测量房间中的分贝,我目前正在使用 nodemcu 12e,因为我想将这些测量值插入 mySQL 服务器和 "big sound module"(https://tkkrlab.nl/wiki/Arduino_KY-038_Microphone_sound_sensor_module)。
到目前为止我唯一取得的成就是获取传感器的原始值,因为它们似乎没有改变,尽管我试图通过转动麦克风中的螺丝来调整增益,但没有结果,因为即使在播放嘈杂的音乐时它似乎也保持相同的值。
它似乎对巨大的噪音做出反应,拍手会使输出尖峰 - 允许我控制点亮连接的 LED:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "yourssid";
const char* password = "yourpass";
ESP8266WebServer server(80);
const int led = 13;
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = D7; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup(void){
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
});
//SETUP SOUND SENSOR
pinMode (ledPin, OUTPUT);
}
void loop(void){
sensorValue = analogRead (sensorPin);
Serial.println (sensorValue);//, DEC);
if (sensorValue > 100){
digitalWrite (ledPin, HIGH);
delay (1000);
digitalWrite (ledPin, LOW);
}
}
我正在读取传感器的模拟值,我试图获得尽可能低的值,正如我在尝试校准麦克风时看到的那样。我不断得到的值在 19 到 20 之间:
如您所见,拍手时我得到了一个峰值。
问题在于,当播放嘈杂的音乐时,这些值根本不会改变,只有在检测到很大的噪音(如拍手)时才会获得不同的值。我如何更改代码或系统以获得以分贝为单位的值?
您可能不会得到这个运行这个麦克风模块。
模块充当开关。开关阀值由麦克风模块板载电位器设置。
您需要的是一个低电平放大麦克风。然后你会得到一个从 0(无噪音)到 1023(大噪音)的输入范围。然后可以将该值映射到分贝。但同样 - 不是这个模块。
问候
哈利
要通过模拟 0 输入读取音频信号流,您需要一块具有模拟输出的电路板。您正在使用的电路板有一个数字输出,只要它的阈值超过您在电位器上设置的限制(是的,您移动的电位器只是设置麦克风输出数字脉冲时的限制),它就会输出一个信号。
所以你应该购买另一个麦克风 this one。
你有的那个只告诉你有没有声音
我正在尝试创建一个声级计来测量房间中的分贝,我目前正在使用 nodemcu 12e,因为我想将这些测量值插入 mySQL 服务器和 "big sound module"(https://tkkrlab.nl/wiki/Arduino_KY-038_Microphone_sound_sensor_module)。
到目前为止我唯一取得的成就是获取传感器的原始值,因为它们似乎没有改变,尽管我试图通过转动麦克风中的螺丝来调整增益,但没有结果,因为即使在播放嘈杂的音乐时它似乎也保持相同的值。
它似乎对巨大的噪音做出反应,拍手会使输出尖峰 - 允许我控制点亮连接的 LED:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "yourssid";
const char* password = "yourpass";
ESP8266WebServer server(80);
const int led = 13;
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = D7; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup(void){
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
});
//SETUP SOUND SENSOR
pinMode (ledPin, OUTPUT);
}
void loop(void){
sensorValue = analogRead (sensorPin);
Serial.println (sensorValue);//, DEC);
if (sensorValue > 100){
digitalWrite (ledPin, HIGH);
delay (1000);
digitalWrite (ledPin, LOW);
}
}
我正在读取传感器的模拟值,我试图获得尽可能低的值,正如我在尝试校准麦克风时看到的那样。我不断得到的值在 19 到 20 之间:
如您所见,拍手时我得到了一个峰值。
问题在于,当播放嘈杂的音乐时,这些值根本不会改变,只有在检测到很大的噪音(如拍手)时才会获得不同的值。我如何更改代码或系统以获得以分贝为单位的值?
您可能不会得到这个运行这个麦克风模块。
模块充当开关。开关阀值由麦克风模块板载电位器设置。
您需要的是一个低电平放大麦克风。然后你会得到一个从 0(无噪音)到 1023(大噪音)的输入范围。然后可以将该值映射到分贝。但同样 - 不是这个模块。
问候 哈利
要通过模拟 0 输入读取音频信号流,您需要一块具有模拟输出的电路板。您正在使用的电路板有一个数字输出,只要它的阈值超过您在电位器上设置的限制(是的,您移动的电位器只是设置麦克风输出数字脉冲时的限制),它就会输出一个信号。
所以你应该购买另一个麦克风 this one。
你有的那个只告诉你有没有声音