TSL2561 Sensor Features
The TSL2561 Luminosity Sensor Breakout is a complex light sensor which has a flat response across most of the visible spectrum range.
This sensor is capable of direct I2C communication and is able to conduct specific light ranges from 0.1 – 40k+ Lux easily.
You can download the datasheet of this module here.
TSL2561 Light Sensor Datasheet
1 file(s) 334.21 KB
TSL2561 Sensor Pinout
This module has 2 pins:
- VCC: Module power supply – 5V
- GND: Ground
- SLC: I2C clock
- SDA: I2C data
- INT: Adjusting I2C address
You can see pinout of this module in the image below.
Required Materials
Hardware Components
Software Apps
Interfacing TSL2561 Sensor with Arduino
Step 1: Circuit
Connect the module to the Arduino according to the following image.
Step 2: Code
Install following library on your Arduino board.
Tip
If you need more help with installing a library on Arduino, read this tutorial: How to Install an Arduino Library
Upload the following code to your Arduino.
/*
modified on Sep 14, 2020
Modified by MohammedDamirchi from https://github.com/adafruit/TSL2561-Arduino-Library.git
Home
*/
#include <Wire.h>
#include "TSL2561.h"
// Example for demonstrating the TSL2561 library - public domain!
// connect SCL to analog 5
// connect SDA to analog 4
// connect VDD to 3.3V DC
// connect GROUND to common ground
// ADDR can be connected to ground, or vdd or left floating to change the i2c address
// The address will be different depending on whether you let
// the ADDR pin float (addr 0x39), or tie it to ground or vcc. In those cases
// use TSL2561_ADDR_LOW (0x29) or TSL2561_ADDR_HIGH (0x49) respectively
TSL2561 tsl(TSL2561_ADDR_FLOAT);
void setup(void) {
Serial.begin(9600);
if (tsl.begin()) {
Serial.println("Found sensor");
} else {
Serial.println("No sensor?");
while (1);
}
// You can change the gain on the fly, to adapt to brighter/dimmer light situations
//tsl.setGain(TSL2561_GAIN_0X); // set no gain (for bright situtations)
tsl.setGain(TSL2561_GAIN_16X); // set 16x gain (for dim situations)
// Changing the integration time gives you a longer time over which to sense light
// longer timelines are slower, but are good in very low light situtations!
tsl.setTiming(TSL2561_INTEGRATIONTIME_13MS); // shortest integration time (bright light)
//tsl.setTiming(TSL2561_INTEGRATIONTIME_101MS); // medium integration time (medium light)
//tsl.setTiming(TSL2561_INTEGRATIONTIME_402MS); // longest integration time (dim light)
// Now we're ready to get readings!
}
void loop(void) {
// Simple data read example. Just read the infrared, fullspecrtrum diode
// or 'visible' (difference between the two) channels.
// This can take 13-402 milliseconds! Uncomment whichever of the following you want to read
uint16_t x = tsl.getLuminosity(TSL2561_VISIBLE);
//uint16_t x = tsl.getLuminosity(TSL2561_FULLSPECTRUM);
//uint16_t x = tsl.getLuminosity(TSL2561_INFRARED);
Serial.print(x, DEC);
Serial.print("\t");
// More advanced data read example. Read 32 bits with top 16 bits IR, bottom 16 bits full spectrum
// That way you can do whatever math and comparisons you want!
uint32_t lum = tsl.getFullLuminosity();
uint16_t ir, full;
ir = lum >> 16;
full = lum & 0xFFFF;
Serial.print("IR: "); Serial.print(ir); Serial.print("\t\t");
Serial.print("Full: "); Serial.print(full); Serial.print("\t");
Serial.print("Visible: "); Serial.print(full - ir); Serial.print("\t");
After running the code, you will see the following image in the serial output.