TCS3472 Color Sensor and Lux Measurement

by Lithium-ion in Circuits > Arduino

1951 Views, 4 Favorites, 0 Comments

TCS3472 Color Sensor and Lux Measurement

thumb 2.JPG

This color sensor works on 12C bus and has a very low power consumption with high sensitivity to RGB color pattern.

Supplies

mini_IMG_1162.JPG

Components required:

TCS3472 Sensor module

Arduino Nano

0.96-inch SSH1306 12C OLED

5v power supply

Custom PCB from PCBWAY

Story

mini_IMG_1160.JPG

Light sensors are used to measure the value of light intensity. What if I say you can also measure Colour with accurate readings and lux value with an IR filter. Here TCS3472 comes into play, this is the smallest sensor which is used to detect the colour and LUX simultaneously. TCS3472 works on a two wire I2C address. Visible light also has some content of IR which is blocked by the IR filter inside the sensor and thus give the readings of light intensity. It also has two on board led’s which is used at the time of measuring colours. Using this we can control the brightness of led lights, make a weather station and also used in industry standard LUX meters.

This project is brough to you by PCBWAY- China's leading PCB manufacturer deals in PCB related services like- Prototyping, SMD assembly, PCBA, Stencil service, 3D printing, Flexible PCB and Metal CNC. Sign-up now to PCBWAY using this link and get free new user coupons.

TCS3472:

0c9bfb0b-dbfc-4007-8b39-1d85bb7d0b7d.jpg
mini_IMG_1142.JPG
ice_screenshot_20221108-152641.png

The TCS3472 device provides a digital return of red, green, blue (RGB), and clear light sensing values. An IR blocking filter, integrated on-chip and localized to the colour sensing photodiodes, minimizes the IR spectral component of the incoming light and allows colour measurements to be made accurately. The high sensitivity, wide dynamic range, and IR blocking filter make the TCS3472 an ideal colour sensor solution for use under varying lighting conditions and through attenuating materials.

The TCS3472 colour sensor has a wide range of applications including RGB LED backlight control, solid-state lighting, health/fitness products, industrial process controls and medical diagnostic equipment. In addition, the IR blocking filter enables the TCS3472 to perform ambient light sensing (ALS). Ambient light sensing is widely used in display-based products such as cell phones, notebooks, and TVs to sense the lighting environment and enable automatic display brightness for optimal viewing and power savings.

Features:

I2C Fast Mode Compatible Interface

Data Rates up to 400 kbit/s

Input Voltage Levels Compatible with VDD or 1.8 V Bus

Very low current consumption 250uA

3,800,000:1 Dynamic Range

Very High Sensitivity

The sensor works on an address 0x29 which can be detected through the I2C scanner example under the WIRE library.


Circuit Diagram:

ice_screenshot_20221109-124313.png
ice_screenshot_20221108-212938.png

I made the circuit using the diagram given above, you can also see the graphical representation of the components below. I got this TCS3472 colour sensor from PCBWAY gift store through the beans collected from previous order.

Here both sensor and OLED work on same I2C bus but with different address. This bus can go up to 127 devices and here we are using only two. SDA and SCL pin is connected to A4 and A5 of the Arduino respectively. This sensor module has onboard 3v voltage regulator that’s why VCC is supplied with 5V and GND is common to all.

PCB Shield Design:

DFG.png

Just plug your components into the shield and we are ready to go, this PCB has battery connection at bottom layer. It can be directly supplied using 9v battery. If you want to use the same shied for your project then download the Gerber files from here or design your Own using the schematics given above.

PCBway has a very wide network in the industry, you can share your designs and avail the gifts through beans. PCBway also offer a lot more standard industry service including Flexible PCB. You can know more about the services and capabilities by visiting the official page PCBWAY.COM.

Code:

Install all the required libraries directly from the library manager section under the tools section. You can also try more examples given in the TCS3472 library.

#include <Wire.h>
#include "Adafruit_TCS34725.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

/* Example code for the Adafruit TCS34725 breakout library */

/* Connect SCL to analog 5
Connect SDA to analog 4
Connect VDD to 3.3V DC
Connect GROUND to common ground */

/* Initialise with default values (int time = 2.4ms, gain = 1x) */
// Adafruit_TCS34725 tcs = Adafruit_TCS34725();

/* Initialise with specific int time and gain values */
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_614MS, TCS34725_GAIN_1X);

#define OLED_RESET 1
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);

void setup(void) {
Serial.begin(9600);

if (tcs.begin()) {
Serial.println("Found sense");
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1);
}

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // try 0x3D also if OLED is not working
display.clearDisplay();

// Now we're ready to get readings!
}

void loop(void) {
uint16_t r, g, b, c, colorTemp, lux;

tcs.getRawData(&r, &g, &b, &c);
// colorTemp = tcs.calculateColorTemperature(r, g, b);
colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c);
lux = tcs.calculateLux(r, g, b);

display.clearDisplay();
display.setTextSize(2); // Set the text size
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("ColorSense");

display.setTextSize(1);
display.setCursor(0,20);
display.print("Lux:");
display.setCursor(40,20);
display.print(lux, DEC);

display.setCursor(0,30);
display.print("RED: ");
display.setCursor(40,30);
display.print(r, DEC);

display.setCursor(0,40);
display.print("GREEN: ");
display.setCursor(40,40);
display.print(g, DEC);

display.setCursor(0,50);
display.print("BLUE: ");
display.setCursor(40,50);
display.print(b, DEC);
display.display();
}

Lux Measuring:

We can measure all the values in real time and this lux meter is integrated with colour sensor, you can see the readings from OLED.

Colour Recognition:

white.gif

When any coloured object is placed on the sensor then it gives high digital value to that colour, through the RGB ratio original colour can be predicted.

Red Measurements:

red.gif

Blue Measurements:

blue.gif

Green Measurements:

grrreen.gif

In the white colour all the RGB decimal values goes high (order of 5000) and black colour give all the values very low in order of 100. Practical values may differ in your case because of the variation in sensor and light.