Prosty luksomierz z czujnikiem BH1750

Prosty luksomierz z czujnikiem BH1750

BH1750FVI jest miniaturowym czujnikiem światła o charakterystyce zbliżonej do ludzkiego oka. Cechuje go duża czułość i szeroki zakres pomiarowy. Nadaje się do zastosowania jako detektor oświetlenia lub element pomiarowy prostego w wykonaniu luksomierza.

Zastosowany sensor mierzy intensywność oświetlenia w luksach. Według definicji 1 luks [lx] jest oświetleniem wywołanym przez strumień świetlny o wartości 1 lumena padający na powierzchnię 1 metra kwadratowego. Przekładając to na codzienne życie warto wiedzieć, że:
0,2 lx to jasność w nocy przy pełni księżyca,
50 lx to przeciętna intensywność oświetlenia w pokoju,
1000 lx to oświetlenie w czasie pochmurnego dnia,
10000-25000 lx to intensywność oświetlenia w czasie pogodnego dnia,
do rozpoznania rysów twarzy człowiek potrzebuje oświetlenia rzędu 20 lx,
do prac biurowych w tym obsługi komputera wymagane jest oświetlenie 500 lx,
do wykonywania precyzyjnych czynności należy zapewnić 1000 lx.
Najważniejsze parametry czujnika BH1750:
zakres pomiarowy od 1 do 65535 lx z możliwością rozszerzenia od 0,11 do 100000 lx,
6 różniących się sposobem wyzwalania pomiaru, zakresem i rozdzielczością, trybów pracy,
rozdzielczość od 0,11 lx w trybie wysokiej rozdzielczości do 4 lx w trybie rozszerzonego zakresu pomiarowego,
czas pomiaru do 24 ms w trybie niskiej rozdzielczości, do 180 ms w trybie wysokiej rozdzielczości,
komunikacja za pośrednictwem magistrali I2C,
zasilanie 3,3 V, max 190 mA,
wymiary 3×1,6×0,75 mm.
Moduł z czujnikiem BH1750
Ze względu na niewielkie rozmiary czujnika i raster wyprowadzeń, najwygodniej używać modułu z zamontowanym układem np. GY-30 (fotografia 1). Wyposażony jest w peryferia rozszerzające zakres napięć zasilania od 3 do 5 V oraz w złącze szpilkowe z wszystkimi potrzebnymi sygnałami. Na rysunku 2 pokazany został uproszczony widok modułu z zaznaczonymi wyprowadzeniami złącza:
GND – masa
ADO – wejście, wybór dla modułu jednego z dwu adresów I2C,
SDA – linia danych magistrali I2C,
SCL – linia zegara magistrali I2C,
VCC – zasilanie od 3,3 V do 5 V.
Komunikacja magistralą I2C
Czujnik BH1750 a także moduł GY-30, pozwala przyporządkować sobie jeden z dwu adresów w obrębie magistrali. O wyborze decyduje poziom logiczny wyprowadzenia ADO. Dla stanu niskiego tego wyprowadzenia, czujnik reaguje na adres 0x23, dla stanu wysokiego na adres 0x5C (adresy podane w 7 bitowej konwencji bez uwzględnienia najmłodszego bitu R/W). W trybie zapisu do czujnika, po sekwencji Start i adresie można wysłać 1 bajtowy kod rozkazu i sekwencję Stop. W trybie odczytu po adresie czujnik przesyła 2 bajty danych pomiarowych ze starszymi bitami wysyłanymi jako pierwsze. Na rysunku 3 pokazano sekwencję sygnałów w czasie zapisu i odczytu.
Rozkazy sterujące
Czujnik BH1750 może pracować w różnych trybach pracy, różniących się rozdzielczością pomiaru, czasem pomiaru i sposobem wyzwalania kolejnego pomiaru:
H-Resolution Mode – rozdzielczość ok. 1 lx, czas pomiaru do 180 ms,
H-Resolution Mode2 – rozdzielczość ok. 0,5 lx, czas pomiaru do 180 ms,
L-Resolution Mode rozdzielczość ok. 4 lx, czas pomiaru do 24 ms.
Wymienione tryby mogą pracować w sposób ciągły (Continuously) gdy po zakończeniu jednego pomiaru automatycznie rozpoczyna się kolejny lub w trybie wyzwalanym (One Time). W tym trybie po wykonaniu pomiaru czujnik przechodzi w stan uśpienia (Power Down) a kolejny pomiar jest możliwy po przesłaniu nowej komendy. W każdej chwili czujnik można uśpić i wybudzić komendami Power Down i Power On. Komenda Reset zeruje rejestr danych do czasu kolejnego pomiaru.
Komendy Change Measurement Time, zmieniają czas pomiaru wpływając na zakres pomiarowy i rozdzielczość. Po włączeniu zasilania czujnika w rejestrze czasu pomiaru automatycznie wpisana zostaje standardowa wartość 0x45 czyli w zapisie dziesiętnym 69.
Po wysłaniu komendy inicjującej pomiary w wybranym trybie i odczekaniu czasu potrzebnego na ukończenie pomiaru można w trybie odczytu pobrać z czujnika dwa bajty danych. Z bajtów należy utworzyć liczbę 16 bitową bez znaku. Jeżeli w rejestrze czasu pomiaru nie została zmieniona standardowa wartość (69), dla otrzymania pomiaru w luksach, liczbę 16 bitową należy podzielić przez współczynnik równy 1,2. Jeżeli trybem pomiarowym był H-Resolution Mode2 dodatkowo otrzymany wynik należy podzielić przez 2.
Wzór obliczeń dla danych otrzymanych w trybach H-Resolution Mode i L-Resolution Mode:
wynik w luksach=liczba 16 bitowa/1,2
i dla trybu H-Resolution Mode2:
wynik w luksach=(liczba 16 bitowa/1,2)/2
W tabeli 1 znajduje się lista wszystkich rozkazów sterujących na które reaguje czujnik BH1750.
Zmiana wartości w rejestrze MTreg
Rejestr MTreg wpływa na zmianę czasu pomiaru a w konsekwencji na rozdzielczość i zakres trybów pomiarowych. Jak to zostało wcześniej napisane, po włączeniu zasilania w tym rejestrze automatycznie zostaje umieszczona wartość 69. Odpowiada ona standardowym czasom pomiarów i odpowiednio dla trybów H-Resolution Mode i H-Resolution Mode2 jest to maksymalnie 180 ms a dla trybu L-Resolution Mode maksymalnie 24 ms. Przy pomocy komend Change Measurement Time, można wpisać do rejestru MTreg nową wartość z przedziału 31 – 254. Zmiana MTreg musi być uwzględniona w sposobie obliczania wyniku pomiaru. Dla trybów H-Resolution Mode i L-Resolution Mode obliczenia będą wyglądać tak:
wynik w luksach = liczba 16 bitowa/1,2*(69/MTreg)
a dla trybu H-Resolution Mode2 tak:
wynik w luksach = (liczba 16 bitowa/1,2*(69/MTreg))/2
Zmniejszając wartość wpisaną do MTreg skraca się czas pomiaru, zmniejsza rozdzielczość i zwiększa maksymalny zakres pomiaru nawet do 100000 lx. Zwiększając wartość wpisaną do MTreg, wydłuża się czas pomiaru, zwiększa rozdzielczość oraz minimalną mierzoną wartość nawet do 0,11 lx.
Oprogramowanie prostego luksomierza
Do zbudowania prostego luksomierza zastosowano moduł z czujnikiem, płytkę NUCLEO-F091 i moduł w standardzie arduino z wyświetlaczem LCD i 5 przyciskową klawiaturą analogową. Wszystkie potrzebne połączenia pomiędzy modułem a płytką NUCLEO zostały wypisane w tabeli 2. Wyprowadzenie ADO modułu pozostało nie podłączone. Ponieważ zamontowany na płytce modułu opornik zwiera je do masy, moduł będzie reagował na adres 0x23 magistrali I2C.
Takie podłączenie modułu pozwala na obsługę transmisji przy użyciu sprzętowego interfejsu I2C1 mikrokontrolera płytki NUCLEO. Interfejs powinien zostać zainicjowany w standardowy sposób, tę część kodu można wygenerować przy pomocy narzędzia STM32CubeMX. Do wysyłania komend sterujących i odczytu danych pomiarowych posłużą procedury biblioteki HAL zapisu i odczytu magistralą I2C. Procedury zawiera listing 1.
Dla pełnego przetestowania możliwości czujnika BH1750, oprogramowanie umożliwia pomiar we wszystkich dostępnych trybach oraz ustawienie 3 różnych wartości w rejestrze czasów pomiaru MTreg. Najpierw należy zadeklarować związane z tym stałe, tak jak w listingu 2.
Procedura ustawiania trybu pomiarowego i inicjacja pomiaru pokazana została na listingu 3. Kolejny kod (listing 4) pokazuje procedurę zmiany czasu pomiaru. Można ustawić wartość dla czasu krótkiego (MTreg=31), długiego (MTreg=254) i standardowego (MTreg=69). Ponieważ ta wartość potrzebna jest do dalszych obliczeń, zostaje zapamiętywana w zmiennej globalnej MT_wartosc.
Ostatnia z procedur pokazana na listingu 5, zajmuje się odczytem surowych danych pomiarowych. Następnie zależnie od ustawionego trybu i czasu, przelicza odczytane dane na wartość w luksach. Wartość zwracana jest jako liczba zmiennoprzecinkowa typu double.
Ryszard Szymaniak, EP

Artykuł ukazał się w
Elektronika Praktyczna
grudzień 2019
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje październik 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich listopad 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów