BH1750 LUX-Sensor verständlich erklärt: Lichtstärke messen leicht gemacht!

Das ist ein vollwertiger Auszug aus dem Buch Elektronik und Heimautomation DIY.

Mit dem BH1750 16-bit Sensor können wir die Lichtmenge in Lux messen und die Daten über die I²C Schnittstelle auslesen. Der Sensor bietet zwei Modi für die Luxmessung. Kontinuierlich und einmalig. Im kontinuierlichen Modus misst der Sensor die Lichtintensität ohne Unterbrechung. Im Modus „einmalig“ werden einzelne Messungen durchgeführt, dann schaltet sich der Sensor ab.

Wir können die Empfindlichkeit für beide Modi festlegen und können damit von 0,5 Lux bis zu 4 Lux Genauigkeit messen. Eingesetzt kann der Sensor werden zur Unterscheidung, ob es Tag oder Nacht ist, zur Helligkeitssteuerung von Displays oder zur Steuerung der Beleuchtung in der Heimautomation.

Technische Details

  • Messbereich: 1 – 65535 lux
  • Spannungsbereich: 3,3 – 5 Volt
  • I²C Adressen: 0x23 und 0x5C
  • Genauigkeit: ± 20 %
  • Stromverbrauch: 0.12 mA
  • Arbeitstemperatur: -40 °C bis +85 °C
BH1750 Sensor Pinout

Messmethoden vom Sensor

Die Messmethoden unterscheiden sich in der Geschwindigkeit und Genauigkeit. Der Hersteller empfiehlt für die meisten Anwendungen die kontinuierliche Messung mit hoher Auflösung.

ModusGenauigkeitMesszeitDauermessung
Niedrige Auflösung4 Lux16 msBH1750_CONTINUOUS_LOW_RES_MODE
Hohe Auflösung1 Lux120 msBH1750_CONTINUOUS_HIGH_RES_MODE
Hohe Auflösung 20,5 Lux120 msBH1750_CONTINUOUS_HIGH_RES_MODE_2
Einmalige MessungBH1750_ONE_TIME_RES_MODES
Niedrige Auflösung4 Lux16 msBH1750_ONE_TIME_LOW_RES_MODE
Hohe Auflösung1 Lux120 msBH1750_ONE_TIME_HIGH_RES_MODE
Hohe Auflösung 20,5 Lux120 msBH1750_ONE_TIME_HIGH_RES_MODE_2

I²C Adresse ändern

Über den ADDR Pin lässt sich die Adresse wählen. Liegt die Spannung am Pin unter 0,7 Volt (GND oder offen), ist die Adresse 0x23. Bei einer Spannung über 0,7 Volt wechselt die Adresse auf 0x5C.


Der Sketch

BH1750 LUX MESSUNG – SKETCH
#include <BH1750.h>
#include <Wire.h>

BH1750 lightMeter;

void setup(){
  Serial.begin(115200);
  Wire.begin();   // Wire.begin(SDA, SCL)
  lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x23, &Wire);
}

void loop() {
  float lux = lightMeter.readLightLevel();
  Serial.print(" Lichtmenge: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

Der Sketch auf GitHub


Hier findet ihr das benötigte Material!

Unterstütze meine Projekte

Wenn dir dieser Beitrag geholfen hat, freue ich mich über einen kleinen Beitrag für die Kaffeekasse.