Bei dem hier aufgeführten intelligenten Lichtsensor handelt es sich um den BH1750FVI von Rohm Semiconductor mit einer externer Spannungsversorgung von 4,5 Volt. Da dieser Sensor mittels einer I2C-Kommunikation angesteuert wird, ist unbedingt auf die richtige Pinbelegung des Sensors zu achten. Diese wird in der folgenden Abbildung dargestellt.


Lichtsensor

Abb.: Lichtsensor Anschlussbelegung; Quelle: BBS2 Wolfsburg

Wie in den Kapitel Datenübertragung: I2C-Schnittstelle beschrieben, wird der Lichtsensor gemäß den vier Anschlüssen (VCC-Spannung, GND-Ground, SCL-Clock und SDA-Data) hardwartechnisch verdrahtet. Der ADDR-Pin (Adresse) ist hiebei optional zu nutzen, wenn die voreingestellte Adresse verändert werden möchte. Da dies in dem Projekt nicht von Nöten war, wird die Adressvergabe hier nicht weiter erläutert. Der I2C-Datenbuss wird dann gemäß der Pinbelegung an den Arduino Nano angeschlossen.

Weitere Informationen zum Sensor können dem Datenblatt entnommen werden.


Damit auf die verfügbaren Methoden einfacher zugegriffen werden kann und die Initialisierung und Einbindung des Sensors einfacher von Statten geht, empfiehlt es sich eine Bibliothek einzubinden. Diese ist auf GitHub unter folgendem Link erreichbar: https://github.com/Genotronex/BH1750FVI_Master


Im folgenden Beispiel ist der einfachste Fall für die Verwendung des Sensors aufgeführt. Hier werden die Messwerte aufgenommen und über den seriellen Monitor ausgegeben.

Wichtig dabei ist zu erst die Deklaration und die Initialisierung des Sensors. In diesem Beispiel wird der Sensor mit dem Continuous-Low-Resolution-Mode initilaisiert. Das beduetet der Sensor wird mit einer Auflösung von 4 Lux initialisiert und kann alle 16 Millisekunden einen neuen Wert aufnehmen. Es stehen auch noch andere Modis zur Auswahl, wie z.B. der Continuous-High-Resolution-Mode2 bei dem die Auflösung 0,5 Lux beträgt, dafür kann aber auch nur alle 120 Millisekunden ein Wert aufgenommen werden (vergleiche Datenblatt).

Die nächste wichtige Funktion der Bibliothek ist die ".beginn()" Funktion, welche die Datenaufnahme des jetzt initialisierten Sensors starten lässt.

Außerdem ist die Funktion ".GetLightIntensity()" wichtig, da diese Funktion immer den aktuell gemessenen Wert wieder gibt.

#include <BH1750FVI.h>

BH1750FVI LightSensor (BH1750FVI::k_DevModeContLowRes);     //Deklaration und Initialisierung des Sensors im Continuous Lew Resolution Mode

void setup()
{
  Serial.begin(9600);                                       //Beginn des seriellen Monitors
  LightSensor.begin();                                      //Messungsstart des Lichtsensors

  Serial.println("Starte Datenaufnahme...");
}

void loop()
{
  unsigned int lux = LightSensor.GetLightIntensity();       //Die Messwerte (Rückgabewert der GetLightIntensity-Funktion) werden in der Variablen lux gespeichert
  Serial.print("Beleuchtungsstärke: ");
  Serial.print(lux);                                        //Ausgabe der Messwerte über den seriellen Monitor
  delay(1000);
}



Durch diese beispielhafte Programmierung kann der Lichtsensor jeder Zeit ausgewertet und die Messdaten über den seriellen Monitor ausgegeben werden:


Serieller Monitor Lichtsensor

Abb.: Serieller Monitor Lichtsensor; Quelle: BBS2 Wolfsburg



Zuletzt geändert: Montag, 28. Februar 2022, 11:47