Introduction

Dans ce projet, nous découvrons un nouveau type de capteur : le capteur de couleur TCS3472, associé à une LED RGB permettant de visualiser directement la couleur détectée. L’ensemble forme un système capable de reconnaître une couleur et de la restituer de manière lumineuse.

Le composant principal du module est une puce située au centre du circuit, à proximité d’une LED blanche intégrée (pavé blanc et jaune). Cette LED éclaire l’objet à analyser afin d’obtenir des mesures fiables, indépendamment des conditions de luminosité ambiante.

La puce du capteur est partiellement transparente, ce qui permet d’observer la surface semi-conductrice. Celle-ci est composée de nombreuses cellules sensibles à la lumière, chacune équipée d’un filtre laissant passer uniquement une composante de la lumière : rouge, verte ou bleue. Le capteur mesure l’intensité de ces trois composantes (RGB) et transmet les données à la carte Arduino.

L’Arduino analyse ensuite les valeurs reçues et détermine la couleur dominante de l’objet observé. En fonction de ce résultat, il commande une LED RGB externe qui s’allume avec la même couleur que celle détectée par le capteur. Cette LED permet ainsi de visualiser instantanément et de manière intuitive la couleur lue par le TCS3472.

Schéma du circuit

Programme du projet

Pour ce projet, il est nécessaire d’installer la librairie Adafruit TCS34725, qui permet de communiquer avec le capteur de couleur TCS34725 et de récupérer ses différentes valeurs de mesure.

Cette librairie est directement disponible via le gestionnaire de bibliothèques de l’IDE Arduino, ce qui facilite son installation et son utilisation dans le programme :

#include <Wire.h>
#include "Adafruit_TCS34725.h"

#define brRouge 3
#define brVerte 5
#define brBleue 6
#define anodeComm true 

byte tabGamma[256];
Adafruit_TCS34725 monTCS = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS,TCS34725_GAIN_4X);

void setup() {
Serial.begin(9600);
Serial.println("Le voleur de couleurs !");
if (monTCS.begin()) {
Serial.println("Capteur actif.");
} else {
Serial.println("Pas de TCS34725...verifier les branchements.");
while (1);
}
pinMode(brRouge, OUTPUT);
pinMode(brVerte, OUTPUT);
pinMode(brBleue, OUTPUT);

for (int i=0; i<256; i++) {
float x = i;
x /= 255;
x = pow(x, 2.5);
x *= 255;
if (anodeComm) {
tabGamma[i] = 255 - x;
} else {
tabGamma[i] = x;
}
}
}

void loop() {
uint16_t clear, iRO, iVE, iBL;
monTCS.setInterrupt(false);
delay(60); 
monTCS.getRawData(&iRO, &iVE, &iBL,&clear);
monTCS.setInterrupt(true);
Serial.println();
Serial.print("C:\t"); Serial.print(clear);
Serial.print("\tR:\t"); Serial.print(iRO);
Serial.print("\tG:\t"); Serial.print(iVE);
Serial.print("\tB:\t");
Serial.println(iBL);
// Calcul des valeurs hexa pour le Web
uint32_t sum = clear;
float r, g, b;
r = iRO; r /= sum;
g = iVE; g /= sum;
b = iBL; b /= sum;
r *= 256; g *= 256; b *= 256;
Serial.print(" Couleurs web \t\t");
Serial.print((int)r, HEX);
Serial.print((int)g, HEX);
Serial.print((int)b, HEX);
Serial.println();
Serial.print(" Couleurs de base \t");
Serial.print((int)r ); Serial.print(" ");
Serial.print((int)g ); Serial.print(" ");
Serial.println((int)b );
analogWrite(brRouge, tabGamma[(int)r]);
analogWrite(brVerte, tabGamma[(int)g]);
analogWrite(brBleue, tabGamma[(int)b]);
delay(1000);
}
  1. Initialise le capteur de couleur et les LEDs.

  2. Crée une table gamma pour corriger la luminosité des LEDs.

  3. Dans la boucle :

    • Lit les valeurs de couleur du capteur (R, V, B, et lumière totale).

    • Normalise les valeurs pour compenser la lumière ambiante.

    • Affiche les valeurs sur le moniteur série.

    • Allume les LEDs pour reproduire la couleur détectée.

En gros, ce programme est un “voleur de couleurs” : il lit une couleur avec le capteur et la reproduit en RGB sur des LEDs.