Using an RGB LED to Detect Colours using arduino




I am going to show you how you can use an RGB LED and a Cds photocell as a colour sensor for a micro-controller. I will illustrate the method to retrieve a colour using Arduino, and I will show you a how you can verify the colour being scanned with a small Processing sketch.We will be making this colour sensor on a breadboard, but it is easily transferred onto a prototyping board, and for those who fab their own boards, this would be an awesome kit that is super cheap to throw together. I am sure it would only take about two minutes to write a gerber file for this circuit and make a nice little finished sensor.

Step 4: Code the Arduino Open up the Arduino environment, and create a new sketch by clicking File - New. For those that don`t want to follow along, I have included the code as a text file. Copy/Paste it into a new sketch in Arduino, and you are good to go. Declarations The beginning of a sketch is where we make our declarations, so type the following code into the environment window. // Define colour sensor LED pins int ledArray[] = {2,3,4}; // boolean to know if the balance has been set boolean balanceSet = false; //place holders for colour detected int red = 0; int green = 0; int blue = 0; //floats to hold colour arrays float colourArray[] = {0,0,0}; float whiteArray[] = {0,0,0}; float blackArray[] = {0,0,0}; //place holder for average int avgRead; '//' is reserved for denoted comments, therefore you do not need the text on lines that begin with '//' for the sketch to work. The rest of it are some names that we are giving to some placeholders, and the declarations for what kind of data they will contain. As you can see, we start by setting up an array to hold the pin numbers. These correspond to the pins that the different colour LEDs are conected to on the Arduino. Next we declare a Boolean value to check whether or not balancing has been performed. A Boolean value is something that returns true or false. We go on to create some place holders for the colour values, and some arrays to use for holding the scan data and balancing the detected colour. Although we are not finished yet, go ahead and save your sketch. Give it a name that is meaningful to you, something like coloursensor.pde maybe. Setup The next step in creating an Arduino sketch is to write the setup function. Setup is run when the Arduino first boots up, so this is where we tell the Arduino what how we want to use the pins and setup other features that we may need such as serial communication. Type the following below the code that you just entered. void setup(){ //setup the outputs for the colour sensor pinMode(2,OUTPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); //begin serial communication Serial.begin(9600);




Step 1: Gather Some Parts

For this sensor you will need

  • a breadboard (not required, but it is how I will walk you through it.)
  • an RGB LED (alternatively you could use 3 LEDs)
  • A 220 ohm resistor
  • A CdS photocell (these can be salvaged out of all kinds of things like nightlights or garden lamps)
  • An Arduino, or a clone. I am using a RBB in this example

Tools you will need

  • A computer
  • a cable to upload to your Arduino

Step 2: A Little Theory

Some of you might be wondering how a CdS photocell can detect colours. Well it is surprisingly simple and provides pretty accurate results.

We see colour as a frequency of light reflected from an object. So different colours reflect different wavelengths which our eyes then interpret as colours. (Maybe brain…I am no scientist)

A common CdS photocell has a very similar response to colour as the human eye.

Because colours absorb certain wavelengths and reflect certain wavelengths, we can use different wavelengths(colours) of light and take readings(from a sensor that has nearly human responses) and thereby make a pretty good guess at what colour the sensor is being exposed to.

Step 3: Build the Circuit

I have included both images of the breadboard arrangment, and a small diagram to show you how to wire up the sensor to the Arduino.

The circuit is really simple. First we will look at the RGB LED half of the sensor. It is simply a common cathode RGB LED connected to pins 2,3, and 4 of the Arduino with a 220 ohm resistor going out to ground. This will allow us to turn each of the LEDs within the package on and off individually when we need to.

On the other side of the circuit we have a Cds photocell being fed 5 volts from the arduino. combined with the resistor going out to ground this effectively creates a voltage divider which allows us to read a changing analog value on analog pin 0.

This sensor works great on a breadboard, but it works even better if you put it into a more permanent enclosure to minimilize ambient light interference. The photo of the light tight (ish) enclosure was used in another one of my projects and is included here only to illustrate what I meant. (Feel free to check it out though, here.)

Step 4: Code the Arduino

Open up the Arduino environment, and create a new sketch by clicking File – New. For those that don`t want to follow along, I have included the code as a text file. Copy/Paste it into a new sketch in Arduino, and you are good to go.

Declarations

The beginning of a sketch is where we make our declarations, so type the following code into the environment window.

// Define colour sensor LED pins
int ledArray[] = {2,3,4};
// boolean to know if the balance has been set
boolean balanceSet = false;//place holders for colour detected
int red = 0;
int green = 0;
int blue = 0;//floats to hold colour arrays
float colourArray[] = {0,0,0};
float whiteArray[] = {0,0,0};
float blackArray[] = {0,0,0};

//place holder for average
int avgRead;

‘//’ is reserved for denoted comments, therefore you do not need the text on lines that begin with ‘//’ for the sketch to work.The rest of it are some names that we are giving to some placeholders, and the declarations for what kind of data they will contain.

As you can see, we start by setting up an array to hold the pin numbers. These correspond to the pins that the different colour LEDs are conected to on the Arduino.

Next we declare a Boolean value to check whether or not balancing has been performed. A Boolean value is something that returns true or false.

We go on to create some place holders for the colour values, and some arrays to use for holding the scan data and balancing the detected colour.
Using an RGB LED to Detect Colours
Although we are not finished yet, go ahead and save your sketch. Give it a name that is meaningful to you, something like coloursensor.pde maybe.

Setup

The next step in creating an Arduino sketch is to write the setup function. Setup is run when the Arduino first boots up, so this is where we tell the Arduino what how we want to use the pins and setup other features that we may need such as serial communication.

Type the following below the code that you just entered

void setup(){

//setup the outputs for the colour sensor
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);

//begin serial communication
Serial.begin(9600);

 

 

For more detail: Using an RGB LED to Detect Colours




Clip to Evernote

Leave a Comment

(Spamcheck Enabled)

Read previous post:
Starting with ATTiny13

As any beginner electronics hobbyist I have recently came to conclusion that using Arduino(or even Mega328) for small projects is...

Close
Scroll to top