Le module capteur PIR

Info module :

ComplémentPrésentation générale

Le capteur de présence s'appelle également PIR motion (Pyroelectric InfraRed sensor). Il fonctionne facilement, il détecte une variation d'onde infrarouge et génère alors un courant.

Ce capteur très simple d'utilisation va nous être très pratique.

Voilà à quoi il ressemble :

Il possède trois broche : le 5V, le GND, le signal de sortie (1 ou 0) en fonction de son état.

Truc & astuceSchéma de branchement

Voici le schéma de branchement de ce module :

Bien sur dans le cas de notre maquette, il faudra brancher la sortie 13 au relais, qui commandera la lampe. Mais rien ne vous empêche d'allumer un LED.

ExempleCode du module

Pour ce qui est du code :

A chaque fois que l'on passe devant le PIR, une LED s'allume et un message est envoyé sur le terminale Arduino en disant la valeur du capteur (0 ou 1) et lorsqu'il passe à 1 il envoie un message comme quoi un mouvement est détecté, et lorsqu'il passe à 0 il envoie un message comme quoi il y a un mouvement. De plus au départ il y a la calibration donc il est transmis sur la terminale qu'il y a la calibration qui est effectuée avec une succession de petit point le temps de la calibration.

Il y a des commentaires (//commentaires) à côtés des lignes pour préciser à quoi elles correspondent.

Le code pour le capteur PIR est le suivant : (à utiliser avec Arduino. Un autre chapitre sera dédié à l'utilisation avec NODE RED)

int calibrationTime = 10; // temps que l'on accorde au capteur de présence pour s'initialiser (entre 10 et 60 secondes)

int ledPin = 13; // broche de la LED

int inputPin = 2; // Entrée de la valeur du capteur

int pirState = LOW; // on commence avec aucun mouvement détecté

int val = 0; // valeur de la lecture du capteur

void setup() {

pinMode(ledPin, OUTPUT); // la broche de la LED est une sortie

pinMode(inputPin, INPUT); // la broche du capteur est une entrée

Serial.begin(9600);

Serial.print("calibration du capteur ");

for(int i = 0; i < calibrationTime; i++){

Serial.print("."); // mettre des petits points, un point par seconde jusqu'à la fin de la calibration

delay(1000);

}

}

void loop(){

val = digitalRead(inputPin); // lire la valeur du capteur et la stocker dans val

Serial.println(val); // écrire la valeur val

if (val == HIGH) { // Si la valeur = 1 ( high ) alors il y a un mouvement

digitalWrite(ledPin, HIGH); // allumer la LED

delay(150);

if (pirState == LOW) {

Serial.println("mouvement detecte!");

pirState = HIGH;

}

}

else {

digitalWrite(ledPin, LOW); // éteindre la LED

delay(300);

if (pirState == HIGH){

Serial.println("aucun mouvement");

pirState = LOW;

}

}

}