Problème avec des capteurs pir

Bonjour,
Je souhaiterais faire un système d’alarme chez moi. J’ai pour cela acheter des capteurs PIR (les plus basiques à 3 broches qu’on retrouve sur la pluspart des tutos etc… )

J’ai donc écrit ce code:

/*
 * PIR sensor tester
 */
 
int inputPin[5] = {2,3,4,5,6};               // choose the input pin (for PIR sensor)
int pirState[5] = {LOW, LOW, LOW, LOW, LOW};             // we start, assuming no motion detected
int val[5] = {0,0,0,0,0};                    // variable for reading the pin status


void setup() {
  for(int i; i < 5; i++){
    pinMode(inputPin[i], INPUT);     // declare sensor as input
  }
  Serial.begin(9600);
}
 
void loop(){
  for (int i = 0; i < 5; i++){
      val[i] = digitalRead(inputPin[i]);  // read input value
      if (val[i] == HIGH) {            // check if the input is HIGH
        if (pirState[i] == LOW) {
          // we have just turned on
          Serial.print("1");
          Serial.print("/");
          Serial.print(i);
          Serial.println();
          pirState[i] = HIGH;
        }
      } else {
        if (pirState[i] == HIGH){
          // we have just turned of
          Serial.print("0");
          Serial.print("/");
          Serial.print(i);
          Serial.println();
          // We only want to print on the output change, not state
          pirState[i] = LOW;
        }
      }
  }
}

j’ai cependant un problème les données arrivent en boucle rien n’est stable je passe de 1/1 à 1/0 en moins d’une seconde…

Je souhaite controler le tout via nodeJs par la suite le reste est prêt et ça fait du coup des choses étranges …

Si vous pouviez m’aider ce serait cool :slight_smile:
j’espère que c’est moi (et mon code tordu ) et pas les capteurs !! :slight_smile:

Merci d’avance! :slight_smile:
un petit coup de pouce serait bienvenue!

Bonjour,

A part le fait que ton programme est un poil compliqué, je pense qu'il fonctionne correctement. Donc ça doit venir des capteurs.

Les capteurs en question ne sortiraient pas en collecteur ouvert par hasard?

Non en principe les modèle PIR usuels (au sens eBay) ne sortent pas à collecteur ouvert.

Pas de résistance de tirage à prévoir, juste brancher la sortie du capteur sur une entrée arduino.
La tension passe à 5V en cas de détection de présence, et il y a deux potars côté PIR.
Un pour régler la sensibilité, l’autre pour régler le délai de retour à 0V après dernière détection.

Dans ton programme, tu mélanges la partie acquisition et traitement des données.
Il vaudrait mieux les séparer.

Un truc du genre :

void loop(){

//acquisition
  for (int i = 0; i < 5; i++){
      val[i] = digitalRead(inputPin[i]);  // read input value
  }

//traitement
   for (int i = 0; i < 5; i++){
     if (val[i] != pirState[i]) {            // check if the input is HIGH
       Serial.print(val[i]);
       Serial.print("/");
       Serial.print(i);
       Serial.println();
       pirState[i] = val[i];
     }
   }
}

Après, tu pourras toujours ajouter une gestion de délais dans ta partie traitement

bloudman:
j'ai cependant un problème les données arrivent en boucle rien n'est stable je passe de 1/1 à 1/0 en moins d'une seconde...

bonjour
SI ce sont des HC-SR501 (les plus courants) il faut aussi faire attention au delay d'armement (pot Time delay)
et au type de sortie (simple/repetée)
certains modules n'ont pas de cavalier mais un strap sur le PCB (à couper si besoin)

Quelle est la longueur de cable entre l'arduino et les capteurs ?