dimanche 15 novembre 2020

Mesurer la pression atmosphérique avec le BMP180 et un Rasbperry Pi

Le capteur BMP180 est conçu pour mesurer la pression atmosphérique ainsi que la température. Son application la plus évidente l'observation des conditions météorologiques, mais on peut également l'utiliser pour mesurer la pression d'un gaz dans un récipient fermé, ou pour mesurer l'altitude. Dans le passé, j'ai moi-même eu l'occasion de l'utiliser pour mesurer la pression dans un liquide, et pour détecter le souffle du flûtiste dans une flûte à bec MIDI.

Dans cet article, je vous présente quelques informations qui vous permettront d'utiliser un capteur BMP180 avec un Raspberry Pi programmé en Python.

Branchements du capteur

Le module BMP180 comporte 4 connecteurs: deux pour l'alimentation et deux pour la communication des données par le protocole I2C.


  • La broche VIN du module BMP180 est connectée à une sortie 3,3 V du Raspberry Pi (broche 1)
  • La broche GND du module BMP180 est connectée à une broche GND du Raspberry Pi (broche 6)
  • La broche SCL du module BMP180 est connectée à la broche SCL du Raspberry Pi (broche 5)
  • La broche SDA du module BMP180 est connectée à la broche SDA du Raspberry Pi (broche 3)

Activation de l'I2C

Par défaut, la communication I2C est désactivée sur le Raspberry Pi. Si ce n'est pas déjà fait, vous devez l'activer en allant dans Préférences - Configuration du Raspberry Pi.


Cliquez sur l'onglet "Interfaces" et assurez-vous que I2C est activé. Il est possible qu'un redémarrage soit nécessaire.



Pour vérifier que tout est fonctionnel, vous pouvez écrire "sudo i2cdetect -y 1" dans le terminal. Le module BMP180 devrait être trouvé à l'adresse 77.

Installation de la bibliothèque d'Adafruit

Pour faciliter la programmation, j'ai installé la bibliothèque Pyhton BMP d'Adafruit, en suivant les instructions fournies sur cette page J'ai donc tapé les 4 lignes suivantes dans le terminal:

   sudo apt-get install git build-essential python-dev python-smbus

   git clone https://github.com/adafruit/Adafruit_Python_BMP.git

   cd Adafruit_Python_BMP

   sudo python3 setup.py install


Script en Python

Le script ci-dessous est déjà très court, mais la plus grande partie consiste à créer avec Tkinter la fenêtre qui affichera les mesures prises par le capteur. Seules les lignes 14, 17, 43 et 44 concernent le capteur BMP180:

À la ligne 14:  (import Adafruit_BMP.BMP085 as BMP085), nous importons les méthodes de la bibliothèque BMP085 d'Adafruit.

À la ligne 17: (capteur = BMP085.BMP085()): création d'un objet de type BMP085.

À la ligne 43: (capteur.read_temperature()): mesure de la température en degrés Celsius.

À la ligne 44: (capteur.read_pressure()): mesure de la pression en Pascal.

Lorsqu'on exécute ce script, une fenêtre s'affiche et indique la température ainsi que la pression atmosphérique.



--

À lire également

Yves Pelletier (TwitterFacebook

samedi 14 novembre 2020

Balance connectée à base d'ESP32/ESP8266

Dans ce troisième projet impliquant une balance constituée d'une cellule de charge et d'un module HX711, j'ai fabriqué une balance connectée qui affiche la masse mesurée dans une page web. Le microcontrôleur, programmé au moyen de l'IDE Arduino peut être un ESP32 ou un ESP8266. La même balance a précédemment été utilisée avec un Arduino Uno ainsi qu'avec un Raspberry Pi.


Assemblage de la balance

La cellule de charge se trouve entre deux plateaux qui sont vissés à deux côtés opposés de la cellule: le profil de l'assemblage rappelle la lettre "S".  



Il faut aussi tenir compte de la flèche qui indique le sens de la déflexion: elle doit pointer vers le bas quand vous utilisez la balance.



Connexion de la cellule de charge au module HX711


D'un côté du module HX711, on trouve les connecteurs E+, E-, A- et A+ qui servent au branchement de la cellule de charge (nous n'utilisons pas B- et B+).

Le fil rouge se branche à E+, le fil noir à E-, le fil blanc à A- et le fil vert à A+. (Ces deux derniers fils peuvent être inversés sur certaines cellules de charge).



Connexions du module HX711 à l'ESP32 ou à l'ESP8266

De l'autre côté du module HX711, on retrouve les connecteurs qui permettent de brancher le module à un microcontrleur.:
  • GND du HX711: GND de l'ESP32 ou de l'ESP8266
  • DT du HX711: broche GPIO5 de l'ESP32 ou de l'ESP8266 (données numériques)
  • SCK du HX711: broche GPIO4 de l'ESP32 ou de l'ESP8266 (signal d'horloge)
  • VCC du HX711: sortie 3,3 V de l'ESP32 ou de l'ESP8266
Puisque les broches DT et SCK sont définies à l'intérieur de notre programme, vous pouvez les brancher différemment si vous désirez.




Installation de la bibliothèque HX711

Il existe plusieurs bibliothèques conçues pour l'utilisation du HX711; j'ai choisi la bibliothèque HX711 de Bogdan Necula.


Exemple de sketch

Voici un sketch qui affiche la masse mesurée dans une page web.


Au démarrage, le moniteur série affiche, entre autres informations, l'adresse de la page web (ici, c'est 192.168.0.116):

Il s'agit d'accéder à cette adresse au moyen d'un navigateur web:

Calibration de la balance

Pour calibrer la balance, il faut modifier la ligne 87 pour que set_scale soit utilisé sans paramètres:

balance.set_scale();

On exécute le sketch pendant que le plateau de la balance est vide et, une fois la balance en fonction, on place sur le plateau une masse dont on connaît la valeur.

Dans mon cas, la valeur 76486 s'affichait lorsqu'une masse de 200 g était placée sur le plateau. 

76486 divisé par 200 donne 382, et j'ai donc ajouté le paramètre "382" à la méthode set_scale (ligne 87):

balance.set_scale(382);

À lire également

La même balance a été utilisée avec un Arduino Uno ainsi qu'avec un Raspberry Pi. Je vous invite également à jeter un oeil sur mes autres projets impliquant l'ESP32 et l'ESP8266.

Yves Pelletier (TwitterFacebook

dimanche 1 novembre 2020

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

Le capteur DHT22 (aussi appelé AM2302) permet de mesurer l'humidité relative de l'air ainsi que la température ambiante. Nous l'utilisons aujourd'hui avec un Raspberry Pi programmé en Python. 


Le capteur comporte un condensateur dont la capacité dépend de l'humidité. Puisqu'il faut également connaître la température pour pouvoir calculer l'humidité relative, le DHT22 comporte également un capteur de température intégré.

J'ai utilisé un DHT22 qui est incorporé à un module comportant 3 broches: + , out et -. Ce module comporte déjà une résistance de tirage entre les broches + et OUT. Si ce n'est pas le cas pour le capteur que vous utilisez, il est recommandé de placer une résistance de 4,7 kΩ ou 10 kΩ environ entre DATA et VCC.

Pour ma part, j'ai branché mon module au Raspberry Pi de la façon suivante:
  • Broche + du DHT22: sortie 3,3 V du Raspberry Pi
  • Broche out du DHT22: broche GPIO 4 du Raspberry Pi
  • Broche - du DHT22: broche GND du Raspberry Pi

J'ai ensuite installé la bibliothèque d'Adafruit en tapant les 3 lignes suivantes dans le terminal:

pip3 install adafruit-blinka
pip3 install adafruit-circuitpython-dht
sudo apt-get install libgpiod2

Le script ci-dessous, inspiré d'un exemple fourni par Adafruit, affiche la température, l'humidité relative, le point de rosée et l'indice humidex.

-
-

Si vous décommentez la ligne 38, un message d'erreur sera affiché en cas d'échec de la lecture du capteur. Dans mon cas, j'ai eu la surprise de constater qu'environ une lecture sur quatre échouait avec une de ces deux mentions: "A full buffer was not returned. Try again." ou encore "Checksum did not validate. Try again.".  Après avoir vainement tenté de trouver une façon d'éviter ces erreurs, j'ai fini par me résigner et à simplement ne pas afficher le message d'erreur. De toute façon, la température et l'humidité sont des paramètres qui varient lentement, on a donc tout le temps de reprendre notre mesure si elle a échoué.

À lire également:

J'ai déjà utilisé un DHT22 avec un Arduino Uno


Yves Pelletier (TwitterFacebook)