You are on page 1of 11

http://howtomechatronics.

com/tutorials/arduino/arduino-color-sensing-tutorial-tcs230-tcs3200color-sensor/
prueba sensor para determinar rangos

Cmo funciona el sensor de color TCS230

El TCS230 detecta la luz de color con la ayuda de una matriz de 8 x 8 de fotodiodos. Luego, utilizando un
convertidor de corriente a frecuencia de las lecturas de los fotodiodos se convierten en una onda cuadrada con
una frecuencia directamente proporcional a la intensidad de la luz. Por ltimo, el uso de la placa Arduino
podemos leer la salida de onda cuadrada y obtener los resultados para el color.

Si echamos un vistazo ms de cerca el sensor podemos ver cmo se detecta varios colores. Los fotodiodos
tienen tres filtros de color diferentes. Diecisis de ellos tienen filtros rojo, otro 16 tienen filtros verdes, otro 16
tienen filtros de color azul y los otros 16 son fotodiodos clara, sin filtros.

Cada uno de 16 fotodiodos estn conectados en paralelo, por lo que el uso de los dos pines de control S2 y S3
podemos seleccionar cul de ellos ser ledo. As por ejemplo, si queremos detectar el color rojo, slo podemos
utilizar los fotodiodos 16 rojas filtrada mediante el establecimiento de los dos pasadores a nivel lgico bajo,
segn la tabla.

El sensor tiene dos ms clavijas de control, S0 y S1 que se utilizan para escalar la frecuencia de salida. La
frecuencia se pueden ampliar a tres valores predefinidos diferentes de 100%, 20% o 2%. Esta funcin de la
frecuencia de escala permite la salida del sensor a ser optimizado para diferentes contadores de frecuencia o
microcontroladores.

Ahora estamos listos para seguir adelante y conectar el sensor TCS230 a la placa Arduino. Aqu estn los
esquemas de circuitos.

Usted puede obtener los componentes necesarios para este tutorial Arduino a partir de los siguientes enlaces:

TCS230 TCS3200 sensor de color ...... Amazon

Arduino .............................. .. Amazon

* Nota: Estos son enlaces de afiliados. Puedo hacer una comisin si usted compra los componentes a travs de
estos enlaces.
Le agradecera su apoyo en este camino!

Cdigo Fuente sensor de color TCS230


Descripcin: En primer lugar es necesario definir los pasadores a la que est conectado el sensor y definir una
variable para la lectura de la frecuencia. En la seccin de configuracin que necesitamos para definir los cuatro
pines de control como salidas y la salida del sensor como una entrada de Arduino. Aqu tambin tenemos que
establecer la asociacin con la frecuencia, para este ejemplo voy a ponerlo en un 20%, e iniciar la comunicacin
en serie para la visualizacin de los resultados en la pantalla de serie.
En la seccin de bucle, vamos a comenzar con la lectura de los fotodiodos filtradas rojas. A tal fin vamos a

configurar los dos pines de control S2 y S3 a nivel lgico bajo. Luego, utilizando la funcin "pulseIn ()" vamos a
leer la frecuencia de salida y ponerlo en la "frecuencia" variable. Uso de la funcin Serial.print () que se imprimir
el resultado en el monitor de serie. El mismo procedimiento se aplica a los otros dos colores, slo tenemos que
ajustar las clavijas de control para el color apropiado.
/*
Arduino Color Sensing Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define
#define
#define
#define
#define

S0 4
S1 5
S2 6
S3 7
sensorOut 8

int frequency = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Setting frequency-scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop() {
// Setting red filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("R= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);
// Setting Green filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("G= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(100);

// Setting Blue filtered photodiodes to be read


digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
// Printing the value on the serial monitor
Serial.print("B= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.println(" ");
delay(100);
}

http://howtomechatronics.com/projects/arduino-color-sorter-project/
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.

/* Arduino Project - Color Sorting Machine


*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#include <Servo.h>
#define
#define
#define
#define
#define

S0 2
S1 3
S2 4
S3 5
sensorOut 6

Servo topServo;
Servo bottomServo;
int frequency = 0;
int color=0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Setting frequency-scaling to 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
topServo.attach(7);
bottomServo.attach(8);
Serial.begin(9600);
}
void loop() {
topServo.write(115);
delay(500);
for(int i = 115; i > 65; i--) {
topServo.write(i);
delay(2);

45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.

}
delay(500);
color = readColor();
delay(10);
switch (color) {
case 1:
bottomServo.write(50);
break;
case 2:
bottomServo.write(75);
break;
case 3:
bottomServo.write(100);
break;
case 4:
bottomServo.write(125);
break;
case 5:
bottomServo.write(150);
break;
case 6:
bottomServo.write(175);
break;
case 0:
break;
}
delay(300);
for(int i = 65; i > 29; i--) {
topServo.write(i);
delay(2);
}
delay(200);
for(int i = 29; i < 115; i++) {
topServo.write(i);
delay(2);
}
color=0;
}
// Custom Function - readColor()
int readColor() {
// Setting red filtered photodiodes to be read
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
// Printing the value on the serial monitor
Serial.print("R= ");//printing name

104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.

Serial.print(frequency);//printing RED color frequency


Serial.print(" ");
delay(50);
// Setting Green filtered photodiodes to be read
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
// Printing the value on the serial monitor
Serial.print("G= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.print(" ");
delay(50);
// Setting Blue filtered photodiodes to be read
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
// Reading the output frequency
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
// Printing the value on the serial monitor
Serial.print("B= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.println(" ");
delay(50);
if(R<45 & R>32 & G<65 & G>55){
color = 1; // Red
}
if(G<55 & G>43 & B<47 &B>35){
color = 2; // Orange
}
if(R<53 & R>40 & G<53 & G>40){
color = 3; // Green
}
if(R<38 & R>24 & G<44 & G>30){
color = 4; // Yellow
}
if(R<56 & R>46 & G<65 & G>55){
color = 5; // Brown
}
if (G<58 & G>45 & B<40 &B>26){
color = 6; // Blue
}
return color;
}

http://howtomechatronics.com/tutorials/arduino/arduino-color-sensing-tutorial-tcs230-tcs3200color-sensor/

Prueba

http://www.himix.lt/arduino/arduino-and-color-recognition-sensortcs230-tcs3200/

const int s0 = 8;
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;
// LED pins connected to Arduino
int redLed = 2;
int greenLed = 3;
int blueLed = 4;
// Variables
int red = 0;
int green = 0;
int blue = 0;
void setup()
{
Serial.begin(9600);
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop()
{
color();
Serial.print("R Intensity:");
Serial.print(red, DEC);
Serial.print(" G Intensity: ");
Serial.print(green, DEC);
Serial.print(" B Intensity : ");
Serial.print(blue, DEC);
//Serial.println();
if (red < blue && red < green && red < 20)
{
Serial.println(" - (Red Color)");
digitalWrite(redLed, HIGH); // Turn RED LED ON
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
}
else if (blue < red && blue < green)
{

Serial.println(" - (Blue Color)");


digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH); // Turn BLUE LED ON
}
else if (green < red && green < blue)
{
Serial.println(" - (Green Color)");
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH); // Turn GREEN LED ON
digitalWrite(blueLed, LOW);
}
else{
Serial.println();
}
delay(300);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
}
void color()
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
//count OUT, pRed, RED
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
//count OUT, pBLUE, BLUE
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
//count OUT, pGreen, GREEN
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}

You might also like