2016-07-23 33 views
3

我想创建一个声音计量器来测量房间中的分贝,我目前使用nodemcu 12e,因为我想将这些措施插入一行在一个mySQL服务器和一个“大声音模块”(https://tkkrlab.nl/wiki/Arduino_KY-038_Microphone_sound_sensor_module)中。使用“大声音”模块与arduino创建一个分贝计

Sound detection schematics

到目前为止,我已经实现的唯一的事情是让传感器的原始价值,因为他们似乎没有改变,虽然我试图调节增益的麦克风转动螺杆,没有结果,因为即使在播放嘈杂的音乐时,它仍然保持相同的值。

这似乎大声喧哗反应,拍手使输出秒杀了 - 让我来控制照明了连接的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之间:

Obtained values正如你所看到的,在鼓掌,我得到的价值激增。

问题是,当嘈杂的音乐播放时,数值根本不会改变,只有当它检测到巨大的噪音(如鼓掌)时才会得到不同的值。我如何更改代码或系统以获取分贝值?

回答

1

您可能无法使用此麦克风模块执行此操作。

该模块充当开关。开关门限由话筒模块板上的电位器设定。

您需要的是低级扬声器。然后你会得到一个从0(无噪声)到1023(巨大噪声)的输入范围。这个值然后可以被映射到分贝。但是,再次 - 不是这个模块。

Regards Harry