Le capteur de couleur TCS230 ne vous renvoie pas une tension à lire, mais une fréquence : plus la lumière reçue est forte, plus le signal carré qu’il émet est rapide. L’Arduino n’a donc rien à convertir, il compte des impulsions — et cette mesure résiste très bien au bruit, ce qui explique la longévité de ce capteur dans les projets de tri et de reconnaissance de couleur.
Nous livrons le capteur monté sur sa petite carte noire sérigraphiée, avec ses quatre LED blanches d’éclairage, ses résistances et son connecteur mâle au pas de 2,54 mm. Il se branche directement sur une Arduino en 5 V : aucun module intermédiaire, aucune bibliothèque à installer.
Comment le capteur mesure une couleur
Sous la fenêtre centrale se trouve une matrice de 64 photodiodes : 16 recouvertes d’un filtre rouge, 16 d’un filtre vert, 16 d’un filtre bleu et 16 sans filtre. Les quatre groupes sont imbriqués les uns dans les autres pour que la moindre différence de luminosité sur la surface soit sans effet : chaque groupe reçoit la même lumière, seul le filtre change.
Ces photodiodes produisent un courant proportionnel à la lumière reçue, et le circuit convertit ce courant en une fréquence. Deux paires de broches de commande décident de tout :
- S2 et S3 choisissent le filtre actif : rouge, vert, bleu, ou aucun filtre (mesure de la lumière totale).
- S0 et S1 choisissent l’échelle de la fréquence de sortie : 2 %, 20 % ou 100 % de la fréquence maximale, plus un mode veille.
Mesurer une couleur, c’est donc jouer trois fois la même scène : on sélectionne le filtre rouge et on compte, puis le vert, puis le bleu. La comparaison des trois chiffres donne la teinte, et la somme des trois donne la luminosité.
Caractéristiques techniques
| Référence | TCS230, convertisseur couleur vers fréquence. Le même module est livré par les fabricants avec la puce TCS3200, qui partage exactement le brochage, la table de commande et le programme de cette page. |
|---|---|
| Alimentation | 2,7 à 5,5 V continu — 5 V sur Arduino |
| Consommation | Environ 2 mA en fonctionnement, moins de 15 µA en veille (mode veille par S0 et S1) |
| Sortie | Signal carré à 50 % de rapport cyclique, fréquence proportionnelle à l’intensité lumineuse |
| Fréquence pleine échelle | 10 à 12 kHz à l’échelle 2 %, 100 à 120 kHz à 20 %, 500 à 600 kHz à 100 % |
| Matrice de photodiodes | 8 × 8 photodiodes de 120 µm — 16 par filtre (rouge, vert, bleu, sans filtre) |
| Commandes | S0, S1 : échelle de fréquence — S2, S3 : filtre de couleur — OE : activation de la sortie, active à l’état bas |
| Éclairage | Quatre LED blanches soudées autour du capteur, alimentées par la carte |
| Distance de travail | Objet posé à quelques millimètres de la fenêtre : c’est la lumière réfléchie par l’objet qui est mesurée |
| Température de service | −40 °C à +70 °C |
| Connecteur | Broches mâles au pas de 2,54 mm, compatibles plaque d’essai et fils Dupont |
Le brochage
Les broches sont sérigraphiées sur la carte. Toutes les entrées de commande sont lues par le capteur comme des niveaux logiques : elles se pilotent avec des sorties numériques d’Arduino.
VCC | Alimentation, à relier au 5V de l’Arduino. |
|---|---|
GND | La masse, référence commune du montage. |
S0 et S1 | Échelle de la fréquence de sortie. Toutes deux pilotées par une sortie numérique. |
S2 et S3 | Choix du filtre de couleur. Toutes deux pilotées par une sortie numérique. |
OUT | La sortie fréquence, à relier à une entrée numérique de l’Arduino. |
Certaines cartes ajoutent une huitième broche à côté de GND : selon le lot, c’est l’activation de la sortie (OE) ou la commande de l’éclairage. Lisez la sérigraphie de votre carte — elle n’entre pas dans le câblage de cette page, qui fonctionne telle quelle. Les quatre LED d’éclairage sont, sur ces cartes, alimentées en permanence par VCC.
Les deux réglages à connaître
Le filtre, par S2 et S3
S2 bas, S3 bas | Filtre rouge |
|---|---|
S2 bas, S3 haut | Filtre bleu |
S2 haut, S3 bas | Sans filtre — toute la lumière reçue |
S2 haut, S3 haut | Filtre vert |
L’échelle, par S0 et S1
S0 bas, S1 bas | Veille — le capteur ne consomme presque plus rien |
|---|---|
S0 bas, S1 haut | 2 % — jusqu’à 12 kHz |
S0 haut, S1 bas | 20 % — jusqu’à 120 kHz |
S0 haut, S1 haut | 100 % — jusqu’à 600 kHz |
Pour un relevé sur Arduino, l’échelle 2 % est le meilleur choix : la fréquence reste lente, chaque mesure tient dans une microseconde près, et vos valeurs ne saturent pas. Les échelles supérieures servent surtout aux circuits qui comptent les impulsions par compteur matériel.
Mini-projet : lire la couleur d’un objet
Un montage complet en une quinzaine de minutes : le capteur mesure le rouge, le vert et le bleu d’un objet posé devant lui et affiche les trois fréquences, puis la part de chaque couleur, sur le moniteur série.
Ce qu’il faut
| Le capteur | Le capteur de couleur TCS230 de cette page |
|---|---|
| Le cerveau | Uno R3 + câble USB |
| Le support | Plaque d’essai 400 points |
| Les liaisons | 10 × fil mâle-femelle |
Le capteur porte des broches mâles, la plaque d’essai n’accepte que des broches mâles : ce sont donc des fils mâle-femelle qu’il faut, l’extrémité femelle se clippant sur le capteur.
Le câblage
Capteur VCC | → Arduino 5V |
|---|---|
Capteur GND | → Arduino GND |
Capteur S0 | → Arduino D4 |
Capteur S1 | → Arduino D5 |
Capteur S2 | → Arduino D6 |
Capteur S3 | → Arduino D7 |
Capteur OUT | → Arduino D8 |
Le programme
À copier dans l’IDE Arduino, puis à téléverser sur la carte :
/*
* Lire la couleur d'un objet - capteur TCS230
* Carte : Arduino Uno R3
* Montage : capteur TCS230 en 5 V, sortie OUT sur D8
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
const byte PIN_S0 = 4; // echelle de frequence
const byte PIN_S1 = 5;
const byte PIN_S2 = 6; // filtre de couleur
const byte PIN_S3 = 7;
const byte PIN_OUT = 8; // sortie du capteur
// Le couple (S2, S3) choisit le filtre mesure :
// bas bas = rouge | bas haut = bleu | haut bas = sans filtre | haut haut = vert
void choisirFiltre(byte s2, byte s3) {
digitalWrite(PIN_S2, s2);
digitalWrite(PIN_S3, s3);
delay(5); // le capteur a besoin d'un cycle pour changer de filtre
}
// Chronometre 20 impulsions et en deduit la frequence en hertz.
// La sortie est un signal carre a 50 % : 20 impulsions font 10 periodes.
unsigned long lireFrequence() {
unsigned long duree = 0;
for (byte i = 0; i != 20; i++) {
duree = duree + pulseIn(PIN_OUT, LOW, 100000); // niveau bas, en microsecondes
}
if (duree == 0) {
return 0; // rien de mesure : capteur dans le noir ou debranche
}
// 10 periodes ont pris 'duree' microsecondes, donc f = 10 000 000 / duree
return 10000000UL / duree;
}
void setup() {
pinMode(PIN_S0, OUTPUT);
pinMode(PIN_S1, OUTPUT);
pinMode(PIN_S2, OUTPUT);
pinMode(PIN_S3, OUTPUT);
pinMode(PIN_OUT, INPUT);
// Echelle 2 % : la frequence reste dans la plage que pulseIn mesure bien
digitalWrite(PIN_S0, LOW);
digitalWrite(PIN_S1, HIGH);
Serial.begin(9600);
Serial.println("Capteur de couleur pret");
}
void loop() {
choisirFiltre(LOW, LOW); // rouge
unsigned long rouge = lireFrequence();
choisirFiltre(HIGH, HIGH); // vert
unsigned long vert = lireFrequence();
choisirFiltre(LOW, HIGH); // bleu
unsigned long bleu = lireFrequence();
unsigned long total = rouge + vert + bleu;
Serial.print("Rouge ");
Serial.print(rouge);
Serial.print(" Hz - Vert ");
Serial.print(vert);
Serial.print(" Hz - Bleu ");
Serial.print(bleu);
Serial.print(" Hz - ");
if (total == 0) {
Serial.println("aucune lumiere recue, approchez l'objet du capteur");
} else {
Serial.print("part rouge ");
Serial.print(100 * rouge / total);
Serial.print(" - part verte ");
Serial.print(100 * vert / total);
Serial.print(" - part bleue ");
Serial.println(100 * bleu / total);
}
delay(500);
}Comment ça marche
pulseIn(PIN_OUT, LOW)mesure en microsecondes la durée pendant laquelle la sortie reste au niveau bas. Vingt impulsions donnent dix périodes complètes, ce qui lisse les irrégularités : la division10 000 000 / dureeredonne directement des hertz.- Le
delay(5)après chaque changement de filtre n’est pas décoratif. Le capteur a besoin d’un cycle complet avant que la nouvelle mesure soit valide ; sans cette pause, la première valeur lue est encore celle du filtre précédent. - Un objet blanc fait monter les trois valeurs à peu près ensemble, un objet rouge fait dominer la mesure rouge. C’est le rapport entre les trois chiffres qui identifie la couleur, jamais leur valeur absolue.
- Un
totalà zéro signifie que le capteur ne reçoit rien : objet trop loin, ou capteur débranché. Le programme le dit au lieu d’afficher une division par zéro.
Pour aller plus loin
- Afficher la couleur en clair — un afficheur LCD 16×02 I2C montre le nom de la couleur détectée sans garder l’ordinateur branché.
- Trier les objets — un servomoteur SG90 monté en aiguillage oriente chaque pièce vers le bon bac dès que la couleur dominante est connue.
Questions fréquentes
Est-ce un TCS230 ou un TCS3200 ?
Les deux puces partagent le même brochage, la même table de commande et la même façon de mesurer : le programme de cette page fonctionne sans modification avec l’une comme avec l’autre. Le TCS3200, plus récent, consomme simplement moins en veille et descend à −40 °C. Ouvrez une fiche écrite pour l’un, elle est valable pour l’autre.
Pourquoi mes valeurs changent-elles d’un moment à l’autre ?
Parce qu’elles décrivent la lumière reçue, pas l’objet seul. La lumière ambiante, l’ombre de votre main, la hauteur de l’objet et la distance à la fenêtre modifient les trois mesures. La méthode qui marche consiste à mesurer d’abord une feuille blanche à la même place, puis à comparer les proportions obtenues avec celles de vos objets. Un même montage, un même éclairage, et les mesures deviennent répétables.
Peut-il reconnaître une couleur de loin, ou à travers une vitre ?
Non. Le capteur mesure la lumière réfléchie par un objet placé à quelques millimètres de sa fenêtre, et ses quatre LED éclairent cet objet de très près. À distance, c’est la lumière ambiante de la pièce qui arrive jusqu’aux photodiodes et la mesure ne veut plus rien dire. Une vitre, en revanche, ne gêne pas si l’objet est collé derrière : seule compte la lumière qui revient jusqu’au capteur.
Faut-il brancher la broche OE ?
Non, pas pour ce montage. OE sert à mettre la sortie en haute impédance pour partager une même entrée d’Arduino entre plusieurs capteurs ; quand vous n’en utilisez qu’un, laissez-la tranquille. Si votre carte expose à la place une commande d’éclairage, elle se laisse également non branchée : les LED sont alimentées par la carte sur la plupart de ces modules.
Puis-je l’alimenter en 3,3 V ?
Oui, le circuit accepte de 2,7 à 5,5 V, et sa sortie suit la tension d’alimentation. Attention toutefois sur une carte 3,3 V : les quatre LED d’éclairage éclairent moins fort, donc les fréquences relevées baissent. Refaites votre mesure de référence sur blanc avec cette alimentation.
Le capteur peut-il tomber en panne si je pilote mal les broches ?
Non. S0 à S3 sont des entrées logiques lues par le circuit ; les piloter dans n’importe quel ordre ne risque pas de l’endommager. Le mode veille se contente de mettre le capteur au repos, et il repart dès qu’un autre couple d’états est appliqué sur S0 et S1.
À combiner avec
Si vous partez de zéro, le KIT Starter fournit déjà la carte Uno R3, la plaque d’essai et les fils : en y ajoutant ce capteur, vous avez exactement le montage décrit plus haut. Pour une base plus large, avec davantage de capteurs et d’actionneurs, le Kit Arduino Uno maroc couvre davantage de projets autour de la couleur, du mouvement et de la mesure.












