El sensor de color TCS34725 de Adafruit es capaz de detectar colores y descomponerlos en el formato RGB (del inglés Red Green Blue), para lo cual utiliza el protocolo de comunicación I2C con la dirección física 0x29.
Conexión al Arduino UNO
El sensor es capaz de funcionar a 3.3V y 5V, para este ejemplo, se conectará a la salida de 5v del Arduino UNO.
Tal y como se muestra en la imagen, el pin SDA del sensor se conecta al puerto analógico A4 y el pin SCL del sensor al puerto analógico A5.
Instalación de la biblioteca de Adafruit
La forma más sencilla de instalar la biblioteca relacionada al sensor es por medio del administrador de bibliotecas del Arduino IDE. Al cual se entra por medio del menú: Programa -> Incluir librería -> Gestionar librerías. Una vez ahí, se digita el código TCS34725 y luego se da click al botón de instalar. De esta forma estará disponible para ser reverenciado en los proyectos.
Biblioteca personalizada para el TCS34725
Con el fin de facilitar el uso del sensor escribí una biblioteca para que se encargue de los detalles técnicos del sensor y que el manejo de los colores sea más sencillo.
Los archivos de la biblioteca están disponibles en GitHub en el siguiente enlace: https://github.com/jorgemvc/SensorRGB
La biblioteca incluye el manejo del sensor por medio de los siguientes métodos:
- Inicio: devuelve verdadero si el sensor existe y se pudo inicializar correctamente y falso en caso contrario.
- getRGBColor: realiza la lectura de color por medio del sensor y realiza los cálculos necesarios para determinar los valores del 0 al 255 de la composición del color detectado.
- Red, Green, Blue: devuelven el valor correspondiente a cada uno de los colores detectados en la escala de 0 a 255.
- Diff: calcula la distancia euclideana del color detectado, con la composición de color enviada como parámetro.
Forma de uso
Se definen diferentes colores por medio de una matriz, la cual tiene por cada fila, la definición RGB de cada color en el orden: rojo, verde y azul. Luego por medio de un arreglo de cadenas, se establece el nombre correspondiente a cada definición de color creada.
El método getColor() lo que hace es medir la distancia entre cada color definido y el color detectado, de esta forma el que tenga menor distancia será el color elegido.
Lógicamente, los colores “puros” son difíciles de encontrar, por lo que se encontrarán combinaciones que su composición tenderá a un color puro. Por ejemplo, un rojo es 255,0,0; sin embargo, al momento de la lectura podemos obtener una gama del rojo como el (171, 50, 50) que es una tonalidad de rojo.
Referencias de interés
- Rapidtables. 18.Jun.2017. RGB Color Codes Chart. http://www.rapidtables.com/web/color/RGB_Color.htm
- Arduino CC. 18.Jun.2017. Arduino – Wire. Arduino. https://www.arduino.cc/en/Reference/Wire