Czujniki koloru RGB
Tradycyjną technologię RGB można postrzegać jako podzbiór czujników spektralnych. Czujnik RGB zwykle wyposaża się w trzy filtry pasmowo-przepustowe w widmie światła widzialnego. Ten rodzaj pomiaru koloru sam w sobie nie odpowiada żadnemu standardowi ani modelowi postrzegania koloru przez ludzkie oko. Nawet przy zastosowaniu złożonej kalibracji dokładność czujnika RGB pod względem pomiaru koloru jest ograniczona przez trzykanałową konfigurację urządzenia.
Scalone układy czujników koloru RGB są wytwarzane przez wielu producentów i wykonują pomiar w trzech zakresach widma światła: czerwonym (R) 590...720 nm, zielonym (G) 480...600 nm oraz niebieskim (B) 400...540 nm. Typowo zawierają one filtry blokujące niepożądane promieniowanie podczerwone.
Niektóre komponenty wykonują dodatkowo pomiar w zakresie podczerwieni (IR) powyżej 700 nm oraz pomiar całego widma światła (C), bez filtru kolorowego. Powierzchnie światłoczułe czujników mają zróżnicowany kształt (najczęściej prostokąta, rzadziej koła) i standardowo podzielone są na obszary – osobne dla każdego kanału koloru. Mogą być zorganizowane w postaci dwuwymiarowej matrycy elementów. Rozdzielczość pomiaru cyfrowego zależy od czasu integracji i może być zmieniana w szerokim zakresie, np. od 10 do 24 bitów. Pomiary poszczególnych kanałów mogą być wykonywane synchronicznie lub sekwencyjnie.
Czujniki koloru RGB różnych producentów zostały omówione w artykule „Systemy dla Internetu Rzeczy (45) – Czujniki koloru” [7], a także w artykule „Czujniki optyczne (4). Sensory koloru oraz czujniki i moduły multispektralne” [8]. Obecnie obserwuje się integrowanie w ramach jednego układu zarówno pomiary koloru, jak i inne funkcje związane ze światłem. Scalone czujniki koloru nadają się ponadto do integracji z czujnikami zbliżeniowymi lub sensorami gestów.
Układ TCS3472x
Firma AMS AG przejęła firmę TAOS Inc., która z kolei wcześniej stanowiła dział układów fotoczułych wydzielony z koncernu Texas Instruments. Obecnie marka AMS połączyła się z firmą OSRAM. Rodzina czujników RGB ams-OSRAM obejmuje wiele układów scalonych zarówno poprzedniej generacji (nadal dostępnych), jak też nowych. Firma ta jest także wieloletnim dostawcą czujników koloru do iPhone’ów firmy Apple i ma największy udział w rynku czujników światła otoczenia (ALS).
Typowym czujnikiem RGBC z interfejsem I²C i z wielosegmentowym sensorem jest układ TCS3472x (rysunek 1), dostępny w dwóch wersjach – TCS34725 oraz TCS34727 – różniących się jedynie zasilaniem szyny I²C. Obecnie firma ams-OSRAM zakończyła jego produkcję, ale układ jest wciąż dostępny, podobnie jak tanie moduły uruchomieniowe konstruowane z jego zastosowaniem.
Firma oferuje nowy układ TCS3410 zawierający czujnik RGBC oraz niezależny kanał detekcji migotania (flicker detection). Kolejny nowy układ TCS3408 zawiera dodatkowy kanał szerokopasmowy. Pojawia się jednak problem z dostępnością tych układów, właściwie nie ma również przeznaczonych do nich modułów uruchomieniowych.
Cechy układu TCS3472x:
- kanały: czerwony, zielony, niebieski (RGB) i całe pasmo widzialne (C),
- filtr blokujący podczerwień,
- programowalne wzmocnienie analogowe i czas całkowania,
- zakres dynamiki: 3 800 000:1,
- bardzo wysoka czułość – idealnie nadaje się do pracy za ciemnym szkłem,
- przerwanie maskowalne, programowalne górne i dolne progi z filtrem podtrzymania,
- zasilanie (min./typ./maks.): 2,7/3,0/3,6 V (TCS34725); 2,7/3,0/3,3 V (TCS34727),
- niski pobór mocy (typ.): 2,5 μA (Uśpienie), 65 μA (oczekiwanie), 235 μA (pomiar),
- poziomy napięcia szyny I²C: zgodne z VDD (TCS34725); 1,8 V (TCS34727),
- stan oczekiwania (pomiędzy pomiarami): od 2,4 ms do > 7 s,
- zestaw rejestrów i układ pinów kompatybilne z serią TCS3x71,
- obudowa: FN 2 mm × 2,4 mm,
- adres I²C: 0x29.
Układ TCS3472x zapewnia cyfrowy odczyt wartości koloru czerwonego, zielonego, niebieskiego (RGB) i „czystego” światła (rysunek 2). Filtr blokujący IR, zintegrowany na chipie i zlokalizowany na fotodiodach wykrywających kolor, minimalizuje składową widmową IR, a także umożliwia dokładne pomiary kolorów (z wysoką czułością i z szerokim zakresem dynamiki) oraz pomiar światła otoczenia (ALS).
Układ TCS3472x zawiera matrycę dwunastu fotodiod 3×4 (rysunek 1), składającą się z potrójnych fotodiod z filtrem czerwonym, zielonym, niebieskim i przezroczystym (tylko filtr IR), a także cztery przetworniki analogowo-cyfrowe (ADC) integrujące prąd fotodiody, zestaw rejestrów danych, maszynę stanów i interfejs I²C (rysunek 3). Dodatkowo fotodiody są pokryte filtrem blokującym promieniowanie podczerwone. Przetworniki ADC przekształcają wzmocniony sygnał fotodiod na 16-bitową wartość cyfrową. Układ pozwala także na programowanie wzmocnienia analogowego oraz ustawianie czasu integracji.
Po zakończeniu cyklu konwersji wyniki przesyłane są do rejestrów danych kolorów. Dane te określa się także mianem „poziomu zliczania w kanałach”. Transfery są podwójnie buforowane, aby użytkownik uzyskał pewność, że podczas przesyłania nie zostaną odczytane nieprawidłowe dane. Po przesłaniu danych układ automatycznie przechodzi do kolejnego stanu – zgodnie z konfiguracją maszyny stanów.
Przekroczenie dolnego lub górnego zakresu wartości kanału C może powodować zgłoszenie sygnału przerwania. Użytkownik może zastosować filtr podtrzymania przerwań.
Wewnętrzna maszyna stanu zapewnia kontrolę systemu nad funkcjami RGBC i zasilaniem układu. Po włączeniu zasilania wewnętrzny obwód resetu inicjalizuje układ i wprowadza go w stan uśpienia (Sleep) o niskim poborze mocy.
Po wykryciu stanu Start na magistrali I²C układ przechodzi do stanu bezczynności (Idle), w którym sprawdza bit PON (Power ON) w rejestrze Enable (0x00). Jeśli PON jest wyłączony, układ powróci do stanu uśpienia, aby oszczędzać energię – w przeciwnym razie pozostanie w stanie bezczynności do czasu włączenia funkcji RGBC bitem AEN (RGBC enable). Wtedy automat stanu przejdzie przez stany RGBC Init oraz RGBC ADC. Stan RGBC Init trwa 2,4 ms, natomiast czas RGBC ADC zależy od czasu całkowania ATIME (w zakresie od 2,4 ms do 614 ms). Ewentualne przerwanie wygenerowane w wyniku działania RGBC zostanie wystawione na końcu cyklu. Blok RGBC zawiera obwody kontroli wzmocnienia RGBC (AGAIN) i cztery integrujące przetworniki analogowo-cyfrowe (ADC) współpracujące z fotodiodami RGBC. Czas integracji RGBC (ATIME) wpływa zarówno na rozdzielczość, jak i czułość odczytu RGBC.
Układ będzie przechodzić pomiędzy stanem oczekiwania (Wait) i stanem RGBC w sposób pokazany na rysunku 4. Po zakończeniu pomiaru i powrocie do stanu bezczynności automatycznie rozpocznie nowy cykl stanów Wait/RGBC, o ile PON i AEN pozostaną włączone.
Po włączeniu funkcji zarządzania energią bitem WEN (rejestr ENABLE) i ustawieniu bitu AEN maszyna stanu przejdzie dodatkowo w stan oczekiwania Wait. Czas oczekiwania jest określany przez rejestr WTIME. W zależności od stanu bitu WLONG (rejestr CONFIG) reprezentuje on czas:
- WLONG=0: od 2,4 ms do 614 ms (co 2,4 ms);
- WLONG=1 od 28,8 ms do 7,37 s (czyli 12× dłużej).
Interfejs I²C
TCS3472 jest sterowany i monitorowany za pomocą rejestrów danych i sterowania oraz rejestru poleceń COMMAND. Mechanika dostępu do konkretnego rejestru zależy od używanego protokołu. Ogólnie rzecz biorąc, rejestr poleceń jest zapisywany jako pierwszy – w celu określenia konkretnego rejestru danych dla kolejnych operacji odczytu/zapisu.
Układ korzysta z protokołu komunikacji szeregowej I²C z 7-bitowym adresowaniem. Obsługiwane są trzy rodzaje transmisji: odczyt, zapis i protokół kombinowany (rysunek 5). Podczas zapisu pierwszym zapisanym bajtem jest bajt polecenia wpisywany do rejestru polecenia.
Pole TYPE rejestru polecenia COMMAND określa dwa typy transakcji transferu danych. Typ powtórzonego bajtu będzie wielokrotnie odczytywać tę samą komórkę pamięci przy każdym następnym dostępie do danych. Z kolei typ z autoinkremetacją zapewni zwiększanie adresu podczas transmisji kolejnych bajtów. Pole ADDR rejestru polecenia zawiera 5-bitowy adres rejestru sterowania lub danych, zaś ustawienie pola CMD=1 oznacza wybór rejestru COMMAND.
Po otrzymaniu polecenia odczytu dostęp do danych zostanie zrealizowany z użyciem adresu rejestru z poprzedniego polecenia. Podobnie, jeśli pole CMD polecenia jest wyzerowane, to układ zapisze serię bajtów pod adresem podanym w ostatnim ważnym poleceniu z adresem rejestru.
W protokole kombinowanym pierwszym zapisanym bajtem jest bajt polecenia, po którym następuje odczyt serii bajtów.
Dane kanałów RGBC są przechowywane w dwóch kolejnych 8-bitowych rejestrach jako wartości 16-bitowe – zgrupowane w formie bloku ośmiu rejestrów kanałów CRGB, począwszy od rejestru CDATAL (0x14). Aby zapewnić prawidłowy odczyt danych, należy po odczycie dolnego bajtu odczytać jako następny bajt górny. Podczas gdy odczytaniu ulega rejestr dolnego bajtu, zawartość bajtu górnego jest wpisywana do rejestru buforowego (shadow), wybieranego przy kolejnym odczycie (górnego bajtu). Dlatego górny rejestr zostanie poprawnie odczytany nawet, jeśli cykl integracji ADC zakończy się między odczytem dolnego i górnego rejestru.
Płytka Grove – I²C Color Sensor firmy Seeed Technology
Istnieje wiele modułów (różnych firm) z układem scalonym TCS34725: od płytek udostępniających tylko wyprowadzenia układu scalonego, do bardziej rozbudowanych konstrukcji wyposażonych w szereg dodatkowych obwodów. Model Grove – I²C Color Sensor firmy Seeed Technology wyróżnia się zamontowaną na płytce czarną, okrągłą osłoną (patrz fotografia tytułowa)[2]. Wewnątrz osłony zamontowany jest układ scalony TCS34725 oraz biała dioda LED. Takie rozwiązanie umożliwia dokładny pomiar koloru światła odbitego od elementów kładzionych na osłonie i oświetlonych wbudowaną diodą LED.
Półotwarta „obudowa” zapobiega docieraniu rozproszonego światła z otoczenia do czujnika.
Wyprowadzenia szyny I²C SDA i SCL układu scalonego TCS34725 zostały dołączone do tranzystorów MOSFET pracujących jako translator poziomu. Za nimi sygnały szyny są wyprowadzone na czeropinowe złącze zgodne ze standardem Grove.
Zasilanie płytki (VCC) pobierane ze złącza Grove jest podawane na układ LDO typu XC6206P332MR-G (3,3 V, do 200 mA). Przy spadku napięcia na układzie wynoszącym 250 mV (typ.) przy obciążeniu 100 mA i napięciu wyjściowym 3,3 V układ można zasilać z napięcia ok. 3,55...5,5 V. Zakres ten doskonale pasuje do typowego przedziału napięcia jednego ogniwa Li-Poly. Układ TCS34725 jest zasilany z wyjścia LDO. Ponieważ TCS34725 pracuje już przy napięciu 2,7 V, płytkę można zasilać również napięciem 3,3 V.
Biała dioda LED jest zasilana z napięcia wejściowego VCC podłączonego poprzez rezystor 330 Ω oraz wyłącznik suwakowy.
Praca płytki Grove – I²C Color Sensor z płytką Enviro Weather
Pomiary zostały wykonane z zastosowaniem płytki Grove – I²C Color Sensor firmy Seeed Technology [2], dołączonej do płytki Enviro Weather firmy Pimoroni [4] i obsługiwanej za pomocą zaadaptowanej biblioteki języka MicroPython autorstwa Theodore Tuckera [3].
Przy dołączaniu płytki I²C Color Sensor do modułu Raspberry Pi Pico W powstaje problem z szyną I²C. Obie linie magistrali mają na płytce rezystory podciągające o wartości 4,7 kΩ, dołączone do napięcia wejściowego VCC. Szyna I²C modułu EnviroWetaher/Grow ma natomiast rezystory podciągające 10 kΩ podłączone do własnego zasilania 3,3 V procesora. Aby uniknąć konfliktu i nadmiernego obciążenia prądowego szyny, należy wymontować rezystory podciągające na płytce I²C Color Sensor. Z górnej strony płytki trzeba usunąć rezystory R5 i R6 (zdjęcie tytułowe).
Zastosowanie płytki Enviro Weather wymaga wpisania do niej najpierw najnowszej wersji firmowego pliku obrazu (uf2), zawierającego MicroPythona. Następnie należy wpisać folder projektu najnowszej aplikacji Enviro (co dokładnie omówiliśmy w poprzednim artykule „Stacja pogodowa Enviro Weather firmy Pimoroni” [4]). Do pracy z układem TCS3472x została zastosowana biblioteka przeznaczona do the enviro:bit MicroPython firmy Pimoroni. W celu dostosowania jej do potrzeb Enviro Weather MicroPython wymagana była drobna modyfikacja: w pobranym pliku tcs3472.py należy tylko usunąć linię self._bus.start().
Na koniec trzeba dodać plik tcs3472_EnviroWeather.py (https://ep.com.pl/files/bwz/13678-tcs3472_EnviroWeather.zip).
Oprogramowanie było uruchamiane w środowisku Thonny. Organizacja oprogramowania jest bardzo zbliżona do zastosowanej w poprzednim artykule „Czujnik wielospektralny AS7341 firmy ams-OSRAM” [5].
Odczyt z czujnika jest realizowany w pętli. Na jej końcu płytka Enviro Weather zostaje wprowadzona na 60 sekund w uśpienie z aktywnym zewnętrznym układem scalonym zegara RTC. Przy podłączonym zasilaniu z portu USB, tylko procesor RP2040 jest wprowadzany w uśpienie. Natomiast podczas zasilania z akumulatora wyłączane jest zasilanie całej płytki Enviro Weather oraz czujnika TCS34725, z wyjątkiem układu RTC. Dlatego w pętli każdorazowo wykonywana jest inicjalizacja czujnika TCS34725 – a potem odczyt danych pomiarowych.
W trakcie inicjalizacji układu TCS3472x, na szynie I²C wysyłany jest ciąg dwóch transmisji po dwa bajty. Pierwszy bajt 0x80 oznacza ustawienie typu powtórzonego bajtu (bez modyfikacji adresu) oraz wpisanie do rejestru poleceń adresu rejestru ENABLE (0x00). Kolejny bajt 0x03 oznacza ustawienie w tym rejestrze bitów PON=1 oraz AEN=1. Funkcja zgłaszania przerwań oraz timer opóźnienia pozostają wyłączone.
W kolejnej transmisji bajt 0x81 oznacza wpisanie do rejestru poleceń adresu rejestru RGBC (0x01). Następny bajt wymusza wpisanie do tego rejestru liczby 0x2B. Tak zbudowana ramka ustawia parametr czasu integracji ATIME = 43. Maksymalna zawartość RGBC Count jest równa (256 − ATIME) × 1024, czyli 218112 cykli integracji. Dla cyklu integracji równego 2,4 μs daje to czas 152,8 μs.
Pozostałe rejestry sterowania mają ustawienia domyślne po resecie (zawartość 0x00). W rejestrze CONFIG parametr AGAIN jest równy 0x00, co oznacza, że wzmocnienie RGBC gain wynosi 1×.
Sekwencja odczytu danych pomiarowych rozpoczyna się wysłaniem bajtu 0xB4 (patrz rysunek 6). Oznacza to ustawienie typu transakcji transferu danych z auto inkrementacją oraz wpisanie do rejestru poleceń adresu rejestru CDATAL (0x14). Następnie wykonywana jest sekwencja odczytu ośmiu bajtów. Odczytane dane RGBC są wyświetlane w oknie Shell środowiska Thonny. Wyniki następnego cyklu pomiaru będą dostępne po ok. 2,55 ms.
Oprogramowanie jest przygotowane do rozpoznawania wszystkich układów scalonych dołączonych do szyny I²C. Umożliwia to dołączenie do płytki Enviro Weather i obsługę wielu dodatkowych czujników. Dla porównania pokazywany jest poziom oświetlenia ALS pobrany z czujnika LTR-559ALS zamontowanego na płytce Enviro Weather.
Do pomiarów został zastosowany oscyloskop DSO-X 3204A firmy Keysight z zainstalowanym programowym modułem pomiarowym analizy protokołu I²C [6]. Pozwala on na dokonywanie analizy zdarzeń na szynie I²C w sposób niemal intuicyjny. W pomiarach zastosowano wyzwalanie wpisem na szynie I²C z adresem układu TCS34725 (0x29).
Podsumowanie
Pomiary koloru odgrywają duże znaczenie w układach IoT. Po pandemii rynek czujników światła jeszcze się nie odbudował – większość nowych układów i płytek z nimi pozostaje niedostępna. Duże ułatwienie stanowi dostępność szerokiej gamy tanich płytek z czujnikiem TCS34725. Dostępnych jest też kilkadziesiąt projektów z zastosowaniem tego układu, począwszy od prostych urządzeń pomiarowych, aż do bardziej zaawansowanych aplikacji do monitorowania wzrostu pomidorów, jakości wody czy światła otoczenia. W zaprezentowanych badaniach użyto prostego drivera, który można rozbudować o bezpośrednie ustawianie wzmocnienia i czasu integracji oraz obliczenia XYZ czy ALS. Istotna jest łatwość integracji płytki czujnika z innymi układami IoT.
Henryk A. Kowalski
Instytut Informatyki
Politechnika Warszawska
Literatura:
- TCS34725 Color Sensor, ams-OSRAM, https://ams-osram.com/products/sensors/ambient-light-color-spectral-proximity-sensors/ams-tcs34725-color-sensor
- Grove – I²C Color Sensor V2:RGB LED Control, SKU 101020341, Seeed Technology, https://www.seeedstudio.com/Grove-I2C-Color-Sensor-V2.html
- A MicroPython library for the TCS3472 light sensing chip, v1.0.1, Theodore Tucker, Jun 13, 2021, https://github.com/tti0/tcs3472-micropython
- Stacja pogodowa Enviro Weather firmy Pimoroni, Henryk A. Kowalski, EP 4/2024
- Czujnik wielospektralny AS7341 firmy ams-OSRAM, EP 8/2024
- DSOX3024A Oscilloscope: 200 MHz, 4 Channels, https://www.keysight.com/zz/en/product/DSOX3024A/oscilloscope-200-mhz-4-channels.html
- Systemy dla Internetu Rzeczy (45) Czujniki koloru, Henryk A. Kowalski, EP 2/2021
- Czujniki optyczne (4). Sensory koloru oraz czujniki i moduły multispektralne, Przemysław Musz, EP 10/2023