Système anti intruson avec PIR et buzzer

Bonjour a tous. Je suis étudiant a la faculté polytechnique Lubumbashi, en RDC,
Je travaille actuellement sur un projet qui consiste à réaliser un système anti intrusion a l'aide de 5 capteurs PIR et d'un buzzer.

J'ai écrit un code, qui m'a semblé correcte, J'ai également réalisé le montage (voir les pièces jointes) mais le système ne fonctionne pas correctement: le buzzer se met a sonner alors qu'il n'y a pas eu détection.

Alors, si qlq1 pouvait m'aider a vérifier le code et/ou le montage et me proposer des corrections ou d'autres pistes, cela me serait d'une grande aide....Merci d'avance

PIR_final_FORUM.ino (1.52 KB)

Bonjour
Normalement ton code ne compile pas car il comporte des erreurs :

int PIR_1 = 4;                 //
int PIR_2 = 6;
int PIR_3 = 11;
int PIR_4 = 12;
int PIR_5 = 13;
int buzzer = 13;
int intrusion1 = LOW;         //
int intrusion2 = LOW;
int intrusion3 = LOW;
int intrusion4 = LOW;
int intrusion5 = LOW;

void setup()     // put your setup code here, to run once:
{
  pinMode (PIR_1, INPUT);       // declaration du PIR_1 comme etant une ENTREE
  pinMode (PIR_2, INPUT);       // idem
  pinMode (PIR_3, INPUT);       // idem
  pinMode (PIR_4, INPUT);       // iedm
  pinMode (PIR_5, INPUT);       // idem
  pinMode (buzzer, OUTPUT);      // declaration du buzzer comme etant une SORTIE
  Serial.begin (9600);
}

void loop()       // put your main code here, to run repeatedly:
{
  intrusion1 = digitalRead (PIR_1);       // prends l'information qu'apporte le PIR_1
  intrusion2 = digitalRead (PIR_2);       // prends l'information qu'apporte le PIR_2
  intrusion3 = digitalRead (PIR_3);       // prends l'information qu'apporte le PIR_3
  intrusion4 = digitalRead (PIR_4);       // prends l'information qu'apporte le PIR_4
  intrusion5 = digitalRead (PIR_5);       // prends l'information qu'apporte le PIR_5

  if (intrusion1 == HIGH)
  {
    digitalWrite(buzzer, HIGH); // envoie l'information a la sortie (fais _sonner_ le buzzer)
    digitalWrite(buzzer, LOW);
  }
  else if (intrusion2 == HIGH)
  {
    delay (30000);
    digitalWrite(sirene, HIGH);  <-- "sirene" à la place de "buzzer"
  }
  else if (intrusion3 == HIGH)
  {
    digitalWrite(sirene, HIGH);  <-- "sirene" à la place de "buzzer"
  }
  else if (intrusion4 == HIGH)
  {
    digitalWrite(sirene, HIGH);  <-- "sirene" à la place de "buzzer"
  }
  else if (intrusion5 == HIGH) 
  {
    digitalWrite(sirene, HIGH);  <-- "sirene" à la place de "buzzer"
  }

}
} <-- accolade en trop

Si tu corriges ça, ça va compiler.

Ensuite, il faut bien décider de ce que tu veux que ton code fasse : pour l'instant, tu as priorisé l'ordre de détection de tes capteurs. Une intrusion en 2 ne sera pas détecté s'il y a déjà une intrusion en 1 (etc).

De plus, ta manière de faire sonner est incorrecte :

    digitalWrite(buzzer, HIGH); // envoie l'information a la sortie (fais _sonner_ le buzzer)
    digitalWrite(buzzer, LOW);

Tu allumes le buzzer et tu l'éteins dans la foulée : il n'a pas le temps de faire du bruit. Il faut ajouter un delay entre les deux. Ou tu utilises la fonction tone, plus appropriée.

Enfin, lorsque ton code fonctionnera comme tu le veux, tu pourras l'optimiser en utilisant des tableaux et une boucle 'for' pour lire les capteurs et faire des sons différents selon le capteur qui détecte.