Skip to content

Arduino Color Detection using TCS3200 – TCS230 (GY-31) color sensor module + RGB project



Hello and welcome to SurtrTech, in this tutorial we’ll be using the TCS3200, TCS230 or GY-31, color sensor module with Arduino UNO board, and there will be a project using a RGB LED to reproduce the detected colors.

The module has an 8×8 photodiode array, 16 of them with a red filter, 16 with a blue one, 16 with a green one and 16 without a filter (clear), we select what filter to use and read its value, and in the code we combine them depending on the application or project.

The light is detected by the photodiodes and the output is a frequency proportional to the current flowing through the photodiodes which is related to the filter used and the object’s color detected.

tcs-3200-top.jpg

-The module has (Vcc/GND) pins, they are redundant.

– S0/S1 pins control the output frequency scaling.

– S2/S3 pins control which set of photodiodes we gonna measure (Red/Green/Blue/Clear)

– Out is the output signal and LED pin controls the LEDs lights on the front.

 

T1.png
Output frequency scaling modes

This option permits the module to be used with different measuring techniques, and types of microcontrollers, in the tutorial and codes I kept using it at 100%, you can change it if you want, it depends just on the logic level of their pins (HIGH/LOW).

T2
Photodiode set selection

By also controlling the logic levels of S2/S3 we can select which filter or no filter to use, in the code I go through Red/Green/Blue, if your application require one or two filters only you can do it too.

For the LED pin, if it’s not connected, the LEDs will light up automatically, but if you want to turn them off you can put the LED pin to LOW.

For the Out pin, as the signal given by the sensor is a frequency,  we measure the duration as they are related (Duration=1/Frequency), so the higher the frequency of a color, the lower is the duration measured, which means that the object detected has a certain color (check the video tutorial above).



Hardware and parts

We’ll be using the Arduino UNO board as usual, the RGB LED is optional and only used with the project I did, and of course I added some jump wire…

Wirings

Vcc/GND are the same chose which one you want to use, pay attention some modules have “OE” pin, leave it on LOW level otherwise it turns off the module.

Wiring 1: Basic wiring of the module

Wiring 1
Direct wiring to test with Serial monitor

Wiring 2: Adding RGB LED for the project

Don’t forget the RGB should be connected to PWM pins and here I have a common cathode one.

Wiring 2
Using the RGB



Codes

Code 1:

Code 1 Is just direct wiring and reading the output signal for Red/Blue/Green, you can use it to calibrate your module, for example place some object and check the sensor values, because those values are related to the lighting conditions, exposure, and the object itself. Download the code here or check below.

Code 2:

Now we have an idea about the values for each color, we can start identifying them, the easy method is that during first tests you’ll notice that the color of the object has the lowest value, which is a duration, (higher frequency), check tests below. Download the code here or check below.



Code 3:

Here we are using the RGB LED, and we try to reproduce the values of the colors given by the sensor, and most of the time it reproduce the color of the object detected, here what you should know: the min/max value given by the sensor for each color, and that it’s inverted (the lowest the value, the higher is the color).

This is the function we used, so we generate a PWM signal with “analogWrite”, on the pin (LED_R) which is the Red pin for the RGB LED connected to pin D3, the value we write is proportional to “Red” value which is the Red value given by the sensor, and it has 15 as minimum and 60 as maximum (those are my proper values, try measuring your own), and this value is converted to 255-0,
so the 15 will be “equal” to 255 and 60 will be “equal” to 0
For example if the module gives us “15”, the LED_R will receive “255” value which is the highest (5V), because as said the lower the value the higher is the color)… Download the code here or check below.

Tests

Test 1: Simple use and color detection

The last line shows the result when the module is exposed to the red surface, the red is the lowest value, the issue is that the surface is reflective which made the blue value low as well.

Test_1.png
This is the Test of the Code 1, the RGB values of its object is displayed in the Serial monitor and as you can notice, the RED value is the lowest one

Test 2: Output the color instead of RGB values

Test_2.png
Here in the code 2, we don’t display the values, but the color of the object if identified, here we have green object and green is detected



Test 3: RGB LED to reproduce the color detected

Test_3.png
Code 3, the blue color of the notebook is reproduced with the RGB LED

Add-ons

  • In the code 2, you can add as many colors as you want just measure their values
  • Don’t change a lot the module placement and lighting when calibrating the module
  • For the RGB code, the blue is very dominating, you can try to reduce it

Yassine View All

Automation and Electrical Engineer, Electronics amateur trying to share my little projects.

2 thoughts on “Arduino Color Detection using TCS3200 – TCS230 (GY-31) color sensor module + RGB project Leave a comment

Leave a Reply

Discover more from SURTR TECHNOLOGY

Subscribe now to keep reading and get access to the full archive.

Continue reading