Internet Rzeczy w pomiarach środowiskowych (8). Czujnik wielospektralny AS7341 firmy ams-OSRAM

Internet Rzeczy w pomiarach środowiskowych (8). Czujnik wielospektralny AS7341 firmy ams-OSRAM

Firma ams-OSRAM oferuje czujniki spektralne do aplikacji z zakresu wykrywania kolorów oraz analizy widmowej. Układy scalone z tej grupy znajdują wiele zastosowań, takich jak wybieranie kolorów, uwierzytelnianie i analiza widmowa substancji, materiałów, żywności czy płynów. Systemy te są używane w wielu obszarach, w szczególności w sektorach: konsumenckim, przemysłowym i medycznym.

Na przestrzeni lat proste czujniki światła otoczenia (ALS, Ambient Light Sensor) otrzymały najpierw kanał bliskiej podczerwieni (NIR, Near Infrared), a następnie zostały wyposażone w filtry zapewniające podział światła widzialnego na trzy kanały: czerwony (R, red), zielony (G, green) i niebieski (B, blue).

Kolejnym etapem rozwoju tych komponentów było opracowanie filtrów interferencyjnych i skonstruowanie czujników XYZ oraz wielospektralnych. Zostały one omówione w artykułach: „Systemy dla Internetu Rzeczy (45) – Czujniki koloru” [2], a także „Czujniki optyczne (4). Sensory koloru oraz czujniki i moduły multispektralne” [8].

Spektroskopia optyczna jest zwykle kojarzona z drogimi urządzeniami spektrometrycznymi, których cena sięga od dziesiątek do nawet setek tysięcy dolarów. Tymczasem firma ams-OSRAM, lider technologii czujników analogowych i optycznych, sprowadziła spektroskopię do skali... układu scalonego. Rodzina czujników wielospektralnych tej firmy obejmuje szeroką gamę sensorów zapewniających od 6 do 18 kanałów w widmie widzialnym i bliskiej podczerwieni. Wszystkie układy wyposażone zostały w filtry wąskopasmowe umieszczone bezpośrednio na fotodiodach, co pozwala na uzyskanie precyzyjnej charakterystyki widmowej. W większości z nich uwzględniono ponadto bezpośrednie sterowniki LED do synchronizacji i sterowania źródłami światła, dzięki czemu mogą one sprawić, że zewnętrzne źródło światła będzie pracowało wydajnie [1].

AS7341 to 11-kanałowy czujnik wielospektralny do zastosowań związanych z wykrywaniem kolorów i analizą widmową. Układ AS7343 ma bardzo podobną budowę oraz dodatkowe kanały XYZ. Oferowane są też wersje AS7341L i AS7343L zaprojektowane specjalnie do pomiarów światła odbitego w blokach pomiarowych aparatury medycznej. Rodzina AS7265x zawiera 3 układy scalone, każdy po 6 kanałów pomiarowych – zastosowanie ich w ramach pojedynczego systemu umożliwia pomiar w 18 kanałach, obejmujących długości fal od bliskiego nadfioletu do bliskiej podczerwieni (410 nm do 940 nm), z szerokością kanałów FWHM równą 20 nm. Dokładniejszy opis znajduje się w artykule [2].

Rozwiązania ams-OSRAM w zakresie czujników spektralnych w skali chipowej umożliwiają projektantom wdrażanie szerokiej gamy nowych aplikacji, takich jak: zaawansowane wykrywanie koloru, wykrywanie rodzaju dymu, optymalizacja w ogrodnictwie czy też uwierzytelnianie oraz analiza kolorów i widma rozmaitych materiałów, w tym płynów.

Układ AS7341 firmy ams-OSRAM

Główne cechy układu AS7341 [4]:

  • 8 kanałów optycznych rozmieszczonych w zakresie widzialnym,
  • 3 dodatkowe kanały: Clear, NIR oraz Flicker,
  • 6 przetworników ADC do przetwarzania sygnału,
  • napięcie zasilania (min./typ./maks.): 1,7/1,8/2,0 V,
  • napięcie na wyprowadzeniu LDR (abs. maks.) 3,6 V,
  • prąd zasilania w stanie aktywnym (typ./maks.): 210/300 μA,
  • prąd zasilania w stanie oczekiwania (typ./maks.): 35/60 μA,
  • prąd zasilania w stanie uśpienia (typ./maks.): 0,7/5 μA,
  • prąd upływu wyprowadzeń SCL, SDA, INT (min./maks.): –5/5 μA,
  • zakres ustawień prądu na wyprowadzeniu LDR: 2…258 mA co 2 mA,
  • interfejs: I²C,
  • adres I²C: 0x39,
  • zakres temperatur pracy: od –30°C do 85°C,
  • zakres wilgotności roboczej: od 5% RH do 85% RH,
  • wymiary: 3,1×2×1 mm.

Układ jest umieszczony w 8-nóżkowej obudowie. Oprócz zasilania i masy (dwie nóżki) ma wyprowadzenia szyny I²C (SCL i SDA), wejście GPIO, wyjście INT (otwarty dren) oraz analogowe wyprowadzenie LDR do sterowania prądem zewnętrznej diody LED.

Sterowanie i monitorowanie układu odbywa się za pomocą ośmiobitowych rejestrów dostępnych poprzez interfejs szeregowy I²C. Rejestry te zapewniają funkcje sterowania układem, można je również odczytywać w celu określenia stanu układu i pobrania z niego danych.

Wyprowadzenia GPIO można użyć jako wejścia do podłączenia zewnętrznych fotodiod lub jako wejścia synchronizacji do rozpoczęcia/zatrzymania pomiaru widma (tryb SYNS/SYND). Wyjście INT zgłasza przerwanie, ale może być również użyte do wskazania stanu (READY/BUSY) pomiaru widma w trybach SYNS i SYND.

Architektura układu

Układ AS7341 zawiera 6 niezależnych kanałów optycznych – każdy ze specjalnym, 16-bitowym przetwornikiem światło-częstotliwość. Wzmocnienie i czas integracji wszystkich sześciu kanałów regulowane są za pomocą interfejsu I²C. Możliwe jest również zaprogramowanie czasu oczekiwania, aby automatycznie ustawić opóźnienie pomiędzy dwoma kolejnymi pomiarami widma i tym samym zmniejszyć całkowite zużycie energii. Dostęp do pozostałych kanałów można uzyskać za pośrednictwem multipleksera (SMUX) łączącego je z jednym z wewnętrznych przetworników ADC (rysunek 1).

Rysunek 1. Uproszczony schemat blokowy układu AS7341 [4]

Układ wyposażony został w matrycę fotodiod 4×4 z parami fotodiod kolorów [2]. Powyżej i poniżej matrycy znajdują się dwie fotodiody z wyspecjalizowanymi funkcjami, takimi jak wykrywanie migotania (FLICKER) i detekcja w bliskiej podczerwieni (NIR). W lewym i prawym dolnym rogu znajduje się przezroczysty kanał (CLEAR) – fotodiody bez filtra. Każdą parę fotodiod można przypisać do jednego z sześciu wewnętrznych przetworników ADC (CH0...CH5).

Jak już wspomniano, układ AS7341 zawiera multiplekser (SMUX) umożliwiający bardzo elastyczne mapowanie kanałów fotodiod do sześciu dostępnych przetworników ADC. Limit 6 ADC wymaga, aby każdy pomiar obejmujący więcej niż sześć z grupy obejmującej 8 kanałów VIS+3 kanały specjalne był wykonywany w dwóch cyklach integracji. Po włączeniu zasilania SMUX musi zostać skonfigurowany przed rozpoczęciem jakichkolwiek pomiarów widmowych. Producent układu udostępnia kod referencyjny i notę aplikacyjną dotyczącą konfiguracji SMUX [7]. Gdy używana jest detekcja migotania, odpowiednią fotodiodę należy skonfigurować na ADC5.

8 kanałów optycznych (VIS) obejmuje widmo widzialne, jeden kanał może służyć do pomiaru bliskiej podczerwieni, a jeden kanał to fotodioda bez filtra („czysta”). Układ ma również osobny kanał do wykrywania migotania światła otoczenia o częstotliwości 50 Hz lub 60 Hz.

Czujnik jest zdolny również do mierzenia widmowych wielkości charakteryzujących światło, takich jak współczynnik oddawania barw (CRI), jasność czy też CCT. W zakresie widzialnym pomiar za pomocą sensora wielospektralnego odbywa się na poziomie radiometrycznym, a nie kolorymetrycznym – oznacza to, że czujnik mierzy widmowy rozkład mocy próbki. AS7341 integruje filtry ze standardowym krzemem CMOS za pomocą technologii nanooptycznych filtrów interferencyjnych, a jego obudowa zapewnia osłonę potrzebną do kontrolowania światła wpadającego do matrycy czujnika.

Kanały optyczne układu AS7341:

  • F1 (405...425 nm),
  • F2 (435...455 nm),
  • F3 (470...490 nm),
  • F4 (505...525 nm),
  • F5 (545...565 nm),
  • F6 (580...600 nm),
  • F7 (620...640 nm),
  • F8 (670...690 nm),
  • NIR (910 nm),
  • Clear (charakterystyka odpowiedzi „gołej” diody Si),
  • FD – Flicker Detection (jak w kanale Clear).

Jak pokazano na rysunku 2, pasma fotodiod czujnika są ułożone w taki sposób, że ich graniczne zakresy ulegają wyrównaniu, nie pozostawiając prawie żadnych przerw w wybranym widmie. Czułości w kanałach są różne. Teoretycznie filtr wąskopasmowy w czujnikach spektralnych powinien przepuszczać jedynie unikalną częstotliwość światła odpowiadającą widmu transmisyjnemu filtra (jak spektrometr). W praktyce, szczególnie w przypadku czujnika AS7341, transmisja i blokowanie poza nim nie są idealne, co skutkuje zakłóceniami optycznymi. Filtry nie są doskonałe – kanał odpowiada też na oświetlenie poza pasmem przepustowym – jednak współczynniki skalujące, macierze lub specjalne algorytmy podczas procesu kalibracji i korekcji zmniejszą takie efekty. Warto podkreślić, że czujnik udostępnia surowe dane, w związku z czym uzyskanie wyników w bardziej użytecznej postaci wymaga wykonania wielu obliczeń. Udostępniany przez producenta arkusz Excel pokazuje sposób obliczenia „od wartości ADC do  xyz, uv i poziomu w luksach” [3]. W pliku znalazły się gotowe, olbrzymie tablice potrzebne do obliczeń macierzowych, które umożliwiają wykonanie skalowania i konwersji dla typowych scenariuszy aplikacyjnych.

Rysunek 2. Odpowiedź spektralna kanałów pomiarowych układu AS7341 odniesiona do F8 [4]

Tryby integracji

AS7341 obsługuje trzy tryby integracji umożliwiające wykonanie pomiaru spektralnego. Tryb integracji (INT_MODE) konfiguruje się w rejestrze 0x70 (CONFIG). Czas całkowania w trybach INT_MODE = „00” i „01” (SPM i SYNS) ustawia się natomiast za pomocą rejestrów ATIME (0x81) i ASTEP (0xCB:0xCA).

Czas całkowania w milisekundach jest równy:

tint=(ATIME+1)×(ASTEP+1)×2,78 μF

Zawartość domyślna rejestru ASTEP wynosi 999 (2,78 ms), a zalecana konfiguracja tych dwóch rejestrów to ASTEP = 599 i ATIME = 29, co daje czas całkowania 50 ms. Czas całkowania określa również wartość ADC w pełnej skali, która jest równa:

ADCfullscale=(ATIME+1)×(ASTEP+1)

Jeśli włączone będzie odczekiwanie pomiędzy kolejnymi pomiarami (WEN = „1”, 0x80), to każdy nowy pomiar rozpocznie się po czasie WTIME (0x83). Należy zwrócić uwagę, by WTIME był wystarczająco długi – tak aby całkowanie widmowe i wszelkie inne funkcje mogły zostać zakończone w tym okresie.
Specjalne rejestry zapewniają konfigurację 6 zintegrowanych przetworników ADC (CH0...CH5). Istnieje możliwość regulacji wzmocnienia, skonfigurowania i włączenia automatycznej kontroli wzmocnienia (AGC) oraz ustawienia automatycznej kompensacji zera. Wzmocnienie jest ustawiane w zakresie 0,5×…512×.

W odniesieniu do detekcji migotania istnieje możliwość skonfigurowania czasu całkowania i wzmocnienia CH5 ADC niezależnie od innych przetworników ADC.

Tryb SPM (spectral measurement, no sync) INT_MODE = 0x0

Ustawienie domyślne. Całkowanie rozpoczyna się od ustawienia bitu SP_EN = „1” w rejestrze ENABLE (0x80). Czas całkowania ustalany jest przez rejestry ATIME (0x81) i ASTEP (0xCB:0xCA). Pomiar przebiega bez synchronizacji (rysunek 3).

Rysunek 3. Praca układu w trybie SPM [4]

Rejestry: SP_EN = „1”, INT_MODE = 0x0, ATIME [7:0], ASTEP [15:0], WTIME [7:0]

Tryb SYNS (spectral measurement, start sync) INT_MODE = 0x1

Całkowanie ze startem określanym przez zewnętrzny sygnał. Integracja rozpoczyna się zboczem narastającym/opadającym sygnału na pinie GPIO. Czas całkowania ustalany jest przez rejestry ATIME i ASTEP (rysunek 4).

Rysunek 4. Praca układu w trybie SYNS [4]

Rejestry: SP_EN = „1”, INT_MODE = 0x1, ATIME [7:0], ASTEP [15:0], WTIME [7:0]

Tryb SYND (spectral measurement, start/stop sync) INT_MODE = 0x3

Całkowanie ze startem i stopem określanym przez zewnętrzny sygnał, a kontrolowane poprzez narastające/opadające zbocze na pinie GPIO. Czas integracji jest definiowany przez rejestr EDGE (0x72) zawierający liczbę opadających zboczy SYNC pomiędzy początkiem i zakończeniem całkowania. Układ przeprowadza integrację do momentu osiągnięcia liczby zboczy opadających na pinie GPIO (rysunek 5). Rzeczywisty czas całkowania można odczytać w rejestrze ITIME (0x65:0x64:0x63).

Rysunek 5. Praca układu w trybie SYND [4]

Rejestry: SP_EN = „1”, INT_MODE = 0x3, EDGE[7:0], ITIME[23:0]

Praca układu AS7341

Układ pracuje w jednym z trzech stanów (rysunek 6):

  • Stan aktywny występuje podczas aktywnej integracji (PON = „1”; SP_EN = „1”). Włączenie oczekiwania pomiędzy dwoma kolejnymi pomiarami (WEN = „1”) pozwala zredukować prąd zasilania.
  • Stan bezczynności (IDLE) występuje, gdy PON = „1” i wszystkie funkcje pozostają wyłączone.
  • Stan uśpienia (SLEEP) występuje, gdy PON = „0” i magistrala I²C jest bezczynna. Jeśli występuje ruch na szynie I²C, układ automatycznie przechodzi w tryb bezczynności.
Rysunek 6. Uproszczony diagram stanów [4]

Po włączeniu zasilania, układ inicjalizuje się (POR), wysyłając (zwykle przez 200 μs) sygnał NAK na szynę I²C i nie akceptując transmisji I²C. Po zakończeniu inicjalizacji układ przechodzi w stan uśpienia (SLEEP), w którym wewnętrzny oscylator i inne obwody pozostają nieaktywne, co skutkuje znacznym obniżeniem zużycia energii. Jeśli w tym stanie nastąpi transmisja I²C, rdzeń I²C tymczasowo się budzi, aby obsłużyć komunikację.

Po włączeniu bitu zasilania PON (rejestr ENABLE) układ przechodzi w stan oczekiwania (IDLE), w którym wewnętrzny oscylator i obwody towarzyszące są aktywne, ale zużycie energii pozostaje niskie.

Po włączeniu pomiaru spektralnego bitem SP_EN = 1 (rejestr ENABLE) układ przechodzi w stan aktywny. Jeżeli pomiar spektralny jest wyłączony (SP_EN = 0), układ powraca do stanu IDLE.

Jeśli włączony jest bit SAI = „1” (rejestr CFG3 – „uśpienie po przerwaniu”), maszyna stanu przejdzie w stan SLEEP, gdy wystąpi przerwanie. Nie powoduje to jednak automatycznej zmiany żadnego z ustawień rejestru (np. bit PON jest nadal wysoki, ale normalny stan pracy zostaje zastąpiony stanem SLEEP).

Stan SLEEP kończy się w momencie wyczyszczenia bitu stanu SAI_ACTIVE (rejestr STATUS6).

Rejestr stanu STATUS (0x93) pokazuje szczegóły dotyczące nasycenia, przerwań, nadmiernej temperatury, działania układu i detekcji migotania światła otoczenia.

Odczyt rejestru ASTATUS (0x60 oraz 0x94) powoduje zablokowanie wszystkich 12 bajtów danych widmowych w ramach odczytu stanu. Odczyt tych bajtów po kolei (0x60 do 0x6F lub 0x94 do 0xA0) gwarantuje integralność danych. Wszystkie dane widmowe są przechowywane jako wartości 16-bitowe. Jeśli włączona jest detekcja migotania, kanał widmowy piąty (CH5 ADC) będzie używany do realizacji detekcji migotania, a wartość CH5_DATA wyniesie „0”.

Rejestry progowe przerwań P_TH_L_LSB/MSB oraz SP_TH_H_LSB/MSB zapewniają 16-bitowe wartości, które można zastosować jako górne i dolne progi, w celu porównania z 16-bitowymi wartościami kanału CH0_DATA (ADC CH0). Jeżeli bit zezwolenia na przerwanie SP_IEN (rejestr INTENAB) jest włączony i CH0_DATA wykracza poza zakres wyznaczony progami w serii kolejnych pomiarów (długość serii jest określona w polu APERS rejestru PERS), wówczas zgłaszane jest przerwanie.

Bufor FIFO, służący do odczytywania danych widmowych przy mniejszej liczbie transakcji odczytu i zapisu I²C, to 256 bajtów pamięci RAM składającej się z 128 słów dwubajtowych. Host pozyskuje dane z bufora poprzez odczyt adresów: 0xFE...0xFF. Wskaźnik adresu rejestru automatycznie zawija się od 0xFF do 0xFE w miarę odczytywania danych.

Interfejs I²C

Układ korzysta z interfejsu I²C obsługującego adresowanie 7-bitowe i może pracować ze standardową lub pełną prędkością. Transakcje odczytu oraz zapisu są zgodne ze standardem ustanowionym przez firmę Philips (obecnie NXP). 8-bitowy bufor przechowuje adres bajtu wybranego do odczytu lub zapisu.

Bufor ten zwiększa się automatycznie po przesłaniu każdego bajtu i jest zachowywany pomiędzy zdarzeniami transakcyjnymi (tj. pozostaje ważny nawet po wydaniu przez układ nadrzędny polecenia STOP i zwolnieniu magistrali I²C). Podczas kolejnych transakcji odczytu, przyszła/powtarzana transakcja odczytu I²C może zwykle pomijać bajt adresu pamięci następujący po adresie układu; bufor zachowuje adres ostatniego rejestru +1. Wszystkie pola 16-bitowe mają mechanizm zatrzaskowy do odczytu i zapisu – podczas odczytywania tych pól najpierw należy odczytać młodszy bajt, co uruchamia 16-bitowy zatrzask. Zaraz potem należy odczytać starszy bajt. Z kolei podczas zapisywania w tych polach najpierw należy zapisać młodszy bajt, a bezpośrednio po nim – starszy bajt. Odczyt lub zapis do tych rejestrów bez przestrzegania opisanych wymagań spowoduje błędy transmisji.

Moduły ewaluacyjne firmy ams-OSRAM

Zestaw ewaluacyjny (EVK) firmy ams-OSRAM stanowi platformę ewaluacyjną przeznaczoną do testowania czujnika AS7341 i demonstrowania różnych scenariuszy użycia [3].

Dostępne są dwa zestawy ewaluacyjne, różniące się zastosowaniem i adapterami optycznymi:

  • Standardowy zestaw ALS przeznaczony jest do bezdotykowego pomiaru oświetlenia otoczenia lub badania poszczególnych źródeł światła – zawiera wersję sprzętową bez wbudowanych diod LED, ale z dyfuzorem o maksymalnym polu widzenia dostosowanym do możliwości samego czujnika.
  • Zestaw rozszerzony (pomiar światła odbitego) służy do pomiaru kontaktowego kolorowych powierzchni i składa się z czujnika z fabrycznie zamontowaną diodą LED oraz specjalnym adapterem zainstalowanym przed czujnikiem.

W zestawie znalazł się konwerter magistrali I²C do USB (do podłączenia płytki do komputera) oraz rozbudowana aplikacja firmowa.

Moduł czujnika „AS7341 Spectral Color Sensor” firmy Waveshare

Moduł czujnika światła i koloru o nazwie „AS7341 Spectral Color Sensor” (SKU:19564) firmy Waveshare [5] zawiera czujnik AS7341 oraz 6-pinowe gniazdo o rastrze 2,54 mm (fotografia tytułowa). Do zestawu dołączono przewód zakończony z jednej strony wtyczką 6-pinową, a z drugiej – pojedynczymi wtykami IDC.

Firma Waveshare udostępnia również stronę Wiki [6] ze schematem, opisem modułu oraz oprogramowaniem (z dosyć dokładnym opisem) na platformy Arduino, Raspberry Pi (C oraz Python) i STM32.

Moduł czujnika AS7341 jest zasilany napięciem VCC (2,5...5,5 V) doprowadzonym z gniazdka do regulatora LDO typu RT9193-18 firmy Richtek. Ten szybki stabilizator – z niskim poziomem szumów i niewielkim spadkiem napięcia (220 mV @ 300 mA) – dostarcza napięcie 1,8 V do zasilania układu AS7341.

Wyprowadzenia SDA, SCL oraz INT układu AS7341 zostały podciągnięte do szyny 1,8 V za pomocą rezystorów 4,7 kΩ oraz podłączone do dwukierunkowego translatora poziomów logicznych LFS0204 firmy Texas Instruments. Natomiast linie SDA i SCL z drugiej strony translatora wyprowadzono na piny gniazdka i wyposażono w rezystory podciągające 4,7 kΩ dołączone do VCC.

Wyprowadzenie GPIO jest podłączone do gniazdka z zastosowaniem dzielnika rezystancyjnego 8,2 kΩ/10 kΩ. Umożliwia to obniżenie zewnętrznego napięcia podawanego na wyprowadzenie (przy pracy w roli wejścia) oraz wystawianie pełnego poziomu 1,8 V (przy pracy w trybie wyjścia).

Do wyprowadzenia LDS układu AS7341 dołączono dwie białe diody LED zasilane napięciem VCC.

MicroPython dla AS7341

Oprogramowanie w języku Python (dostępne na stronie Wiki [6]) zostało zaadaptowane na potrzeby języka MicroPython przez Roba Hammerlinga [7]. Repozytorium GitHub zawiera dokumentację (w tym notę aplikacyjną AN000660), driver czujnika oraz wiele gotowych przykładów jego użytkowania.

Dosyć tajemniczo kształtuje się sprawa noty aplikacyjnej AN000660 „AS7341 Demo for Fast Measurement Using Unicom Board” firmy ams-OSRAM. Jest ona konieczna do poprawnego konfigurowania multiplekserów SMUX służących do wyboru kanałów spektralnych czujnika AS7341 – nie można jej jednak nigdzie znaleźć, nawet za pomocą Google. Po dłuższym poszukiwaniu okazuje się, że została ona zamieszczona w pakiecie instalacyjnym zip modułu ewaluacyjnego firmy ams-OSRAM [7].

Praca modułu czujnika AS7341 z płytką Enviro Weather

Pomiary zostały wykonane z zastosowaniem modułu czujnika AS7341 „AS7341 Spectral Color Sensor” (SKU:19564) firmy Waveshare [5], dołączonego do płytki Enviro Weather firmy Pimoroni [9], drivera języka MicroPython Roba Hammerlinga [7] oraz zaadaptowanego stamtąd przykładu.

Płytka modułu czujnika AS7341 została lekko zmodyfikowana, bowiem linię zasilania VCC dołączono do wyjścia dodatkowego regulatora LDO 3,3 V, zasilanego z linii VSYS płytki Raspberry Pi Pico W. Wyprowadzenia SCL i SDA płytki czujnika (z rezystorami podciągającymi 4,7 kΩ do linii VCC) dołączono do linii SCL (GP5) i SDA (GP4) płytki Enviro Weather, gdzie są już umieszczone rezystory podciągające 10 kΩ do linii 3V3. W opisanej konstrukcji występuje problem z podciąganiem do dwóch różnych linii zasilania oraz z trochę zbyt dużym obciążeniem prądowym. Dlatego z płytki czujnika wylutowano dwa rezystory 4,7 kΩ z oznaczeniami 472 (umieszczone bezpośrednio obok napisu VCC – patrz fotografia tytułowa).

Kod programu do inicjalizacji czujnika AS7341 został pokazany na listingu 1. Mamy tu standardowe ustawienia. Pomiary są wykonywane w trybie SPM. Ponieważ układ ma tylko 6 przetworników ADC, odczyt kanałów spektralnych przeprowadzany jest w dwóch krokach: najpierw F1...F4 + Clear + NIR, a potem F5...F8 + Clear + NIR. Odczyt kanału pomiaru migotania wykonywany jest osobno (w kanale CH5 `ADC). Dodatkowo – za pomocą czujnika LTR-559 firmy LiteOn na płytce Enviro Weather – realizowany jest pomiar światła ALS [9].

sensor.set_measure_mode(AS7341_MODE_SPM) # started by SP_EN bit = 1
sensor.set_atime(29) # 30× ASTEPS = 50,04 ms
sensor.set_astep(599) # 2.78 μs × 600 = 1.668 ms
sensor.set_again(4) # factor 8× (with pretty much light)

sensor.start_measure(“F1F4CN”)
f1,f2,f3,f4,clr,nir = sensor.get_spectral_data()
sensor.start_measure(“F5F8CN”)
f5,f6,f7,f8,clr,nir = sensor.get_spectral_data()
flicker_freq = sensor.get_flicker_frequency()
enviro_readings = enviro.get_sensor_readings()
print(“Ambient light: “ + str(enviro_readings[“luminance”]) + “ LUX”)

Listing 1. Kod programu do inicjalizacji czujnika AS7341

Zastosowanie płytki Enviro Weather wymaga wpisania do niej najpierw aktualnej wersji firmowego pliku obrazu (uf2), zawierającego MicroPythona. Następnie należy wpisać folder projektu najnowszej aplikacji Enviro (czynność ta została dokładnie omówiona w poprzednim artykule „Stacja pogodowa Enviro Weather firmy Pimoroni” [9]). Potem trzeba dodać pliki drivera czujnika: as7341.py oraz as7341_smux_select.py pobrane z GitHuba [7]. Na koniec pozostaje dodanie pliku as7341_EnviroWeather.py (https://tiny.pl/dnplh).

W projekcie zaadaptowano przykład as7341_all.py z repozytorium [7]. Dodatkowo zastosowane zostały w nim fragmenty realizujące detekcję migotania, a także obsługę przerwań oraz sterowanie zewnętrzną diodą LED.

Biała dioda LED włącza się na początku cyklu pomiarowego. W procedurze obsługi przerwania stan diody użytkownika (na płytce Enviro Weather) zmieniany jest na przeciwny. Jednocześnie wypisany zostaje komunikat. Rezultat działania oprogramowania uruchamianego w środowisku Thonny pokazano na rysunku 7. Wykonano pomiar typowej żarówki energetycznej LED. Należy pamiętać, że  dane z czujnika (wartości poziomów ADC) pokazywane są w formie surowej, tj. bez normalizacji.

Rysunek 7. Pomiar widma światła żarówki LED

Podsumowanie

Pomiar światła – a szczególnie pomiar koloru – nie jest łatwy. Czujnik spektralny lub „spektrometr na chipie”, taki jak AS7341 firmy ams-OSRAM, zapewnia dokładne pomiary widmowego rozkładu mocy, zarówno w pomiarach emisyjnych, jak i odbiciowych. AS7341, będący niewielkim chipem do montażu powierzchniowego, można zintegrować z małymi produktami – choćby czujnikiem dymu czy ręcznym kolorymetrem. Czujnik spektralny w czujniku dymu potrafi rozróżnić źródła dymu, aby dokładniej wskazać rodzaj pożaru, a tym samym podnieść poziom bezpieczeństwa, a  nawet uratować ludzkie życie.

Możliwość odróżnienia dymu papierosowego od emisji z waporyzatorów (vape) otwiera drogę do opracowania nowych możliwości, które stanowią wartość dodaną czujnika dymu. Z kolei wielokanałowy sensor spektralny zapewnia dokładne równoważenie punktu bieli w najszerszym zakresie warunków oświetleniowych. Czujniki takie pomagają smartfonom w uzyskaniu doskonałego odwzorowania barw przez aparat fotograficzny, nawet w scenach, w których nie działają czujniki RGB lub XYZ. A wszystko to dostępne jest za rozsądną cenę.

Henryk A. Kowalski
Instytut Informatyki
Politechnika Warszawska

Literatura:

  1. Spectral sensing, ams-Osram, https://tiny.pl/dnpjx
  2. „Systemy dla Internetu Rzeczy (45) Czujniki koloru”, Henryk A. Kowalski, EP 2/2021, https://tiny.pl/dnpjw
  3. ams AS7341 – 11-Channel Spectral Color Sensor, ams-Osram, https://tiny.pl/dnpjc
  4. AS7341 11-Channel Multi-Spectral Digital Sensor, Datasheet DS000504, v3-00, 2020-Jun-25, https://tiny.pl/dnpjd
  5. AS7341 Spectral Color Sensor, SKU: 19564, Waveshare, https://tiny.pl/dnpjj
  6. AS7341 Spectral Color Sensor, Wiki, Waveshare, https://tiny.pl/dnpjp
  7. micropython-as7341, Version 0.3, Rob Hammerling, September 2023, https://tiny.pl/dnpph
  8. „Czujniki optyczne (4). Sensory koloru oraz czujniki i moduły multispektralne”, Przemysław Musz, EP 10/2023, https://tiny.pl/dnpjk
  9. „Stacja pogodowa Enviro Weather firmy Pimoroni”, EP 4/2024, https://tiny.pl/d93r1
Artykuł ukazał się w
Elektronika Praktyczna
sierpień 2024

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik październik 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio wrzesień - październik 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje wrzesień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna październik 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich październik 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów