Capteur PIR arduino nano

Bonjour,
Je suis désespéré; j'ai fabriqué sur un PCB de prototypage un système avec un détecteur de mouvement PIR qui, dès qu'un mouvement est détecté par une carte Arduino nano, celle ci bascule un relai afin d'allumer un éclairage LED qui marche sur 13 V.
j'ai téléversé sur la carte le code suivant:

#define IR_output 2

int pin = 12;

void setup(){
  pinMode(IR_output, INPUT);
}

void loop(){
  if (digitalRead(IR_output) == HIGH){
    delay(50);
    digitalWrite(pin, LOW);
    delay(50);
    digitalWrite(pin, HIGH);
    delay(50);
    digitalWrite(pin, LOW);
    delay(50);
    digitalWrite(pin, HIGH);
    delay(50);
    digitalWrite(pin, LOW);
    delay(50);
    digitalWrite(pin, HIGH);
    delay(50);
    digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);         
  }

  else{
    
  }
}

je sais bien qu'il n'est pas bon de demander autant de changements subits à un relai mais tout marchait parfaitement. Mais après quelque jours je rebranche tout le système et plus rien ne fonctionne cependant lorsque je branche la carte j'entend le relai effectuer la séquence demandée dans le code puis plus rien alors que le code n'a pas été modifié. J'ai d'abord vérifié toutes les connections afin de m'assurer qu'elles étaient toujours stables mais rien d'alarmant. J'ai donc créé un autre code qui avait pour mission de m'afficher si un mouvement était détecté dans le moniteur série mais celui-ci ne cesse de m'informer qu'un mouvement est détecté même si je recouvre mon capteur avec mes mains.
Merci d'avoir lu mon message jusqu'ici en espérant que vous pourrez m'aider.

Salut

Première chose à faire en cas de désespoir technique - lire les recommandations listées dans « Les bonnes pratiques du Forum Francophone”

1 Like

Qu'est ce que tu veux dire par la ?

Je veux dire que si vous lisez ce post vous verrez ce qu’il faut poster - et comment - pour augmenter vos chances d’avoir une réponse.

Que dois - je faire du coup?

Bonjour

Déja ré-éditer le message initial pour publier convenablement le code (indentation , balisage...)
En l'état le code aura peu de lecteurs...

C'est fait merci j'espère que ça sera plus lisible comme cela...

et un schéma du PCB, ça pourrait être utile aussi... le code en lui même ne fait pas grand chose.

sinon un PIR a besoin de 30 secondes parfois pour se calibrer. ils ont souvent des potentiomètres pour régler la sensibilité et la durée ➜ comment sont ils calibrés ?

l'intervalle de temps est réglée au minimum et le distance de détection au maximum

vous êtes connecté sur A2 mais vous lisez D2 pour le test (par digitalRead())

#define IR_output 2
...
  if (digitalRead(IR_output) == HIGH){

au lieu de #define IR_output 2 faites const byte IR_output = A2; et votre test lira la bonne pin.

(j'ai pas regardé plus loin)

OK merci j'essaie et je reviens vers vous

Il manque une diode de roue libre sur le relais et le branchement du PIR me parait suspect (le gnd sur D12)

Autant pour moi c'est une erreur de schématisation mon capteur PIR est bien relié a la broche D2 sur mon PCB et le capteur PIR est bien branché sur le GND de l'arduino nano j'ai été trop vite en représentant les cables sur mon schéma je vous remet donc le schéma corrigé :

Si tu l'utilises ainsi cela va fonctionner une fois.
Il manque toujours la diode de roue libre sur le relais

Quel type de relais?

Une photo du montage nous permettrait de voir les composants

bonjour,
il faudrait aussi définir "pin" en sortie.

C’est un bon point :slight_smile:

Voici une photo de mon montage: les batterie ainsi que l'éclairage LED sont branchés dans les connecteurs bleus en haut du PCB et l'interrupteur et le capteur PIR sont brachés sur les sorties dupond femelle en haut à droite.

j'ai par ailleurs soudé une diode de roue libre sur le relai et je vous remet le nouveau code que j'utilise mais qui donne le même résultat; il marchait aussi mais ne donne plus de résultats sauf lorsque j'appuie sur le bouton "reset" de la carte ou si je débranche et rebranche le capteur PIR la séquence du relai se déclenche puis plus rien:


int pin = 12;
int inputPin = 2; 
int pirState = LOW;
int val = 0; 

void setup() {
pinMode(inputPin, INPUT);
pinMode(pin, OUTPUT);

  /**/
  
  
}

void loop() {
  val = digitalRead(inputPin);
  if (val == HIGH) { 
    if (pirState == LOW) {
      digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, LOW);
  delay(700);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, HIGH);
  delay(50);
  digitalWrite(pin, LOW);
  delay(50);
  digitalWrite(pin, LOW);                 
      pirState = HIGH;
    }
  } else {
    if (pirState == HIGH) {                                
      pirState = LOW;
    }
  }
  }

elle a l'air d'avoir été dans un endroit très exposé...

où mettez vous à jour pirState?

De quoi parlez-vous sur le sujet de l'endroit très exposé?
Si un mouvement est détecté la séquence du relais se lance et a la fin de celle ci le pirState est mis a jour par la ligne suivante:

pirState = HIGH;

Mais ce qui reste un mystère pour moi est le fait que le programme ai fonctionné pendant quelques jours et que d'un coup sans aucunes modifications dans le code il cesse de fonctionner