mercredi 29 juillet 2020

ESP32-CAM et capteur infrarouge passif (PIR)


Le projet que je vais décrire dans cet article consiste à faire en sorte que l'ESP32-CAM prenne automatiquement des photos (et les enregistre sur une carte microSD) chaque fois qu'un capteur infrarouge passif (PIR) détecte une présence. Ça peut faire partie d'un système d'alarme (prendre les photos d'un intrus dans une pièce) , constituer un dispositif qui photographie des animaux sauvages, etc.



Il y quelques années, j'avais rédigé un article assez détaillé sur les capteurs PIR. Le modèle que j'utilise est muni d'un régulateur de tension: on doit l'alimenter avec 5 V pour qu'il fonctionne correctement, mais son signal de sortie passe de 0 V à 3,3 V lorsque la présence d'un humain ou d'un animal est détectée (N.B.: ce n'est probablement pas le cas pour tous les modules PIR disponibles sur le marché).


Une pénurie de broches

La caméra de l'ESP32-CAM utilise déjà un très grand nombre d'entrées/sorties de l'ESP32, ce qui explique pourquoi un  module ESP32-CAM comporte beaucoup moins de broches qu'on module ESP32 conventionnel. Mais lorsque vous utilisez le lecteur de cartes microSD intégré au module, la situation devient vraiment délicate: à lui-seul, le lecteur de cartes microSD accapare 6 broches (GPIO 2, 4, 12, 13, 14 et 15).  Puisque GPIO 0 , 1 et 3 sont utilisés pour la programmation de la carte, il ne reste que GPIO 16;  mais en plus d'être reliée à une résistance pull up qui la tient par défaut au niveau logique haut, cette broche est liée à la mémoire PSRAM.

La solution que j'ai choisie consiste à utiliser le module de carte SD en mode 1 bit plutôt qu'en mode 4 bits. C'est en principe un peu plus lent, mais ça permet de rendre disponibles les broches GPIO 4, 12 et 13.

J'ai donc branché la sortie du capteur PIR à la broche D13 de l'ESP32-CAM.



Des faux positifs?

Si votre capteur PIR détecte une présence même lorsqu'il n'y a personne, vous pouvez diminuer sa sensibilité en ajustant le potentiomètre "Sensitivity". Dans mon cas, il s'est avéré nécessaire d'alimenter le capteur PIR et l'ESP32-CAM de façon indépendante. Lorsqu'ils partageaient tous les deux la même alimentation de 5 V, ils se perturbaient mutuellement: des photos étaient prises sans raison apparente, et l'ESP32-CAM redémarrait parfois de façon impromptue.

Sketch

(En cas de besoin, vous pouvez consulter cet article pour plus de détails concernant la façon de programmer l'ESP32-CAM avec l'IDE Arduino.)

Voici un premier sketch plutôt simple qui n'exploite pas les capacités WIFI de l'ESP32-CAM. Lorsque la broche D13 de l'ESP32-CAM se trouve au niveau logique "Haut" (parce que le capteur PIR a détecté une présence), des photos sont prises et enregistrées sur la carte microSD. Vous devez ensuite éjecter la carte et l'insérer dans un autre appareil pour voir son contenu.

-
-

Voici un  deuxième exemple, plus élaboré, qui permet de voir le contenu de la carte à distance, grâce à une page web générée par l'ESP32-CAM (voir ce précédent article pour plus d'informations).

-
-



jeudi 23 juillet 2020

Mesurer la température et l'humidité relative avec un DHT22 (AM2302)


Le capteur DHT22 (aussi appelé AM2302) est spécialement conçu pour mesurer l'humidité relative de l'air, ainsi que la température. Voyons comment l'utiliser avec un Arduino.



Ce capteur contient un condensateur dont la capacité dépend de l'humidité de l'air ambiant. Puisque l'humidité relative dépend aussi de la température, le capteur comporte aussi un thermistor. La température et l'humidité relative sont transmises au microcontrôleur de façon numérique.

Si vous avez un capteur DHT11 plutôt qu'un DHT22, vous obtiendrez des mesures moins précises, mais les deux capteurs s'utilisent de la même façon.

Connexions

Le capteur DHT22 que j'ai utilisé était intégré à un module comportant 3 broches:
  • +:  Alimentation de 5 V ou de 3,3 V, selon le niveau logique désiré.
  • OUT: À brancher à une entrée numérique du microcontrôleur (j'ai choisi la broche 2 du Uno)
  • -: GND
Mon module comporte déjà une résistance de tirage entre la broche + et la broche OUT, il n'a donc pas été nécessaire que j'en installe une moi-même.


Installation de la bibliothèque DHT d'Adafruit

J'ai choisi d'utilise la bibliothèque DHT d'Adafruit, qui peut être utilisée avec les capteurs DHT11, DHT12, DHT21/AM2301  et DHT22/AM2302. Vous pouvez passer par le gestionnaire de bibliothèques de l'IDE Arduino.

L'exemple "DHTtester" fourni avec la bibliothèque permet de vérifier rapidement le bon fonctionnement du capteur. Puisqu'Adafruit se trouve aux États-Unis, ils ont intégré à leur bibliothèque des fonctions qui permettent d'obtenir facilement la température en degrés Fahrenheit ainsi que l'indice de chaleur utilisé aux États-Unis pour exprimer le degré d'inconfort causé par la combinaison de la chaleur et de l'humidité  (formules de Rothfusz et Steadman).



Sketch: température, humidité relative, point de rosée et humidex

Puisque je vis au Canada, c'est plutôt l'indice humidex qui m'intéresse. Et puisque l'humidex se calcule au moyen du point de rosée (température sous laquelle la vapeur d'eau contenue dans l'air se condense sur les surfaces), j'ai écrit un sketch qui affiche la température, l'humidité relative, le point de rosée et l'indice humidex.

Connaissant la température et l'humidité relative, la formule de Heinrich Gustav Magnus-Tetens permet de calculer le point de rosée:


J'ai d'abord calculé α(T,RH) à la ligne 48, dans une variable baptisée "alpha", puis je l'ai utilisée à la ligne 49 pour le calcul du point de rosée (variable "rosee").

Finalement, j'ai calculé l'indice humidex (ligne 52) grâce à l'équation mise au point par Masterton et Richardson:
Pour l'interprétation du résultat obtenu, j'ai utilisé la formulation exacte proposée par Environnement et changement climatique Canada.

Ce qui m'a donné ce résultat dans le moniteur série:



-
-

À lire également:

Pour compléter vos mesures météorologiques, vous pouvez mesurer la pression atmosphérique avec un capteur BMP180 et fabriquer votre propre anémomètre.

Yves Pelletier (TwitterFacebook)