Der APDS9930-Sensor

Hier werden einzelne Projekte mit MicroPython vorgestellt
Antworten
Heinrichs
Beiträge: 183
Registriert: Do 21. Okt 2010, 18:31

Der APDS9930-Sensor

Beitrag von Heinrichs » Di 25. Apr 2023, 12:15

Auf den ersten Blick könnte man meinen, bei dem APDS9930 handelte es sich um eine “kleinere” Version des APDS9960. Grob gesagt kann man mit beiden Licht und Abstände messen und darüber auch Interrupts auslösen. Im Gegensatz zum APDS9960 kann der APDS9930 aber keine Farbwerte ermitteln und auch keine Gesten erkennen. Dafür ist er für eine Messung der Beleuchtungsstärke bestens ausgerüstet. In diesem Beitrag wollen wir uns genau mit dieser Eigenschaft beschäftigen.

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.

ALS_spectral_response.jpg
Abb. 2 des Datenblatts
ALS_spectral_response.jpg (14.36 KiB) 20288 mal betrachtet

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-9960TTGO
GNDG
VCC3V
SDAPin 21
SCLPin 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...

.
Dateianhänge
apds-9930-datasheet.pdf
APDS9930-Datenblatt
(1.14 MiB) 1423-mal heruntergeladen
APDS9930.zip
APDS9930.py
(1.24 KiB) 1396-mal heruntergeladen

Antworten