Magazine

20.- Detector de sonido

Publicado el 07 diciembre 2013 por Practicandoarduino @PracticaArduino

Nuevo tutorial en Practicando Arduino, vamos a crear un detector de sonidos usando un pequeño módulo con un micrófono, la verdad no estoy muy contento con su rendimiento (o no se sacarselo), ya que para que recoja bien el sonido de mi móvil por ejemplo, tengo que ponerselo pegado si no a penas recoge nada, he visto algún video en el que si que recoge sonidos estando más separado por lo que también puede que el mío esté defectuoso, el caso es que pegándolo da resultado que es lo que nos interesa, que se vea un resultado.

Sonido

Vamos al lío, yo uso el módulo para recoger el valor del sonido (entre 0 y 1023) por una entrada analógica, y dependiendo del valor enciende 1, 2 ó 3 LEDs.

Necesitamos:

1 Placa Arduino Uno
1 Protoboard
3 Resistencia de 220Ω
1 sensor detector de sonido con micrófono
3 LEDs
Cables para realizar las conexiones

Primero conectamos los pins GND y 5V a la protoboard, luego conectamos el sensor, éste tiene 4 pins, uno digital (no lo usamos), uno analógico, que conectamos al pin A0, uno para tierra que va a GND y otro para la corriente que va a 5V de la protoboard.
Ahora conectamos las 3 resistencias a tierra, los cátodos de los LEDs a ellas y los ánodos a los pines 7, 8 y 9 digitales.
Quedando así:

detectorsonidos_bb

 

Código fuente:

int valor, valorMax=0;
int umbral1=800;
int umbral2=900;
int umbral3=1000;
 
void setup(){
 Serial.begin(9600);
 pinMode (7, OUTPUT); 
 pinMode (8, OUTPUT);
 pinMode (9, OUTPUT);
 pinMode (A0, INPUT);
}
 
void loop(){
  valor=analogRead(A0);
  if (valor>valorMax)
    valorMax=valor;
    String cadena= "-";
  Serial.println(valor + cadena + valorMax);
  if (valor>umbral3){
   digitalWrite (7, HIGH);
   delay(15);
   digitalWrite (8, HIGH);
   delay(15);
   digitalWrite (9, HIGH);
   delay(15);
   digitalWrite (9, LOW);
   delay(15);
   digitalWrite (8, LOW);
   delay(15);
   digitalWrite (7, LOW);
  }else if (valor>umbral2){
   digitalWrite (7, HIGH);
   delay(15);
   digitalWrite (8, HIGH);
   delay(15);
   digitalWrite (8, LOW);
   delay(15);
   digitalWrite (7, LOW);
  }else if (valor>umbral1){
   digitalWrite (7, HIGH);
   delay(15);
   digitalWrite (7, LOW);
  }
}

El código no es complicado, simplemente tenemos dos variables para guardar el valor leído por la entrada analógica, y 3 vara marcar los umbrales a partir de los cuales queremos iluminar los LEDs.
En el void setup() abrimos la comunicación serie y configuramos los pines tanto de entrada como de salida.
En el void loop() leemos la entrada analógica, de donde recogemos el valor que envía el sensor y lo comparamos con el máximo, si el recogido es mayor lo guardamos y acto seguido comparamos el valor recogido con los umbrales, y dependiendo de como sea encendemos 1, 2 ó 3 LEDs.



style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-3868159888315364"
data-ad-slot="7639712738">


También podría interesarte :

Volver a la Portada de Logo Paperblog

Quizás te interesen los siguientes artículos :