Accueil | Arduino | Actualité Arduino | BH1750 (GY-302), mesurer la qualité d’éclairage de votre habitation (Arduino/ESP8266/ESP32)

BH1750 (GY-302), mesurer la qualité d’éclairage de votre habitation (Arduino/ESP8266/ESP32)

Le GY-302 de CJMCU est une carte I2C qui permet de mesurer la quantité de lumière à l’aide du photo-détecteur BH1750. Nous utiliserons la luminosité mesurée pour construire un indicateur de qualité d’éclairage ambiant basé sur la norme Européenne EN 12464-1. Il est très facile d’intégrer la capteur GY-302 dans un projet Arduino ou ESP8266 à l’aide de la librairie développée par Christopher Laws. Elle est disponible sur cette page GitHub. Le GY-302 coûte moins d’un euro.

Ajouter la librairie BH1750 à l’IDE Arduino

Téléchargez l’archive ZIP de la librairie depuis GitHub sans la décompresser.

github arduino library bh1750

Depuis l’IDE Arduino, allez dans le menu puis Ajouter la bibliothèque .ZIP

ide arduino add ajouter librairie

Circuit

Le module GY-302 (BH1750) communique via le bus I2C avec l’Arduino ou l’ESP8266. Le câblage est très simple. Repérage des broches du GY-302.

BrocheDescription
GNDGround
ADDRSélection de l’adresse I2C (0x5C si alimenté en 3,3V, sinon 0x23)
SDAI2C SDA
SCLI2C SCL
VCC3.3V

arduino ic2 BH1750 circuit

Pour vos schémas Fritzing, le composant est disponible sur GitHub ici

Sur un Arduino, relier la broche SDA sur la broche A4 et SCL sur la broche A5. Sur l’ESP8266 Wemos d1 mini, SDA est en D2 et SCL en D1. Pour d’autres cartes ESP8266, lisez cet article.

Il est possible d’attribuer manuellement les broches du bus I2C à l’aide de la librairie Wire.h. Au début du programme, on déclare la librairie

puis dans la fonction setup()

Voilà, tous les périphériques I2C sont déroutés vers les nouvelles broches.

Comment mesurer la qualité de l’éclairage ?

En Europe, la norme EN 12464-1 (synthèse en Français et en anglais) définit les niveaux d’éclairage minimum en fonction du poste de travail occupé.

en 12464-1 niveau luminosite eclairage lux

Source : La revue de l’éclairage LUX n°228 mai/juin 2004 disponible en ligne.

Dans une habitation, il n’y a pas de norme précise (à ma connaissance). Keria, un spécialiste des luminaires à publié sur son site quelques intensités lumineuses courantes. Voici un extraits des recommandations pour quelques pièces de la maison (ou pour obtenir une certaine ambiance : intime, conviviale, jeu, travail).

Pièce et ambiance recherchéeIntensité lumineuseCouleur recommandée
Salon, salle à manger, chambre d’adulte. Ambiance tamisée, intime.25-50 luxBlanc chaud
Salon, salle à manger, cuisine, chambre d’adulte, bureau. Ambiance conviviale, moments de détente.100-150 luxBlanc chaud
Bureau, bibliothèque, chambre d’enfant, salle de jeux. Ambiance de travail, de jeux.200-250 luxBlanc neutre
Ambiance technique : espaces de forte activité (bureau, atelier) et de circulation (couloirs, entrée)350-500 luxBlanc froid

Source : https://www.keria.com/guides/comment-calculer-la-quantite-declairage-necessaire-dans-une-piece

A partir de ces différentes données, j’ai construit un indicateur à 5 niveaux (trop bas, bas, idéal, élevé, trop élevé). Vous pouvez ajuster les valeurs en fonction de vos habitudes et de vos besoins.

Fonctionnement de la librairie BH1750

La librairie BH1750 s’utilise de façon très similaire à la librairie BME280 (ou BMP180). En début de programme, on appel la librairie et on initialise l’objet lightMeter en indiquant l’adresse du BH1750 sur le bus I2C. Par défaut le BH1750 se trouve à l’adresse 0x23. Si vous avez un conflit avec un autre composant, vous pouvez attribuer l’adresse 0x5C en alimentant la broche addr en 3,3V.

La librairie prend en charge les 6 modes de fonctionnement du capteur. Le capteur peut mesurer la luminosité en continue

  • BH1750_CONTINUOUS_LOW_RES_MODE : mesure rapide (16ms) en basse résolution (4 lux de précision)
  • BH1750_CONTINUOUS_HIGH_RES_MODE (mode par défaut) : mesure haute résolution (1 lux de précision). Le temps de mesure est de 120ms
  • BH1750_CONTINUOUS_HIGH_RES_MODE_2 :mesure très haute résolution (0,5 lux de précision). Temps de mesure 120ms

Ces trois autres modes permettent de réaliser une seule mesure (One_Time) et ensuite de mettre le capteur en économie d’énergie. La précision et le temps de mesure est identique.

  • BH1750_ONE_TIME_LOW_RES_MODE
  • BH1750_ONE_TIME_HIGH_RES_MODE
  • BH1750_ONE_TIME_HIGH_RES_MODE_2

Dans le setup, on démarre l’objet lightMeter à l’aide de la fonction begin(uint8_t mode) en lui passant comme paramètre le mode de mesure. La fonction configure(uint8_t mode) est (appelée par begin) est également exposée.

La méthode readLightLevel() permet de lire à tout moment l’intensité lumineuse mesurée par le BH1750. La fonction retourne directement la mesure en Lux.

Code Arduino / ESP8266

Voici le code complet de l’application qu’il vous suffit de téléverser. Il fonctionne indifféremment sur Arduino, ESP8266 ou ESP32.

Voilà. Une brique de plus de terminée pour notre station se surveillance de la qualité de l’air (et du bien être).

  • Projet intéressant mais je me pose la question de savoir comment il faut orienter ce BH1750 pour obtenir une bonne lecture ? par exemple si je veux mes 500 Lux dans un bureau pour bosser sur écran je mets le capteur au niveau de mes yeux dirigé vers quoi ? l’écran, un mur, le sol, le plafond, il faut faire une seule mesure ou en prendre plusieurs dirigées différemment et faire une moyenne ? je suppose que c’est écrit dans la norme mais avant de me plonger dedans pour y trouver une réponse je pose la question 😉