Détection de mouvement / détecteur PIR infrarouge

Note: Le senseur PIR présenté sur cet article est disponible à la vente sur MC Hobby.
Introduction
Les senseurs PIR sont utilisés par les robots/animaux humanoides pour effectuer la détection de mouvement.
La distance de détection peut aller jusqu'à 6 à 7 mètres. Le senseur PIR est typiquement le type de technologie utilisée pour la détection de mouvement mis en oeuvre dans les systèmes d'alarme. Les applications d'un senseur PIR sont multiples:
  • Détection de mouvement et activation d'une oeuvre interactive.
  • Détection de passage/intrusion.
  • Commande d'une chatière automatisée.
  • Détecteur pour commande d'installation domotique. 
Montage
Il est vraiment facile de connecter un senseur PIR sur un microcontrôleur. Le PIR dispose d'une sortie digitale (ON/OFF HIHG/LOW), il suffit donc d'écouter la sortie digitale à l'aide d'une entrée du microcontrôleur. Il suffit détecter la montée du potentiel vers HIGH (détection du PIR) ou descente du potentiel vers LOW (non détection du PIR).
Il est fort probable que vous désiriez des re-déclenchement. Dans ce cas, assurez cous que le jumper est en position H!
Alimentez le PIR à l'aide de 5 Volts et connectez "Ground" à la masse (0v). Ensuite, connectez la sortie sur une entrée digitale de votre microcontrôleur.
Dans cet exemple, nous employons la pin 2 comme entrée digitale pour la sortie du détecteur PIR.


Le code
Le code est assez simple, il ne fait que surveiller l'état Haut/Bas (HIGH/LOW) de la Pin 2.
Il surveille également le changement d'état de la Pin 2, ce qui permet d'afficher un message quand un déplacement est détecter (lorsqu'il commence) et lorsque le mouvement à cessé.
/*
 * Test du senseur PIR
 */
 
int ledPin = 13;                // Pin choisie à cause de sa LED (visible sur la carte)
int inputPin = 2;               // Pin d'entrée choisie pour surveillé le senseur PIR
int pirMotionState = LOW;       // Pour commencer, nous considérons qu'il n'y a pas de nouvement.
int val = 0;                    // Variable utilisée pour lire l'entrée Pin 2 (valeur du PIR)
 
void setup() {
  pinMode(ledPin, OUTPUT);      // déclarer LED comme sortie
  pinMode(inputPin, INPUT);     // déclarer le Senseur comme entrée
 
  Serial.begin(9600);
}
 
void loop(){
  val = digitalRead(inputPin);  // Lire la valeur d'entrée
  if (val == HIGH) {            // Vérifier si l'entrée est HIGH
    digitalWrite(ledPin, HIGH); // Allumer la LED (activité PIR)
    if (pirMotionState == LOW) {
      // Si l'état du PIR est LOW, comme nous venons de détecter un mouvement
      // nous changeons l'état pirMotionState à HIGH (mouvement détecté)
      Serial.println("Mouvement détecté!");
      // Nous affichons le message seulement quand la sortie change
      pirMotionState = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW); // Eteindre la LED (plus d'activité PIR)
    if (pirMotionState == HIGH){
      // Si l'état PIR est HIGH (mouvement détecté) et que la sortie du PIR
      // passe à LOW, c'est que le mouvement à cessé! 
      Serial.println("Mouvement terminé!");
      // Nous affichons le message que pour le changement d'état (détection mouvement)
      pirMotionState = LOW;
    }
  }
}
Où acheter
Le Senseur PIR et sa documentation française sont disponibles à la vente chez MC Hobby.