3.5 Licht Sensor BH 1750
Jetzt wollen wir die Helligkeit mit dem Lichtsensor BH 1750 messen.
Die Hardware- und Elektronikgrundlagen
Wir benötigen für unsere nächsten Anwendungen:
-
OLED Display SSD 1306
-
Lichtsensor BH 1750
Basis-Wissen Lichtsensor BH1750
Der Lichtsensor BH1750 ist guter und kostengünstiger Lichtsensor mit einer direkten Ausgabe der Lichtintensität in Lux, ohne dass eine zusätzliche Kalibrierung erforderlich ist.
- Messbereich: 1 - 65535 Lux
- Schnittstelle: I2C
- Betriebsspannung: 3,3V oder 5V (wir verwenden die 3,3V-Version)
Die Datenübertragung findet per I2C statt. Für den I2C-Betrieb werden in der Regel vier Pins verwendet:
-
VCC: Versorgungsspannung (3,3V oder 5V)
-
GND: Erdung
-
SCL: I2C Clock (Signal für die Synchronisation der Datenübertragung)
-
SDA: I2C Data (Signal für die Datenübertragung)
Die Anwendungen
Zunächst nehmen wir nur den Lichtsensor in Betrieb und dann erweitern wir das Script, sodass die Ausgabe nicht im Thonny-Kommandofenster erfolgt, sondern auf dem Display.
Inbetriebnahme des Lichtsensors
Der Aufbau sieht wir folgt aus:
Somit haben wir die bisherigen OLED-Anschlüsse, ergänzgt um den Lichtsensor.
-
Pin 38 an Masse
-
Pin 36 an Plus
-
Pin 21 (= GPIO 16, gelb) an OLED-Display SDA
-
Pin 22 (= GPIO 17, grün) an OLED-Display SCL
-
OLED-Display mit Plus und Masse verbinden
-
Lichtsensor BH 1750 mit Plus und Masse verbinden
-
Lichtsensor SDA an an OLED-Display SDA (gelb)
-
Lichtsensor SCL an an OLED-Display SCL (grün)
Wir haben wieder die Schritte
-
Adresse ermitteln mit dem I2C-Scanner. Ergebnis: 0x23
-
Bibliothek installieren. Auch hier gibt es verschiedene Bibliotheken und es ist nicht leicht eine gute Bibliothek zu finden (siehe z.B. diese Suchergebnisse: https://github.com/search?q=Micropython+bh1750&type=repositories&p=1)
Wir verwenden das Beispiel von Rui Santos https://randomnerdtutorials.com/raspberry-pi-pico-bh1750-micropython/
Link zur Bibliothek von Tim Pelling, die aber auf der Originalseite nicht mehr vorhanden ist und daher von Rui Santos heruntergeladen wird. Abspeichern auf dem Pi Pico unter bh1750.py.
Ausgabe des Lichtsensors auf dem OLED-Display
Nun wollen wir die Helligkeit auf dem OLED-Display anzeigen.
Python
Zunächst eine Kleinigkeit.
Import | Erklärung | Aufruf |
---|---|---|
import time | Importiert time komplett | time.sleep(2) |
from time import sleep | Importiert nur sleep | sleep(2) |
Fehlerbehandlung in Python: try - except
In Python wird eine Fehlerbehandlung mit den Schlüsselwörtern try
und except
durchgeführt. Damit können wir auf Fehler in einem Programm reagieren, anstatt dass das Programm bei einem Fehler einfach abstürzt.
Funktionsweise
-
try: Der Code, der in den
try
-Block geschrieben wird, ist der Teil des Programms, der möglicherweise einen Fehler verursachen könnte. Python versucht, diesen Code auszuführen.In diesem Block wird der Hauptteil des Codes ausgeführt, der den Lux-Wert vom Lichtsensor liest und ihn auf dem OLED-Display anzeigt. Dieser Code wird in einer Schleife ausgeführt, um kontinuierlich den Helligkeitswert zu aktualisieren.
-
except: Falls im
try
-Block ein Fehler auftritt, wird derexcept
-Block ausgeführt. Hier kann definiert werden, was im Fehlerfall passieren soll, z.B. eine Fehlermeldung ausgeben oder das Programm in einen sicheren Zustand versetzen.Falls während der Ausführung des Codes im try-Block ein Fehler auftritt (z.B. ein Problem mit der Verbindung zum Sensor oder Display), wird der except-Block aktiviert. Das Programm beendet sich damit kontrolliert. In diesem Fall wird nur eine einfache Nachricht ausgegeben, damit das Programm an dieser Stelle nicht zu lang wird. Anstelle einer einfachen Ausgabe könnte auch ein Eintrag in eine Log-Datei geschrieben werden und eine E-Mail (oder eine sonstige Warnung) verschickt werden.
Beispiel im Kontext
In dem Script wird try - except
folgendermaßen verwendet: