Seite 1 von 1

LUX-Sensor BH1750 (GY-302)

Verfasst: Mi 14. Okt 2015, 14:02
von Heinrichs
Unter der Bezeichnung GY-302 kann man ein preiswertes Luxmeter (unter 2 Euro inkl. Porto) erwerben. Dieses Modul arbeitet auf der Basis des integrierten Bausteins BH1750FVI. Hierbei handelt es sich um mehr als nur einen empfindlichen Lichtsensor; es kann nämlich direkt die Beleuchtungsstärke in der Einheit Lux angeben. Genauer: Der vom Modul ermittelte Wert muss eigentlich noch durch 1,2 geteilt werden, um den Lux-Wert zu erhalten; das verrät das Datenblatt im Rahmen der Beispielrechnungen auf S. 7. Wir verzichten hier auf diesen Schritt.

GY302.jpg
Das Luxmeter-Modul GY-302
GY302.jpg (39.43 KiB) 26875 mal betrachtet

Der BH1750 erlaubt nur Versorgungsspannungen bis maximal 3,6 V. Trotzdem kann die Platine direkt über unsere Attiny-Platine versorgt werden; auf dem Modul befindet sich nämlich ein entsprechender Spannungswandler, der unsere 5,0 V auf 3,3 V heruntertransformiert.

GY302-schematic.jpg
Schaltskizze des GY-302-Moduls
GY302-schematic.jpg (80.42 KiB) 26875 mal betrachtet

Die Kommunikation mit dem BH1750 erfolgt über I2C; die Schreibadresse ist &H46. Bei unserer Attiny-Platine müssen die Jumper für die Pull-Up-Widerstände nicht gesetzt werden; auf dem GY302-Modul sind nämlich diese Widerstände schon eingebaut. Verschiedene Betriebsarten und Auflösungen sind möglich. In unserem Beispielprogramm (s. u.) wählen wir den "Continuously H-Resolution Mode" mit einer Auflösung von 1 lx. Der zugehörige Initialisierungscode ist &B00010000. Die Messzeit beträgt in diesem Fall typischerweise 120 ms.

Wir lassen die Beleuchtungsstärke jede 2 Sekunden messen und geben das Ergebnis über ein LCD aus. Weitere Einzelheiten kann man dem folgenden Programm entnehmen.

Code: Alles auswählen

' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Lichtsensor GY302 (BH1750) an I2C
' Ausgabe über LCD
'----------------------------------------------------------------------------

$regfile = "attiny2313.dat"                                 'Attiny2313
$crystal = 4000000                                          '4 MHz

'**********************************************************
'******************* Deklarationen ************************

Dim Messung1 As Byte
Dim Messung2 As Byte
Dim Lux As Word

'****************** Initialisierung ***********************

Ddrb = &B11111111                                           'Port B als Ausgangsport
Ddrd = &B01110000                                           'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111                                          'Eingänge auf high legen

Config Lcd = 16 * 2                                         'LCD konfigurieren
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.6
Cursor Off

Config Sda = Portb.5
Config Scl = Portb.7

I2cinit

'**********************************************************
'******************** Hauptprogramm ***********************


Const Bh1750fvi_w = &H46
Const Bh1750fvi_r = &H47

Wait 1

Do
   I2cstart
   I2cwbyte Bh1750fvi_w
   I2cwbyte &B00100000                                      'Auflösung 1 Lux

   I2cstart
   I2cwbyte Bh1750fvi_r
   I2crbyte Messung1 , Ack
   I2crbyte Messung2 , Nack
   I2cstop

   Lux = Messung1
   Lux = Lux * 256
   Lux = Lux + Messung2

   Cls
   Lcd Lux
  Wait 2
 Loop
End

Ob der BH1750 tatsächlich die Beleuchtungsstärke korrekt ermittelt? Leider habe ich kein geeichtes Gerät zu Vergleichszwecken zur Verfügung. Aber ich habe überprüft, ob sich die gelieferten Messwerte additiv verhalten: Dazu habe ich von zwei verschiedenen Lichtquellen A und B die Beleuchtungsstärke einzeln und im Verband gemessen. Die Lage der Lichtquellen und des Sensors wurden im Rahmen eines solchen Vergleiches nicht geändert. Hier die Ergebnisse von zwei solcher Vergleiche:

GY302-messung.jpg
Zwei Vergleichsmessungen zur Überrüfung der Additivität
GY302-messung.jpg (21.29 KiB) 26875 mal betrachtet

Sie zeigen, dass hier die Additivitätsbedingung mit hoher Genauigkeit erfüllt ist.

.