Si observamos más de cerca el sensor, podemos ver cómo detecta varios colores. Los fotodiodos tienen tres filtros de color diferentes. Dieciséis de ellos tienen filtros rojos, otros 16 tienen filtros verdes, otros 16 tienen filtros azules y los otros 16 fotodiodos son claros sin filtros.
Cada 16 fotodiodos están conectados en paralelo, por lo que usando los dos pines de control S2 y S3 podemos seleccionar cuál de ellos será leído. Entonces, por ejemplo, si queremos detectar el color rojo, podemos usar los 16 fotodiodos con filtro rojo configurando los dos pines en un nivel lógico bajo de acuerdo con la tabla.
El sensor tiene dos pines de control más, S0 y S1, que se utilizan para escalar la frecuencia de salida. La frecuencia se puede escalar a tres valores predeterminados diferentes de 100 %, 20 % o 2 %. Esta función de escalado de frecuencia permite optimizar la salida del sensor para varios contadores de frecuencia o microcontroladores.
Ahora estamos listos para continuar y conectar el sensor TCS230 a la placa Arduino. Aquí está el esquema del circuito.
Puede obtener los componentes necesarios para este tutorial de Arduino en los siguientes enlaces:
Sensor de color TCS230 TCS3200…….
Placa Arduino ………………………………
Placa de prueba y cables de salto ………
Código fuente del sensor de color TCS230
Descripción: Primero necesitamos definir los pines a los que está conectado el sensor y definir una variable para leer la frecuencia. En la sección de configuración, debemos definir los cuatro pines de control como salidas y la salida del sensor como una entrada de Arduino. Aquí también debemos configurar la escala de frecuencia, para este ejemplo, la configuraré en 20% e iniciaré la comunicación en serie para mostrar los resultados en el Monitor en serie.
En la sección de bucle, comenzaremos con la lectura de los fotodiodos filtrados rojos. Para ello pondremos los dos pines de control S2 y S3 a nivel lógico bajo. Luego, usando la función "pulseIn()", leeremos la frecuencia de salida y la pondremos en la variable "frecuencia". Usando la función Serial.print() imprimiremos el resultado en el monitor serial. El mismo procedimiento se aplica a los otros dos colores, solo necesitamos ajustar los pines de control para el color apropiado.
/* Arduino Color Sensing Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define 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);
}
Code language: Arduino (arduino)
Ahora, si ejecutamos el Serial Monitor, comenzaremos a obtener algunos valores. Estos valores dependen de la escala de frecuencia seleccionada, así como de la iluminación ambiental.
Tenga en cuenta aquí que tres valores difieren debido a la diferente sensibilidad de cada tipo de fotodiodo, como se ve en el diagrama de respuesta espectral del fotodiodo de la hoja de datos del sensor.
Sin embargo, ahora veamos cómo reaccionan los valores cuando traigamos diferentes colores frente al sensor. Entonces, por ejemplo, si traemos el color rojo, el valor inicial bajará, en mi caso de alrededor de 70 a alrededor de 25.
Así que ahora, si queremos representar los colores detectados con el modelo RGB que tiene valores de 0 a 255, usaremos la función map() para mapear o convertir las lecturas a los valores de 0 a 255.
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 25,70,255,0);
El valor de 70 se asignará a 0 y el valor de 25 a 255. El mismo procedimiento se aplica a los otros dos colores.
Aquí está el código fuente final para este ejemplo:
/* Arduino Color Sensing Tutorial
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define 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);
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 25,72,255,0);
// 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);
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 30,90,255,0);
// 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);
//Remaping the value of the frequency to the RGB Model of 0 to 255
frequency = map(frequency, 25,70,255,0);
// Printing the value on the serial monitor
Serial.print("B= ");//printing name
Serial.print(frequency);//printing RED color frequency
Serial.println(" ");
delay(100);
}
Code language: Arduino (arduino)
Tenga en cuenta que los colores no son tan precisos, pero aún son lo suficientemente buenos para proyectos simples. Como otro ejemplo del sensor de color TCS230 en mi próximo video, aprenderemos cómo hacer una máquina clasificadora automática de color Arduino.
No dude en hacer cualquier pregunta en la sección de comentarios a continuación y no olvide consultar mi colección de proyectos Arduino.