Ein Luxmeter          

von Günther Zöppel                       
 
                      Elektronik-Labor  Bastelecke  Projekte  Mikrocontoller                        



Um die Helligkeit verschiedener leuchtender Objekte zu ermitteln, habe ich ein Luxmeter gebaut. Es verwendet das sehr preiswert erhältliche Modul GY-30 zur Lichtmessung, welches mit dem Sensor BH1750 bestückt ist. Zur Anzeige gelangt der ermittelte Lux-Wert per Display SSD1306 (gelb/blau). Display und Sensor sind  an einen ESP8266 D1 mini über den I2C-Bus angeschlossen. Da beide Module mit Pullup-Widerständen bereits von Haus aus versehen sind, braucht man sich um die Konfiguration des I2C-Interfaces keine weiteren Gedanken zu machen. Dazu habe ich einen Sketch geschrieben, der über USB und mittels der ArduinoIDE 1.8.19 auf den ESP8266 geflasht werden kann. Die Bibliothek BH1750 ist vorher (neben den anderen im Sketch nötigen, aber bereits installierten Bibliotheken) mittels Bibliotheksverwalter einzubinden. 

Der Sketch startet nach dem Hochladen sofort und zeigt mir den Lux-Wert einer auf den Sensor gerichteten Lichtquelle an. Je näher die Lichtquelle am Sensor ist, umso höher wird der angezeigte Wert. Dies ist auch eichfähig -  und ein Beitrag zum Umweltschutz, um zu starke und blendende Lichtquellen zu identifizieren. Die spektrale Empfindlichkeit geht aus dem Datenblatt des BH1750 hervor und hat bei 560 nm ein Maximum, dort wo auch das menschliche Auge am empfindlichsten ist. Daher kann der Sensor gesundheitsdienliche Daten liefern. Für Infrarot oder Ultraviolett ist dieser Sensor nicht empfindlich. Um auch diese Strahlung nachzuweisen, müssten andere Sensoren eingesetzt werden.





//Luxmeter
//Trotz Farbwahl WHITE setzt Display gelb oder blau harwaredefiniert

#include <Wire.h>
#include <BH1750.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// Display-Auflösung
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// SSD1306 I2C-Adresse (meist 0x3C oder 0x3D)
#define OLED_ADDR 0x3C

// Displayobjekt
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// BH1750-Objekt
BH1750 lightMeter;

void setup() {
  Serial.begin(115200);
  delay(100);
  Serial.println();
  Serial.println("GY-30 (BH1750) + SSD1306 Test");

  // I2C starten (SDA, SCL)
  Wire.begin(D2, D1);

  // Display initialisieren
  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println(F("Fehler: SSD1306 nicht gefunden!"));
    while (true);
  }

  // BH1750 initialisieren
  if (lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)) {
    Serial.println("BH1750 gestartet.");
  } else {
    Serial.println("Fehler: Kein BH1750 gefunden!");
    while (true);
  }

  // Startanzeige
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(10, 20);
  display.println(F("BH1750 Lichtsensor"));
  display.display();
  delay(2000);
}

void loop() {
  float lux = lightMeter.readLightLevel();

  Serial.print("Helligkeit: ");
  Serial.print(lux);
  Serial.println(" lx");

  // Anzeige auf dem OLED
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(10, 5);
  display.println(F("Lichtstaerke:"));
  display.setTextSize(2);
  display.setCursor(10, 30);
  display.print(lux, 1);
  display.println(F(" lx"));
  display.display();

  delay(1000);
}





Elektronik-Labor  Bastelecke  Projekte  Mikrocontoller