Recientemente he empezado a utilizar Arduino...
Quiero hacer que cada vez que se oiga un cierto sonido se encienda la led y se apague. Pero como soy un novato, solo puedo hacer que se abra el led xD. Por aquí os dejo la programación que tengo por ahora. Si me pudieras ayudar os lo agradeceria.
Gracias de antemano.
int rango = 600;
int volumen;
void setup() {
pinMode(13, OUTPUT);
// put your setup code here, to run once:
}
void loop() {
volumen = analogRead(A0);
if (volumen < 100)
{
digitalWrite (13, HIGH);
}
else
{
digitalWrite(13,LOW);
}
// put your main code here, to run repeatedly:
}
El código está correcto, solo que habría que mantener cierto nivel de ruido para mantener el LED encendido.
Para retrasar el apagado, la respuesta es obvia: un delay después de digitalWrite (13, HIGH).
Para que se active con "cierto sonido", tendrás que primero visualizarlo en forma de onda (ya sea con osciloscopio, o grabándolo y luego reproducirlo con programas como Audacity).
La idea de esto, es encontrar algún patrón que haga ese sonido distinguible de los demás. Y con esa distinción, programar al Arduino para que lo reconozca.
Pero creo que no me había acabado de explicar del todo bien, perdón por las molestias.
Me refería a que principalmente el led estaría apagado y al obtener un volumen alto, quedaría encendido todo el rato, hasta que otra vez el sensor detecte un volumen y así mismo se apague. Me pregunto si habrá alguna manera de indicar si el pin esta encendido o apagado par añadirlo en la condicional.
Por cierto la idea del Audacity es buena, gracias!
int rango = 600; // No se usa?
int volumen;
boolean estado = LOW;
void setup() {
pinMode(13, OUTPUT);
// put your setup code here, to run once:
}
void loop() {
volumen = analogRead(A0);
if (volumen >= 100)
{
estado = !estado;
digitalWrite (13, estado);
}
// put your main code here, to run repeatedly:
}
Mientras volumen >= 100, el estado del LED seguirá cambiando. Si lo quieres solventar, coloca el delay antes propuesto.
Hola
Gracias por el ultimo aporte, pero sigue sin funcionar.
He intentado hacer esto:
int volumen;
int control=0;
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop() {
volumen = analogRead(A0);
if ((volumen < 50)&&(control==0));
{
digitalWrite(13,HIGH);
Serial.println("Encendido");
control=1;
}
if ((volumen < 50)&&(control==1));
{
digitalWrite(13,LOW);
Serial.println("Apagado");
control=0;
}
// put your main code here, to run repeatedly:
}
Es como si se encendiera y apagara muy rapido por lo que veo en el monitor serial... Pero bueno nose
int volumen;
boolean estado = LOW;
void setup() {
pinMode(13, OUTPUT);
// put your setup code here, to run once:
}
void loop() {
volumen = analogRead(A0);
if (volumen >= 100)
{
estado = !estado;
digitalWrite (13, estado);
delay(250); // Retrasa el cambio de estado
}
// put your main code here, to run repeatedly:
}
Le he agregado esta línea:
delay(250); // Retrasa el cambio de estado
Es el delay del que te hablaba. Pruébalo a ver si el retraso es suficiente.
Y recibiendo el sonido? Recuerda que ahí los valores van a oscilar, entonces quiero una muestra de lo que aparece (no todo si los valores enviados son demasiados).
Ese sensor tiene una salida digital, de modo que de nada sirve que uses un pin analógico.
Ahi dice OUT no Vout.
Mucha gente ha sido engañada con ese módulo.
Hace un mes creo que hubo un buen debate con alternativas propuestos por varios (yo incluí algunas) para hacer algo que realmente funcione.
Tu sensor solo dice 5V 0V y tu canal analogica lee lo mejor que puede por eso ves 1023 o sea 5V
El umbral no lo fija tu programa sino el potenciometro que tienes, o acaso si varias el potenciometro con el mismo sonido no cambia la salida?
Usa esa salida para detectar el umbral que quieres pero eso es lo que puedes hacer y nada mas.
Para cambiarlo necesitas otro circuito. Busca temas similares en el foro. Search arriba a la derecha.
De momento he conseguido que en un principio el led estuviera apagado, cuando detecta un sonido fuerte se encienda y se vuelva a apagar...
Ahora lo he conectado de otra manera:
Y lo he programado así:
int volumen;
void setup() {
// put your setup code here, to run once:
pinMode(13,OUTPUT);
Serial.begin(19200);
pinMode(7,INPUT);
}
void loop()
{
volumen = digitalRead(7);
Serial.println(volumen);
if (volumen==1)
{
digitalWrite(13,LOW);
delay(250);
}
if (volumen==0)
{
digitalWrite(13,HIGH);
delay(250);
}
// put your main code here, to run repeatedly:
}
La imagen no está posteada como dicen las normas. Debe poder visualizarse usando el tag de imágenes junto al eslabón. Aprovecha el enlace que te da el adjunto y úsalo cuando el tag de imagen te lo pida. Lo optienes con botón derecho del mouse encima del archivo adjunto. Edita el post donde pusiste la foto, no lo hagas en un nuevo post.