Sensor de sonido y led

Hola a todos!

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:

}

Por favor, lee las Normas del Foro, sobretodo la parte relativa al pegado de código y reedita tu mensaje.
Gracias!

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.

Hola, muchas gracias!

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!

Mira esto:

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

Entonces volvemos a mi código propuesto:

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.

Ahora lo que pasa es que parpadea continuamente

Parpadea constantemente? Parece que el umbral establecido es muy bajo aún sin ruido aparente.

Prueba este código; y sin recibir sonido alguno, muéstrame qué dice en el monitor serie.

void setup() {
  Serial.begin(9600); 

  }

void loop() {
  Serial.println(analogRead(A0));
  delay(500);

}

Me sale todo el rato 20

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).

Perdon no se porque antes en silencio me salió 20... Pero ahora sale 1023... Supongo que deberia estar tocando algo y hacia ruido o nose...

Con ruido;

1023
1023
1023
20
1023
1023
119
1023
1023
20
1023
1023
20
20
20
1023
1023
20
20
20
1023
1022
115
20
20
10

Veo que no es un problema de software, sino de hardware.

Ahora dime: qué estás utilizando y cómo está conectado todo?
Postea imágenes (según las reglas) de ser posible.

Utilizo el arduino uno.
Este es el sensor que utilizo.


Y esta conectado asi:

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

Y entonces como lo conecto?

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.

Vale!! Pues muchas gracias!!

Hola!

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.