Skip to Content

Interfacciare ESP32 e sensore di colore RGB TCS34725 – Una guida completa

Interfacciare ESP32 e sensore di colore RGB TCS34725 – Una guida completa

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

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.

Color Sensing
Rilevamento del colore

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.

Block diagram of TCS34725
Diagramma a blocchi del TCS34725

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.

Light sensing characteristics of TCS34725
Caratteristiche di rilevamento della luce del TCS34725

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.

Spectral Responsivity of TCS34725
Responsività spettrale del 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.

Wavelength ranges of TCS34725
Gamma di lunghezze d’onda del TCS34725

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:

  1. 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).
  1. 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.
  1. 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.
  1. 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)
  1. 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.

Pinout of TCS34725
Pinout del TCS34725

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.