Arduino Nano - Capteur de couleur TCS3200D/TCS230

Ce guide complet vous montre comment connecter le capteur de couleur TCS3200D/TCS230 à Arduino Nano pour une mesure précise des couleurs et l'extraction des valeurs RGB. Maîtrisez les procédures de calibration et développez des capacités de reconnaissance de couleur dans vos projets.

Objectifs d'apprentissage :

Tutoriel Arduino Nano avec module capteur de reconnaissance de couleur TCS3200D TCS230

Matériel requis

1×Official Arduino Nano
1×Alternativement: DIYables ATMEGA328P Nano Development Board
1×Câble USB A vers Mini-B USB
1×Module capteur de reconnaissance de couleur TCS3200D/TCS230
1×Breadboard (plaque d'essai)
1×Fils de liaison
1×Recommandé: Carte d'extension à bornier à vis pour Arduino Nano
1×Recommandé: Carte d'extension breakout pour Arduino Nano
1×Recommandé: Répartiteur d'alimentation pour Arduino Nano

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du capteur de couleur TCS3200D/TCS230

Le capteur TCS3200D/TCS230 utilise une matrice de photodiodes disposées en grille 8×8 pour la détection de couleur par filtrage optique. Dans ce réseau de 64 éléments, 16 photodiodes disposent de filtres spectraux rouges, 16 autres utilisent des filtres verts, 16 emploient des filtres bleus, et les 16 restantes fonctionnent sans filtres (réponse claire). La mesure de couleur s'effectue en activant des ensembles de filtres spécifiques et en analysant la sortie d'onde carrée modulée en fréquence résultante.

Les réseaux de LED blanches intégrées sur les modules typiques fournissent un éclairage constant aux cibles, maintenant la stabilité des lectures indépendamment des variations d'éclairage externe et améliorant les performances dans des environnements sombres.

Brochage

Connexions disponibles sur la carte du capteur TCS3200D/TCS230 :

  • Broche VCC : Entrée tension d'alimentation (+5V).
  • Broche GND : Référence de masse (0V).
  • Broches S0, S1 : Sélecteurs d'échelle de fréquence de sortie.
  • Broches S2, S3 : Sélecteurs de filtre de canal de couleur.
  • Broche OUT : Sortie d'onde carrée modulée en fréquence.
  • Broche OE : Entrée d'activation de sortie (active quand LOW). Les modules standards câblent généralement ceci à GND en interne. Si non connecté, câbler manuellement à GND.
Diagramme de brochage du module capteur de couleur TCS3200 TCS230 montrant les broches VCC GND S0 S1 S2 S3 OUT

Fonctionnement

Deux réglages critiques contrôlent le comportement du capteur : quel canal de couleur activer et quelle intensité de signal de sortie générer. Deux paires d'entrées de contrôle gèrent ces fonctions :

Contrôle d'échelle de fréquence (broches S0 et S1) :

  • S0=LOW, S1=LOW : État de mise hors tension
  • S0=LOW, S1=HIGH : Facteur d'échelle 2%
  • S0=HIGH, S1=LOW : Facteur d'échelle 20%
  • S0=HIGH, S1=HIGH : Facteur d'échelle 100% (vitesse maximale)

Sélection de canal de couleur (broches S2 et S3) :

  • S2=LOW, S3=LOW : Photodiodes rouges actives
  • S2=LOW, S3=HIGH : Photodiodes bleues actives
  • S2=HIGH, S3=LOW : Photodiodes claires actives (pas de filtrage)
  • S2=HIGH, S3=HIGH : Photodiodes vertes actives

La broche OUT délivre des fréquences d'ondes carrées dans une plage d'environ 2 Hz à 500 kHz. La fréquence augmente avec l'intensité lumineuse—un éclairage plus brillant produit une sortie de fréquence plus élevée. La fonction pulseIn() mesure la durée d'impulsion, qui est inversement corrélée—des durées plus courtes indiquent une lumière plus forte. Les mesures calibrées se traduisent au format RGB conventionnel 0-255.

Obtenir une précision optimale

  • Maintenir le capteur positionné à 1-3 cm de la cible de mesure avec un alignement angulaire stable.
  • Utiliser l'éclairage LED blanc intégré pour un éclairage reproductible.
  • Protéger le capteur de la lumière ambiante variable pour améliorer la consistance de mesure.

Schéma de câblage

Configuration de câblage du capteur de couleur TCS3200 vers Arduino Nano :

Capteur de couleur TCS3200Arduino Nano
VCC5V
GNDGND
S0D4
S1D3
S2D6
S3D5
OUTD7
Schéma de câblage Arduino Nano et capteur de couleur TCS3200 montrant la connexion entre les broches

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Voir Comment alimenter un Arduino Nano..

Code Arduino Nano - Calibration de largeur d'impulsion

La calibration élimine les interférences environnementales des mesures brutes. Les variables incluant l'intensité de sortie LED, l'espacement des cibles, la réflectivité du matériau, et l'éclairage de la pièce affectent toutes les lectures. Considérez-les comme des erreurs systématiques nécessitant une mesure. La routine de calibration identifie les largeurs d'impulsion minimales et maximales sur tous les canaux de couleur, établissant des limites de référence pour convertir les données brutes en valeurs RGB précises de 0-255 adaptées à votre environnement de déploiement.

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 4 #define PIN_S1 3 #define PIN_S2 6 #define PIN_S3 5 #define PIN_sensorOut 7 // Variables for Color Pulse Width Measurements int redPW = 0; int greenPW = 0; int bluePW = 0; // Variables to track min and max pulse widths for calibration int redMin = 10000, redMax = 0; int greenMin = 10000, greenMax = 0; int blueMin = 10000, blueMax = 0; void setup() { // Set S0 - S3 as outputs pinMode(PIN_S0, OUTPUT); pinMode(PIN_S1, OUTPUT); pinMode(PIN_S2, OUTPUT); pinMode(PIN_S3, OUTPUT); // Set Pulse Width scaling to 20% digitalWrite(PIN_S0, HIGH); digitalWrite(PIN_S1, LOW); // Set Sensor output as input pinMode(PIN_sensorOut, INPUT); // Setup Serial Monitor Serial.begin(9600); Serial.println("=== TCS3200 Calibration ==="); Serial.println("Point the sensor at different objects (white, black, colors)."); Serial.println("Min and Max values are tracked automatically."); Serial.println("When values look stable, note them down for the next code."); Serial.println("------------------------------------------"); } void loop() { // Read Red Pulse Width redPW = getRedPW(); // Delay to stabilize sensor delay(200); // Read Green Pulse Width greenPW = getGreenPW(); // Delay to stabilize sensor delay(200); // Read Blue Pulse Width bluePW = getBluePW(); // Delay to stabilize sensor delay(200); // Update min and max values if (redPW < redMin) redMin = redPW; if (redPW > redMax) redMax = redPW; if (greenPW < greenMin) greenMin = greenPW; if (greenPW > greenMax) greenMax = greenPW; if (bluePW < blueMin) blueMin = bluePW; if (bluePW > blueMax) blueMax = bluePW; // Print the pulse width values with min/max Serial.print("Red PW = "); Serial.print(redPW); Serial.print(" - Green PW = "); Serial.print(greenPW); Serial.print(" - Blue PW = "); Serial.println(bluePW); Serial.print(" Min -> R:"); Serial.print(redMin); Serial.print(" G:"); Serial.print(greenMin); Serial.print(" B:"); Serial.println(blueMin); Serial.print(" Max -> R:"); Serial.print(redMax); Serial.print(" G:"); Serial.print(greenMax); Serial.print(" B:"); Serial.println(blueMax); Serial.println("------------------------------------------"); delay(1000); } // Function to read Red Pulse Widths int getRedPW() { // Set sensor to read Red only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, LOW); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Green Pulse Widths int getGreenPW() { // Set sensor to read Green only digitalWrite(PIN_S2, HIGH); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Blue Pulse Widths int getBluePW() { // Set sensor to read Blue only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; }

Étapes rapides

  • Charger le sketch de calibration dans Arduino IDE
  • Connecter Arduino Nano via USB et téléverser en utilisant le bouton Téléverser
  • Accéder au Moniteur série pour observer le suivi Min/Max en temps réel
  • Exposer le capteur à diverses surfaces : matériaux blancs (papier d'imprimante), objets noirs, plus objets multicolores
  • Observer les limites Min/Max se mettre à jour automatiquement quand les extrêmes sont détectés
  • Une fois les valeurs stabilisées (généralement 10-20 secondes), documenter les six paramètres de calibration
COM6
Send
=== TCS3200 Calibration === Point the sensor at different objects (white, black, colors). Min and Max values are tracked automatically. When values look stable, note them down for the next code. ------------------------------------------ Red PW = 42 - Green PW = 55 - Blue PW = 60 Min -> R:42 G:55 B:60 Max -> R:42 G:55 B:60 ------------------------------------------ Red PW = 210 - Green PW = 185 - Blue PW = 172 Min -> R:42 G:55 B:60 Max -> R:210 G:185 B:172 ------------------------------------------ Red PW = 44 - Green PW = 57 - Blue PW = 61 Min -> R:42 G:55 B:60 Max -> R:210 G:185 B:172 ------------------------------------------
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Exemple de paramètres de calibration extraits de la sortie ci-dessus :

  • RedMin = 42, redMax = 210
  • GreenMin = 55, greenMax = 185
  • BlueMin = 60, blueMax = 172

Code Arduino Nano - Mesure de valeurs RGB

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano/arduino-nano-tcs3200d-tcs230-color-sensor */ // Define color sensor pins #define PIN_S0 4 #define PIN_S1 3 #define PIN_S2 6 #define PIN_S3 5 #define PIN_sensorOut 7 // Calibration Values // Replace these values with your actual calibration data from the previous step int redMin = 0; // Red minimum pulse width int redMax = 0; // Red maximum pulse width int greenMin = 0; // Green minimum pulse width int greenMax = 0; // Green maximum pulse width int blueMin = 0; // Blue minimum pulse width int blueMax = 0; // Blue maximum pulse width // Variables for Color Pulse Width Measurements int redPW = 0; int greenPW = 0; int bluePW = 0; // Variables for final Color values int redValue; int greenValue; int blueValue; void setup() { // Set S0 - S3 as outputs pinMode(PIN_S0, OUTPUT); pinMode(PIN_S1, OUTPUT); pinMode(PIN_S2, OUTPUT); pinMode(PIN_S3, OUTPUT); // Set Pulse Width scaling to 20% digitalWrite(PIN_S0, HIGH); digitalWrite(PIN_S1, LOW); // Set Sensor output as input pinMode(PIN_sensorOut, INPUT); // Setup Serial Monitor Serial.begin(9600); } void loop() { // Read Red value redPW = getRedPW(); // Map to value from 0-255 redValue = map(redPW, redMin, redMax, 255, 0); // Delay to stabilize sensor delay(200); // Read Green value greenPW = getGreenPW(); // Map to value from 0-255 greenValue = map(greenPW, greenMin, greenMax, 255, 0); // Delay to stabilize sensor delay(200); // Read Blue value bluePW = getBluePW(); // Map to value from 0-255 blueValue = map(bluePW, blueMin, blueMax, 255, 0); // Delay to stabilize sensor delay(200); // Print output to Serial Monitor Serial.print("Red = "); Serial.print(redValue); Serial.print(" - Green = "); Serial.print(greenValue); Serial.print(" - Blue = "); Serial.println(blueValue); } // Function to read Red Pulse Widths int getRedPW() { // Set sensor to read Red only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, LOW); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Green Pulse Widths int getGreenPW() { // Set sensor to read Green only digitalWrite(PIN_S2, HIGH); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; } // Function to read Blue Pulse Widths int getBluePW() { // Set sensor to read Blue only digitalWrite(PIN_S2, LOW); digitalWrite(PIN_S3, HIGH); // Read the Pulse Width int PW = pulseIn(PIN_sensorOut, LOW); // Return the value return PW; }

Étapes rapides

  • Identifier les variables de calibration au début du code :
int redMin = 0; // Red minimum pulse width int redMax = 0; // Red maximum pulse width int greenMin = 0; // Green minimum pulse width int greenMax = 0; // Green maximum pulse width int blueMin = 0; // Blue minimum pulse width int blueMax = 0; // Blue maximum pulse width
  • Substituer tous les six placeholders zéro avec les données de calibration mesurées. Exemple utilisant les valeurs redMin = 42, redMax = 210, greenMin = 55, greenMax = 185, blueMin = 60, blueMax = 172 :
int redMin = 42; int redMax = 210; int greenMin = 55; int greenMax = 185; int blueMin = 60; int blueMax = 172;
  • Transférer le code mis à jour vers Arduino Nano
  • Disposer un échantillon coloré devant le capteur
  • Vérifier la sortie RGB via le Moniteur série
COM6
Send
Red = 210 - Green = 35 - Blue = 20 Red = 25 - Green = 200 - Blue = 40 Red = 30 - Green = 45 - Blue = 215
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Les valeurs RGB affichées se conforment à l'échelle standard 0-255. Les largeurs d'impulsion réduites (indiquant des réflexions plus brillantes) génèrent des sorties RGB plus élevées ; les largeurs d'impulsion étendues (réflexions plus sombres) donnent des valeurs plus faibles.

Idées d'applications

Avec une capacité de mesure RGB opérationnelle, vous pouvez développer :

  • Système de tri chromatique : Catégoriser les objets par couleur (différenciation rouge/vert/bleu)
  • Dispositif de vérification de couleur : Confirmer la cohérence de couleur entre échantillons
  • Suiveur de chemin coloré : Robots qui naviguent le long de marqueurs chromatiques
  • Inspection qualité visuelle : Détecter les défauts de production via analyse de couleur
  • Automatisation déclenchée par couleur : Exécuter des actions quand des teintes spécifiques sont détectées

Vidéo

Références de fonctions

Tutoriels connexes

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !