Farbmessung mit dem APDS9960-Sensor
Verfasst: Mi 8. Mär 2023, 17:10
Die Messung von Farben erfolgt ganz ähnlich wie die Proximity-Messung: Bei der Instanziierung des Sensors wird lediglich prox durch als ersetzt:
Die Lichtwerte für die einzelnen Farben können wir dann mit
s.redLightLevel bzw. s.greenLightLevel bzw. s.blueLightLevel
erhalten und mit einer print-Funktion auf dem Terminal ausgeben lassen. Will man statt der Rohwerte relative Farbwerte anzeigen lassen, benutzt man das Property rgb_tuple: print(s.rgb_tuple) zeigt dann die relativen Farbwerte als 3-Tupel an.
Besonders wirkungsvoll ist es, wenn man den Sensor mit verschiedenfarbigen LEDs beleuchtet, z. B. mit Hilfe eines RGB-LED-Moduls wie dem JY-MCU-Baustein.
Das folgende Programm beleuchtet den Sensor nacheinander mit rotem, grünen und blauen Licht und zeigt die gemessenen Lichtwerte am Terminal an.
Hier noch ein Bild von einer solchen Messung. Allerdings wurden hier zusätzlich die relativen Farbwerte in einem Balkendiagramm auf dem Display des TTGO T-Display angezeigt.
Ein zugehöriges Programm sowie ein Video finden Sie im Anhang.
.
Code: Alles auswählen
i2c = I2C(1, sda=Pin(22), scl=Pin(21))
apds9960=APDS9960_ALS_PROX.APDS9960(i2c) # apds9960 instanziieren
s = apds9960.als # ALS-Sensor s instanziieren
s.enableSensor() # Licht-Sensor aktivieren
s.redLightLevel bzw. s.greenLightLevel bzw. s.blueLightLevel
erhalten und mit einer print-Funktion auf dem Terminal ausgeben lassen. Will man statt der Rohwerte relative Farbwerte anzeigen lassen, benutzt man das Property rgb_tuple: print(s.rgb_tuple) zeigt dann die relativen Farbwerte als 3-Tupel an.
Besonders wirkungsvoll ist es, wenn man den Sensor mit verschiedenfarbigen LEDs beleuchtet, z. B. mit Hilfe eines RGB-LED-Moduls wie dem JY-MCU-Baustein.
Das folgende Programm beleuchtet den Sensor nacheinander mit rotem, grünen und blauen Licht und zeigt die gemessenen Lichtwerte am Terminal an.
Code: Alles auswählen
# APDS9960_ALS_colors_test_1.py (08.03.2023)
# Für APDS9960!
# 3 LEDs (R, G, B) beleuchten das APDS9960-Modul nacheinander.
# Wir benutzen ein RGB-LED-Modul (JY-MCU) mit eingebauten Vorwiderständen 100 bzw. 50 Ohm.
# Die jeweils gemessenen Farbwerte werden auf dem Terminal (als Rohwert und in %) ausgegeben.
#########################
# APDS9960 | TTGO #
# --------------------- #
# GND | G #
# VCC | 3V (3.3 V) #
# SDA | Pin22 #
# SCL | Pin21 #
#########################
# Blaue LED an Pin25 #
# Grüne LED an Pin26 #
# Rote LED an Pin27 #
#########################
from machine import Pin, I2C
from time import sleep_ms
import APDS9960_ALS_PROX
blue = Pin(25, Pin.OUT)
green = Pin(26, Pin.OUT)
red = Pin(27, Pin.OUT)
time = 1000 # Blink-Intervall in ms
#Init I2C
i2c = I2C(1, sda=Pin(22), scl=Pin(21))
apds9960=APDS9960_ALS_PROX.APDS9960(i2c) # apds9960 instanziieren
s = apds9960.als # ALS-Sensor s instanziieren
s.enableSensor() # Licht-Sensor aktivieren
s.eLightGain = 1 # Foto-Signal-Verstärkung (0..3); Standardwert: 0
print('eLightGain: ', s.eLightGain) # nur zur Kontrolle
print()
def messung():
sleep_ms(10)
'''while (apds9960.statusRegister & 0b0000_0001) == 0: # warten bis AVALID = 1
pass'''
abs_colors = (s.redLightLevel, s.greenLightLevel, s.blueLightLevel)
print('absolute Farbwerte:', abs_colors)
print('relative Farbwerte:', s.rgb_tuple)
red, green, blue = s.rgb_tuple
print()
while True:
print('R E D')
red.on()
messung()
sleep_ms(time)
red.off()
print('G R E E N')
green.on()
messung()
sleep_ms(time)
green.off()
print('B L U E')
blue.on()
messung()
sleep_ms(time)
blue.off()
Ein zugehöriges Programm sowie ein Video finden Sie im Anhang.
.