Układ BH1750FVI jest cyfrowym sensorem natężenia oświetlanie, wykorzystującym do komunikacji interfejs I²C. Pozwala to na łatwe podłączenie go do komputera Raspberry Pi z wykorzystaniem jedynie czterech przewodów. Moduł z tym układem umożliwia szybkie i proste pomiary natężenie oświetlenia, gdyż oferuje cyfrowe wartości o rozdzielczości 16 bit na swoim wyjściu. Sam układ wykorzystywany jest częstow telefonach komórkowych, telewizorach i monitorach a także aparatach i kamerach cyfrowych do dobierania parametrów ekspozycji.
Wykorzystany w poniższym przypadku niewielki moduł ma wielkość zaledwie 32 mm x 16 mm. Moduł posiada jedynie pięć goldpinów, potrzebnych do podłączenia do układu. Można je wpiąć do płytki stykowej, lub połączyć kabelkami bezpośrednio z Raspberry Pi.
Konfiguracja interfejsu I²C
Aby wykorzystać opisywany moduł z Raspberry Pi, komputer musi mieć włączony interfejs I²C. Nie jest on domyślnie włączony. Sposób jego włączenia poprzez aplikację raspi-config opisano w tym artykule.
Podłączanie sprzętu
Poniższa tabelka pokazuje połączenia modułu do wyprowadzeń GPIO Raspberry Pi (P1). Lokalizację poszczególnych pinów na listwie GPIO odnaleźć można w dokumentacji RPi.
Na poniższym obrazku znajduje się schematyczne przedstawienie podłączenia modułu do płytki RPi z wykorzystaniem płytki stykowej i zaledwie pięciu kabelków.
Diagram narysowano w Fritzing z wykorzystaniem własnoręcznie dodanego elementu - opisywanego modułu. Inne moduły z opisywanym sensorem, dostępne w handlu, mogą mieć inny rozkład wyprowadzeń, dlatego trzeba koniecznie zwrócić uwagę na opis n a PCB i dokumentację zakupionego modułu.
Po podłączeniu układu do RPi i uruchomieniu systemu komenda i2cdetect powinna pokazać nam układ pod adresem 0x23.
Przykładowy kod w Pythonie
Poniżej znajduje się przykładowy skrypt napisany w języku Python, pozwalający na odczyt natężenia światła z modułu.
Jeśli chcecie pobrać skrypt bezpośrednio na RPi z internetu możecie wpisać komendę:
Lub pobrać skrypt poprzez link.
Aby uruchomić pobrany skrypt wystarczy wpisać:
A na wyjściu powinniśmy zobaczyć coś takiego:
Pętla while w skrypcie odczytuje ciągle wartość natężenie oświetlenia, co około 200 ms. Program działą do momentu naciśnięcia kombinacji klawiszy ctrl+c.
Uwagi do skryptu
Komenda import w Pythonie importuje do skryptu wykorzystywane biblioteki, wliczając w to bibliotekę smbus, która obsługuje interfejs I²C.
Każdy układ I²C musi mieć jakiś adres. Jeśli pin ADDR modułu podłączmy do masy to adres układu wyniesie 0x23, jeśli do napięcia zasilania to adresem będzie 0x5C
Stałe, definiowane w skrypcie, dobrane zostały zgodnie z zapisany karty katalogowej układu. Wykorzystany jest tylko “ONE_TIME_HIGH_RES_MODE_1″. Inne tryby pracy mogą być przydatne, jeśli chce się realizować szybkie pomiary.
Funkcj smbus.SMBus(1) KONFIGURUJE INTERFEJS I²C Raspberry Pi.
Funkcja read_i2c_block_data wykorzystywana jest do odczytania dwóch batów danych z układu w trybie ONE_TIME_HIGH_RES_MODE_1.
Funkcja convertToNumber pozwala na konwersję dwóch odczytanych bajtów na realną wartość, zmierzoną przez układ. Wartość 1,2 w obliczeniach pochodzi z karty katalogowej układu.
Źródło: http://www.raspberrypi-spy.co.uk/2015/03/bh1750fvi-i2c-digital-light-intensity-sensor/
Wykorzystany w poniższym przypadku niewielki moduł ma wielkość zaledwie 32 mm x 16 mm. Moduł posiada jedynie pięć goldpinów, potrzebnych do podłączenia do układu. Można je wpiąć do płytki stykowej, lub połączyć kabelkami bezpośrednio z Raspberry Pi.
Konfiguracja interfejsu I²C
Aby wykorzystać opisywany moduł z Raspberry Pi, komputer musi mieć włączony interfejs I²C. Nie jest on domyślnie włączony. Sposób jego włączenia poprzez aplikację raspi-config opisano w tym artykule.
Podłączanie sprzętu
Poniższa tabelka pokazuje połączenia modułu do wyprowadzeń GPIO Raspberry Pi (P1). Lokalizację poszczególnych pinów na listwie GPIO odnaleźć można w dokumentacji RPi.
| Opis na PCB modułu | Opis | Pin na wyprowadzeniu GPIO RPi |
| GND | Masa | P1-06 |
| ADD | Wybór adresu | P1-06 |
| SDA | I²C SDA | P1-03 |
| SCL | I²C SCL | P1-05 |
| VCC | napięcie 3,3V | P1-01 |
Na poniższym obrazku znajduje się schematyczne przedstawienie podłączenia modułu do płytki RPi z wykorzystaniem płytki stykowej i zaledwie pięciu kabelków.
Diagram narysowano w Fritzing z wykorzystaniem własnoręcznie dodanego elementu - opisywanego modułu. Inne moduły z opisywanym sensorem, dostępne w handlu, mogą mieć inny rozkład wyprowadzeń, dlatego trzeba koniecznie zwrócić uwagę na opis n a PCB i dokumentację zakupionego modułu.
Po podłączeniu układu do RPi i uruchomieniu systemu komenda i2cdetect powinna pokazać nam układ pod adresem 0x23.
Przykładowy kod w Pythonie
Poniżej znajduje się przykładowy skrypt napisany w języku Python, pozwalający na odczyt natężenia światła z modułu.
Kod: Python
Jeśli chcecie pobrać skrypt bezpośrednio na RPi z internetu możecie wpisać komendę:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bh1750.pyLub pobrać skrypt poprzez link.
Aby uruchomić pobrany skrypt wystarczy wpisać:
sudo python bh1750.pyA na wyjściu powinniśmy zobaczyć coś takiego:
Pętla while w skrypcie odczytuje ciągle wartość natężenie oświetlenia, co około 200 ms. Program działą do momentu naciśnięcia kombinacji klawiszy ctrl+c.
Uwagi do skryptu
Komenda import w Pythonie importuje do skryptu wykorzystywane biblioteki, wliczając w to bibliotekę smbus, która obsługuje interfejs I²C.
Każdy układ I²C musi mieć jakiś adres. Jeśli pin ADDR modułu podłączmy do masy to adres układu wyniesie 0x23, jeśli do napięcia zasilania to adresem będzie 0x5C
Stałe, definiowane w skrypcie, dobrane zostały zgodnie z zapisany karty katalogowej układu. Wykorzystany jest tylko “ONE_TIME_HIGH_RES_MODE_1″. Inne tryby pracy mogą być przydatne, jeśli chce się realizować szybkie pomiary.
Funkcj smbus.SMBus(1) KONFIGURUJE INTERFEJS I²C Raspberry Pi.
Funkcja read_i2c_block_data wykorzystywana jest do odczytania dwóch batów danych z układu w trybie ONE_TIME_HIGH_RES_MODE_1.
Funkcja convertToNumber pozwala na konwersję dwóch odczytanych bajtów na realną wartość, zmierzoną przez układ. Wartość 1,2 w obliczeniach pochodzi z karty katalogowej układu.
Źródło: http://www.raspberrypi-spy.co.uk/2015/03/bh1750fvi-i2c-digital-light-intensity-sensor/
Fajne? Ranking DIY
