Im Thema Zusatzhardware und Sensoren habe ich den Lichsensor mit dem BH1750 vorgestellt. In diesem Thema setze ich den Sensor in einer einfachen Applikation mit einem Arduino Nano (Clone) ein. Alles zusammen ist für unter 10€ Materialwert machbar.
Ich fasse noch kurz die wichtigsten Informationen dazu zusammen:
Das Sensormodul besitzt einen I2C-Bus. Angeschlossen wird SDA - A4, SCL - A5, VCC - +5V, GND - GND.
ADDR lasse ich offen, damit wird das Modul über die Adresse 0x23 angesprochen.
Die verwendete Library ist: https://github.com/claws/BH1750/.
Als Anzeigedisplay dient ein 1602 LCD-Display. Das Display belegt die Adresse 0x27 und wird wie der Lichsensor mit SDA - A4, SCL - A5, VCC - +5V, GND - GND, angeschlossen, also parallel zum BH1750.
Im ersten Schritt soll nur ein ganz simples Programm die „Beleuchtungsstärke" in Lux (lumen pro m² in einer definierten Höhe gemessen) vom BH1750 einlesen und dann auf dem Display ausgeben. Das Programm ist quick and dirty und soll ersmal nur etwas Sinnvolles anzeigen. Der Code ist teilweise aus den Beispielprogrammen der Library entstanden, weshalb bestimmte Begriffe nicht ganz richtig sind.
Ich fasse noch kurz die wichtigsten Informationen dazu zusammen:
Das Sensormodul besitzt einen I2C-Bus. Angeschlossen wird SDA - A4, SCL - A5, VCC - +5V, GND - GND.
ADDR lasse ich offen, damit wird das Modul über die Adresse 0x23 angesprochen.
Die verwendete Library ist: https://github.com/claws/BH1750/.
Als Anzeigedisplay dient ein 1602 LCD-Display. Das Display belegt die Adresse 0x27 und wird wie der Lichsensor mit SDA - A4, SCL - A5, VCC - +5V, GND - GND, angeschlossen, also parallel zum BH1750.
Im ersten Schritt soll nur ein ganz simples Programm die „Beleuchtungsstärke" in Lux (lumen pro m² in einer definierten Höhe gemessen) vom BH1750 einlesen und dann auf dem Display ausgeben. Das Programm ist quick and dirty und soll ersmal nur etwas Sinnvolles anzeigen. Der Code ist teilweise aus den Beispielprogrammen der Library entstanden, weshalb bestimmte Begriffe nicht ganz richtig sind.
Code:
/*
Luxmeter mit BH1750 und 1602 LCD-Display
Anschlussbelegung:
VCC -> 3V3 or 5V
GND -> GND
SCL -> SCL (A5 Arduino Uno, Leonardo, etc or 21 Mega and Due, on esp8266 free selectable)
SDA -> SDA (A4 Arduino Uno, Leonardo, etc or 20 Mega and Due, on esp8266 free selectable)
ADD -> (offen NC) or GND
ADD pin is used to set sensor I2C address. If it has voltage greater or equal to
0.7VCC voltage (e.g. you've connected it to VCC) the sensor address will be
0x5C. In other case (if ADD voltage less than 0.7 * VCC) the sensor address will
be 0x23 (by default).
*/
#include <Wire.h>
#include <BH1750.h>
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C Bibliothek einbinden
BH1750 lightMeter;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup(){
Serial.begin(9600);
// Initialize the I2C bus (BH1750 library doesn't do this automatically)
Wire.begin();
// On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);
lightMeter.begin();
Serial.println(F("BH1750 Test begin"));
lcd.init(); // Im Setup wird die LCD gestartet
lcd.backlight(); // Hintergrundbeleuchtung einschalten (lcd.noBacklight(); schaltet die Beleuchtung aus).
lcd.setCursor(0, 0); // Cursor in Spalte 1, Zeile 1 setzen
lcd.print("LCD-Display"); // Text ausgeben
lcd.setCursor(0, 1); // Cursor in Spalte 1, Zeile 2 setzen
lcd.print("2 x 16 Zeichen");
delay(1000);
lcd.clear(); // Display löschen
}
void loop() {
lcd.setCursor(0, 0); // Cursor in Spalte 1, Zeile 1 setzen
lcd.print(" "); // Text ausgeben
float lux = lightMeter.readLightLevel();
lcd.setCursor(0, 0); // Cursor in Spalte 1, Zeile 1 setzen
lcd.print("Licht: "); // Text ausgeben
lcd.print(lux);
lcd.print(" Lux");
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(2000);
}
Zuletzt bearbeitet: