Miernik natężenia mierzy w jednostkach LUX poziom światła. Pomiary wysyła za pomocą I2C do RPi
Miernik ten wykorzystywany jest m. in. w urządzeniach sterujących jasnością wyświetlacza w zależności od światła w otoczeniu.
Dobry manual znajdziecie na stronie:
https://www.raspberry-pi-geek.com/Archive/2017/22/The-BH1750-Digital-Light-Sensor
Przewody I2C
Podłączamy I2C więc 3,3V-VCC, GND-GND, SDA-SDA, SCL -SCL, ostatnia linia ADDR służy do zmiany adresu I2C jeśli jest konflikt z innym urządzeniem. Adres naszego urządzenia to domyślnie 0x23. Po przyłożeniu 3,3V do linii ADDR adres zmienia się na 0x5c.
Podłączamy wszystko, teraz konfiguracja przez
1 | sudo i2cdetect -y 1 |
sprawdzamy, czy mamy połączenie, na pozycji 20 – 3 powinna pojawić się liczba 23.
C++
Kod programu z powyższej strony zadziała.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <wiringPiI2C.h> #include <stdio.h> #define BH1750ADDR 0x23 int main (void) { int handle = wiringPiI2CSetup(BH1750ADDR) ; //Numer pinu (jeśli podłączymy ADDR do 3,3V trzeba zmienić na 0x5c) wiringPiI2CWrite(handle,0x10); sleep(1); int word=wiringPiI2CReadReg16(handle,0x00); //odczyt int lux=((word & 0xff00)>>8) | ((word & 0x00ff)<<8); //notacja odwrotna, zmieniamy bajty printf("Natężenie światła w jednostkach LUX:%d \n",lux); //wynik w jednostkach LUX return 0; } |
Porównanie ze zwykłym czujnikiem światła (0/1)
Plusy – progresywny pomiar (jasno, ciemno, mrok, bardzo jasno itp.)
Minusy – brak obsługi za pomocą przerwania. Aby zauważyć „włączenie światła” trzeba ciągle mierzyć LUX, na przerwaniu program o to nie dba, a w momencie np. zgaszenia wywoła się przerwanie w tle.
Inne więc jest zastosowanie.