Sign in to follow this  
panlyu

Design a color detector by using RGB LEDs

1 post in this topic

Hello,I want to share an interesting project of designing a color detector by using RGB LEDs with you. If you have any interests, then keep on reading.

FWTWIP5FUVSFZJE.MEDIUM.jpg.93afc8a6582b337397b652d75a08bc44.jpg

Have you ever wanted an automated way to detect the color of an object? By shining light of a certain color on the object and looking at how much light is reflected back, you can tell what color the object is. For example, if you shine a red light on a red object, that light will be reflected back. If you shine a blue light on a red object, the object will absorb some of that light and less of it will be reflected back.

https://www.youtube.com/watch?v=DqboDjQX0UE

Step 1: Parts Needed

F73MNLBFUI0T240.MEDIUM.jpg.65f7098f88eb7ce0e8837aa7b8028796.jpg

I used a PIC 16F887 Microcontroller, but almost any with a pulse-width-modulation capability will work. 

I only need the microcontroller and RGB LED to have a wide range of color detectors, but if you only want a circuit that detects one color, you don't need a microcontroller - you only need a bright LED of the color you want to detect. The standard red LED is the "indicator LED" - it lights up when the right color is detected.

Step 2: Build the Circuit

FP7D06DFUI0T249.MEDIUM.jpg.310a51c29ad631e5ae2387c7f052ed10.jpgF4BKV1NFUI0T24D.MEDIUM.jpg.b1f7cd1ea9264304340cae2fa91d3c3d.jpg

 

The schematic is rather simple, and in general form, is shown below. The RGB LED is externally powered by a PWM signal.

I put electrical tape around the photoresistor so ambient light doesn't get in - only the light directly above it will be detected.

Step 3: The Code

This code was written for a Microchip PIC 16F887, but hopefully you can get the general idea. I used the built-in potentiometer on my development board to vary the color spectrum of the RGB LED (and it doesn't go through the entire spectrum because I don't have 3 PWM modules, but it's good enough) 

Comments included. 

#include <16F887.h>
#include <delay.h>
#include "delay.c"
#include <stdlib.h>
#include <STRING.h>

#use delay(clock = 4000000)
#FUSES INTRC,NOWDT,NOPUT,NOMCLR,NOPROTECT,NOCPD,NOBROWNOUT,NOIESO,NOFCMEN,NOLVP
#byte CCP1CON = 0x17
#byte CCP2CON = 0x1D
#byte PWM1CON = 0x9B

int value = 128;
int p1 = 0;
int p2 = 0;

void my_setup_ccp1(int8 value)
{
output_low(PIN_C2);
CCP1CON = value;
PWM1CON = 0;
}

void my_setup_ccp2(int8 value)
{
output_low(PIN_C1);
CCP2CON = value;
}

//===================================
void main()
{
//A4 = power source for photodiode
output_high(PIN_A4);
output_high(PIN_B1);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_adc_ports(sAN0);

//Timer/Interrupt setup
enable_interrupts(INT_TIMER2);

my_setup_ccp1(CCP_PWM);
my_setup_ccp2(CCP_PWM);

setup_timer_2(T2_DIV_BY_1, 128, 1);
//setup_compare(2,COMPARE_PWM|COMPARE_TIMER2);

while(1){ // Prevent PIC from going to sleep.
//SET PWM DUTY CYCLE 
output_high(PIN_A5);
//Pin A3 is the photodiode connection
if(input(PIN_A3) == 1)
output_high(PIN_A4);
else
output_low(PIN_A4);
//Read value of potentiometer to change color of LED
value = read_adc();
switch (value) {

case 0:
p1 = value;
output_low(PIN_C0);
p2 = value;
break;
case 50:
p1 = value;
output_high(PIN_C0);
p2 = value;
break;
case 100:
p1 = value;
output_high(PIN_C0);
p2 = value;
break;
case 150:
output_high(PIN_C0);
p1 = 50;
p2 = value;
break;
case 200:
output_low(PIN_C0);
p1 = 0;
p2 = value;
break;
case 250:
p1 = 0;
p2 = value;
output_low(PIN_C0);
break;
}

p1 = value;
p2 = 128 - p1;

set_pwm1_duty(p1);
set_pwm2_duty(p2);
}
}

Step 4: Applications!

F5A4Z5FFUI0T24V.MEDIUM.jpg.102635d4ed2c3ed54c63f1a8bc08e84c.jpg

A simple color detector like this can be used in robotics, or for cool projects like separating legos by color, sorting M&Ms;, or as an aid for color blindness. 

Hopefully this guide was helpful in enhancing a project you had in mind! ;) LEDs are good for so many things....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this