Skip to main content

Práctica 5: Cómo percibir el color con Arduino

Para percibir un determinado color, vamos a utilizar uno de los sensores que vienen en nuestro kit, el TCS34725, al que por comodidad denominaremos 'sensor de color'.

En uno de sus lados, como ves en la primera foto, puedes ver 4 pines, que son los que conectaremos a nuestra protoboard y de esta a nuestro Arduino.

En el otro lado, como se muestra en la segunda foto, puedes ver el sensor que, rodeado de cuatro LED blancos se encarga de determinar la cantidad de rojo, verde y azul que contiene el objeto que le coloquemos delante.

image-1668193257466.jpg


¿Cómo funciona?

Este sensor óptico consta de una matriz de 3x4 fotodiodos filtrados para rojo, verde, azul, y sin filtro (clear). También cuenta con 4 conversores analógico digital de 16bits (ADC) que realizan la medición de los fotodiodos:

image-1668201837749.15.35.png

image-1668201850014.15.43.pngFuente: https://www.luisllamas.es/arduino-sensor-color-rgb-tcs34725/

Los conversores ADC integran la medición de los fotodiodos, que es transferida a los registros internos del TCS347.TCS34725. El estado del sensor y el estado de energía del sensor está controlado internamente.

La conexión de los módulos que integran el TCS34725 es sencilla, ya que la comunicación se realiza a través de I2C.

 

Comunicación I2C

Aunque no vamos a entrar a explicar cómo funciona la comunicación I2C (inter integrated circuits), debemos saber que se trata de un protocolo basado en la existencia de dos líneas de comunicación, una de ellas lleva la señal de reloj y es conocida como (SCL), y la otra linea lleva los datos y es conocida como (SDA).

Los Pines SDA y SDL I2CSLC se encuentran especificados en todos los componentes que usan este tipo de protocolo de comunicación, como podemos ver si volvemos a la primera foto de arriba.

Por tanto, para hacer funcionar nuestro sensor, alimentamos nuestro sensor de color desde Arduino mediante los pines G y 5V y conectamos el pin SDA y SCL del sensor a los 2 pines de nuestro UNO A4SCL y A5SDA:

image-1668252879858.jpg

 

¿Cómo conectamos el sensor a nuestro Arduino?

Para conectarlo, necesitaremos la protoboard, como ya hemos dicho al principio. Es muy importante realizar las conexiones como te indico en la imagen de abajo:

image-1668253680737.jpg

Nuestro sensor ha de estar paralelo a las líneas azul y rojo, no perpendicular. ¿Por qué? Porque la protoboard internamente está conectada de la siguiente forma:

image-1668253913399.51.11.png

Si conectamos nuestro sensor con sus pines perpendiculare a las líneas azuly rojo, lo que correspondenestamos haciendo es cortociruitar el sensor y conectar todos los pines entre sí, lo que provocará que lo rompamos y probablemente salga humo... cosa que, obviamente, queremos evitar.

Colocaremos nuestro sensor de la manera correcta y posteriormente usaremos 4 cables para conectar cada uno de los pines de la protoboard con nuestro Arduino UNO:

El pin SCL con SCL
El pin SDA con SDA
El pin G con el GND
El pin 5V con el 5V

Quedando de la siguiente manera:

image-1668254357115.jpg

Ahora, pasaremos a ver el código necesario para identificar colores dependiendo de la cantidad de rojo, verde y SCLazul respectivamente.que detecta el sensor.

 

Identificamos colores

#include <Wire.h>
#include "Adafruit_TCS34725.h"
   
/* Initialise with default values (int time = 2.4ms, gain = 1x) */
 Adafruit_TCS34725 tcs = Adafruit_TCS34725();


void setup(void) {
  Serial.begin(9600);
  
  if (!tcs.begin()) 
  {
    Serial.println("Error al iniciar TCS34725");
    while (1) delay(1000);
  }

}

void loop(void) {
  uint16_t r, g, b, c, colorTemp, lux;
  
  tcs.getRawData(&r, &g, &b, &c);
  colorTemp = tcs.calculateColorTemperature(r, g, b);
  lux = tcs.calculateLux(r, g, b);
  
  Serial.print("Temperatura color: "); Serial.print(colorTemp, DEC); Serial.println(" K");
  Serial.print("Lux : "); Serial.println(lux, DEC);
  Serial.print("Rojo: "); Serial.println(r, DEC);
  Serial.print("Verde: "); Serial.println(g, DEC);
  Serial.print("Azul: "); Serial.println(b, DEC);
  Serial.print("Clear: "); Serial.println(c, DEC);
  Serial.println(" ");
  delay(1000);
}

Web en la que introducimos los valores RGB y sabemos qué color es: https://www.rapidtables.com/web/color/RGB_Color.html



¿Qué tenemos que presentar?

REFERENCIAS:

Imagen protoboard conexiones: https://2.bp.blogspot.com/-VL06n9GES1w/U3wniqqJoJI/AAAAAAAAACA/rbZNM-qF9lE/s1600/protoboard+(2).jpg

Sensor TCS34725: https://www.luisllamas.es/medir-arduino-sensor-color-arduino-colorimetro-tcs3200/rgb-tcs34725/