- Įvadas į skaitmeninį šviesos jutiklio modulį BH1750
- Arduino
- „Arduino“ programavimas sąsajai su BH1750 šviesos jutikliu
Kai imate telefoną saulėkaitoje ar esant stipriam apšvietimui, jis automatiškai sureguliuoja ryškumą pagal apšvietimo sąlygas. Dabar daugelyje vaizduoklių, nesvarbu, ar jis yra televizorius, ar mobilusis telefonas, yra aplinkos šviesos jutiklis, kad būtų galima automatiškai reguliuoti ryškumą. Šiandien šioje pamokoje mes naudosime vieną tokį jutiklį BH1750 šviesos jutiklio modulį ir susiesime jį su „Arduino“ ir parodysime „Lux“ vertę per 16x2 LCD.
Įvadas į skaitmeninį šviesos jutiklio modulį BH1750
BH1750 yra skaitmeninis aplinkos šviesos jutiklis arba šviesos intensyvumo jutiklis, kuris gali būti naudojamas automatiškai reguliuoti mobiliųjų telefonų ekrano ryškumą, LCD ekranus arba įjungti / išjungti automobilių žibintus atsižvelgiant į lauko apšvietimo sąlygas.
Jutiklis naudoja I 2 C nuoseklaus ryšio protokolą, kuris palengvina naudojimąsi mikrovaldikliais. „I2C“ ryšiui jis turi SDI ir SDA kaiščius. Žemiau parodytas aplinkos šviesos jutiklio BH1750 kištukas:
Šio jutiklio išvestis yra LUX (lx), todėl nereikia papildomų skaičiavimų. Liuksas yra vienetas matuoti šviesos intensyvumą. Jis matuoja intensyvumą pagal tam tikros srities šviesos kiekį. Vienas liuksas yra lygus vienam liumenui kvadratiniam metrui.
Jutiklis veikia nuo 2,4 V iki 3,6 V įtampos (paprastai 3,0 V) ir sunaudoja 0,12 mA srovę. Šis jutiklis turi platų diapazoną ir didelę skiriamąją gebą (1-65535lx), be to, matavimo svyravimai taip pat nedideli (apie +/- 20%). Jis taip pat gali veikti savarankiškai be jokio išorinio komponento.
Nors LDR jutiklis taip pat gali būti naudojamas prietaisams valdyti pagal apšvietimo sąlygas, tačiau jis nėra toks tikslus. Mes panaudojome LDR jutiklį kurdami daugybę šviesos valdomų programų:
- „Arduino“ šviesos jutiklio grandinė naudojant LDR
- „Dark Detector“, naudojant LDR ir 555 „Timer IC“
- Paprasta LDR grandinė šviesai aptikti
- „Arduino“ spalvų maišymo lempa, naudojant RGB LED ir LDR
Arduino
BH1750 šviesos jutiklio prijungimo prie „Arduino“ schema parodyta žemiau.
„B21750“ I2C ryšio kaiščiai SDA ir SCL yra prijungti prie „Arduino“ kaiščių A4 ir A5 atitinkamai I 2 C ryšiui. Kaip žinome, jutiklio veikimo įtampa yra 3,3 V, todėl BH1750 VCC ir GND yra prijungti prie „Arduino“ 3,3 V ir GND. Skystųjų kristalų ekrane duomenų kaiščiai (D4-D7) yra prijungti prie „Arduino“ skaitmeninių kaiščių D2-D5, o RS ir EN - prie „Arduino“ D6 ir D7. Skystųjų kristalų ekranas V0 prijungtas prie puodo, o LCD ryškumui valdyti naudojamas 10 tūkst.
„Arduino“ programavimas sąsajai su BH1750 šviesos jutikliu
Programavimo dalis, skirta naudoti šį LUX jutiklį su „Arduino“, yra labai paprasta. Nors šiam jutikliui yra biblioteka, tačiau mes galime ją naudoti ir be to.
Pirmiausia, mes įtraukėme LCD ir I 2 C protokolo antraštės failus.
# įtraukti
Naudodamiesi sąrankos funkcija, mes inicijavome LCD ekraną ir jutiklį ir atspausdinome atidarymo pranešimą LCD.
negaliojanti sąranka () { Wire.begin (); lcd.prade (16,2); lcd.print („BH1750 Light“); lcd.setCursor (0,1); lcd.print („Intensyvumo jutiklis“); vėlavimas (2000); }
Čia funkcijos „ BH1750_Read“ ir „ BH1750_Init“ naudojamos atitinkamai skaitant ir rašant „Lux“ reikšmes. Funkcija „ Wire.beginTransmission“ () naudojama norint pradėti perdavimą, o „ Wire.requestFrom“ (adresas, 2) funkcija naudojama registrams skaityti, kur 2 nurodo registrų skaičių.
Toliau Wire.endTransmission () naudojamas perdavimui nutraukti, o Wire.write () funkcija naudojama norint pereiti prie norimo registro, įvedant jame to registro adresą.
int BH1750_Skaityti (int adresas) { int i = 0; „Wire.beginTransmission“ (adresas); „Wire.requestFrom“ (adresas, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); grįžti i; } negaliojantis BH1750_Init (int adresas) { Wire.beginTransmission (adresas); Wire.write (0x10); „Wire.endTransmission“ (); }
Naudojant ciklo funkciją, mes spausdiname realaus laiko liukso reikšmes per LCD. Pirmiausia palyginkite grąžinimo vertę iš funkcijos BH1750_Read su 2, tada pradėkite spausdinti „Lux“ reikšmes, jei ji lygi 2. Čia reikšmės lyginamos su 2, nes funkcija BH1750_Read grąžina registrų skaičiaus vertę ir mes skaitome tik 2 registrus. Taigi, kai ji pasiekia 2, programa pradeda spausdinti šviesos intensyvumo LUX reikšmes.
Tada naudojama formulė, kad gautume vertes iš abiejų registrų ir padalytume iš 1,2, tai yra matavimo tikslumas.
tuštuma kilpa () { int i; uint16_t reikšmė = 0; BH1750_Init (BH1750 adresas); vėlavimas (200); if (2 == BH1750_Read (BH1750adresas)) { reikšmė = ((buff << 8) -buff) / 1,2; lcd.clear (); lcd.print („Intensyvumas LUX“); lcd.setCursor (6,1); lcd.print (reikšmė); } vėlavimas (150); }
Galiausiai įjunkite „Arduino“ ir įkelkite programą į „Arduino“. Kai tik programa bus įkelta, skystųjų kristalų ekranas pradeda rodyti šviesos intensyvumą LUX vienetais. Taip pat galite keisti reikšmes keisdami šviesos intensyvumą aplink jutiklį, kaip parodyta toliau pateiktame vaizdo įraše.