- Introduction au module de capteur de lumière numérique BH1750
- Arduino
- Programmation Arduino pour l'interfaçage du capteur de lumière BH1750
Lorsque vous emmenez votre téléphone au soleil ou sous un éclairage élevé, il ajuste automatiquement la luminosité en fonction des conditions d'éclairage. La plupart des appareils d'affichage de nos jours, qu'il s'agisse d'un téléviseur ou d'un téléphone portable, ont le capteur de lumière ambiante à l'intérieur pour régler automatiquement la luminosité. Aujourd'hui, dans ce didacticiel, nous allons utiliser un tel capteur BH1750 Light Sensor Module et l'interfacer avec Arduino et afficher la valeur Lux sur un écran LCD 16x2.
Introduction au module de capteur de lumière numérique BH1750
Le BH1750 est un capteur numérique de lumière ambiante ou un capteur d'intensité lumineuse, qui peut être utilisé pour ajuster automatiquement la luminosité de l'écran dans les mobiles, les écrans LCD ou pour allumer / éteindre les phares des voitures en fonction des conditions d'éclairage extérieur.
Le capteur utilise le protocole de communication série I 2 C qui facilite son utilisation avec les microcontrôleurs. Pour la communication I2C, il dispose de broches SDI et SDA. Le brochage du capteur de lumière ambiante BH1750 est illustré ci-dessous:
La sortie de ce capteur est en LUX (lx), il ne nécessite donc aucun calcul supplémentaire. Lux est l'unité de mesure de l'intensité lumineuse. Il mesure l'intensité en fonction de la quantité de lumière frappant une zone particulière. Un lux équivaut à un lumen par mètre carré.
Le capteur fonctionne sur des tensions de 2,4 V à 3,6 V (généralement 3,0 V) et il consomme un courant de 0,12 mA. Ce capteur a une large plage et une haute résolution (1-65535lx) et de plus, la variation de mesure est également faible (environ +/- 20%). Il peut également fonctionner indépendamment sans aucun composant externe.
Bien qu'un capteur LDR puisse également être utilisé pour contrôler les appareils en fonction des conditions d'éclairage, mais ce n'est pas si précis. Nous avons utilisé un capteur LDR pour créer de nombreuses applications contrôlées par la lumière:
- Circuit de capteur de lumière Arduino utilisant LDR
- Détecteur d'obscurité utilisant LDR et 555 Timer IC
- Circuit LDR simple pour détecter la lumière
- Lampe de mélange de couleurs Arduino utilisant des LED RVB et LDR
Arduino
Le schéma de circuit pour connecter le capteur de lumière BH1750 à Arduino est illustré ci-dessous.
Les broches de communication I2C SDA et SCL du BH1750 sont connectées aux broches Arduino A4 et A5 respectivement pour la communication I 2 C. Comme nous le savons, la tension de fonctionnement du capteur est de 3,3 V, donc VCC et GND de BH1750 sont connectés à 3,3 V et GND d'Arduino. Pour l'écran LCD, les broches de données (D4-D7) sont connectées aux broches numériques D2-D5 d'Arduino et les broches RS et EN sont connectées à D6 et D7 d'Arduino. Le V0 de l'écran LCD est connecté au pot et un pot de 10k est utilisé pour contrôler la luminosité de l'écran LCD.
Programmation Arduino pour l'interfaçage du capteur de lumière BH1750
La partie programmation pour l'utilisation de ce capteur LUX avec Arduino est très simple. Bien qu'il existe une bibliothèque disponible pour ce capteur, nous pouvons également l'utiliser sans cela.
Tout d'abord, nous avons inclus des fichiers d'en-tête pour le protocole LCD et I 2 C.
#comprendre
Dans la fonction de configuration , nous avons initialisé l'écran LCD et le capteur et imprimé le message d'ouverture sur l'écran LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Capteur d'intensité"); retard (2000); }
Ici BH1750_Read et BH1750_Init fonctions sont utilisées pour lire et écrire les valeurs Lux respectivement. La fonction Wire.beginTransmission () est utilisée pour commencer la transmission et la fonction Wire.requestFrom (adresse, 2) est utilisée pour lire les registres où 2 indique le nombre de registres.
En outre, Wire.endTransmission () est utilisé pour terminer la transmission et la fonction Wire.write () est utilisée pour accéder au registre souhaité en y entrant l'adresse de ce registre.
int BH1750_Read (adresse int) { int i = 0; Wire.beginTransmission (adresse); Wire.requestFrom (adresse, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (adresse int) { Wire.beginTransmission (adresse); Wire.write (0x10); Wire.endTransmission (); }
En fonction de boucle , nous imprimons les valeurs lux en temps réel sur l'écran LCD. Comparez d'abord la valeur de retour de la fonction BH1750_Read avec 2, puis commencez à imprimer les valeurs Lux si elle est égale à 2. Ici, les valeurs sont comparées à 2 car la fonction BH1750_Read renvoie la valeur du nombre de registres et nous lisons seulement 2 registres. Ainsi, lorsqu'il atteint 2, le programme commence à imprimer les valeurs LUX de l'intensité lumineuse.
Ensuite, une formule est utilisée pour obtenir les valeurs des deux registres et les diviser par 1,2, ce qui correspond à la précision de la mesure.
boucle vide () { int i; valeur uint16_t = 0; BH1750_Init (adresse BH1750); retard (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensité en LUX"); lcd.setCursor (6,1); lcd.print (valeur); } retard (150); }
Enfin allumez l'Arduino et téléchargez le programme dans Arduino. Dès que le programme est téléchargé, l'écran LCD commence à afficher l'intensité lumineuse en unités LUX. Vous pouvez également faire varier les valeurs en modifiant l'intensité lumineuse autour du capteur, comme illustré dans la vidéo ci-dessous.