Using Old DVD Drive Lens As Color Detector

by sandeep jagdev in Circuits > Arduino

9100 Views, 68 Favorites, 0 Comments

Using Old DVD Drive Lens As Color Detector

20181113_192409.jpg

I have many old CD and DVD writer of PC and laptop.I tear down many of them. These employs highly accurate stepper motor(DVD and lens movement) and simple DC motor (For opening and closing tray). I use it for 3D printer and mini CNC machine. But only part it left is circuit board and DVD lens. So i come with new idea to use it in better way.Lets get started!!

Parts and Components:

Old dvd drive lens.

Arduino (any uno, nano, etc)

Light Dependent resistor (LDR).

10K ohm resistor.

1-RGB led

bread-board and jumper wires.

Computer and laptop (With installed arduino IDE).

Tear Down DVD Drive

dvd-drive-inside-27639143.jpg

Open all screw of DVD drive and open it. lens driving system mounted on rubber studs with screws on the bottom.

After tearing , you see lens of DVD drive have two lasers but in CD drive there is only one laser. DVD drive has one infrared laser for CD and other red laser for DVD. Tear down lenses insert RGB led in it and LDR on photo detector.

Circuit and Coding:

20181113_192324.jpg
Untitled.png

i use common common cathode RGB led so i connect negative to COM and other three terminals to digital pins d2,d3,d4.

on other side LDR and 10K ohm resistor perform voltage driver and convert light to voltage

int R = 2; //red connected to D2

int G = 3; //Green Connect to D3

int B = 4; //BLue conect to D4

int ldr = 14 //LDR is connected to A0 analog pin

void setup() {

int thresh_R, thresh_G, thresh_B;

Serial.begin(9600);

pinMode(R, OUTPUT);

pinMode(G, OUTPUT);

pinMode(B, OUTPUT);

////getting threshold value of red

digitalWrite(R, HIGH);

delay(500);

thresh_R = analogRead(ldr);

delay(500);

///// getting threshold value of Green

digitalWrite(R, LOW);

digitalWrite(G, HIGH);

delay(500);

thresh_G = analogRead(ldr);

delay(500);

/////getting threshold value of blue

digitalWrite(R, LOW);

digitalWrite(G, LOW);

digitalWrite(B, HIGH);

delay(500);

thresh_B = analogRead(ldr);

delay(500);

}

void loop() {

int real_R, real_G, real_B;

digitalWrite(R, HIGH);

delay(50);

real_R = analogRead(ldr);

delay(50);

digitalWrite(R, LOW);

digitalWrite(G, HIGH);

delay(50);

real_G = analogRead(ldr);

delay(50);

digitalWrite(R, LOW);

digitalWrite(G, LOW);

digitalWrite(B, HIGH);

delay(50);

real_B = analogRead(ldr);

delay(50) ;

if ((real_R > thresh_R + 2) && (real_G > thresh_G + 2) && (real_B > thresh_B + 2)

{

Serial.println("color is white");

}

else if ((real_R > thresh_R + 2) && (real_G > thresh_G))

{

Serial.println("color is yellow");

}

else if (real_R > thresh_R + 2)

{

Serial.println("color is red");

}

else if (real_G > thresh_G + 2)

{

Serial.println("color is green");

}

else if (real_B > thresh_B + 2)

{

Serial.println("color is blue");

}

}

Downloads

How It Works:

Red, Green, Blue light color of led are glow in sequence in regular intervals. but LDR value can vary according to light of surrounding area so instead of giving fix value it take value when you turn on arduino or reset.

When particular light strike on object amount of light depend on color of object for example when red light strike on red object output on red color is maximum so minimum at green and blue. these are three primary color all the color are mixture of it. So each object has its own reflective properties combination of two and more color detected by LDR shows response on serial monitor

Precautions:

DVD and CD drive laser have very small wavelength so it is harmful for eyes and skin. So don't power it or focus on such area..