dimanche 12 février 2012

Détecteur de mouvements à infrarouge

Aujourd'hui, j'ai fait quelques expériences avec un détecteur de mouvement à infrarouge (PIR:  passive infrared) acquis sur eBay pour moins de $3 (incluant les frais de livraison à partir de Hong Kong:  comment font-ils?!?!?).

Comme c'est souvent le cas, le produit n'était accompagné d'aucune documentation, mais son utilisation est simple puisqu'il est doté de 3 broches clairement identifiées:  deux pour l'alimentation (5 V et GND) et une sortie qui prend pendant quelques secondes l'état logique "haut" si un mouvement est détecté a proximité du capteur.

Pour des informations détaillées sur le fonctionnement de ce genre de capteur, je vous conseille la page qui y est consacré sur ladyada.   J'y ai trouvé ce circuit très simple (illustré à droite) pour vérifier rapidement le bon fonctionnement du capteur.  Lorsqu'on bouge à proximité du capteur, une LED s'allume pendant quelques secondes; elle s'éteint si on demeure immobile.

Ensuite, j'ai eu envie de créer quelque chose d'un peu plus sophistiqué en mettant à contribution mon fidèle Arduino:  il s'agit d'un petit montage qui, lorsqu'il détecte votre arrivée dans une pièce, joue une petite mélodie de bienvenue.  Pour éviter que la mélodie ne soit déclenchée chaque fois que vous bougez, un délai minimal est imposé entre deux mélodies consécutives (il n'est que de 30 secondes dans le sketch ci-dessous, mais il est facile de l'augmenter à une heure, ou même plus, pour que l'Arduino vous salue uniquement lorsque vous revenez suite à une longue absence).





/*
 Ce sketch permet de jouer une mélodie lorsqu'un mouvement
 est détecté par un capteur à infrarouge (PIR).
*/

#define HautParleur 8   // haut-parleur branché sortie 8
#define Infrarouge 2    // capteur infrarouge branché sortie 2

unsigned long precedent=millis();  // quand la mélodie a été jouée la dernière fois
unsigned long delai = 30000;  //délai d'attente avant de jouer à nouveau la mélodie.

void setup() {
  pinMode(HautParleur, OUTPUT); 
  pinMode(Infrarouge, INPUT); 
}

void loop() { 

  if ((millis()-precedent)>delai)  { 

    if (digitalRead(Infrarouge)){   
      melodie(); 
      precedent=millis();
    }
  }

}

void melodie() {
  // rencontre du troisième type
  tone(HautParleur, 440,600);  // la
  delay(620);
  tone(HautParleur, 494,600); // si
  delay(620);
  tone(HautParleur, 392,600); // sol
  delay(620);
  tone(HautParleur, 196,600); // sol
  delay(620);
  tone(HautParleur, 294,1200); // ré
  delay(1220);
  noTone(8);
}


Yves Pelletier (Twitter: @ElectroAmateur)

Aucun commentaire:

Enregistrer un commentaire

Related Posts Plugin for WordPress, Blogger...