Medidor de sonido ( DB, ADC, DBM, V )

Hola, como estan gente de la comunidad espero que bien :slight_smile:

Hace poco consegui un arduino y empeze un pequeño proyecto :slight_smile:

El cual es un medidor de sonido pero necesito convertir los valores que me da en decibelios, logre convertirlos pero el maximo que me tira es hasta 3 quisiera saber si mi codigo esta correcto.

O si ya es algo del mismo microfono muchas gracias de antemano :slight_smile:

// VARIABLES DE TEXTO //

String analogvoltaje;

String Lectura_voltaje;

String analogdbm;

String Lectura_decibeliosmiliwatts;

String analogdc;

String Lectura_adc;

String Lectura_decibelios;

String analogdb;

// VARIABLES DE TEXTO //

// VARIABLES DE NUMERO //


float voltaje;

int dbm = 0 ;

int valor; 

float db;

// VARIABLES DE NUMERO //


void setup(){

  Serial.begin(9600);
  pinMode(A5,INPUT);   
  
}

void loop(){


  valor = analogRead(A5);  // lee valor de entrada analogica
  delay(500);

 Lectura_adc = (" La cantidad de ADC generada es ");
 
 Lectura_voltaje = (" La cantidad de Voltaje generada es ");
 
 Lectura_decibeliosmiliwatts = (" La cantidad de DBM generada es " );
 
 Lectura_decibelios = (" La cantidad de DB generada es  " );

 voltaje = valor * (5.0 / 1024.0);
 dbm = 40*valor-40;
 db = log(20) * ( voltaje / 5.0 ) ;
 
 


 
 analogdc  = Lectura_adc + valor; 
 analogvoltaje = Lectura_voltaje + voltaje;
 analogdbm = Lectura_decibeliosmiliwatts + dbm;
 analogdb = Lectura_decibelios + db;

  Serial.println( analogdb );
  
  // Serial.println( analogdc);
 
  // Serial.println(resultado);

  // Serial.println(lola ); 
 
}

La fórmula correcta para el cálculo de dB es

dB = 20 Log(V2/V1)

Tu fórmula sería

dB = Log(20) * (V2/V1)

No me parece que sea correcta.

dBm se relaciona con potencia (mW), no veo esa relación en la fórmula que has puesto para el cálculo.

Ayudaría que pases los links de donde tomaste las fórmulas para los cálculos.

Otra cosa que no queda claro es por qué tomaste 5V como voltaje de entrada (V1 en la fórmula).

Saludos

Hola si la formula la habia implementado mal ya que dice q no coloque bien log

Nivel_de_sonido_V2:60:10: error: expected ';' before 'log'
  db = 20 log(5.0/voltaje)
          ^~~
exit status 1
expected ';' before 'log'

db = 20 log(5.0/voltaje)

al poner log me da error

coloca el ; al final y te falta el * antes de log como te dice. Usa google translate al menos si no entiendes inglés te orienta muy bien.

db = 20 * log(5.0/voltaje);

Lo que @gatul te puso es la fórmula literal.

Para la próxma mira esta explicación breve de lo que dice el error a ver si te sirve para interpretarlo por tu cuenta:

Nivel_de_sonido_V2:60:10: error: expected ';' before 'log'
  db = 20 log(5.0/voltaje)
          ^~~
exit status 1
expected ';' before 'log'

Tu programa se llama Nivel_de_sonido_V2.ino y por eso comienza de ese modo
Luego dice en la línea 60:10 60 es la línea y la columna del error es 10
Mira como te posiciona!!

error: expected ';' before 'log'

error no requiere traducción
exprected ";" before 'log'
se espera ';' antes de 'log'

Este si que es un mensaje algo cotradictorio pero desde el punto de vista del compilador esta bien.
Ahi dice.. veo un espacio entre 20 y log, entonces falta un ';' indicando fin de la instrucción.
El compilador no sabe que eso es una fórmula y luego sigue con otras cosas e interpretaciones comenzando por esta.
Asi que si apuntas a este lugar observas que te falta un operador matemático que es justamente el por '*' y que al final falta el ';' que termina la fórmula.

Espero te haya servido.

1 Like