Capteur de bruit [valeurs]

Bonjour, alors voilà mon problème.
J'ai branché un capteur de bruit (Détecteur de bruit Grove 101020023 Seeed Studio - Capteurs de lumière et bruit | GO TRONIC) sur mon shield grove lui même branché sur ma carte arduino. Puis une LED reliée avec deux fils qui s'allume à la détection du son et s'éteint quand celui ci n'est plus détecté.
Le code est le suivant:

int led = 2;
int threshold = 300; //Change This
int volume;

void setup() {                
  Serial.begin(9600); // For debugging
  pinMode(led, OUTPUT);     
}

void loop ()
{
  int val = digitalRead(A0);
  if (val == HIGH) 
  {
    digitalWrite (led, HIGH);
   Serial.println(val);
  }
  else
  {
    digitalWrite (led, LOW);
  }
}

Ma question porte sur la ligne:

int threshold = 300;

J'ai remarqué que si on change cette valeur la LED est + ou - sensible au bruit alentours.
Seulement je ne sais pas à quoi cette valeur correspond, avez-vous une idée ?
Est-ce que je peux rattacher cette valeur/grandeur à des décibels, car il me faut une valeur en décibels au final.

Merci d'avance.

Bonjour,

C'est le seuil de détection. Par contre il n'est pas utilisé dans ton programme et le capteur semble fonctionner en tout ou rien.
Ca ne devrait donc pas changer la sensibilité.

Effectivement, mais comment pourrai-je l'utiliser (le threshold) dans mon programme pour que la LED s'allume en dépassant un certain niveau sonore et s'éteigne en dessous ?

Tu as un exemple dans la fiche technique ici

Ce code ne fonctionne pas

Qu'est ce qui ne fonctionne pas?

je n'arrive pas a faire ca
Détection du bruit !
Pour un clap des mains une led rouge s’éclaire ;
Pour 2 claps la led rouge reste éclairée et une led verte s’allume en plus ;
Pour 3 claps led rouge et verte allumées plus une led bleue ;
Pour 4 clap tout s’éteint.

aide aide

mon code :

int led = 2;
int threshold = 300; //Change This
int volume;

void setup() {
Serial.begin(9600); // For debugging
pinMode(led, OUTPUT);
}

void loop ()
{
int val = digitalRead(A0);
if (val == HIGH)
{
digitalWrite (led, HIGH);
Serial.println(val);
}
else
{
digitalWrite (led, LOW);
}
}

Bonjour,

Je viens de regarder la datasheet de ton composant et il me semble d'une part que il sort une sortie analogue.

Donc pourquoi utilises-tu un digitalRead() ? Il te faut utiliser une analogRead() et c'est la que ton threshold est utile mais dans ton cas tu utilises ton capteur n'importe comment. Cependant ayant déjà utilisé ce genre de capteur je peux te dire qu'il en existe où tu peux régler le treshold grâce à un potentiomètre présent sur le composant. Il réagit donc en tout ou rien dans ce cas présent.

Deuxième ce genre de capteur détecte seulement des variations et ne prends rien en mémoire comme dans l'exemple que tu souhaiterais réaliser.

Ce que tu peux faire c'est réaliser une tempo de 10 secondes par exemple et détecter combien de fois ton seuil est franchis.

Si tu as besoin de renseignements, contact moi.

cordialement,

Henri