Ce post vous montre comment détecter les couleurs avec l’Arduino en utilisant le TCS230/Capteur de couleur TCS3200.
Le capteur de couleur TCS3200 peut détecter une grande variété de couleurs en fonction de leur longueur d’onde. Ce capteur est particulièrement utile pour les projets de reconnaissance des couleurs tels que la correspondance des couleurs, le tri des couleurs, la lecture des bandelettes de test et bien plus encore.

introduction
Le capteur de couleur TCS3200 – illustré dans la figure ci-dessous – utilise une puce de capteur RVB TAOS TCS3200 pour détecter la couleur. Il contient également quatre LED blanches qui éclairent l’objet devant lui.

Caractéristiques
Voici les spécifications du capteur :
- Alimentation : 2,7 V à 5,5 V
- Taille : 28,4 x 28,4 mm (1,12 x 1,12″)
- Interface : TTL numérique
- Conversion haute résolution de l’intensité lumineuse en fréquence
- Couleur programmable et fréquence de sortie pleine échelle
- Communique directement au microcontrôleur
Où acheter?
Vous pouvez vérifier le TCS3200 ou un capteur de couleur TCS230 au Conseiller Maker et trouver le meilleur prix.
Comment fonctionne le capteur TCS3200 ?
Le TCS3200 dispose d’un réseau de photodiodes avec 4 filtres différents. Une photodiode est simplement un dispositif semi-conducteur qui convertit la lumière en courant. Le capteur possède :
- 16 photodiodes avec filtre rouge – sensible à la longueur d’onde rouge
- 16 photodiodes avec filtre vert – sensible à la longueur d’onde verte
- 16 photodiodes avec filtre bleu – sensibles à la longueur d’onde bleue
- 16 photodiodes sans filtre
Si vous regardez de plus près la puce TCS3200, vous pouvez voir les différents filtres.

En choisissant sélectivement les lectures du filtre à photodiode, vous êtes en mesure de détecter l’intensité des différentes couleurs. Le capteur dispose d’un convertisseur courant-fréquence qui convertit les lectures des photodiodes en une onde carrée avec une fréquence proportionnelle à l’intensité lumineuse de la couleur choisie. Cette fréquence est ensuite lue par l’Arduino – ceci est illustré dans la figure ci-dessous.

Brochage
Voici le brochage du capteur :

| Nom de la broche | E/S | La description |
| Terre (4) | Masse d’alimentation | |
| OE (3) | je | Activer pour la fréquence de sortie (actif bas) |
| SORTIE (6) | O | Fréquence de sortie |
| S0, S1(1,2) | je | Entrées de sélection de mise à l’échelle de la fréquence de sortie |
| S2, S3 (7, 8) | je | Entrées de sélection du type de photodiode |
| VDD(5) | Alimentation en tension |
Sélection du filtre
Pour sélectionner la couleur lue par la photodiode, vous utilisez les broches de commande S2 et S3. Comme les photodiodes sont connectées en parallèle, le réglage de S2 et S3 LOW et HIGH dans différentes combinaisons vous permet de sélectionner différentes photodidodes. Jetez un œil au tableau ci-dessous :
| Type de photodiode | S2 | S3 |
| rouge | MEUGLER | MEUGLER |
| Bleu | MEUGLER | HAUT |
| Pas de filtre (effacer) | HAUT | MEUGLER |
| Vert | HAUT | HAUT |
Mise à l’échelle de fréquence
Les broches S0 et S1 sont utilisées pour mettre à l’échelle la fréquence de sortie. Il peut être mis à l’échelle selon les valeurs prédéfinies suivantes : 100 %, 20 % ou 2 %. La mise à l’échelle de la fréquence de sortie est utile pour optimiser les lectures du capteur pour divers compteurs de fréquence ou microcontrôleurs. Jetez un œil au tableau ci-dessous :
| Mise à l’échelle de la fréquence de sortie | S0 | S1 |
| Éteindre | L | L |
| 2% | L | H |
| 20% | H | L |
| 100% | H | H |
Pour l’Arduino, il est courant d’utiliser une mise à l’échelle de fréquence de 20 %. Ainsi, vous réglez la broche S0 sur HIGH et la broche S1 sur LOW.
Détection des couleurs avec Arduino et TCSP3200
Dans cet exemple, vous allez détecter les couleurs avec l’Arduino et le capteur de couleur TCSP3200. Ce capteur n’est pas très précis, mais fonctionne bien pour détecter les couleurs dans des projets simples.
Pièces nécessaires
Voici les pièces nécessaires pour ce projet :
Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Schématique
Le câblage du capteur TCSP3200 à votre Arduino est assez simple. Suivez simplement le diagramme schématique suivant.

Voici les connexions entre le TCSP3200 et l’Arduino :
- S0: broche numérique 4
- S1: broche numérique 5
- VCC: 5V
- S3: broche numérique 6
- S4: broche numérique 7
- EN DEHORS: broche numérique 8
Code
Vous avez besoin de deux croquis pour ce projet :
- Lecture et affichage de la fréquence de sortie sur le moniteur série. Dans cette partie, vous devez noter les valeurs de fréquence lorsque vous placez différentes couleurs devant le capteur.
- Distinguer les différentes couleurs. Dans cette section, vous allez insérer les valeurs de fréquence choisies précédemment sur votre code, afin que votre capteur puisse distinguer les différentes couleurs. Nous détecterons les couleurs rouge, verte et bleue.
1. Lecture de la fréquence de sortie
Téléchargez le code suivant sur votre carte Arduino.
/*********
Rui Santos
Complete project details at https://www.raspberryme.com
*********/
// TCS230 or TCS3200 pins wiring to Arduino
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
// Stores frequency read by the photodiodes
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
void setup() {
// Setting the outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Setting the sensorOut as an input
pinMode(sensorOut, INPUT);
// Setting frequency scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Begins serial communication
Serial.begin(9600);
}
void loop() {
// Setting RED (R) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
redFrequency = pulseIn(sensorOut, LOW);
// Printing the RED (R) value
Serial.print("R = ");
Serial.print(redFrequency);
delay(100);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
greenFrequency = pulseIn(sensorOut, LOW);
// Printing the GREEN (G) value
Serial.print(" G = ");
Serial.print(greenFrequency);
delay(100);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
blueFrequency = pulseIn(sensorOut, LOW);
// Printing the BLUE (B) value
Serial.print(" B = ");
Serial.println(blueFrequency);
delay(100);
}
Ouvrez le moniteur série à un débit en bauds de 9600.
Placez un objet bleu devant le capteur à différentes distances. Vous devez enregistrer deux mesures : lorsque l’objet est placé loin du capteur et lorsque l’objet en est proche.

Vérifiez les valeurs affichées sur le moniteur série. La fréquence bleue (B) doit être la plus basse par rapport aux lectures de fréquence rouge (R) et verte (G) – voir la figure ci-dessous.

Lorsque nous plaçons l’objet bleu devant le capteur, les valeurs de fréquence bleue (B) oscillent entre 59 et 223 (voir valeurs en surbrillance).
Noter: vous ne pouvez pas utiliser ces valeurs de fréquence (59 et 223) dans votre code, vous devez mesurer les couleurs de votre objet spécifique avec votre propre capteur de couleur. Ensuite, enregistrez vos limites de fréquence supérieure et inférieure pour la couleur bleue, car vous en aurez besoin plus tard.
Répétez ce processus avec des objets verts et rouges et notez les limites de fréquence supérieure et inférieure pour chaque couleur.

2. Distinguer les différentes couleurs
Cette esquisse suivante mappe les valeurs de fréquence aux valeurs RVB (qui sont comprises entre 0 et 255).
Dans l’étape précédente, lorsque nous avons un maximum de bleu, nous avons obtenu une fréquence de 59 et lorsque nous avons du bleu à une distance plus élevée, nous avons obtenu 223.
Ainsi, 59 en fréquence correspond à 255 (en RVB) et 223 en fréquence à 0 (en RVB). Nous allons le faire avec l’Arduino carte() une fonction. Dans le carte() fonction, vous devez remplacer XX paramètres par vos propres valeurs.
/*********
Rui Santos
Complete project details at https://www.raspberryme.com
*********/
// TCS230 or TCS3200 pins wiring to Arduino
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
// Stores frequency read by the photodiodes
int redFrequency = 0;
int greenFrequency = 0;
int blueFrequency = 0;
// Stores the red. green and blue colors
int redColor = 0;
int greenColor = 0;
int blueColor = 0;
void setup() {
// Setting the outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
// Setting the sensorOut as an input
pinMode(sensorOut, INPUT);
// Setting frequency scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Begins serial communication
Serial.begin(9600);
}
void loop() {
// Setting RED (R) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Reading the output frequency
redFrequency = pulseIn(sensorOut, LOW);
// Remaping the value of the RED (R) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// redColor = map(redFrequency, 70, 120, 255,0);
redColor = map(redFrequency, XX, XX, 255,0);
// Printing the RED (R) value
Serial.print("R = ");
Serial.print(redColor);
delay(100);
// Setting GREEN (G) filtered photodiodes to be read
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Reading the output frequency
greenFrequency = pulseIn(sensorOut, LOW);
// Remaping the value of the GREEN (G) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// greenColor = map(greenFrequency, 100, 199, 255, 0);
greenColor = map(greenFrequency, XX, XX, 255, 0);
// Printing the GREEN (G) value
Serial.print(" G = ");
Serial.print(greenColor);
delay(100);
// Setting BLUE (B) filtered photodiodes to be read
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Reading the output frequency
blueFrequency = pulseIn(sensorOut, LOW);
// Remaping the value of the BLUE (B) frequency from 0 to 255
// You must replace with your own values. Here's an example:
// blueColor = map(blueFrequency, 38, 84, 255, 0);
blueColor = map(blueFrequency, XX, XX, 255, 0);
// Printing the BLUE (B) value
Serial.print(" B = ");
Serial.print(blueColor);
delay(100);
// Checks the current detected color and prints
// a message in the serial monitor
if(redColor > greenColor && redColor > blueColor){
Serial.println(" - RED detected!");
}
if(greenColor > redColor && greenColor > blueColor){
Serial.println(" - GREEN detected!");
}
if(blueColor > redColor && blueColor > greenColor){
Serial.println(" - BLUE detected!");
}
}
Pour distinguer les différentes couleurs, nous avons trois conditions :
- Lorsque le R est la valeur maximale (dans les paramètres RVB), nous savons que nous avons un objet rouge
- Lorsque G est la valeur maximale, nous savons que nous avons un objet vert
- Lorsque B est la valeur maximale, nous savons que nous avons un objet bleu
Maintenant, placez quelque chose devant le capteur. Il devrait imprimer dans votre moniteur série la couleur détectée : rouge, vert ou bleu.
Pointe: votre capteur peut également détecter d’autres couleurs avec plus d’instructions if.
Conclusion
Dans cet article, vous avez appris à détecter les couleurs avec le capteur de couleur TCSP3200.
Vous pouvez facilement construire une machine de tri des couleurs en ajoutant simplement un servomoteur.
Avez-vous des idées de projets liés au tri des couleurs?
Faites-le nous savoir en publiant un commentaire ci-dessous.
Si vous aimez cet article, vous aimerez probablement ces articles :
Merci d’avoir lu,
Rui et Sara
-
TCS230 TCS3200 Capteur de reconnaissance des couleurs Module de reconnaissance des couleurs CC 3-5 V Entrée pour Arduino DIY
-
TCS230 Module de détection de couleur TCS3200 amélioré, Module de capteur LED RVB 3-5V trois couleurs avec lumière LED blanche, Distance de détection de 10 mm pour Arduino DIY

