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)

samedi 4 février 2012

Expérimentations avec un microphone à électret

Mise à jour (2 janvier 2017):  Dans cet article, je faisais un lien vers un schéma de circuit du site newcircuits, qui n'existe malheureusement plus:  je l'ai donc retiré.   Il est toutefois facile de trouver sur internet des schémas de circuits d'amplification pour micro à électret.

J'ai construit ce circuit permettant à la foi d'alimenter un microphone à électret et d'amplifier son signal.  J'ai toutefois remplacé l'amplificateur opérationnel LM358 suggéré dans le circuit original par un RC4558 car j'en avais plusieurs sous la main.

La broche du microphone qui doit être mise à la terre est celle qui communique avec le boîtier du microphone.

En branchant un oscilloscope à la sortie de l'amplificateur, on peut visualiser la forme de différents sons, en chantant près du microphone ou en l'approchant d'un instrument de musique (ici:  un synthétiseur).

Je me suis ensuite inspiré de ce sketch pour que mon Arduino détecte la présence de sons:  une LED branchée à la sortie numérique numéro 4 s'allume lorsque le microphone capte un son dépassant un seuil pré-déterminée (la sortie de l'amplificateur du microphone est branchée à l'entrée analogique numéro 4).

En fait, avec ma version du sketch ci-dessous, la LED clignote faiblement à cause des bruits ambiants, mais s'allume avec plus d'intensité lorsque le microphone capte un son suffisamment fort.



//Détecteur de son

int sensorPin = 4;    //Sortie de l'ampli de microphone   
int RedLED = 4;    // LED qui s'allume quand il y a du son
int sensorValue = 0;

void setup() {
  pinMode(RedLED, OUTPUT);
}

void loop() {

  sensorValue = analogRead(sensorPin); 

  if (sensorValue<350){ 
    digitalWrite(RedLED, HIGH);
  } 
  else {
    digitalWrite(RedLED, LOW);  
  }
}




Yves Pelletier (Twitter: @ElectroAmateur)
Related Posts Plugin for WordPress, Blogger...