- Wprowadzenie do modułu cyfrowego czujnika światła BH1750
- Arduino
- Programowanie Arduino do połączenia czujnika światła BH1750
Gdy bierzesz telefon w słońce lub przy silnym oświetleniu, automatycznie dostosowuje jasność do warunków oświetlenia. Większość urządzeń wyświetlających, niezależnie od tego, czy jest to telewizor, czy telefon komórkowy, ma wewnątrz czujnik światła otoczenia, który automatycznie dostosowuje jasność. Dzisiaj w tym samouczku użyjemy jednego takiego czujnika BH1750 Moduł czujnika światła i połączymy go z Arduino i pokażemy wartość luksów na wyświetlaczu LCD 16x2.
Wprowadzenie do modułu cyfrowego czujnika światła BH1750
BH1750 to cyfrowy czujnik światła otoczenia lub czujnik natężenia światła, którego można używać do automatycznej regulacji jasności wyświetlacza w telefonach komórkowych, wyświetlaczach LCD lub do włączania / wyłączania reflektorów w samochodach w zależności od warunków oświetlenia zewnętrznego.
Czujnik wykorzystuje protokół komunikacji szeregowej I 2 C, co ułatwia współpracę z mikrokontrolerami. Do komunikacji I2C posiada piny SDI i SDA. Schemat pinów czujnika światła otoczenia BH1750 pokazano poniżej:
Wyjście tego czujnika jest w LUX (lx), więc nie wymaga dalszych obliczeń. Luks to jednostka do pomiaru natężenia światła. Mierzy intensywność w zależności od ilości światła padającego na określony obszar. Jeden luks odpowiada jednemu lumenowi na metr kwadratowy.
Czujnik pracuje na napięciach od 2,4 V do 3,6 V (typowo 3,0 V) i pobiera prąd 0,12 mA. Czujnik ten ma szeroki zakres i wysoką rozdzielczość (1-65535lx) a dodatkowo zmienność pomiaru jest również niewielka (około +/- 20%). Może również działać niezależnie, bez żadnego zewnętrznego komponentu.
Chociaż czujnik LDR może być również używany do sterowania urządzeniami w oparciu o warunki oświetleniowe, ale nie jest tak dokładny. Wykorzystaliśmy czujnik LDR do budowy wielu aplikacji sterowanych światłem:
- Obwód czujnika światła Arduino wykorzystujący LDR
- Detektor ciemności wykorzystujący LDR i układ scalony timera 555
- Prosty obwód LDR do wykrywania światła
- Lampa mieszająca Arduino wykorzystująca diody RGB i LDR
Arduino
Schemat obwodu połączenia czujnika światła BH1750 z Arduino pokazano poniżej.
Piny komunikacyjne I2C SDA i SCL BH1750 są połączone odpowiednio z pinami A4 i A5 Arduino dla komunikacji I 2 C. Jak wiemy, napięcie robocze czujnika wynosi 3,3 V, więc VCC i GND BH1750 są podłączone do 3,3 V i GND Arduino. W przypadku LCD piny danych (D4-D7) są połączone z pinami cyfrowymi D2-D5 Arduino, a piny RS i EN są połączone z D6 i D7 Arduino. V0 wyświetlacza LCD jest podłączony do potencjometru, a potencjometr 10k służy do sterowania jasnością wyświetlacza LCD.
Programowanie Arduino do połączenia czujnika światła BH1750
Część programowania dotycząca korzystania z tego czujnika LUX z Arduino jest bardzo łatwa. Chociaż istnieje biblioteka dla tego czujnika, ale możemy z niej również korzystać bez tego.
Po pierwsze, dołączyliśmy pliki nagłówkowe dla protokołu LCD i I 2 C.
#zawierać
W funkcji konfiguracji zainicjowaliśmy zarówno wyświetlacz LCD, jak i czujnik i wydrukowaliśmy komunikat otwierający na wyświetlaczu LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Czujnik intensywności"); opóźnienie (2000); }
Tutaj BH1750_Read i BH1750_Init funkcje służą do odczytu i zapisu wartości Lux odpowiednio. Funkcja Wire.beginTransmission () jest używana do rozpoczęcia transmisji, a funkcja Wire.requestFrom (adres, 2) służy do odczytu rejestrów, gdzie 2 oznacza liczbę rejestrów.
Kolejna funkcja Wire.endTransmission () służy do zakończenia transmisji, a funkcja Wire.write () służy do przejścia do żądanego rejestru poprzez wpisanie w nim adresu tego rejestru.
int BH1750_Read (adres int) { int i = 0; Wire.beginTransmission (adres); Wire.requestFrom (adres, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); powrót i; } void BH1750_Init (adres int) { Wire.beginTransmission (adres); Wire.write (0x10); Wire.endTransmission (); }
W pętli funkcji, jesteśmy drukowania wartości lux czasie rzeczywistym przez LCD. Najpierw porównaj wartość zwracaną z funkcji BH1750_Read z 2, a następnie rozpocznij drukowanie wartości Lux, jeśli jest równa 2. Tutaj wartości są porównywane z 2, ponieważ funkcja BH1750_Read zwraca wartość licznika rejestrów i czytamy tylko 2 rejestry. Kiedy więc osiągnie 2, program zacznie drukować wartości LUX natężenia światła.
Następnie stosuje się wzór, aby uzyskać wartości z obu rejestrów i podzielić je przez 1,2, co jest dokładnością pomiaru.
void loop () { int i; wartość uint16_t = 0; BH1750_Init (adres BH1750); opóźnienie (200); if (2 == BH1750_Read (BH1750address)) { wartość = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensywność w LUX"); lcd.setCursor (6,1); lcd.print (wartość); } opóźnienie (150); }
Na koniec włącz Arduino i prześlij program do Arduino. Zaraz po załadowaniu programu wyświetlacz LCD zacznie pokazywać natężenie światła w jednostkach LUX. Możesz również zmieniać wartości, zmieniając natężenie światła wokół czujnika, jak pokazano na poniższym filmie.