Skip to Content

Interface ESP32 et capteur de couleur RGB TCS34725 – Un tutoriel complet

Interface ESP32 et capteur de couleur RGB TCS34725 – Un tutoriel complet

Dans cet article, je vais vous montrer comment utiliser le capteur de couleur RGB TCS34725 avec un microcontrôleur ESP32 pour mesurer la température de couleur d’un objet ainsi que les informations de luminosité en lux.

Le capteur de couleur TCS34725 est utilisé dans le contrôle des processus industriels, l’industrie agroalimentaire, les centres de tri, les smartphones, tablettes, grands écrans TV et appareils pour la détection de la lumière ambiante.

Le capteur RGB TCS34725 est un capteur précis et performant. Sa sensibilité est excellente, ce qui vous permet de le placer à l’intérieur d’un verre pour le protéger tout en continuant à l’utiliser pour des applications de détection de couleur et de lumière ambiante.

Il dispose également de nombreuses fonctionnalités intéressantes, ce qui en fait mon premier choix pour les applications de détection de couleur.

Cet article vous montrera comment utiliser un capteur de couleur TCS34725 avec un ESP32. Je partage un guide de câblage, un exemple de code ESP32 pour le capteur de couleur, ainsi que des réponses aux questions fréquemment posées sur le TCS34725.

Commençons !

Composants nécessaires pour réaliser le projet ESP32 et capteur RGB TCS34725

Composants matériels

Logiciel

Guide

Principes fondamentaux du capteur de couleur RGB TCS34725

Comprenons le principe de fonctionnement de base, les caractéristiques, les broches et les applications du capteur de couleur RGB. Connaître ces détails vous aidera à choisir en toute confiance le capteur RGB TCS34725 pour vos applications.

Le TCS34725 est un capteur couleur-numérique. Il peut détecter :

  • Rouge
  • Vert
  • Bleu
  • Et la lumière claire

À un niveau élevé, le schéma ci-dessous illustre ce que fait le TCS34725. La lumière entre dans le capteur à travers un filtre infrarouge (IR). Les quatre capteurs indépendants sont sensibles uniquement à une couleur de lumière spécifique.

Color Sensing
Détection des couleurs

Les capteurs fournissent une valeur analogique convertie en valeur numérique par 4 convertisseurs analogique-numérique (ADC) internes au capteur de couleur. Les données peuvent être lues via I2C.

 Vous pouvez maintenant utiliser ces informations pour construire des capteurs de couleur et de lumière ambiante ainsi que d’autres projets utiles.

Voici le schéma bloc du capteur.

Block diagram of TCS34725
Schéma bloc du TCS34725

Je vais vous expliquer les concepts clés à connaître !

Caractéristiques

Les photodiodes sont utilisées pour détecter la quantité de lumière qui les frappe. Le courant de la photodiode varie en fonction de la lumière reçue. Prenons les caractéristiques d’une photodiode en exemple.

Light sensing characteristics of TCS34725
Caractéristiques de détection lumineuse du TCS34725

Le schéma ci-dessus montre que lorsque l’intensité lumineuse augmente, le courant inverse augmente. Dans le cas du capteur de couleur, les photodiodes ont un filtre rouge, un filtre vert, un filtre bleu et un filtre transparent (sans filtre).

Ainsi, la photodiode avec filtre rouge ne détecte que la couleur ROUGE et rien d’autre. En d’autres termes, la diode ne répondra qu’à la couleur ROUGE.

De même, les photodiodes verte et bleue ne répondent qu’aux couleurs verte et bleue. La quatrième photodiode répondra à toutes les couleurs (sans filtre). Simple, non ?

Les 4 ADC convertissent simultanément ce courant de photodiode en valeurs numériques, que vous pouvez lire avec l’ESP32.

Réactivité

Pour une source lumineuse test, voici comment le capteur TCS34725 réagit.

Spectral Responsivity of TCS34725
Réactivité spectrale du TCS34725

Vous pouvez voir comment les quatre capteurs de couleur sont sensibles aux couleurs correspondantes.

Par exemple, le capteur bleu a un pic au-dessus de 450 nm et jusqu’à 500 nm. De même, les capteurs vert et rouge ont des pics à des longueurs d’onde spécifiques.

Reportez-vous au tableau ci-dessous pour les couleurs et leurs plages de longueurs d’onde correspondantes.

Wavelength ranges of TCS34725
Plages de longueurs d’onde du TCS34725

Je vais maintenant vous expliquer tous les registres internes du capteur de couleur TCS34725. Cela vous aidera à les configurer ultérieurement selon vos besoins, comme ajouter plus de temps d’attente ou augmenter le gain (pour les conditions de faible luminosité), etc.

Avant de présenter tous les registres, je veux vous montrer un tableau qui vous permettra de comprendre comment les réglages des registres affectent le temps de conversion et la consommation de courant.

Dans le tableau ci-dessous, vous pouvez voir comment la consommation moyenne de courant de l’appareil varie selon les différentes durées d’attente activées via les bits WEN, WTIME et WLONG.

WEN WTIME WLONG ÉTAT D’ATTENTE COURANT MOYEN DD COURANT
0 n/a n/a 0 ms 291 μA
1 0xFF 0 2,40 ms 280 μA
1 0xEE 0 43,2 ms 152 μA
1 0x00 0 614 ms 82 μA
1 0x00 1 7,37 s 67 μA

Vous choisissez le compromis entre consommation de courant et vitesse !

Registres du TCS34725

Vous trouverez ci-dessous les registres et leur signification. Je vous ferai un résumé de tous les registres dans la section suivante.

Adresse Nom du registre Fonction du registre Valeur de réinitialisation
−− COMMANDE Spécifie l’adresse du registre 0x00
0x00 ENABLE Active les états et interruptions 0x00
0x01 ATIME Temps RGBC 0xFF
0x03 WTIME Temps d’attente 0xFF
0x04 AILTL Seuil bas d’interruption clair, octet bas 0x00
0x05 AILTH Seuil bas d’interruption clair, octet haut 0x00
0x06 AIHTL Seuil haut d’interruption clair, octet bas 0x00
0x07 AIHTH Seuil haut d’interruption clair, octet haut 0x00
0x0C PERS Filtre de persistance d’interruption 0x00
0x0D CONFIG Configuration 0x00
0x0F CONTROL Contrôle 0x00
0x12 ID ID de l’appareil ID
0x13 STATUS Statut de l’appareil 0x00
0x14 CDATAL Octet bas des données claires 0x00
0x15 CDATAH Octet haut des données claires 0x00
0x16 RDATAL Octet bas des données rouges 0x00
0x17 RDATAH Octet haut des données rouges 0x00
0x18 GDATAL Octet bas des données vertes 0x00
0x19 GDATAH Octet haut des données vertes 0x00
0x1A BDATAL Octet bas des données bleues 0x00
0x1B BDATAH Octet haut des données bleues 0x00

Registre de commande

Le registre de commande spécifie l’adresse du registre cible pour les opérations d’écriture et de lecture futures. Vous utilisez cette commande pour sélectionner le type de transaction du protocole.

Vous choisissez quel registre lire ou écrire en utilisant ce registre de commande.

Registre Enable

Le registre Enable sert principalement à allumer ou éteindre le dispositif TCS3472, et à activer les fonctions et interruptions.

Registre de temporisation RGBC

Le registre de temporisation RGBC contrôle le temps d’intégration interne des ADC des canaux RGBC clair et IR par incréments de 2,4 ms.

Augmenter le temps d’intégration améliore la sensibilité au prix du temps. Si vous pouvez attendre quelques centaines de ms, je recommande de choisir des temps d’intégration plus longs.

Registre de temps d’attente

Vous utilisez ce registre pour insérer des temps d’attente entre les conversions. Cela aide à réduire la consommation moyenne de courant.

Registres de seuil d’interruption RGBC

Vous utilisez ces registres pour définir les seuils du signal ADC. Le capteur de couleur activera le signal INT (interruption) si la lecture de couleur dépasse ce seuil. Utile pour agir en cas de problème dans un processus de mélange de couleurs (par exemple en production industrielle).

Registre de persistance

Ce registre contrôle la manière dont l’appareil filtre les interruptions. Vous pouvez le configurer pour recevoir une interruption après chaque cycle d’intégration ou lorsque l’intégration dépasse les valeurs fixées par le registre de seuil pendant une période donnée.

Registre de configuration

Ce registre vous permet de définir un temps d’attente long. Si vous mettez 1 au bit WLONG, le délai (programmé dans le registre WTIME) sera multiplié par 12.

Registre de contrôle

Le registre de contrôle vous offre huit bits pour gérer différentes fonctions dans le bloc analogique. Ces bits servent à ajuster les réglages de gain et d’autres fonctions similaires.

Registre ID

Fournit l’ID du circuit intégré. C’est un registre en lecture seule. Pour le TCS34725, l’ID est 0x44. Pour le TCS34723, il est 0x4D.

Registre de statut

Vous pouvez lire le statut interne du circuit intégré via ce registre.

Registres de données des canaux RGBC

Enfin, c’est le registre que vous lirez tout le temps ! Vous y trouverez les données numériques des capteurs rouge, vert, bleu et clair.

Comment programmer un temps d’intégration particulier ?

Supposons que vous vouliez intégrer les données du capteur pendant 100 ms. La valeur à programmer dans le registre ATIME se calcule comme suit.

valeur = 256 – (100/2,4) = 256 – 42 = 214 = 0xD6

Gestion de l’alimentation dans le capteur de couleur RGB TCS34725

Puisque vous savez que le capteur consomme seulement 65 μA en état d’attente, vous pouvez utiliser cette information pour gérer la consommation d’énergie.

Vous pouvez ajouter plus d’états d’attente pour réduire la consommation moyenne de courant. C’est très utile lorsque le capteur est alimenté par batterie.

En variant les états d’attente, vous contrôlez la consommation moyenne globale du capteur.

L’image ci-dessus vous donne une idée de la manière dont les différentes valeurs WAIT, combinées au bit WLONG, peuvent réduire la consommation moyenne du capteur presque au niveau du courant de veille !

Dans les sections suivantes, voyons le brochage du capteur de couleur RGB suivi du guide de connexion.

Caractéristiques du capteur de couleur RGB TCS34725

Voici les principales caractéristiques du capteur de couleur TCS34725 résumées dans un tableau :

Paramètre Plage
Courant d’alimentation (actif) 330 μA (maximum)
Courant en veille 10 μA (max)
Pas d’intégration ADC 2,56 ms
Comptage ADC par pas 1024 comptes
Valeur maximale du comptage ADC 65535 comptes
Pas d’attente 2,4 ms
Fréquence d’horloge I2C 400 kHz
Tension d’alimentation 2,7 V à 3,6 V
Température de fonctionnement -30 ℃ à 70 ℃

Applications du capteur de couleur RGB TCS34725

Le capteur de couleur RGB TCS34725 a de nombreuses applications, notamment :

  1. Électronique grand public : Le capteur TCS34725 est un excellent choix pour détecter la lumière ambiante et ajuster automatiquement la luminosité ou le mode d’affichage (mode normal / mode nuit).
  1. Industrie automobile – Vous pouvez utiliser le capteur pour régler les éclairages programmables en fonction du garage ou de l’environnement où se trouve le véhicule.
  1. Santé – Vous pouvez utiliser le capteur RGB TCS34725 pour surveiller la couleur des liquides de test comme l’urine ou le sang pour un diagnostic automatisé plus rapide.
  1. Transformation alimentaire – Faites frire jusqu’à ce que les oignons soient dorés ! Le capteur peut vous aider à détecter cela. Il peut aussi aider à trier les fruits selon leur couleur (mûr ou pas).
  1. Robotique – vous pouvez utiliser un code couleur et demander aux robots d’exécuter des tâches spécifiques selon le code couleur sur l’appareil / la boîte.

Pour quoi utilisez-vous ce capteur ? Dites-le-moi dans la section commentaires ci-dessous.

Définition des broches du capteur de couleur RGB TCS34725

L’image ci-dessous montre la vue de dessus du circuit intégré TCS34725 avec les détails des broches.

Pinout of TCS34725
Brochage du TCS34725

Le tableau suivant donne les détails des broches du capteur de couleur TCS34725.

Numéro de broche Nom de la broche Fonction de la broche
1 VDD Tension d’alimentation
2 SCL Ligne d’horloge I2C pour la communication série I2C
3 GND Masse
4 NC Non connecté – Ne rien connecter à cette broche.
5 INT Interruption – Drain ouvert (actif bas)
6 SDA Ligne de données I2C pour la communication série I2C

Comment connecter le module capteur de couleur RGB TCS34725 à l’ESP32

Je vais maintenant vous montrer comment réaliser un projet avec un ESP32 et le capteur de couleur RGB TCS34725. Commençons par les connexions matérielles.

Il existe de nombreuses variantes de cartes capteurs. Maintenant que vous maîtrisez bien les bases des capteurs et le brochage, vous n’avez pas à vous inquiéter.

 Vous serez à l’aise pour utiliser ces cartes en suivant ce guide de connexion. Allons-y.

Étape 1 : Effectuer les connexions matérielles

Le capteur de couleur TCS34725 communique via I2C. Au minimum, vous devez connecter l’alimentation, la masse et les lignes I2C. Les connexions sont simples à comprendre et à suivre, comme le montre le schéma ci-dessus.

Commencez toujours par les connexions de masse. Alimentez tout le système uniquement après avoir terminé toutes les connexions.

J’utilise GPIO21 et GPIO22 dans mon exemple. Vous pouvez choisir d’autres broches aussi.  Si vous devez utiliser des broches différentes, modifiez le code en conséquence.

Le résumé des connexions entre le capteur de couleur RGB TCS34725 et l’ESP32 est dans le tableau ci-dessous.

SDA Ligne de données I2C
SCL Ligne d’horloge I2C
3V3 Alimentation 3,3 V
GND Connexions de masse

À l’étape suivante, nous programmerons la carte ESP32.

Étape 2 : Programmer l’ESP32 avec le code du capteur RGB ci-dessous

Suivez l’étape suivante pour comprendre l’implémentation du code. Vous pouvez utiliser le code ci-dessous pour tester le module ESP32 et le module capteur RGB connecté basé sur le capteur de couleur TCS34725.

#include "Wire.h"
#include "Adafruit_TCS34725.h"
/*
  Connect SCL to analog 5
  Connect SDA to analog 4
  Connect VDD to 3.3V DC
  Connect GROUND to common ground */

/* Initialise with default values (int time = 2.4ms, gain = 1x) */
// Adafruit_TCS34725 tcs = Adafruit_TCS34725();

/* Initialise with specific int time and gain values */
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);

void setup(void) {
  Serial.begin(9600);

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  // Now we're ready to get readings!
}

void loop(void) {
  uint16_t r, g, b, c, colorTemp, lux;

  tcs.getRawData(&r, &g, &b, &c);
  colorTemp = tcs.calculateColorTemperature(r, g, b);
  lux = tcs.calculateLux(r, g, b);

  Serial.print("Color Temp: "); Serial.print(colorTemp, DEC);
  Serial.print(" K - ");
  Serial.print("Lux: "); Serial.print(lux, DEC); Serial.print(" - ");
  Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");
  Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");
  Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");
  Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");
  Serial.println(" ");
}

Étape 3 : Explication du code pour le capteur de couleur TCS34725

Parcourons le code. Cet exemple est pour le capteur de couleur RGB TCS34725. Vous commencez par inclure la bibliothèque wire pour la communication I2C et la bibliothèque TCS34725 d’Adafruit.

Vous pouvez ensuite développer votre projet à partir de ce code pour compter ou classifier des objets et contrôler des modules relais selon les valeurs lues par les capteurs de couleur.

(Pensez à trier les tomates entre mûres et non mûres)

#include "Wire.h"
#include "Adafruit_TCS34725.h"

Il y a deux façons d’initialiser le capteur de couleur : avec les valeurs par défaut (temps d’intégration de 2,4 ms et gain de 1x) ou avec des valeurs spécifiques de temps d’intégration et de gain.

La seconde méthode est utilisée dans ce code, avec un temps d’intégration de 700 ms et un gain de 1x.

void setup(void) {
  Serial.begin(9600);

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  // Now we're ready to get readings!
}

Dans la fonction setup() la communication série est initialisée à un débit de 9600 bauds. Ensuite, la fonction tcs.begin() est appelée pour initialiser le capteur de couleur. Le message «  Found sensor  » s’affiche sur le moniteur série si le capteur est détecté.

Sinon, le message «  No TCS34725 found … check your connections  » s’affiche et le programme reste bloqué dans une boucle infinie.

while (1);

Un reset est nécessaire après vérification du câblage.

Dans la fonction loop(), les lectures du capteur de couleur sont obtenues en appelant la fonction

tcs.getRawData(&r, &g, &b, &c) qui stocke les valeurs rouge, verte, bleue et claire dans les variables r, g, b et c respectivement.

Ensuite, vous calculez la température de couleur et les valeurs en lux avec les fonctions tcs.calculateColorTemperature(r, g, b) et tcs.calculateLux(r, g, b) respectivement.

Enfin, la température de couleur, les lux, ainsi que les valeurs rouge, verte, bleue et claire sont affichés sur le moniteur série.

J’espère que l’explication du code du capteur de couleur RGB TCS34725 vous a aidé.

FAQ sur le capteur RGB TCS34725

Voici une liste des questions les plus fréquemment posées sur le capteur de couleur TCS34725.

Quelle interface de communication utilise le TCS34725 ?

Vous pouvez utiliser l’interface I2C pour communiquer avec le capteur. Le capteur supporte le mode rapide (jusqu’à 400 kbits/s).

Quelle est la plage de tension de fonctionnement du capteur de couleur TCS34725 ?

Le TCS34725 fonctionne dans une plage de tension de 2,7 V à 3,6 V. Si le bus I2C est tiré vers 1,8 V, la tension maximale est de 3,3 V.

Quelle est la réponse spectrale du TCS34725 ?

La réponse spectrale du capteur est similaire à celle de l’œil humain.

Veuillez vous référer à la section Fondamentaux de cet article pour en savoir plus sur la sensibilité aux couleurs et d’autres informations intéressantes sur le capteur.

Quelle est la résolution du TCS34725 ?

Le TCS34725 a une résolution de 16 bits par canal, permettant plus de 16 millions de combinaisons de couleurs différentes. Chaque couleur dispose d’un ADC dédié suivi du photodétecteur. En plus des bits RGB, vous avez aussi 16 bits d’information sur la lumière claire.

Pour quelles applications le TCS34725 est-il utilisé ?

Le TCS34725 est utilisé pour la détection de couleur et la détection de lumière ambiante. Pour comprendre pourquoi le capteur TCS34725 est si adapté, veuillez consulter la section bases de cet article.

  • Produits santé/fitness
  • Détection de lumière ambiante (pour régler automatiquement la luminosité d’une TV, par exemple)
  • Contrôle des processus industriels (pour surveiller la qualité des produits selon la couleur)
  • Automatisation du diagnostic médical et plus.

Le TCS34725 est-il compatible avec l’ESP32 ?

Oui, le TCS34725 est entièrement compatible avec l’ESP32. Vous n’avez pas besoin d’adaptateurs de niveau. Le capteur peut être même plus compatible avec l’ESP32 qu’avec un Arduino UNO (c’est mon avis).

Conclusion

Cet article a couvert toutes les informations essentielles sur le capteur RGB TCS34725, y compris son fonctionnement, les détails des broches, les informations sur les registres, les principales caractéristiques et applications.

Connaître ces détails vous aide à choisir et à réaliser des projets plus performants avec le capteur TCS34725.

J’ai également partagé un guide de connexion ESP32 et un exemple de code avec explications, que vous pouvez utiliser pour tester et adapter à vos propres projets.

Si vous avez d’autres questions sur les capteurs, n’hésitez pas à les poser dans la section commentaires.

J’aimerais avoir de vos nouvelles ! Faites-moi savoir si vous souhaitez que je traite d’autres sujets dans de futurs articles.