Met behulp van een TSL2561 digitale helderheid/licht sensor kun je lichtsterkte meten. In tegenstelling tot de meeste standaard lichtsterkte sensoren meet de TSL2561 zowel infrarood als zichtbare lichtsterkte. De sensor kan de lichtsterkte tussen 0,1 en 40.000+ lux meten, hiervoor wordt gebruik gemaakt van twee fotodiodes.
De TSL2561 is van de I2C interface van de Raspberry Pi vrij eenvoudig aan te sluiten op de Raspberry Pi. De sensor kan een handig hulpmiddel zijn om dynamisch de verlichting aan te passen.
Met behulp een Python script lezen we de volledige spectrum, infrarood en totale zichtbaarheid waardes gemeten door de sensor uit. De waardes worden in lux weergegeven.
Componenten voor dit project
• TSL2561 Light Intensity Sensor Module (link)
• Dupont verbindingkabels male/male (link)
Raspberry Pi Zero, Raspberry Pi 2, Raspberry Pi 3
Raspbian Jessie (2016-05-27 kernel 4.4.13)
Aansluitschema Raspberry Pi
Er zijn verschillende TSL2561 modules op de markt beschikbaar, voor het aansluiten op de I2C interface van de Raspberry Pi gebruiken we alleen de pinnen: VCC(VIN), GND, SCL en SDA.
TSL2561 module | Raspberry Pi pin | Functie |
---|---|---|
VCC | 1 | 3V3v |
GND | 6 | Ground |
SCL | 5 | SCL0 I2C | SDA | 3 | SDA0 I2C |
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 apparaten/modules kunnen communiceren via de GPIO pinnen die worden gebruikt voor I2C.
Standaard is de I2C functionaliteit op de Raspberry Pi uitgeschakeld. Je kunt deze activeren met behulp van raspi-config.
sudo raspi-config
Selecteer de optie ‘Advanced Options’ ▸ ‘I2C’ en kies ‘YES’ om de I2C interface te activeren.
Controleren werking I2C
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
TSL2561 module heeft als ID #039. Mocht de module niet zichtbaar zijn controleer dan of kabels goed zijn aangesloten.
Voorbeeld script
Met behulp van het onderstaande script kun je de lichtwaarden gemeten door de sensor uitlezen. Het script maakt gebruik van de smbus, om hiervan gebruik te kunnen maken dien smbus ondersteuning voor Python te installeren:
sudo apt-get install python-smbus
# TSL2561 import smbus import time # Get I2C bus bus = smbus.SMBus(1) # TSL2561 address, 0x39(57) # Select control register, 0x00(00) with command register, 0x80(128) # 0x03(03) Power ON mode bus.write_byte_data(0x39, 0x00 | 0x80, 0x03) # TSL2561 address, 0x39(57) # Select timing register, 0x01(01) with command register, 0x80(128) # 0x02(02) Nominal integration time = 402ms bus.write_byte_data(0x39, 0x01 | 0x80, 0x02) time.sleep(0.5) # Read data back from 0x0C(12) with command register, 0x80(128), 2 bytes # ch0 LSB, ch0 MSB data = bus.read_i2c_block_data(0x39, 0x0C | 0x80, 2) # Read data back from 0x0E(14) with command register, 0x80(128), 2 bytes # ch1 LSB, ch1 MSB data1 = bus.read_i2c_block_data(0x39, 0x0E | 0x80, 2) # Convert the data ch0 = data[1] * 256 + data[0] ch1 = data1[1] * 256 + data1[0] # Output data to screen print "Full Spectrum(IR + Visible) :%d lux" %ch0 print "Infrared Value :%d lux" %ch1 print "Visible Value :%d lux" %(ch0 - ch1)
Het bovenstaande script kun je downloaden met:
wget https://raspberrytips.nl/files/tsl2561.py
Voer hierna het script uit:
python tsl2561.py
Het script zal de waarde van het volledige spectrum, infrarood en de zichtbaarheid weergeven in lux.
Voor school ben ik bezig met de lux sensor ik vroeg mij alleen af hoe ik een led aan kan laten gaan als er een waarde van onder de bijvoorbeeld 400 lux wordt gelezen