sensor światła z pomiarem w jednostkach LUX – APDS9300

Twoja opinia, jest ważna dla mnie!

W znanym serwisie aukcyjnym wygrzebałem kiedyś ciekawy sensor z komunikacją I²C o oznaczeniu APDS9300. Układ zainteresował mnie na tyle, że sobie go zakupiłem z myślą o wykorzystaniu w kilku mini projektach, z uwagi na to, że „jakość” oświetlenia można przedstawić w konkretnych jednostkach – LUX. Dodatkowo interesującą możliwością jest sposób w jaki układ dokonuje pomiaru, otóż uzbrojony jest w dwa czujniki światła jeden o szerokim spektrum – światło widzialne (w odcieniu czerwieni) oraz IR λp = 640nm , i drugi pracujący tylko w IR λp = 940nm. No i pomyślałem sobie, że można by dodatkowo zbierać dane z tego czujnika IR do obserwacji w czasie, np w okresie roku. Niestety nie są to już żadne znane jednostki, a tylko odczytane wartości z przetwornika AD.

schemat widma promieniowania widzialnego zaczerpnięty z: http://www.lenalighting.pl/bank-wiedzy/widmo-promieniowania-widzialnego/

schemat widma promieniowania widzialnego zaczerpnięty z: http://www.lenalighting.pl/bank-wiedzy/widmo-promieniowania-widzialnego/

Przy okazji:

Światło jest promieniowaniem widzialnym (elektromagnetycznym) zdolnym do wywoływania u człowieka i zwierząt bezpośrednio wrażeń wzrokowych, z których wynika widzenie. Źródła światła sztucznego są przeważnie źródłami elektrycznymi, natomiast wytwarzane przez nie światło jest w zasadzie wielkością nieelektryczną, wyrażaną wielkościami i prawami fotometrycznymi.
Przyjmuje się, że promieniowanie widzialne zawiera w widmie fal elektromagnetycznych, bardzo wąski przedział od 380 do 780 nm. Taki zakres odbiera nasze oko, ale zwierzęta mogą rejestrować promieniowanie o innych długościach.
W widmie światła widzialnego istnieją przedziały o różnych długościach fal, które oko ludzkie odbiera jako wrażenie różnych barw, np.:

  • przedział o długości fali od 380 nm do 436 nm – fiolet,
  • przedział o długości fali od 436 nm do 495 nm – niebieski,
  • przedział o długości fali od 495 nm do 566 nm – zielony,
  • przedział o długości fali od 566 nm do 589 nm – żółty,
  • przedział o długości fali od 589 nm do 627 nm – pomarańczowy,
  • przedział o długości fali od 627 nm do 780 nm – czerwony.

Najlepiej widzimy w środku zakresu promieniowania widzialnego, a najgorzej na końcach zakresu.

Sensor jest produktem firmy AVAGO Technologies. Produkowany jest jako miniaturowy niskonapięciowy, energooszczędny, cyfrowy sensor optyczny, z bezpośrednim interfejsem I²C 400kHz. Posiada wymiary zaledwie 2,6×2,2mm przy grubości 0,55mm. Pracuje w zakresie napięcia zasilania 2,4 do 3,0V pobiera zaledwie 0,24mA dodatkowo posiada tryb Power Down (15µA). Może pracować w zakresie temperatur otocznia -30 do 85 °C. W nocie katalogowej można wyczytać o następujących właściwościach:

– orientacyjna reakcja oczu człowieka – cokolwiek to znaczy,
– precyzyjny pomiar natężenia oświetlenia na podstawie zróżnicowanych warunków oświetlenia
– programowalne funkcje przerwania
– 16-bitowe wyjście cyfrowe z I²C – obsługuje Fast-Mode na 400 kHz
– 50/60-Hz Tłumienie tętnienia oświetlenia
– niskie napięcie zasilania 2,5V i 1,8V na wyjściach cyfrowych
– niski pobór mocy w trakcie pracy (0,6mW typowo) oraz tryb Power Down
– zgodny z RoHS

Układ jest wykorzystywany we wszelkiego typu sprzętach przenośnych z ekranami, tabletach telefonach i różnych gadżetach. Ma odpowiednik innej firmy o oznaczeniu TSL2561. Oba są ze sobą zgodne pod względem funkcjonalności i oprogramowania pomiaru, ale nie wyprowadzeń. Dodatkowo ten drugi jest zdaje się jeszcze ociupinę drobniejszy.

Bardzo ciekawie prezentuje się pod mikroskopem. Posiada sześć wyprowadzeń z których to dwa służą do komunikacji z µC (SDA i SCL), jedno ADDR SEL do wyboru adresu, oraz dwa zasilające Vdd GND i jedno wyjście INT. Należy wspomnieć o tym, że jest taki popularny, iż produkują go też inni producenci pod innymi symbolami np TSL2561 firmy Taos INC (AMS). Sensory nie są zgodne wyprowadzeniami, ale są identyczne pod względem oprogramowania transmisji.

Sensor jest tak bardzo mały, że nawet nie próbowałem do niego przylutować czegokolwiek, zabrałem się za wykonanie płytki testowej, do której mogłem sobie go spokojnie przylutować. Był to też pretekst do zmierzenia się z lutowaniem za pomocą hot air, gdyż w tej dziedzinie jestem pionierem. Płytka powstała w dwóch wariantach – przy podejściu nr 1 do tematu – sam sensor z kondensatorem i miejscem na pull-up + pady na kabelki, – przy podejściu nr 2 dodatkowo z translatorem napięć I²C PCA9530 i stabilizatorkiem 2,5V TC1185 (150 mA CMOS LDO) + niezbędne elementy bierne.

Choć mam internetowego znajomego (rithien tu o Tobie), który co chwilę pokazuje co potrafi 😉 Ta znajomość jest dla mnie bardzo edukacyjna, gdyż jest profesjonalistą w tym co robi.

rithien pokazuje że można łaczyć technologię "mikro" SMD ztradycyjną

rithien pokazuje że można łączyć technologię „mikro” SMD z tradycyjną

Sam proces komunikacji jest dobrze zobrazowany w nocie katalogowej, ale tu warto wspomnieć o kilku detalach. Po pierwsze układ na wstępie należy obudzić ze stanu standby, i jeszcze ważniejsze – aby sensor „wiedział” że przesłana dana dotyczy rejestru poleceń (command register) najstarszy bit słowa musi być ustawiony. Strona 10 w załączonej nocie. Gdy już uporamy się z nawiązaniem komunikacji i pobraniem niezbędnych danych trzeba przystąpić do wykonania żmudnych obliczeń. Biorąc pod uwagę iż model budowałem z wykorzystaniem ośmiobitowego Mega8, obliczenia są trochę „karkołomne” gdyż dotyczą np dzielenia i potęgowania na liczbach typu single i word. µC sobie z tym radzi ale jest efekt uboczny „nadmierna” obfitość wygenerowanego kodu. Co nie jest dla mnie bez znaczenia, gdyż korzystam z wersji demonstracyjnej środowiska programowania. Efekt jest taki, że z wykorzystaniem wyświetlacza LCD oraz paru dodatkowych funkcjonalności w programie np wyszukiwanie adresu sensora, kod zajął całą „udostępnioną” przestrzeń. Po uporządkowaniu i wykluczeniu zbędnych funkcjonalności będzie miejsce na dodatkowe „sprawy” np przesłanie RS-em wyników „gdzieś dalej”.

Odczyt danych i stosowne obliczenia.

Po zaadresowaniu sensora i przesłaniu odpowiedniego rozkazu do odczytu wartości z pierwszego przetwornika, łapiemy dwa bajty i sklejamy aby uzyskać prawidłową wartość z przetwornika ADC. Może to wyglądać np tak:

 Nie ma tu nic strasznego, Adps9300_w oraz Adps9300_r to stałe z przypisanym adresem stosownie do wybranej konfiguracji (pin ADDR SEL).  Zmienne C0low, C0high, C1low, C1high są typu byte i odzwierciedlają „kawałki” odczytanych wartości z poszczególnych ADC, natomiast Led to alias dla pinu z podłączonym LED-em.

Teraz gdy mam już odczytane wartości bazowe dotyczące intensywności oświetlenia, zabieram się za wykonanie stosownych obliczeń aby otrzymać wynik w luxach. Więc Mega8 dostanie w końcu „w dupę” 😉

 sklejam „worda” z „bajtów” w których siedzą kawałki odczytanego z ADC wyniku.

 Tutaj nic innego tylko algorytm z noty katalogowej + kilka uproszczeń, wynik ląduje w zmiennej Lux, przy deklaracji użytych zmiennych należy dobrać stosowne ich typy, dwu lub czterobajtowe. Po pierwsze wyliczam stosunek wartości ADC1 do ADC0, na tej podstawie jest kilka dróg dalszego postępowania dla obliczenia końcowej wartości. Kolejnie kosmetyka dla poprawności analizy kodu.

 „treść” podprogramów.

 Deklaracja użytych podprogramów.

Końcowy efekt funkcjonowania sensora APDS9300 na testowym układzie można obejrzeć tutaj. Junior coś cicho mikrofon nastawił ;-p

AD 2013-11-03 Z ostatniej chwili – rithien sprawdził i ADPS9300 oraz TSL2562CL, TSL2563CL mają identyczne obudowy i układ wyprowadzeń.

Nota katalogowa ADPS-9300.pdf (4097 pobrań )
Nota katalogowa TSL2560-61.pdf (4560 pobrań )
Nota katalogowa TSL2562-63cl.pdf (4116 pobrań )
Nota katalogowa TSL2562-63.pdf (4013 pobrań )
Eagle libs APDS-9300.lbr.zip (17 pobrań ) plik dostępny po zalogowaniu 😛

widok co zawiera moja biblioteka

widok co zawiera moja biblioteka

Tutaj opis jak sensor podłączyć do systemu µC zasilanego napięciem 5V. Opisane podzespoły można zakupić tu w bardzo atrakcyjnych cenach.

Otagowano , , , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

trzy × dwa =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.