[PROJEKT] Czujnik oświetlenia – KAmduino UNO oraz sensor BH1750
Do obsługi czujnika można użyć biblioteki dla Arduino (można ją pobrać z linku lub z sekcji „do pobrania” znajdującej się na końcu artykułu).
Po pobraniu biblioteki, należy uruchomić program Arduino. Następnie trzeba załadować pobraną przez nas bibliotekę. W tym celu na górnej belce programu wybieramy Szkic >> Dołącz bibliotekę >> Dodaj bibliotekę .ZIP (rysunek 3) i odnajdujemy na naszym dysku pobrany przed chwilą plik z biblioteką.
Rys 3. Instalacja biblioteki
Aby sprawdzić działanie czujnika można uruchomić przykład, który wypisuje zmierzoną wartość na monitor portu szeregowego. W tym celu należy wybrać zakładkę Plik >> Przykłady, a następnie odnaleźć pozycję BH1750 i wybrać folder BH1750 >> BH1750test
Program ten pobiera wartość oświetlenia z czujnika a następnie wyświetla w monitorze portu szeregowego. Przy stosunkowo niskim oświetleniu monitor portu szeregowego wygląda następująco.
Rys 4. Niskie oświetlenie czujnika
Natomiast jeżeli oświetlimy czujnik latarką z odległości około 10 cm uzyskamy następujące wyniki.
Rys 5. Oświetlenie czujnika latarką
Po analizie przykładu można przejść do jego modyfikacji tak, aby przy niskim poziomie oświetlenia układ zapalał diodę LED.
Najpierw zostają dwie biblioteki Wire.h do obsługi interfejsu I2C oraz BH1750.h do obsługi samego czujnika oświetlenia. Następnie odbywa się inicjalizacja struktury BH1750 pod nazwą lightMeter.
#include <Wire.h> #include <BH1750.h> BH1750 lightMeter;
W funkcji setup() następuje ustawienie prędkości transmisji portu szeregowego, inicjalizacja działania biblioteki do obsługi czujnika BH1750 oraz wyświetlenie komunikatu BH1750 Test. Ponieważ chcemy sterować urządzeniem (w tym przypadku diodą LED), należy ustawić pin 2 jako wyjście cyfrowe.
void setup(){ Serial.begin(9600); lightMeter.begin(); Serial.println(F("BH1750 Test")); pinMode(2,OUTPUT); }
W pętli głównej programu do zmiennej lux przypisywana jest wartość oświetlenia pobrana z czujnika BH1750. Następnie jest ona wysyłana na port szeregowy (aby był możliwy odczyt wartości). W tym miejscu należy dodać kod, który będzie zapalał diodę LED przy niskim oświetleniu. W moim przypadku będzie to wartość 100 lux.
void loop() { uint16_t lux = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); if (lux <100) { digitalWrite(2,HIGH); } else { digitalWrite(2,LOW); } delay(1000); }
Działanie programu zostało zaprezentowane na poniższym materiale wideo: