Station de mesure – Les capteurs 1/

Introduction :

Dans le cadre d’un projet de réalisation d’une station de mesures nous allons voir une série d’articles présentant quelques capteurs :

  • permettant de traduire des grandeurs physico-chimiques comme la température ou la luminosité par exemple en données numériques,
  • qu’il sera possible ensuite de stocker dans des bases de données temps réel, TSDB (Time Series Database)
  • puis de restituer à l’aide d’outils graphiques comme Grafana ou Cayenne dont nous reparlerons dans un article dédié à la restitution des données capturées.

Les capteurs que nous allons voir dans cet article peuvent retourner les données soit sous format analogique comme par exemple le capteur de pollution MQ135 ou sous forme numérique en utilisant une communication série de type SPI (Serial Peripheral Interface) ou I2C (Inter Integrated Circuit).

La communication série I2C que nous utiliserons principalement permet de n’utiliser que 4 fils entre l’Arduino et les capteurs :

  • GND : Masse,
  • VCC : Alimentation,
  • SCL : Horloge (broche A5 de l’Arduino Uno),
  • SDA : Données (broche A4 de l’Arduino Uno).

Pour communiquer en I2C avec des capteurs dans un programme Arduino, il faut :

  • soit appeler dans vos sketchs Arduino la library spécialisée I2C  wire.h disponible par défaut avec l’IDE (Interface de développement) et accéder aux registres de vos capteurs comme indiqué dans les datasheets,
  • soit plus simplement utiliser une library dédiée à votre capteur.

Pour communiquer avec les capteurs en I2C, l’Arduino doit utiliser une adresse qui leur est propre comme par exemple :

  • soit 0x76, soit 0x77 pour le capteur BME280 (pression, température et humidité),
  • soit 0x23, soit 0x5C pour le capteur BH1750 (lumière visible).

Lorsque l’on ne connaît pas l’adresse utilisée par un capteur on peut utiliser le programme Arduino scanner disponible ici pour déterminer les adresses utilisées par les capteurs présents sur le bus I2C de l’Arduino.

Les résultats obtenus par exemple avec deux capteurs branchés (BME280 et BH1750) sur le bus I2C de mon Arduino sont les suivants :

Montage :

On peut voir à gauche le BME280 et au premier plan à droite le BH1750, tous les deux connectés sur le bus I2C de l’Arduino (fils bleu et violet reliés à A5 et A4).

Résultats :

Dans la console série :

On voit bien que le bus I2C fonctionne bien, deux capteurs sont détectés, le BME280 qui utilise l’adresse 0x76 et le BH1750 qui utilise l’adresse 0x23.

Pour connaître l’adresse à utiliser dans un programme Arduino pour communiquer en I2C avec un capteur, il faut se référer au datasheet du composant.

Souvent il est possible de choisir une adresse parmi deux disponibles pour un capteur donné. Le choix est à effectuer à l’aide d’une broche à relier soit à la masse soit à l’alimentation (ADDR par exemple pour le BH1750, si relié à la masse adresse 0x23 et si relié l’alimentation alors adresse 0x50).

On retrouvera dans le tableau de synthèse capteurs à la fin de cet article toutes les adresses I2C des capteurs testés.

Capteur DHT22 (Température et hygrométrie)

Présentation :

Ce capteur dont on peut voir une photo ci-dessous permet de mesurer la température et l’hygrométrie :

dht22_brochage

Mise en œuvre :

Pour des détails sur la mise en œuvre vous pouvez vous reporter à un de mes articles précédents : https://phmarduino.wordpress.com/2017/01/10/mesure-hygrometrie-temperature-avec-un-dht22/.

Capteur BME280 (Pression, température, hygrométrie)

Présentation :

Ce capteur produit par Bosch et dont on peut voir une photo et un exemple de breakout ci-dessous permet de mesurer la température, l’hygrométrie et la pression atmosphérique :

Le datasheet officiel est disponible ici.

En résumé le capteur fournit les données sous forme numérique via une liaison série soit au format SPI soit au format I2C (l’adresse à utiliser pour communiquer avec le BME280 est alors soit 0x76, soit 0x77).

Attention, la tension maximum pour l’alimentation est de 3,6 volts.

Pour l’écriture de programmes Arduinio exploitant le BME280, vous pouvez utiliser des « library » comme celles de Sparkfun ou Adafruit par exemple.

Mise en œuvre :

Le montage ci-dessous réalisé avec un Arduino UNO est très simple, il suffit en effet de relier les 4 pattes du BME280 à l’Arduino comme indiqué :

  • VIN au 3,3 volts de l’Arduino,
  • GND à la masse de l’Arduino,
  • SCL (clock) à l’entrée A5 de l’Arduino,
  • SDA (données) à l’entrée A4 de l’Arduino.

Pour le programme, j’ai utilisé la « library » et les exemples de Sparkfun disponibles sous Github ici.

Photo du montage :

phm_bme280_montage

Code utilisé :

Il faut au préalable installer la bibliothèque de SparkFun utilisée dans mon sketch ci-dessous. Pour cela aller dans le menu « Croquis/Inclure une bibliothèque/Gérer les bibliothèques », taper « BME280 » dans la zone de recherche, se positionner sur la ligne SparkFun et enfin cliquer sur « Installer » :

L’adresse I2C utilisée dans mon code pour le BME280 est 0x76, celle-ci est éventuellement à remplacer par 0x77 en fonction de votre breakout.

/******************************************************************************
Lecture temperature, pression atmospherique et humidite à l'aide
d'un capteur BME280
Code base sur les exemples de Sparkfun
Auteur : phmo
Date : 28 mai 2017
******************************************************************************/

#include <stdint.h>
#include "SparkFunBME280.h"
//Library pour I2C uniquement
#include "Wire.h"

//Creation d un objet monCapteur de type BME280
BME280 monCapteur;

void setup()
{
	monCapteur.settings.commInterface = I2C_MODE;
	monCapteur.settings.I2CAddress = 0x76;

	//Configuration du capteur//
	monCapteur.settings.runMode = 3;
	monCapteur.settings.tStandby = 0;
	monCapteur.settings.filter = 0;
	monCapteur.settings.tempOverSample = 1;
        monCapteur.settings.pressOverSample = 1;
	monCapteur.settings.humidOverSample = 1;
	
	Serial.begin(9600);
	Serial.println("Demarrage du BME280 ...");
	
	delay(10);  //Delai attente demarrage capteur, le BME280 demande 2ms pour démarrer.
        Serial.print("ID du capteur : ");
	Serial.println(monCapteur.begin(), HEX); // Chargement configuration
}

void loop()
{
	Serial.print("Temperature: ");
	Serial.print(monCapteur.readTempC(), 2);
	Serial.print(" degres C");

	Serial.print("\t Pression: ");
	Serial.print(monCapteur.readFloatPressure()/100, 2);
	Serial.print(" hPa");

	Serial.print("\t Humidite relative : ");
	Serial.print(monCapteur.readFloatHumidity(), 2);
	Serial.println(" %");

	delay(1000);
}

Résultat obtenus :

phmo_bme280_moniteur

Capteur GY-302 / BH1750 (Lumière visible)

Présentation :

Description :

Ce capteur de chez ROHM Semiconductor permet de mesurer l’intensité lumineuse (lumière visible uniquement).

Le datasheet est disponible ici.

On peut en voir une photo ci-dessous :

Les données retournées sont en lux et sont disponibles via une liaison série I2C. Deux adresses I2C sont disponibles. Soit 0x23 si ADDR est à la masse, soit 0x5C si ADDR est relié à VCC.

Exemples d’éclairement :

  • Sensibilité d’une caméra bas niveau : 0,001 lux
  • Nuit de pleine lune : 0,5 lux
  • Pénombre, éclairage bougie : 10 lux
  • Rue de nuit bien éclairée : 20 – 70 lux
  • Éclairage domestique : 100 – 200 lux
  • Local de travail : 200 – 500 lux
  • Stade de nuit : 1 500 lux
  • Extérieur par temps couvert : 5 000 lux
  • Extérieur par temps moyen : 10 000 lux
  • Éclairage artificiel intense : 20 000 lux
  • Journée ensoleillée : 50000 – 100 000 lux

Spécifications :

Alimentation : de 3 à 5V,
Éventail luminosité mesurée :  de 1 à 65535 lux.

La réponse spectrale du capteur est la suivante (elle correspond à la lumière visible dont le spectre va de 390 nm à 710 nm) :

Mise en œuvre :

Le montage ci-dessous réalisé avec un Arduino UNO est très simple, il suffit en effet de relier les 4 pattes du BH1750 à l’Arduino comme indiqué :

  • VIN au 3,3 volts de l’Arduino,
  • GND à la masse de l’Arduino,
  • SCL (clock) à l’entrée A5 de l’Arduino,
  • SDA (données) à l’entrée A4 de l’Arduino.

Pour le sketch de test, j’ai utilisé la library de Claws disponible ici.

Pour pouvoir l’utiliser il faut télécharger le zip de la library :

puis dans l’IDE Arduino demander son ajout avec le menu « Croquis/Inclure une bibliothèque/ajouter un zip » :

Il est à noter que par défaut la library utilise l’adresse I2C 0x23. Si vous souhaitez utiliser l’autre adresse I2C disponible, il faut alors modifier la library.

Après chargement du programme exemple BH1750test, les résultats obtenus dans la console série sont les suivants :

Capteur MQ-xxx (Détecteur de gaz)

Dans le prochain article disponible ICI nous verrons les capteurs de la série MQ-xxx (MQ-2, etc.) permettant de détecter les gaz comme le Butane, le Monoxyde de carbone, etc.

 

 


		
Publicités

2 réflexions au sujet de « Station de mesure – Les capteurs 1/ »

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s