Hier zunächst einige Charakteristika des ALS (Ambient Light Sensor = Umgebungslicht-Sensor):
- Approximiert die Empfindlichkeit des Auges
- Programmierbare Interrupt-Funktion mit oberem und unterem Schwellenwert
- Auflösung bis 16 Bit
- Hohe Empfindlichkeit, funktioniert hinter abgedunkeltem Glas
- Niedrige Lux-Leistung (0,01 lux)
Grundlegende Bemerkungen
Gewöhnliche Photodioden reagieren stark auf IR-Licht. Mit einer solchen Photodiode aufgenommene Messwerte können deswegen erheblich von dem subjektiven Lichteindruck des menschlichen Auges abweichen. Der APDS9930 besitzt nun zwei Photodioden, im Datenblatt des APDS9930 mit CH0 und CH1 bezeichnet. Bei CH0 handelt es sich um eine (gewöhnliche) Photodiode, die in einem großen Wellenlängenbereich (von etwa 350 nm bis 1000 nm) empfindlich ist; sie detektiert also sichtbares Licht und Infrarotlicht (vgl. Abb. 2 des Datenblattes). Dagegen ist die Photodiode CH1 hauptsächlich im Infrarotbereich empfindlich.
Mit Hilfe der von CH1 gewonnenen Messwerte CH1DATA können jetzt die Messwerte CH0DATA von CH0 korrigiert werden, so dass der so erhaltene Wert den Lichteindruck des menschlichen Auges gut wiedergibt. Das Datenblatt beschreibt auf S. 9 genau, wie aus den Messwerten für CH0 und CH1 ein lux-Wert berechnet werden kann.
Programmierung
Der APDS9930-Baustein wird ähnlich wie der APDS9960 über I2C angesprochen. Mit Hilfe einer Reihe von Registern können Parameter gesetzt und Messwert gelesen werden. Wir greifen hier auf das Micropython-Modul APDS9930.py von Shaoziyang (http://www.micropython.org.cn) zurück. Diese stellt die Klasse APDS9930 zur Verfügung, mit der unser Mikrocontroller auf sehr einfache Weise mit dem APDS9930-Baustein arbeiten kann. Die Datei APDS9930.py finden Sie im Anhang.
Der APDS9930 wird gemäß der folgenden Tabelle mit dem TTGO verdrahtet. Beachten Sie dabei: Je nach Bauweise des APDS9930-Bausteins können die Anschlüsse anders angeordnet sein. So sind die Anschlüsse für SCL und SDA bei meinem APDS9930-Baustein umgekehrt angeordnet wie beim APDS9960.
APDS-9960 | TTGO |
GND | G |
VCC | 3V |
SDA | Pin 21 |
SCL | Pin 22 |
Das folgende Programm zeigt die Rohwerte CH0DATA und CH1DATA sowie den zugehörigen Luxwert an; die benutzte Methode getALS führt dabei genau die Rechenschritte zur Berechnung des Lux-Wertes durch, die auf S. 9 des Datenblattes angegeben werden.
Code: Alles auswählen
# APDS9930_CHDATA_LUX.py
# Das Modul APDS9930.py muss in den Speicher des ESP32 geladen sein
from machine import Pin, I2C
import time
import APDS9930
i2c=I2C(1, sda=Pin(21), scl=Pin(22))
apds = APDS9930.APDS9930(i2c)
# apds.ALS_Enable() # wird schon durch __ini__() aufgerufen
apds.AGAIN(8) # ALS-Verstärkung 1, 8, 16, 120; Default-Wert = 1
while True:
time.sleep_ms(500)
print('CH0 =', apds.getCH0(), 'CH1 =', apds.getCH1(), 'Lux =', apds.getALS())
Setzen Sie den APDS9930 unterschiedlichen Lichtquellen in verschiedenen Abständen aus und beobachten Sie die angezeigten Messwerte...
.