Modul rozpoznávání světla a barev RGB TCS34725

Modul rozpoznávání světla a barev RGB je vstupní modul pro Arduino. Tento modul obsahuje RGB senzor TCS34725, který komunikuje po sběrnici I2C. Použitý senzor doplňuje na modulu ještě bílá LED dioda, která slouží pro osvětlení detekovaného předmětu.
Princip funkce tohoto modulu je jednoduchý. Po osvětlení detekovaného předmětu se odrazí světlo do senzoru. V něm se nachází pole detekčních fotodiod, z který jedna čtvrtina obsahuje červený filtr, další zelený filtr, třetí modrý filtr a poslední čtvrtina je bez filtru. Díky tomu můžeme ze senzoru získat informace jak o barevných složkách RGB (red-green-blue, červená-zelená-modrá), tak i o takzvané složce přirozeného světla (clear light).
Pro napájení senzoru je možné využít buď 3,3 V (na pin 3V3) nebo 5 V (na pin VIN). Použitým napětím také určujeme, jestli komunikace bude probíhat na napěťových úrovních 3,3 nebo 5 Voltu. Proudový odběr samotného obvodu se pohybuje okolo 2,5 uA, přičemž tento odběr stoupne na jednotky mA při samotném měření díky zapnutí pomocné LED diody.

Pro úspěšné propojení modulu TCS34725 a Arduino desky stačí zapojit celkem 4 vodiče. Propojíme SDA s pinem A4, SCL s pinem A5, GND se zemí Arduina a VIN s 5V Arduina. Pro piny SDA a SCL musíme vybrat vždy vyhrazené I2C piny na námi vybrané desce, u Arduino UNO jsou to právě piny A4 a A5. A pokud chcete využít také vypínání pomocné LED diody na modulu, tak stačí propojit piny LED a INT na modulu.

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu Adafruit_TCS34725, návod, jak na to, je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven, inicializaci modulu z knihovny a vytvoření proměnných pro ukládání naměřených dat.
V podprogramu setup provedeme zahájení komunikace po sériové lince a komunikace se senzorem TCS. Zahájení komunikace se senzorem je umístěné v kontrolní podmínce, takže v případě úspěšného i neúspěšného zahájení získáme informaci po sériové lince.
Nekonečná smyčka loop začíná vždy zapnutím přisvětlovací LED diody s krátkou pauzou pro ustálení. Následně načteme data ze senzoru do proměnných a LED diodu vypneme. V dalším kroku vypočteme pomocí knihovny teplotu snímaného světla společně s intenzitou osvětlení a oba výsledky uložíme do příslušných proměnných. Všechny získané údaje následně vytiskneme po sériové lince na jednom řádku. Díky tomu tedy uvidíme v počítači teplotu barev v Kelvinech, intenzitu osvětlení v luxech, složky barev RGB a také složku přirozeného světla označenou jako C.
Na konci programu se nachází už jen pauza po dobu 300 ms. Tento čas je zvolen pro celkový běh smyčky po dobu cca jedné sekundy. V aktuálním nastavení při inicializaci je totiž zvolen nejvíce citlivý mód měření, u kterého trvá měření přibližně 700 ms. Pokud se chcete dozvědět více o dostupných módech měření, tak zde je od autorů reference knihovny.

// RGB senzor TCS34725

// připojení potřebných knihoven
#include <Wire.h>
#include "Adafruit_TCS34725.h"
// inicializace senzoru z knihovny
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);
// vytvoření proměnných pro ukládání naměřených dat
uint16_t r, g, b, c, teplotaBarev, lux;

void setup(void) {
  // zahájení komunikace po sériové lince
  // rychlostí 9600 baud
  Serial.begin(9600);
  // zahájení komunikace se senzorem,
  // pokud selže spojení se senzorem, vypíšeme chybu po sériové lince
  // a program se zastaví
  if (tcs.begin()) {
    Serial.println("Detekovan senzor TCS34725.");
  } else {
    Serial.println("Chyba pripojeni senzoru TCS34725, zkontrolujte zapojeni.");
    while (1);
  }
}

void loop(void) {
  // zapnutí přisvětlovací LED na modulu s krátkou pauzou
  // pro ustálení
  tcs.setInterrupt(false);
  delay(60);
  // načtení dat ze senzoru do proměnných
  tcs.getRawData(&r, &g, &b, &c);
  // vypnutí přisvětlovací LED diody
  tcs.setInterrupt(true);
  // výpočet teploty barvy a uložení do proměnné
  teplotaBarev = tcs.calculateColorTemperature(r, g, b);
  // vypočtení intenzity osvětlení a uložení do proměnné
  lux = tcs.calculateLux(r, g, b);
  // vytištění všech údajů po sériové lince
  Serial.print("Teplota barev: "); Serial.print(teplotaBarev, DEC); Serial.print(" Kelvin - ");
  Serial.print("Intenzita osvetleni: "); Serial.print(lux, DEC); Serial.print(" lux - ");
  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(" ");
  // pauza před dalším měřením, měření samotné trvá cca 700ms
  delay(300);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným modulem TCS34725 dostaneme například tento výsledek:

Teplota barev: 4643 Kelvin - Intenzita osvetleni: 361 lux - R: 771 G: 646 B: 557 C: 1564
Teplota barev: 4626 Kelvin - Intenzita osvetleni: 362 lux - R: 771 G: 646 B: 556 C: 1564
Teplota barev: 4626 Kelvin - Intenzita osvetleni: 362 lux - R: 771 G: 646 B: 556 C: 1562
Červený předmět:
Teplota barev: 4589 Kelvin - Intenzita osvetleni: 65495 lux - R: 726 G: 332 B: 451 C: 1406
Zelený předmět:
Teplota barev: 7674 Kelvin - Intenzita osvetleni: 1032 lux - R: 802 G: 1347 B: 1138 C: 3327
Modrý předmět"
Teplota barev: 29054 Kelvin - Intenzita osvetleni: 431 lux - R: 514 G: 971 B: 1276 C: 2766

Modul rozpoznávání světla a barev RGB TCS34725 je velice zajímavý rozšiřovací modul pro Arduino. Díky spojení senzoru s bílou LED diodou máme k dispozici kompletní modul, který sám o sobě dokáže získat informace o barvě předmětu, který přiložíme k modulu. Můžeme ho tedy využít v projektech jako Arduino detektor barev, senzor intenzity a barvy okolního osvětlení či využít teplotu barvy okolního světla pro přizpůsobení osvětlení v domě.

 

Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1712-i2c-modul-pro-rozpoznavani-svetla-rgb-pro-arduino-1501746778.html

Další podobné články