- Einführung in das digitale Lichtsensormodul BH1750
- Arduino
- Programmierung von Arduino zur Anbindung des Lichtsensors BH1750
Wenn Sie Ihr Telefon bei Sonnenschein oder starker Beleuchtung verwenden, wird die Helligkeit automatisch an die Lichtverhältnisse angepasst. Die meisten Anzeigegeräte, egal ob es sich um einen Fernseher oder ein Mobiltelefon handelt, verfügen heutzutage über einen Umgebungslichtsensor, mit dem die Helligkeit automatisch angepasst werden kann. Heute werden wir in diesem Tutorial ein solches Sensor- BH1750- Lichtsensormodul verwenden und es mit Arduino verbinden und den Lux-Wert über 16x2 LCD anzeigen.
Einführung in das digitale Lichtsensormodul BH1750
BH1750 ist ein Digital - Umgebungslichtsensor oder ein Helligkeitssensor, der automatisch verwendet werden kann, um die Helligkeit des Displays in Handys, LCD - Displays, oder zum Ein- / Ausschalten der Scheinwerfer in Autos auf die Basis der Außenlichtverhältnisse anpassen.
Der Sensor verwendet ein serielles I 2 C-Kommunikationsprotokoll, das die Verwendung mit Mikrocontrollern erleichtert. Für die I2C-Kommunikation verfügt es über SDI- und SDA-Pins. Die Pinbelegung des Umgebungslichtsensors BH1750 ist unten dargestellt:
Die Ausgabe dieses Sensors erfolgt in LUX (lx), sodass keine weiteren Berechnungen erforderlich sind. Lux ist die Einheit zur Messung der Lichtintensität. Es misst die Intensität anhand der Lichtmenge, die auf einen bestimmten Bereich fällt. Ein Lux entspricht einem Lumen pro Quadratmeter.
Der Sensor arbeitet mit Spannungen von 2,4 V bis 3,6 V (typischerweise 3,0 V) und verbraucht Strom von 0,12 mA. Dieser Sensor hat eine große Reichweite und eine hohe Auflösung (1-65535lx) und außerdem ist die Messabweichung gering (ca. +/- 20%). Es kann auch unabhängig ohne externe Komponente arbeiten.
Ein LDR-Sensor kann zwar auch zur Steuerung der Geräte basierend auf den Lichtverhältnissen verwendet werden, ist aber nicht so genau. Wir haben den LDR-Sensor verwendet, um viele lichtgesteuerte Anwendungen zu erstellen:
- Arduino Light Sensor Circuit mit LDR
- Dunkler Detektor mit LDR und 555 Timer IC
- Einfache LDR-Schaltung zur Erkennung von Licht
- Arduino Farbmischlampe mit RGB LED und LDR
Arduino
Der Schaltplan zum Verbinden des BH1750-Lichtsensors mit Arduino ist unten dargestellt.
Die I2C-Kommunikationspins SDA und SCL von BH1750 sind für die I 2 C-Kommunikation mit dem Arduino-Pin A4 bzw. A5 verbunden. Wie wir wissen, beträgt die Betriebsspannung für den Sensor 3,3 V, sodass VCC und GND von BH1750 mit 3,3 V und GND von Arduino verbunden sind. Bei LCD sind die Datenpins (D4-D7) mit den digitalen Pins D2-D5 von Arduino und die RS- und EN-Pins mit D6 und D7 von Arduino verbunden. V0 des LCD ist mit dem Poti verbunden und ein 10k-Poti wird verwendet, um die Helligkeit des LCD zu steuern.
Programmierung von Arduino zur Anbindung des Lichtsensors BH1750
Der Programmierteil für die Verwendung dieses LUX-Sensors mit Arduino ist sehr einfach. Für diesen Sensor steht zwar eine Bibliothek zur Verfügung, aber wir können sie auch ohne diese verwenden.
Erstens haben wir Header-Dateien für das LCD- und das I 2 C-Protokoll aufgenommen.
#einschließen
In der Setup- Funktion haben wir sowohl das LCD als auch den Sensor initialisiert und die Eröffnungsmeldung auf dem LCD gedruckt.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Intensitätssensor"); Verzögerung (2000); }}
Hier werden die Funktionen BH1750_Read und BH1750_Init zum Lesen bzw. Schreiben der Lux-Werte verwendet. Die Funktion Wire.beginTransmission () wird verwendet, um die Übertragung zu starten, und die Funktion Wire.requestFrom (Adresse, 2) wird zum Lesen von Registern verwendet, wobei 2 die Anzahl der Register angibt.
Weiter wird Wire.endTransmission () verwendet, um die Übertragung zu beenden, und Wire.write () wird verwendet, um zum gewünschten Register zu gelangen, indem die Adresse dieses Registers darin eingegeben wird.
int BH1750_Read (int address) { int i = 0; Wire.beginTransmission (Adresse); Wire.requestFrom (Adresse, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (int address) { Wire.beginTransmission (address); Wire.write (0x10); Wire.endTransmission (); }}
In Loop - Funktion werden wir den Druck der Echtzeit - Lux - Werte über LCD. Vergleichen Sie zuerst den Rückgabewert der BH1750_Read- Funktion mit 2 und drucken Sie dann die Lux-Werte, wenn sie gleich 2 sind. Hier werden die Werte mit 2 verglichen, da die BH1750_Read- Funktion den Wert der Registeranzahl zurückgibt und nur 2 Register gelesen werden. Wenn es also 2 erreicht, beginnt das Programm mit dem Drucken der LUX-Werte der Lichtintensität.
Dann wird eine Formel verwendet, um die Werte aus beiden Registern abzurufen und durch 1,2 zu teilen, was der Messgenauigkeit entspricht.
void loop () { int i; uint16_t value = 0; BH1750_Init (BH1750-Adresse); Verzögerung (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensität in LUX"); lcd.setCursor (6,1); lcd.print (Wert); } delay (150); }}
Schalten Sie schließlich das Arduino ein und laden Sie das Programm in Arduino hoch. Sobald das Programm hochgeladen wurde, zeigt das LCD die Lichtintensität in LUX-Einheiten an. Sie können die Werte auch variieren, indem Sie die Lichtintensität um den Sensor herum ändern, wie im folgenden Video gezeigt.