Pomiar natężenia oświetlenia odgrywa kluczową rolę w wielu dziedzinach, takich jak technika, automatyka budynkowa, ogrodnictwo oraz systemy inteligentnego domu. Do tego celu używamy luksomierzy, które są urządzeniami do pomiaru natężenia światła, wyrażanego w luksach (lx). Dzięki nowoczesnym rozwiązaniom elektronicznym możemy stworzyć prosty i niedrogi luksomierz oparty na mikrokontrolerze Arduino oraz cyfrowym czujniku światła BH1750.
W tym artykule omówimy, jak działa luksomierz oraz przedstawimy program, który pozwala na wyświetlanie wyników pomiarów na wyświetlaczu LCD 16×2.
Czym tak naprawdę jest luks?
Luks (lx) to jednostka, która mierzy natężenie oświetlenia w systemie SI. Mówi nam, ile światła pada na daną powierzchnię.
Oto przykładowe wartości oświetlenia:
- Noc przy pełni księżyca: 0,1–1 lx
- Korytarz lub magazyn: 50–100 lx
- Biuro: 300–500 lx
- Sala lekcyjna: 300–750 lx
- Pochmurny dzień: 1000–5000 lx
- Bezpośrednie światło słoneczne: ponad 50 000 lx
Pomiar natężenia światła pozwala nam ocenić warunki pracy, efektywność oświetlenia oraz zarządzać systemami automatycznymi domowej czy przemysłowej. BH1750 to cyfrowy czujnik światła, który komunikuje się za pomocą magistrali I2C. W przeciwieństwie do prostych fotorezystorów, ten czujnik dostarcza bezpośredni wynik pomiaru w luksach, co oznacza, że nie wymaga skomplikowanej kalibracji.
Najważniejsze cechy czujnika:
- Zakres pomiarowy do ±65535 lx
- Komunikacja I2C
- Wysoka dokładność pomiaru
- Niewielki pobór energii
- Łatwa integracja
Potrzebne komponenty:
- Arduino np. Nano
- Czujnik BH1750
- Ekran LCD 2 x 16,z modułem I2C
- Przewody połączeniowe
- Opcjonalnie płytka stykowa
Zarówno czujnik BH1750, jak i wyświetlacz LCD korzystają z tej samej magistrali I2C, co oznacza, że do komunikacji wystarczą tylko dwie linie sygnałowe: SDA i SCL.
Kod programu:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// by swistak tranzystor.pl // pobrano z www.tranzystor.pl #include <Wire.h> #include <BH1750.h> #include <LiquidCrystal_I2C.h> BH1750 lightMeter; // Adres LCD najczęściej 0x27 lub 0x3F LiquidCrystal_I2C lcd(0x3F, 16, 2); void setup() { Wire.begin(); lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Luksomet BH1750"); lcd.setCursor(0, 1); lcd.print("Tranzystor.pl"); delay(2000); lcd.clear(); } void loop() { float lux = lightMeter.readLightLevel(); // Linia 1 - wynik lcd.setCursor(0, 0); lcd.print("Lux: "); lcd.setCursor(5, 0); lcd.print(lux, 0); // Linia 2 - wskaźnik (0-16 znaków / 0-10000 lx) int barLength = map(constrain((int)lux, 0, 10000), 0, 10000, 0, 16); lcd.setCursor(0, 1); for (int i = 0; i < 16; i++) { if (i < barLength) lcd.write(255); // pelny blok else lcd.print(" "); } delay(500); } |


