In this example we look at the ISL29125 RED, GREEN and BLUE color light sensor
Here is some info about the sensor
The ISL29125 is a low power, high sensitivity, RED, GREEN and BLUE color light sensor (RGB) with an I2 C (SMBus compatible) interface. Its state-of-the-art photodiode array provides an accurate RGB spectral response and excellent light source to light source variation (LS2LS). The ISL29125 is designed to reject IR in light sources allowing the device to operate in environments from sunlight to dark rooms. The integrating ADC rejects 50Hz and 60Hz flicker caused by artificial light sources. A selectable range allows the user to optimize sensitivity suitable for the specific application.
In normal operation mode the device consumes 56µA, which reduces to 0.5µA in power-down mode. The ISL29125 supports hardware and software user programmable interrupt thresholds. The Interrupt persistency feature reduces false trigger notification. The device operates on supplies (VDD) from 2.25V to 3.63V, I2 C supply from 1.7V to 3.63V, and operating temperature across the -40°C to +85°C range.
FEATURES
- 56µA operating current, 0.5µA shutdown current
- Selectable range (Via I2C)
- I2C (SMBus compatible) output
- ADC resolution 16 bits
- Programmable interrupt windows
- Two optical sensitivity ranges
- Range 0 = 5.7m lux to 375 lux
- Range 1 = 0.152 lux to 10,000 lux
- Operating power supply 2.25 to 3.63V
- I2C power supply 1.7V to 3.63V
- 6 Ld ODFN (1.65×1.65×0.7mm) package
Connection
STM32 Nucleo | ISL29125 module |
3v3 | Vcc |
Gnd | Gnd |
I2C1_SDA | SDA |
I2C1_SCL | SCL |
Parts List
Here are the parts I used
Code
This example requires the https://github.com/sparkfun/SparkFun_ISL29125_Breakout_Arduino_Library
[codesyntax lang="cpp"]
#include <Wire.h> #include "SparkFunISL29125.h" // Declare sensor object SFE_ISL29125 RGB_sensor; void setup() { // Initialize serial communication Serial.begin(115200); // Initialize the ISL29125 with simple configuration so it starts sampling if (RGB_sensor.init()) { Serial.println("Sensor Initialization Successful\n\r"); } } // Read sensor values for each color and print them to serial monitor void loop() { // Read sensor values (16 bit integers) unsigned int red = RGB_sensor.readRed(); unsigned int green = RGB_sensor.readGreen(); unsigned int blue = RGB_sensor.readBlue(); // Print out readings, change HEX to DEC if you prefer decimal output Serial.print("Red: "); Serial.println(red,HEX); Serial.print("Green: "); Serial.println(green,HEX); Serial.print("Blue: "); Serial.println(blue,HEX); Serial.println(); delay(2000); }
[/codesyntax]
Output
Open the serial monitor – this is what you should expect to see
Red: 1B2
Green: 123
Blue: 14B
Red: 1B1
Green: 123
Blue: 14A
Red: 1B7
Green: 126
Blue: 14D