- Úvod do modulu digitálního snímače světla BH1750
- Arduino
- Programování Arduina pro propojení světelného senzoru BH1750
Když telefon berete na slunci nebo za silného osvětlení, automaticky upraví jas podle světelných podmínek. Většina zobrazovacích zařízení, ať už se jedná o televizi nebo mobilní telefon, má nyní senzor okolního světla, který automaticky upravuje jas. Dnes v tomto tutoriálu použijeme jeden takový senzorový modul BH1750 Light Sensor Module a propojíme jej s Arduino a ukážeme hodnotu Lux na 16x2 LCD.
Úvod do modulu digitálního snímače světla BH1750
BH1750 je digitální snímač okolního světla nebo snímač intenzity světla, který lze použít k automatickému nastavení jasu displeje v mobilních zařízeních, LCD displejích nebo k zapnutí / vypnutí světlometů v automobilech na základě venkovních světelných podmínek.
Senzor používá sériový komunikační protokol I 2 C, což usnadňuje jeho použití s mikrokontroléry. Pro komunikaci I2C má piny SDI a SDA. Pinů z BH1750 Ambient Light Sensor je uveden níže:
Výstup tohoto snímače je v LUX (lx), takže nevyžaduje žádné další výpočty. Lux je jednotka pro měření intenzity světla. Měří intenzitu podle množství světla dopadajícího na konkrétní oblast. Jeden lux se rovná jednomu lumenu na metr čtvereční.
Senzor pracuje na napětí od 2,4 V do 3,6 V (obvykle 3,0 V) a spotřebovává proud 0,12 mA. Tento snímač má široký rozsah a vysoké rozlišení (1-65535lx) a navíc je také malá odchylka měření (asi +/- 20%). Může také pracovat samostatně bez jakékoli externí komponenty.
Senzor LDR lze použít také k ovládání zařízení na základě světelných podmínek, ale není to tak přesné. Senzor LDR jsme použili k vytvoření mnoha aplikací řízených světlem:
- Okruh světelného senzoru Arduino využívající LDR
- Detektor temnot využívající LDR a časovač IC 555
- Jednoduchý obvod LDR pro detekci světla
- Arduino směšovací lampa pomocí RGB LED a LDR
Arduino
Schéma zapojení pro připojení světelného senzoru BH1750 k Arduinu je uvedeno níže.
Komunikační piny I2C SDA a SCL BH1750 jsou připojeny k Arduino pinům A4 a A5 pro komunikaci I 2 C. Jak víme, provozní napětí senzoru je 3,3 V, takže VCC a GND BH1750 jsou připojeny k 3,3 V a GND Arduina. U LCD jsou datové piny (D4-D7) připojeny k digitálním piny D2-D5 Arduina a piny RS a EN jsou připojeny k D6 a D7 Arduina. V0 LCD je připojen k hrnci a 10k hrnec se používá k ovládání jasu LCD.
Programování Arduina pro propojení světelného senzoru BH1750
Programovací část pro použití tohoto senzoru LUX s Arduino je velmi snadná. I když je pro tento senzor k dispozici knihovna, ale můžeme ji použít i bez toho.
Nejprve jsme zahrnuli hlavičkové soubory pro LCD a I 2 C protokol.
#zahrnout
Ve funkci nastavení jsme inicializovali LCD i senzor a vytiskli úvodní zprávu na LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("senzor intenzity"); zpoždění (2000); }
Zde se ke čtení a zápisu hodnot Lux používají funkce BH1750_Read a BH1750_Init . Funkce Wire.beginTransmission () se používá k zahájení přenosu a funkce Wire.requestFrom (adresa, 2) se používá ke čtení registrů, kde 2 označuje počet registrů.
Dále Wire.endTransmission () slouží k ukončení přenosu a funkce Wire.write () slouží k přechodu do požadovaného registru zadáním adresy tohoto registru.
int BH1750_Read (int adresa) { int i = 0; Wire.beginTransmission (adresa); Wire.requestFrom (adresa, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); návrat i; } void BH1750_Init (int adresa) { Wire.beginTransmission (adresa); Wire.write (0x10); Wire.endTransmission (); }
Ve smyčce funkce, jsme tisk hodnot v reálném čase lux nad LCD. Nejprve porovnejte návratovou hodnotu z funkce BH1750_Read s 2 a poté začněte tisknout hodnoty Lux, pokud je rovna 2. Zde jsou hodnoty porovnávány s 2, protože funkce BH1750_Read vrací hodnotu počtu registrů a my čteme pouze 2 registry. Když tedy dosáhne 2, program začne tisknout hodnoty LUX intenzity světla.
Poté se použije vzorec k získání hodnot z obou registrů a jejich vydělení číslem 1,2, což je přesnost měření.
void loop () { int i; uint16_t hodnota = 0; BH1750_Init (BH1750address); zpoždění (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1,2; lcd.clear (); lcd.print ("Intenzita v LUX"); lcd.setCursor (6,1); lcd.print (hodnota); } zpoždění (150); }
Nakonec zapněte Arduino a nahrajte program do Arduina. Jakmile je program nahrán, LCD začne ukazovat intenzitu světla v jednotkách LUX. Hodnoty můžete také měnit změnou intenzity světla kolem snímače, jak ukazuje video níže.