Mein Paket… …ein BH1750FVI Lichtintensitätssensormodul GY-30 – Das Luxmeter

Heute kam mein Paket…

mit einem BH1750FVI Lichtintensitätssensormodul GY-30 an. Dieses Modul hatte ich über einen ebay-Shop bestellt.

(BH1750FVI Lichtintensitätssensormodul für 1,50 € inklusive Versand).

BH1750FVI_I2C_Digital_Light_Sensor_Module

Das Modul macht qualitativ einen sehr guten Eindruck. Es ist fertig aufgebaut und enthält von Rohm einen BH1750FVI Umgebungslichtsensor mit I2C-Schnittstelle. Über die bereits eingelötete 5-pol. Stiftleiste im Rastermaß 2,54mm kann es sehr einfach mit einem Arduino Board verbunden werden. Spannungsregler und Pegelwandler sind auch gleich mit an Board, was das Handling mit den 5V Arduinos nochmals etwas vereinfacht.

Die Technischen Daten

Mit diesem Modul kann laut Datenblatt die Beleuchtungsstärke von 0,1lx bis max. etwa 100.000lx (Lux) erfasst werden. Ohne weitere Klimmzüge beträgt die Obergrenze 65.535lx entsprechend dem unsigned int der Arduino IDE. Drei Modi mit unterschiedlicher Auflösung stehen dafür zur Verfügung.

Meßmethode Wandlungszeit Auflösung
H-Resolution Mode 2 Typ. 120ms 0,5lx
H-Resolution Mode Typ. 120ms 1lx
L-Resolution Mode Typ. 120ms 4lx

Im Datenblatt wird empfohlen einen der beiden H-Resolution Modi zu verwenden, da hier die beste Netzfrequenzstörunterdrückung vorliegt.

Die Spektralempfindlichkeit entspricht der des menschlichen Auges. Die Abhängigkeit der Messwerte von der Lichtquelle sind weitgehend zu vernachlässigen. Es spielt daher nur eine untergeordnete Rolle, ob der Sensor mit den verschiedenen künstlichen Lichtquellen oder mit Sonnenlicht bestrahlt wird.

Nachfolgend einige Beispielwerte für Beleuchtungsstärken, die ich bei verschiedenen Quellen gefunden habe:

Dunkle Nacht 0,001lx bis 0,02lx
Mondnacht 0,02lx bis 0,3lx
Drinnen bewölkt 5lx bis 50lx
Draußen bewölkt 50lx bis 500lx
Drinnen sonnig 100lx bis 1000lx
Bürobeleuchtung 500lx

Über den Modul-Pin ADD kann die I2C-Adresse bei Bedarf umgestellt werden. Ohne externe Beschaltung ist die Adresse 0x23 bzw. binär 0100011, bei HIGH-Pegel 0x5C bzw. binär 1011100.

Der Testsketch

Im Internet kursieren diverse vergleichbare Sketche, die aber alle nicht so wirklich eindeutig und nachvollziehbar funktionieren. Eine Fehlerbereinigte und zum Teil erweiterte Version ist nachfolgend zu finden.

/*****************************************************************************************/
/* Luxmeter with BH1750FVI I2C digital ambient light sensor. Measurement in Lux (lx)
* Sensorchip contains a 16-bit AD-Converter and a I2C control
* Depending on the chosen mode range is from 0.1lx to 65,535lx
* in steps of 0.1lx, 1lx or 4lx
*
* Origin Author: Several
*
* Modified by:   Olaf Meier
*
* Hardware connection: Arduino Uno –  BH1750FVI Module
*                                     GND             –  GND
*                                      –                   –  ADD
*                                     A4 / SDA       –  SDA     -> with Leonardo – use separate pin SDA
*                                    A5 / SCL        –  SCL      -> with Leonardo – use separate pin SCL
*                                    5V                   –  Vcc           (alternative 3.3V)
*
* ToDo:
*
*/
/*****************************************************************************************/
/*
* Example of output:
*
*/
/*****************************************************************************************/
/*****************************************************************************************/
/*** Declaration of global constants and initialization of variables. Add includes. ***/
/*****************************************************************************************/
#include <Wire.h> // I2C/TWI for BH1750FVI light sensor
/*** Software release and date ***/
const char* sketchname =  „Luxmeter“;
const char* revision        =  „R.0.1“;
const char* author          =  „Olaf Meier“;
const char* date             =  „2014/05/18“;
/*****************************************************************************************/
/*** Declare constants and variables for the Luxmeter ***/
const unsigned int BAUDRATE = 9600; // Serial monitor baudrate
/*** I2C/TWI-address is depending on logic level at the sensor address pin marked ADD ***/
const byte BH1750FVI_I2CADDRESS = 0x23;  // I2C address (ADD=L=0100011)
//const int BH1750FVI_I2CADDRESS  = 0x5C; // I2C address (ADD=H=1011100)

byte buffer[2];                                                      // Array to store 2 bytes of light value
/*****************************************************************************************/
/*****************************************************************************************/
void setup() {
Wire.begin();
Serial.begin(BAUDRATE);                                 // Initialze serial monitor
while (!Serial) ;                                                   // Wait for the Leonardo serial stream
Serial.println(date);
Serial.print(sketchname);
Serial.print(„\t“);
Serial.println(revision);
Serial.print(author);
Serial.print(„\t“);
Serial.println(date);
Serial.println(date);
/*** Initialize sensor according the chosen resolution mode ***/
BH1750FVIinit(BH1750FVI_I2CADDRESS);
delay(1);                                                             // For safety reason, to settle the mode
} // End of void setup()
/*****************************************************************************************/
/*****************************************************************************************/
void loop() {
unsigned int sensorValue = 0; // Max. sensorValue allowed up to (2^16)-1
if (BH1750read(BH1750FVI_I2CADDRESS) == 2)
{
sensorValue = ((buffer[0] << 8) | buffer[1]);       // Combine 2 bytes
Serial.print(„Beleuchtungsstaerke: „);
Serial.print(sensorValue);
Serial.println(„lx“);
}
delay(500); // 2 measurements per second
} // End of void loop()
/*****************************************************************************************/
/*****************************************************************************************/
/*** Initialize the ambient light sensor BH1750FVI ***/
void BH1750FVIinit(byte I2Caddress)
{
Wire.beginTransmission(I2Caddress);             // I2C address
Wire.write(0x10);                                              // Switch to H-Mode 1Lux resolution 120ms
//Wire.write(0x11);                                            // Switch to H-Mode2 0,5Lux resolution
//Wire.write(0x13);                                            // Switch to L-Mode 4 Lux resolution 16ms
Wire.endTransmission();
}
/*****************************************************************************************/
int BH1750read(int I2Caddress)
{
byte byteNumber = 0;
Wire.beginTransmission(I2Caddress);            // I2C address
Wire.requestFrom(I2Caddress, 2);                  // Request fromm I2Caddress 2 bytes
while(Wire.available())
{
buffer[byteNumber] = Wire.read();                   // Read 2 bytes into array
byteNumber++;
}
Wire.endTransmission();
return byteNumber;
}
/*****************************************************************************************/

Nachfolgend ein Beispiel der Datenausgabe über den seriellen Monitor.

Screenshot 2014-05-18 20.03.01Beim Anschluss des Sensors ist zu beachten, dass die I2C-Anschlüsse SDA und SCL beim Leonardo nicht wie sonst üblich an die Pins A4 und A5 sondern an die separaten Kontakte angeschlossen wird. In der Funktion BH1750FVIinit sind einige Zeilen auskommentiert. Damit kann der gewünschte Mode mit der Auflösung eingestellt werden.

Die technischen Daten in Kurzform
Versorgungsspannung: 5V (oder auch 3,3V funktionierte bei mir)
Controller:                      Rohm BH1750VFI
I2C Takt:                        400kHz
Anschlüsse:                  Stiftleiste 5pol. RM2,54mm
Größe:                           32mm x 15mm

Hier meine Zusammenfassung

Bauteil:                         BH1750VFI Lichtintensitätssensormodul GY-30
Lieferant:                      ebay
Verkäufer:                     accecity-ca
Preis:                           1,50 €
Lieferzeit:                     etwa 4 Wochen
Versandkosten:            inklusive
Sonstiges:                   –
Bewertung:                 bin sehr zufrieden, insbesondere mit dem Preis-/Leistungsverhältnis

Agenda zur Bewertung
*=Ganz Mies **=Mies ***=Akzeptabel ****=Gut *****=Sehr gut
Verkäufer:                             *****
Produkt:                                *****

 
Olaf Meier
Arduino Hannover                http://Arduino-Hannover.de
.                                            http://electronicfreakblog.wordpress.com/

 

 

*Info: In diesem Beitrag verweisen orangefarbende Links auf Affiliates.