En el software hay tres variables importantes: valorMicro, valorAdj y biestable. La variable entera “valorMicro” recoge el valor de la entrada analógica A0. Esta entrada tiene una resolución de 10 bits, y la tensión de referencia por defecto es de 5V; sabiendo esto, la sensibilidad de la entrada analógica es de 5v/1024, es decir, 4,9 mV, de sobra para que nuestro electret pueda disponer de un ajuste de sensibilidad extraordinario. Comparando esta variable con la variable de ajuste “valorAdj”, que recoge el valor de la entrada analógica A1, podremos establecer la sensibilidad del micrófono entre un rango muy fino para umbrales de ruido muy bajo y otro rango más grueso para umbrales de ruido mucho mayores. No es necesario usar como resistencia ajustable la que yo usé de precisión, podremos usar cualquier otra de 4K7 o 10K, por ejemplo, ya que es un resistor que establece una tensión de referencia en la entrada analógica A1. Con una palabra o una palmada podremos activar y desactivar el diodo LED.
Cambiando oportunamente el valor de la variable “biestable” entre 0 y 1 conseguimos encender y apagar el LED cuando el sonido emitido supera el umbral establecido para el micrófono.
El programa está suficientemente comentado para que pueda ser entendible por cualquier entusiasta de Arduino.
// ***************************************
// Biestable activado por la voz
// ARDUINO UNO
// por Nacho
// Cotidiana Place
// ***************************************
// Declaracinde variables
int microPin=A0;
int adjPin=A1;
int valorMicro;
int valorAdj;
int led=12; // LED, pin 12
int biestable=0;// Variable para conmutar
// Configurar
void setup()
{
pinMode(led, OUTPUT); // LED como salida
}
// Programa
void loop()
{
valorMicro=analogRead(microPin);
valorAdj=analogRead(adjPin);
// Enciende el LED ante un sonido y si la variable biestable es igal a cero
if ((valorMicro > (valorAdj + 2)) && biestable==0)
{
biestable=1; // Cambiamos valor de biestable a 1
digitalWrite(led, HIGH);
tempo();
}
// Apagar LED ante un sonido y si la variable biestable es igal a uno
else if ((valorMicro > valorAdj) && biestable==1)
{
biestable=0; // Cambiamos valor de variable a 0
digitalWrite(led, LOW);
tempo();
}
} // Fin de programa
// Subprograma de retardo
void tempo()
{
delay(600);
}
lo probare que tal estará saludos
ResponderEliminarGracias por leer este blog. Te gustará. Un saludo
EliminarNacho carnal cuales son los materiales que necesito para hacer esta programación? jaja saludos
ResponderEliminarLa verdad es que no entiendo muy bien la pregunta, los materiales son los que están representados en el esquema: UN Arduino UNO, una R de 15K, otra de 220 Ohm, una ajustable de 5K, uncondensador electrolítico de 10 microF y otro de 2,2 microF, un LED y un micro electret. Saludos
Eliminar¿no es necesario un transistor para amplificar la señal?
ResponderEliminarNo, cuando la intensidad de carga sea inferior a unos 40 mA por Pin de salida, y en total un máximo de 150 mA la suma de todas ellas, puedes conectar LEDs a través de una Resistencia limitadora. En este caso la corriente de salida en ese Pin es de unos 12 mA, corriente limitado por una resistencia de 220 Ohms, así no precisa de ningún elemento amplificador de corriente. Gracias por leer este blog. Saludos.
Eliminarmuchas gracias ya me sale : )
ResponderEliminarGracias a ti. Estupendo. Saludos
EliminarBuenos dias
ResponderEliminarMuy bueno el tema, tengo una pregunta tempo(); es una variable o que es se debe declarar como int o como que ??
Muchas gracias
Buenas tardes Ragde, gracias por leer este.
Eliminartempo(); es una llamada a una función (subrutina de retardo), que está declarada después del final del programa con void: // Subprograma de retardo
void tempo()
{
delay(600);
}
Es decir, si quieres llamar a un subprograma, función o subrutina, y que te devuelva un resultado o realice una acción, por ejemplo un retardo, se solicita con su nombre y (), tempo();
Espero que te sirva. Gracias. Un saludo
excelente programa y video. tengo una pregunta ahora quiero que se apague con dos aplausos ?
ResponderEliminarMuchas gracias, Nacho. funciona muy bien.
ResponderEliminarGracias a ti Germán por interesarte por este blog. Espero pronto ponerme de nuevo a crear alguna entrada más que pueda ser del interés de todos. Un saludo
Eliminar