[PROJET] Collier anti-aboiement très simple

Bonjour

Aujourd’hui j’ai pris 2h pour faire un collier anti aboiement pour mon chien.
J’ai essayé de faire au plus simple :
1 Arduino Nano
1 Micro electret
1 condo 1uF
1 résistance 10K
1 piezzo

La résistance alimente le micro.
Le condo est entre le micro et l’entrée A0 de l’arduino.
Le piezzo est connecté tel quel entre la sortie D2 et la masse.

Pas encore mis en boitier mais tester sur le bureau, ça semble faire ce que je lui demande, avec un minimum de composant.

Le micro renvoi une valeur proche de 90 sans aucun bruit dans la pièce.
J’additionne toute les valeurs lu sur A0 et en fait une moyenne pour détecter un “pic sonore”, cela permet que le collier ne se déclenche pas si le volume sonore autour du chien augmente (bruit de route, etc…).

Pour le piezzo, j’ai choisis les fréquences de 2700hz et 4200Hz car ce sont celles qui sont reproduites au niveau le plus élevé.

Pour la ligne de détection du pic :

if (micro >= (moyenne2 + 100))

on pourrait ajouter un potar pour régler la valeur 100 sans avoir à reprogrammer l’arduino.

Voici le code :

int freq;
int micro;
long moyenne;
long moyenne2;
int echantillons;//nombre d'échantillon pour moyenne

void setup() {
  // put your setup code here, to run once:
  pinMode(2, OUTPUT); //Piezo
  moyenne = 0;
  echantillons = 5000;
  Serial.begin(9600);

  tone(2, 1000, 100);
  delay(100);
  tone(2, 1000, 100);
  delay(100);
}

void Aboie() {
  tone(2, 2700, 200);
  delay(200);
  tone(2, 4200, 200);
  delay(200);
  tone(2, 2700, 200);
  delay(200);
  tone(2, 4200, 200);
  delay(200);
}
void loop() {
  for (int a = 1; a < echantillons; a++) {//moyenne sur 100 échantillon

    micro = analogRead(A0);
    moyenne = moyenne + micro;
    moyenne2 = moyenne / a;

    if (micro >= (moyenne2 + 100)) { //chiffre à changer en fonction du chien :D
      Aboie();
    }
  }

  moyenne = 0;
}

Un piezzo à la place du micro electret semble plus approprié, moins sensible au bruit ambiant, et facile à coller sur le boitier de manière à ce qu’il soit coller au poil du chien, sur la gorge. A tester en conditions réelles.
Petit modification du code pour l’utilisation du piezzo, le calcul est inversé, la tension descend lorsqu’un son fort est détecté :

    //if (micro >= (moyenne2 + 100)) {//ELECTRET
    if (micro <= (moyenne2 - 50)) {//PIEZZO