
Hoe mooi zou het zijn als je automatisch een lamp of een verduisteringsscherm kunt aansturen als overdag de zon verschijnt of verdwijnt. Met behulp van een TSL2561 digitale helderheid/licht sensormodule kun je lichtsterkte meten en zo nodig een relais aansturen bij een bepaalde waarde. Bijkomstigheid is dat in tegenstelling tot de meeste standaard lichtsterktesensoren de TSL2561 zowel infrarood als zichtbare lichtsterkte meet.
In de grafiek hieronder zie je het meetbare gebied van de sensor.

De sensor kan de lichtsterkte tussen 0,1 en 40.000+ lux meten, hiervoor wordt gebruik gemaakt van twee fotodiodes.
Daar gaan we…
De TSL2561 is eenvoudig met de I2C interface van de Raspberry Pi aan te sluiten. Met behulp van een Python script lezen we het zichtbare spectrum en het infrarood (IR) bereik. De waardes worden in lux weergegeven. De hoeveelheid lux zegt hoeveel licht (lumen) er op een bepaald oppervlak (m²) terecht komt.
Aansluitschema Raspberry Pi
Voor het aansluiten op de I2C interface van de Raspberry Pi gebruiken we de volgende pinnen.

Hieronder het voorbeeld van de verbindingen tussen de TSL2561 en de Raspberry Pi.

I2C Activeren
De TSL2561 module maakt gebruik van het I2C protocol om te kunnen communiceren met de Raspberry Pi. Het mooie van I2C is dat meerdere I2C apparaten/modules tegelijkertijd kunnen communiceren via de GPIO pinnen.
Standaard is de I2C functionaliteit op de Raspberry Pi uitgeschakeld. Hier kun je vinden hoe je de I2C bus activeert.
Controleren I2C activatie
Nadat de module is aangesloten op de I2C bus kun je controleren of deze ook daadwerkelijk wordt gedetecteerd. Dit kun je doen met de I2C-tools. Heb je deze niet geïnstalleerd dan kun je dit doen met behulp van:
sudo apt-get install i2c-tools
Controleer hierna of de module zichtbaar is:
sudo i2cdetect -y 1

De TSL2561 module heeft als ID Hex-waarde 0x39. Mocht de module niet zichtbaar zijn, controleer dan of de I2C-bus actief is en of de kabels goed zijn aangesloten.

Python script
Met behulp van het onderstaande script kun je de gemeten lichtwaarden door de sensor uitlezen. Het script maakt gebruik van de smbus. Als je gebruik maakt van een ouder Raspberry Pi OS moet je de smbus ondersteuning voor Python installeren met:
sudo apt-get install python-smbus
Het pythonscript hieronder kun je kopiëren, in je favoriete editor plakken en als tsl2561.py opslaan.
# Laad bibliotheken of onderdelen ervan
import smbus
from time import sleep
# Activeer de I2C bus
bus = smbus.SMBus(1)
bus.write_byte_data(0x39, 0x00 | 0x80, 0x03)
bus.write_byte_data(0x39, 0x01 | 0x80, 0x02)
sleep(0.5)
while True:
data = bus.read_i2c_block_data(0x39, 0x0C | 0x80, 2)
data1 = bus.read_i2c_block_data(0x39, 0x0E | 0x80, 2)
# Converteer de data
ch0 = data[1] * 256 + data[0]
ch1 = data1[1] * 256 + data1[0]
# Toon data op scherm
print ("\033c") # wis scherm
print ("==================================================")
print (" Lichtsterkte meting met TSL2561 sensor ")
print ("==================================================\n")
print ("Waarde zichtbaar licht : ",(ch0 - ch1),"lux")
print ("Waarde infrarood licht (IR) : ",ch1,"lux")
print (" --------")
print ("Waarde volledig spectrum (IR + zichtbaar) : ",ch0,"lux")
sleep(0.5)
Voer hierna het script uit:
python tsl2561.py

Het script geeft de waarde van het volledige spectrum, infrarood en de zichtbaarheid weergeven in lux.
Waarden in een .csv-bestand
Je kunt natuurlijk de gemeten waarden ook opslaan in een .csv-bestand. Ik heb er een script voor geschreven dat je hier kunt downloaden. De waarde wordt in dit script iedere minuut opgeslagen.
Het pythonscript hieronder kun je kopiëren, in je favoriete editor plakken en als tsl2561csv.py opslaan.
# Laad bibliotheken of onderdelen ervan
import smbus
from time import sleep
# Activeer de I2C bus
bus = smbus.SMBus(1)
bus.write_byte_data(0x39, 0x00 | 0x80, 0x03)
bus.write_byte_data(0x39, 0x01 | 0x80, 0x02)
sleep(0.5)
x=0 # Initiële tellerwaarde
# CSV-bestand aanmaken
with open("lichtsterkte.csv", "a") as log:
# Start lus
while True:
data = bus.read_i2c_block_data(0x39, 0x0C | 0x80, 2)
data1 = bus.read_i2c_block_data(0x39, 0x0E | 0x80, 2)
# Converteer de data
ch0 = data[1] * 256 + data[0]
ch1 = data1[1] * 256 + data1[0]
# Toon data op scherm
print ("\033c") # wis scherm
print ("==================================================")
print (" Lichtsterkte meting met TSL2561 sensor ")
print ("==================================================\n")
print ("Waarde zichtbaar licht : ",(ch0 - ch1),"lux")
print ("Waarde infrarood licht (IR) : ",ch1,"lux")
print (" --------")
print ("Waarde volledig spectrum (IR + zichtbaar) : ",ch0,"lux")
sleep(1)
if x==60: # waarde wordt per 60 metingen weggeschreven
bestand = open("lichtsterkte.csv","a")
waarde = (str(int(ch0)) + "\n")
bestand.write(" Gemeten volledig spectrum (lux) = ")
bestand.write(waarde)
bestand.close()
print ("\033[1;31;40mWaarde is weggeschreven\033[0m")
sleep(1)
x=0
else:
x=x+1
Tip: Richt eens een IR afstandsbediening op de sensor
Probeer eens verschillende lichtbronnen, zoals een led zaklantaarn of een IR-afstandsbediening. Je zult zien dat de waardeverhouding behoorlijk kan verschillen.
Have A Nice Day!

Laat een reactie achter