In questo articolo ti mostrerò come utilizzare il sensore di colore RGB TCS34725 con un microcontrollore ESP32 per misurare la temperatura del colore di un oggetto e le informazioni di lux.
Il sensore di colore TCS34725 è utilizzato nel controllo dei processi industriali, nelle industrie alimentari, negli impianti di smistamento, negli smartphone, tablet, grandi monitor TV e negli elettrodomestici per il rilevamento della luce ambientale.
Il sensore RGB TCS34725 è un sensore preciso e potente. La sensibilità è eccellente, quindi puoi mantenere il sensore all’interno di un vetro, proteggerlo e farlo comunque funzionare per applicazioni di rilevamento del colore e della luce ambientale.
Ha anche caratteristiche interessanti, che lo rendono la mia prima scelta per applicazioni di rilevamento del colore.
Questo articolo ti mostrerà come utilizzare un sensore di colore TCS34725 con un ESP32. Condividerò una guida per il collegamento dei fili, un esempio di codice ESP32 per il sensore di colore e risponderò anche ad alcune domande frequenti sul TCS34725.
Iniziamo!
Componenti necessari per costruire il progetto ESP32 e sensore RGB TCS34725
Componenti hardware
- ESP32 Wroom 2.4 GHz with integrated Antenna x 1
- RGB Color Sensor Module – TCS34725 x 1
- Dupont wire x 1 set
- Micro USB Cable for ESP32 (per alimentare l’ESP32 e programmarlo) x 1
Software
Guida
Fondamenti del sensore di colore RGB TCS34725
Comprendiamo il principio di funzionamento di base, le caratteristiche, i pin e le applicazioni del sensore di colore RGB. Conoscere questi dettagli ti rende sicuro nella scelta del sensore RGB TCS34725 per le applicazioni adatte.
Il TCS34725 è un sensore colore-digitale. Può rilevare:
- Rosso
- Verde
- Blu
- E luce chiara
A un livello alto, il diagramma sottostante illustra cosa fa il TCS34725. La luce entra nel sensore attraverso un filtro a infrarossi (IR). I quattro sensori indipendenti sono sensibili solo a un particolare colore di luce in ingresso.

I sensori forniscono un valore analogico convertito in digitale da 4 convertitori analogico-digitali (ADC) interni al sensore di colore. I dati possono essere letti tramite I2C.
Ora puoi usare queste informazioni per costruire sensori di colore e luce ambientale e altri progetti utili.
Ecco il diagramma a blocchi del sensore.

Spiegherò i concetti chiave che devi conoscere!
Caratteristiche
I fotodiodi sono usati per rilevare la quantità di luce che li colpisce. La corrente del fotodiodo varia in base alla luce che riceve. Prendiamo come esempio le caratteristiche del fotodiodo.

Il diagramma sopra mostra che all’aumentare dell’intensità luminosa, la corrente inversa aumenta. Nel caso del sensore di colore, i fotodiodi hanno un filtro rosso, verde, blu e nessun filtro.
Quindi, il fotodiodo con filtro rosso vede solo il colore ROSSO e nient’altro. In altre parole, il diodo risponderà solo al colore ROSSO.
Allo stesso modo, i fotodiodi verde e blu rispondono solo ai colori verde e blu. Il quarto fotodiodo risponde a tutti i colori (nessun filtro). Sembra semplice?
4 ADC convertono simultaneamente questa corrente del fotodiodo in valori digitali, che puoi leggere con l’ESP32.
Responsività
Per una sorgente luminosa di prova, ecco come risponde il sensore TCS34725.

Puoi vedere come i quattro sensori di colore sono sensibili ai rispettivi colori.
Ad esempio, il sensore Blu ha un picco sopra i 450 nm fino a 500 nm. Allo stesso modo, i sensori di luce verde e rossa hanno picchi a lunghezze d’onda specifiche.
Consulta la tabella sottostante per i colori e le corrispondenti gamme di lunghezza d’onda.

Ora ti insegnerò tutti i registri interni del sensore di colore TCS34725. Ti aiuterà a configurarli in futuro per le tue esigenze specifiche, come aggiungere più tempo di attesa o aumentare il guadagno (per condizioni di scarsa luce), ecc.
Prima di presentare tutti i registri, voglio mostrarti una tabella dove puoi capire come le impostazioni dei registri influenzano il tempo di conversione e il consumo di corrente.
Nella tabella sottostante puoi vedere come varia il consumo medio di corrente del dispositivo abilitando diverse durate di attesa usando i bit WEN, WTIME e WLONG.
| WEN | WTIME | WLONG | STATO DI ATTESA | CORRENTE MEDIA DD CORRENTE |
| 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 |
Scegli il compromesso tra consumo di corrente e velocità!
Registri del TCS34725
Di seguito trovi i registri e il loro significato. Ti spiegherò tutti i registri nella sezione successiva.
| Indirizzo | Nome registro | Funzione registro | Valore di reset |
| −− | COMANDO | Specifica l’indirizzo del registro | 0x00 |
| 0x00 | ENABLE | Abilita stati e interruzioni | 0x00 |
| 0x01 | ATIME | Tempo RGBC | 0xFF |
| 0x03 | WTIME | Tempo di attesa | 0xFF |
| 0x04 | AILTL | Soglia bassa interruzione chiara byte basso | 0x00 |
| 0x05 | AILTH | Soglia bassa interruzione chiara byte alto | 0x00 |
| 0x06 | AIHTL | Soglia alta interruzione chiara byte basso | 0x00 |
| 0x07 | AIHTH | Soglia alta interruzione chiara byte alto | 0x00 |
| 0x0C | PERS | Filtro di persistenza interruzione | 0x00 |
| 0x0D | CONFIG | Configurazione | 0x00 |
| 0x0F | CONTROL | Controllo | 0x00 |
| 0x12 | ID | ID dispositivo | ID |
| 0x13 | STATUS | Stato dispositivo | 0x00 |
| 0x14 | CDATAL | Dati chiari byte basso | 0x00 |
| 0x15 | CDATAH | Dati chiari byte alto | 0x00 |
| 0x16 | RDATAL | Dati rossi byte basso | 0x00 |
| 0x17 | RDATAH | Dati rossi byte alto | 0x00 |
| 0x18 | GDATAL | Dati verdi byte basso | 0x00 |
| 0x19 | GDATAH | Dati verdi byte alto | 0x00 |
| 0x1A | BDATAL | Dati blu byte basso | 0x00 |
| 0x1B | BDATAH | Dati blu byte alto | 0x00 |
Registro Comando
Il registro comando specifica l’indirizzo del registro target per le future operazioni di scrittura e lettura. Usando questo comando selezioni il tipo di transazione del protocollo.
Scegli quale registro vuoi leggere o scrivere usando questo registro comando.
Registro Enable
Il registro Enable è usato principalmente per accendere e spegnere il dispositivo TCS3472, e per abilitare funzioni e interruzioni.
Registro di temporizzazione RGBC
Il registro di temporizzazione RGBC controlla il tempo di integrazione interno degli ADC dei canali RGBC chiaro e IR in incrementi di 2,4 ms

Aumentare il tempo di integrazione migliora la sensibilità a costo di tempo. Se puoi permetterti qualche centinaio di ms, ti consiglio di scegliere tempi di integrazione più lunghi.
Registro tempo di attesa
Usi il registro tempo di attesa per inserire pause tra le conversioni. Aiuta a ridurre il consumo medio di corrente.

Registri soglia interruzione RGBC
Usi questi registri per impostare le soglie del segnale ADC. Il sensore di colore attiverà il segnale INT (interruzione) se la lettura del colore supera questa soglia. Utile per intervenire quando il processo di miscelazione del colore va storto (ad esempio in produzione industriale).
Registro di persistenza
Il registro di persistenza controlla come il dispositivo filtra le interruzioni. Puoi configurarlo per ricevere un’interruzione dopo ogni ciclo di integrazione o quando l’integrazione supera i valori impostati dal registro soglia per un periodo specifico.
Registro di configurazione
Questo registro ti aiuta a impostare il tempo di attesa lungo. Se scrivi 1 nel bit WLONG, il ritardo (programmato nel registro WTIME) sarà moltiplicato per 12x.

Registro di controllo
Il registro di controllo ti offre otto bit per gestire varie funzioni nel blocco analogico. Questi bit sono usati per regolare il guadagno e altre funzioni simili.
Registro ID
Fornisce l’ID del circuito integrato. È un registro di sola lettura. Per il TCS34725 l’ID è 0x44. Per il TCS34723 è 0x4D.
Registro stato
Puoi leggere lo stato interno del circuito integrato usando questo registro.

Registri dati canale RGBC
Ultimo ma non meno importante, questo è il registro che leggerai sempre! Qui puoi ottenere i dati digitali del sensore per rosso, verde, blu e luce chiara.

Come programmare un tempo di integrazione specifico?
Supponiamo tu voglia integrare i dati del sensore per 100 ms. Il valore da programmare nel registro ATIME si calcola come segue.
valore = 256 – (100/2.4) = 256 – 42 = 214 = 0xD6
Gestione energetica nel sensore di colore RGB TCS34725
Dato che sai che il sensore consuma solo 65 uA durante lo stato di attesa, puoi usare questa informazione per gestire il consumo energetico.
Puoi aggiungere più stati di attesa per ridurre il consumo medio di corrente. Questo è molto utile quando alimenti il sensore con una batteria.
Variando gli stati di attesa, puoi controllare il consumo medio complessivo del sensore.

L’immagine sopra ti dà un’idea di come i diversi valori WAIT, insieme al bit WLONG, possano aiutarti a ridurre il consumo medio di corrente del sensore quasi allo stesso livello della corrente di standby!
Nelle sezioni successive vedremo il pinout del sensore di colore RGB seguito dalla guida al collegamento.
Caratteristiche del sensore di colore RGB TCS34725
Ecco le caratteristiche principali del sensore di colore TCS34725 riassunte in una tabella:
| Parametro | Gamma |
| Corrente di alimentazione (attiva) | 330 uA (massimo) |
| Corrente in sleep | 10 uA (massimo) |
| Dimensione passo integrazione ADC | 2.56 ms |
| Conteggio ADC per passo | 1024 conteggi |
| Valore massimo conteggio ADC | 65535 conteggi |
| Dimensione passo attesa | 2.4 ms |
| Frequenza clock I2C | 400 kHz |
| Tensione di alimentazione | 2.7 V a 3.6 V |
| Temperatura di esercizio | -30 ℃ a 70 ℃ |
Applicazioni del sensore di colore RGB TCS34725
Ci sono molte applicazioni diverse per il sensore di colore RGB TCS34725, tra cui:
- Elettronica di consumo: Il sensore TCS34725 è un ottimo candidato per rilevare la luce ambientale disponibile e regolare automaticamente la luminosità dello schermo o la modalità schermo (normale / modalità notturna).
- Industria automobilistica – Puoi usare il sensore per regolare le luci programmabili in base al garage o al luogo di sfondo dove si trova il veicolo.
- Sanità – Puoi usare il sensore di colore RGB TCS34725 per monitorare il colore di fluidi di test come urina e sangue per diagnosi automatizzate più rapide.
- Industria alimentare – Friggi finché le cipolle diventano dorate! Il sensore può aiutarti a rilevarlo. Può anche aiutarti a selezionare la frutta in base al colore (matura o no)
- Robotica – puoi usare la codifica a colori e chiedere ai robot di eseguire compiti dedicati basati sul codice colore sul dispositivo / scatola.
Tu per cosa usi il sensore? Fammi sapere nella sezione commenti qui sotto.
Definizione pin del sensore di colore RGB TCS34725
L’immagine sottostante mostra la vista dall’alto del circuito integrato TCS34725 con i dettagli dei pin.

La tabella seguente fornisce i dettagli dei pin del sensore di colore TCS34725.
| Numero pin | Nome pin | Funzione pin |
| 1 | VDD | Tensione di alimentazione |
| 2 | SCL | Linea clock I2C per comunicazione seriale I2C |
| 3 | GND | Massa |
| 4 | NC | Non connettere nulla a questo pin. |
| 5 | INT | Interruzione – Open drain (attivo basso) |
| 6 | SDA | Linea dati I2C per comunicazione seriale I2C |
Come collegare il modulo sensore di colore RGB TCS34725 con ESP32
Ora ti mostrerò come costruire un progetto usando un ESP32 e il sensore di colore RGB TCS34725. Iniziamo con i collegamenti hardware.
Esistono molte varianti di schede sensore. Ora che conosci bene le basi dei sensori e la definizione dei pin, non devi preoccuparti.
Sarai sicuro nell’usare le schede seguendo la guida di collegamento. Iniziamo.

Passo 1: Completa i collegamenti hardware

Il sensore di colore TCS34725 comunica tramite I2C. Al minimo, devi collegare alimentazione, massa e linee I2C. I collegamenti sono semplici da capire e seguire, come si vede nel diagramma sopra.
Inizia sempre con i collegamenti a massa. Alimenta l’intero sistema solo dopo aver completato tutti i collegamenti.
Nel mio esempio uso GPIO21 e GPIO22. Puoi scegliere anche altri pin. Se devi usare pin diversi, modifica il codice di conseguenza.
Il riepilogo dei collegamenti tra il sensore di colore RGB TCS34725 e l’ESP32 è nella tabella sottostante.
| SDA | Linea dati I2C |
| SCL | Linea clock I2C |
| 3V3 | Alimentazione 3.3 V |
| GND | Collegamenti a massa |
Nel passo successivo programmeremo la scheda ESP32.
Passo 2: Programma l’ESP32 con il codice per il sensore RGB qui sotto
Segui il passo successivo per capire l’implementazione del codice. Puoi usare il codice sottostante per testare il modulo ESP32 e il modulo sensore RGB collegato basato sul sensore di colore 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(" ");
}
Passo 3: Analisi del codice per il sensore di colore TCS34725
Analizziamo il codice. Questo esempio è per il sensore di colore RGB TCS34725. Inizi il codice includendo la libreria wire per la comunicazione I2C e la libreria TCS34725 di Adafruit.
Puoi poi sviluppare ulteriormente il tuo progetto su questo codice per contare o classificare oggetti che controllano moduli relè basati sul valore letto dai sensori di colore.
(Pensa a smistare i pomodori tra maturi e non maturi)
#include "Wire.h" #include "Adafruit_TCS34725.h"
Ci sono due modi per inizializzare il sensore di colore: con valori di default (tempo di integrazione di 2,4 ms e guadagno 1x) o con valori specifici di tempo di integrazione e guadagno.
Il secondo metodo è usato in questo codice, con un tempo di integrazione di 700 ms e guadagno 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!
}
Nella funzione setup() la comunicazione seriale è inizializzata a 9600 baud. Poi viene chiamata la funzione tcs.begin() per inizializzare il sensore di colore. Il messaggio “ Found sensor ” viene stampato sul monitor seriale se il sensore è trovato.
Altrimenti, viene stampato il messaggio “ No TCS34725 found … check your connections ” e il programma rimane bloccato in un ciclo infinito.
while (1);
Serve un reset dopo aver controllato i collegamenti.
Nella funzione loop(), le letture del sensore di colore si ottengono chiamando la
tcs.getRawData(&r, &g, &b, &c) che memorizza i valori rosso, verde, blu e chiaro nelle variabili r, g, b e c rispettivamente.
Poi calcoli la temperatura del colore e i valori di lux usando le funzioni tcs.calculateColorTemperature(r, g, b) e tcs.calculateLux(r, g, b) rispettivamente.
Infine, la temperatura del colore, i lux, i valori rosso, verde, blu e chiaro vengono stampati sul monitor seriale.
Spero che la spiegazione del codice per il sensore di colore RGB TCS34725 ti sia stata utile.
FAQ sul sensore RGB TCS34725
Ho incluso una lista delle domande più frequenti sul sensore di colore TCS34725.
Qual è l’interfaccia di comunicazione usata dal TCS34725?
Puoi usare l’interfaccia I2C per comunicare con il sensore. Il sensore supporta la modalità veloce (fino a 400 kbit/s).
Qual è la gamma di tensione operativa del sensore di colore TCS34725?
Il TCS34725 opera in un intervallo di tensione da 2,7 V a 3,6 V. Se il bus I2C è tirato su a 1,8 V, la tensione massima è 3,3 V.
Qual è la risposta spettrale del TCS34725?
La risposta spettrale del sensore è simile a quella dell’occhio umano.

Consulta la sezione Fondamenti in questo articolo per saperne di più sulla sensibilità ai colori e altre informazioni interessanti sul sensore.
Qual è la risoluzione del TCS34725?
Il TCS34725 ha una risoluzione di 16 bit per canale, permettendo oltre 16 milioni di combinazioni di colore diverse. Ogni colore ha un ADC dedicato seguito dal fotosensore. Oltre ai bit RGB, hai anche 16 bit di informazioni sulla luce chiara.
Per quali applicazioni è usato il TCS34725?
Il TCS34725 è usato in applicazioni di rilevamento del colore e della luce ambientale. Per capire perché il sensore TCS3725 è così adatto, consulta la sezione basi di questo articolo.
- Prodotti per salute/fitness
- Rilevamento della luce ambientale (per regolare automaticamente la luminosità della TV, ad esempio)
- Controllo dei processi industriali (per monitorare la qualità dei prodotti basata sul colore)
- Automazione diagnostica medica e altro.
Il TCS34725 è compatibile con ESP32?
Sì, il TCS34725 è completamente compatibile con ESP32. Non è necessario usare level shifter. Il sensore potrebbe essere più compatibile con ESP32 che con Arduino UNO (mia opinione).
Conclusione
Questo articolo ha coperto tutte le informazioni essenziali sul sensore RGB TCS34725, incluso come funziona, i dettagli dei pin, le informazioni sui registri, le caratteristiche chiave e le applicazioni.
Conoscere informazioni dettagliate sui sensori ti aiuta a decidere e costruire progetti più potenti usando il sensore TCS34725.
Ho anche condiviso una guida di collegamento per ESP32 e un esempio di codice con spiegazione, che puoi usare per testare e adattare ai tuoi progetti.
Se hai altre domande sui sensori, per favore scrivile nella sezione commenti.
Mi piacerebbe sentire la tua opinione! Facci sapere se c’è altro che vorresti che trattassi in futuri articoli.


