// #include <math.h>
const int micPin = 34; // Pino analógico do microfone (somente ADC1 funciona com analogRead no ESP32)
const float vref = 3.3; // Referência de tensão do ADC (3.3V típico no ESP32)
float dbOffset = 50.0; // Offset para calibrar o nível de silêncio (ajustar após testes)
// Função de interpretação de dB
void interpretarDB(float db) {
if (db < 40) {
Serial.println("Ambiente silencioso");
} else if (db >= 40 && db < 70) {
Serial.println("Conversa normal");
} else {
Serial.println("Ambiente ruidoso");
}
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("Iniciando Decibelímetro ");
}
void loop() {
const int amostras = 100;
float soma = 0;
// Coleta várias amostras para média e redução de ruído
for (int i = 0; i < amostras; i++) {
int valorBruto = analogRead(micPin); // Lê valor ADC (0-4095)
float tensao = (valorBruto / 4095.0) * vref; // Converte para tensão
soma += tensao;
delay(1);
}
float tensaoMedia = soma / amostras;
// Calcula o valor em dB (logarítmico) com offset
float db = 20 * log10(tensaoMedia) + dbOffset;
// Exibe resultados
Serial.print("Nivel de Ruido: ");
Serial.print(db, 1);
Serial.println(" dB");
interpretarDB(db);
delay(500); // Aguarda meio segundo antes da próxima leitura
}