Go Down

Topic: Sensor BIG SOUND (KY-038) (Read 3513 times) previous topic - next topic

Vale09

Jun 21, 2016, 12:28 am Last Edit: Jul 28, 2016, 09:41 pm by Vale09
Hola  :)

Actualmente estoy trabajando en un proyecto un tanto sencillo, pero que no he logrado hacer funcionar correctamente  :smiley-cry:  
Tengo que desarrollar un dispositivo que capte el ruido de un salón de clases y encienda un led cuando pase un determinado limite, algo como un sensor que ayuda a alertar la contaminación auditiva en los salones :v . Logré que funcionara, pero no tiene el "alcance" que necesito. Utilice un sensor llamado Big Sound, que utiliza un microfono electrec y tiene un potenciómetro que aparentemente permite graduar y establecer algo como la sensibilidad. He probado con el potenciometro, y sigue teniendo un rango muy pequeño, tambien en el código, y he cambiado los valores, pero aún así, tengo que estar demasiado cerca para que el led encienda  :smiley-sad: .
la pregunta es la siguiente: debería cambiar el sensor? y si es así ¿por cual?, o si hay algo que pueda hacer o modificarle al que tengo? . Por favor!, tengo que realizar este proyecto lo antes posible  :smiley-sad-blue:  :smiley-cry:




Lucario448

He probado con el potenciometro, y sigue teniendo un rango muy pequeño
Cómo recibe el Arduino esa señal? Por medio de D0, o A0?
Si dices que aún en máximo la señal no se dispara, puede que vaya siendo hora de que uses el pin A0 (analogRead) para tal efecto.

Puede que el sonido que recibe el micrófono sea tan débil que no alcanza a disparar D0, pero sí sería suficiente para detectar variaciones desde A0. Basado en las mediciones de analogRead, ahí vas creando el umbral de "ruido aceptable" y "ruido dañino".

Espero que me hayas entendido... :)

efect2000

sino un pequeño amplificador con un bc548 o un operacional.

surbyte

El pin A0 es la salida de sonido disponible donde este el micrófono. 
Si quieres mejorar su funcionamiento usa un cable blindado estereofónico (Malla sera GND, un cable para A0 y otro para VCC) y lo pones en el aula. 
Compras tantos metros como los que requieras hasta donde este el arduino.
Luego en el Arduino conectas, MALLA a GND y los otros dos tal como lo conectaste al módulo. Solo son una extensión.
Ahora tendras mejor recepción. 
Pon uno de los ejemplos del IDE que maneja analogRead(A0) y lee las salidas por el monitor serie.
Cuando los chicos griten, tendras valores elevados.. supongamos por encima de 900, bueno ese será tu umbral de disparo para un timbre o una sirena.

Este es AnalogInput.ino modificado

Code: [Select]
#define UMBRAL       80           // poner el valor que se desee ahora fijado en 80%
#define RETARDO      1000         // 1000 mseg = 1 seg
const byte sensorPin   = A0;    // select the input pin for the potentiometer
const byte ledPin      = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the value from the sensor:
  sensorValue = map(analogRead(sensorPin), 0, 1023, 0, 100);
  Serial.println("Umbral de Ruido :");
  Serial.println(sensorValue);    // los valores se leeran entre 0 y 100
  delay(100);
  if (sensorValue > UMBRAL) {   // enciende el ledPin algunos segundos
     digitalWrite(ledPin, HIGH);
     // stop the program for <sensorValue> milliseconds:
     delay(RETARDO);
     // turn the ledPin off:
     digitalWrite(ledPin, LOW);
    // stop the program for for <sensorValue> milliseconds:
  }
}



UMBRAL esta en % de 0 a 100%
RETARDO esta en milisegundos ahora en 1 seg = 1000 mseg
Si pones el monitor serie , veras en todo momento que esta ocurriendo y como cambiar ese valor de umbral para que dispare tu led/sirena/bocina/buzzer cuando lo desees.

Vale09

Vale, ¡¡muchas gracias!!, estaré probando :)

Borinot1966

Hola,
Yo también he tenido problemas con este sensor. El problema no es el umbral, que se puede ajustar con el potenciómetro o por software, sino el alcance del micro: alejando unos pocos centímetros la fuente de sonido deja de percibir sonidos claramente audibles y además el rango de salida es muy pobre: una palmada o un silbido a pocos centímetros modifica la salida en 1 o 2 unidades sobre 1023 (así que mapear la salida no es demasiado útil). Alguna idea? 

surbyte

Y no leise que le sugerí usar un cable de audio para poner el micrófono junto a la fuente?
Otro método mas sofisticado es usar los RF24 en una configuración que permite comunicar audio. los hay de bajo alcance y luego los de largo alcance.

Borinot1966

Si que lo he leido. Pero si quieres monitorizar ruido ambiente procedente de mas de una fuente, el cable no parece una buena solución. En cuanto al RF24, puede que funcione, però antes quiero probar con un opamp a ver si estiro la señal del electret.

surbyte

Quote
Tengo que desarrollar un dispositivo que capte el ruido de un salón de clases y encienda un led cuando pase un determinado limite,
Yo leo que el problema de ESTE HILO es un salón de clases y detectar cuando se supera cierto nivel de ruido.

Quote
Si que lo he leido. Pero si quieres monitorizar ruido ambiente procedente de mas de una fuente, el cable no parece una buena solución.
Esta es otra pregunta y por lo tanto, merece otro hilo.


Lucario448

Si que lo he leido. Pero si quieres monitorizar ruido ambiente procedente de mas de una fuente [...] però antes quiero probar con un opamp a ver si estiro la señal del electret.
Depende del operacional, vas a necesitar 7v en la entrada de voltaje positivo (así la señal no sobrepasará los 5v, mas los alcanzará).

Cuidado al escoger la ganancia, ya que hasta el ruido producido por la misma circuitería ("ruido blanco"), podría sobre-amplificarse.

Lucario448

Esta es otra pregunta y por lo tanto, merece otro hilo.
Te doy la razón. No discutiré más del tema si no es en un nuevo hilo... :)

Borinot1966

Cuando decia lo de

Quote
monitorizar ruido ambiente procedente de mas de una fuente
me referia precisamente a una clase con alumnos. Con el ajuste de umbral quizás puedas detectar cuando hay mas ruido de fondo del permisible (aunque por el tema del alcance del micro creo que van a tener que gritar como posesos), pero si alguien grita en la primera fila y otro después en la cuarta el doble o triple de fuerte, creo que eso no se detecta bien con este sensor.
En fin, espero que Vale09 haya solucionado su problema y gracias a los demás por sus respuestas.

Borinot1966

Bueno, al final he probado como varía la señal con la distancia. A unos 10 cm, la fuente de sonido (el altavoz del móvil) es indistinguible del ruido de fondo. Dejo video

https://youtu.be/LiBmQywthwk

surbyte

Esta claro que ese módulo no funciona muy bien, porque en todo momento en el video se sigue escuchando bien la música, aún a 10 cmts de modo que cuando lo tenian cerca el módulo apenas acuasaba 100mV pp lo que me hace preguntarles? Donde han colocado la punta del osciloscopio porque la salida A0 del módulo de sonido debería y subrayo debería entregar un valor positivo. Lo que veo es un valor positivo o es un valor pico a pico.
Estaba viendo 0 a 200mV o estaba viendo -100 a 100mVpp?

En ambos casos me parece poca ganancia de dicho módulo.

Borinot1966

Se veia 0 a 200mV. También he hecho capturas conectando al digital output (da señales cuadradas 0-5V con sonidos cercanos) .Creo que la amplificación que lleva el sensor solo afecta a la salida digital y no a la analógica. Entre esto y la frecuencia de muestreo que nos da arduino, hace que sea un sensor bastante pobre. En digital, para utilizarlo como detector de palmadas (cercanas) y poco más. Con lo poco que sé, creo que es mejor utilizar directamente el electret y montar tú el circuito de amplificación.

De todas maneras, es divertido trastear con estos sensores y ver por ti mismo como van.

Go Up