- Uvod u BH1750 modul digitalnog senzora svjetlosti
- Arduino
- Programiranje Arduina za povezivanje senzora svjetlosti BH1750
Kad telefon uzmete na suncu ili u jakom osvjetljenju, on automatski podešava svjetlinu u skladu s uvjetima osvjetljenja. Većina uređaja za prikaz danas, bilo da se radi o televizoru ili mobilnom telefonu, ima senzor ambijentalnog svjetla za automatsko podešavanje svjetline. Danas ćemo u ovom vodiču upotrijebiti jedan takav senzor BH1750 Modul osjetnika svjetlosti i povezati ga s Arduinom te prikazati vrijednost Lux na LCD zaslonu 16x2.
Uvod u BH1750 modul digitalnog senzora svjetlosti
BH1750 je digitalni senzor ambijentalne svjetlosti ili senzor intenziteta svjetlosti, koji se može koristiti za automatsko podešavanje svjetline zaslona na mobitelima, LCD zaslonima ili za uključivanje / isključivanje prednjih svjetala u automobilima na temelju vanjskih uvjeta osvjetljenja.
Senzor koristi serijski komunikacijski protokol I 2 C što olakšava upotrebu s mikrokontrolerima. Za I2C komunikaciju ima SDI i SDA pinove. Pinout od BH1750 Senzor za osvijetljenost prostora prikazana je u nastavku:

Izlaz ovog senzora je u LUX (lx), tako da ne zahtijeva nikakve daljnje izračune. Lux je jedinica za mjerenje intenziteta svjetlosti. Mjeri intenzitet prema količini svjetlosti koja udara na određeno područje. Jedan luks jednak je jednom lumenu po kvadratnom metru.
Senzor radi na naponima od 2,4 V do 3,6 V (obično 3,0 V) i troši struju od 0,12 mA. Ovaj senzor ima širok raspon i visoku razlučivost (1-65535lx), a osim toga, varijacije u mjerenju također su malene (oko +/- 20%). Također može raditi samostalno bez ikakvih vanjskih komponenata.
Iako se LDR senzor također može koristiti za upravljanje uređajima na temelju uvjeta osvjetljenja, ali nije toliko precizan. Koristili smo LDR senzor za izgradnju mnogih aplikacija kontroliranih svjetlošću:
- Krug Arduino osjetnika svjetlosti pomoću LDR-a
- Tamni detektor pomoću LDR-a i 555 Timer IC
- Jednostavni LDR krug za otkrivanje svjetlosti
- Arduino lampa za miješanje u boji koja koristi RGB LED i LDR
Arduino
Shema spojeva za povezivanje BH1750 svjetlosnog senzora s Arduinom prikazana je dolje.

I2C komunikacijski pinovi SDA i SCL BH1750 povezani su na Arduino pin A4 i A5 za I 2 C komunikaciju. Kao što znamo radni napon senzora je 3,3 v, tako da su VCC i GND BH1750 povezani na 3,3 V i GND Arduina. Za LCD, podatkovne igle (D4-D7) spojene su na digitalne igle D2-D5 Arduina, a RS i EN pinovi spojeni su na D6 i D7 Arduina. V0 LCD zaslona povezan je s loncem, a 10k lonac se koristi za kontrolu svjetline LCD-a.

Programiranje Arduina za povezivanje senzora svjetlosti BH1750
Programski dio za upotrebu ovog LUX senzora s Arduinom vrlo je jednostavan. Iako za ovaj senzor postoji biblioteka, ali možemo ga koristiti i bez toga.
Prvo, uključili smo datoteke zaglavlja za LCD i I 2 C protokol.
#include
U funkciji postavljanja inicijalizirali smo i LCD i senzor i ispisali početnu poruku na LCD.
void setup () { Wire.begin (); lcd.početak (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Senzor intenziteta"); kašnjenje (2000); }
Ovdje BH1750_Read i BH1750_Init funkcije se koriste za čitanje i pisanje vrijednosti Lux respektivno. Funkcija Wire.beginTransmission () koristi se za početak prijenosa, a funkcija Wire.requestFrom (adresa, 2) koristi se za čitanje registara gdje 2 označava broj registara.
Dalje Wire.endTransmission () koristi se za završetak prijenosa, a funkcija Wire.write () koristi se za odlazak do željenog registra unosom adrese tog registra.
int BH1750_Read (int adresa) { int i = 0; Wire.beginTransmission (adresa); Wire.requestFrom (adresa, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (int adresa) { Wire.beginTransmission (adresa); Wire.write (0x10); Wire.endTransmission (); }
U petlji funkciji, mi smo ispisuje vrijednosti u realnom vremenu lux preko LCD. Prvo usporedite povratnu vrijednost iz funkcije BH1750_Read s 2, a zatim započnite ispis Lux vrijednosti ako je jednaka 2. Ovdje se vrijednosti uspoređuju s 2 jer funkcija BH1750_Read vraća vrijednost broja registara i čitamo samo 2 registra. Dakle, kada dosegne 2, program započinje s ispisom LUX vrijednosti intenziteta svjetlosti.
Zatim se pomoću formule dobivaju vrijednosti iz oba registra i dijele s 1,2, što je točnost mjerenja.
void loop () { int i; vrijednost uint16_t = 0; BH1750_Init (BH1750 adresa); kašnjenje (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intenzitet u LUX-u"); lcd.setCursor (6,1); lcd.print (vrijednost); } kašnjenje (150); }
Napokon uključite Arduino i prenesite program u Arduino. Čim se program prenese, LCD počinje prikazivati intenzitet svjetlosti u LUX jedinicama. Vrijednosti možete mijenjati i mijenjanjem intenziteta svjetlosti oko senzora, kao što je prikazano u videu u nastavku.
