- Introducere în modulul senzorului digital de lumină BH1750
- Arduino
- Programare Arduino pentru interfața senzorului de lumină BH1750
Când vă luați telefonul la soare sau la lumină puternică, atunci acesta reglează automat luminozitatea în funcție de condițiile de iluminare. Majoritatea dispozitivelor de afișare acum pe zi, indiferent dacă este vorba de un televizor sau de un telefon mobil, au în interior senzorul de lumină ambientală pentru a regla luminozitatea în mod automat. Astăzi, în acest tutorial, vom folosi un astfel de senzor BH1750 Light Sensor Module și îl vom interfața cu Arduino și vom arăta valoarea Lux pe 16x2 LCD.
Introducere în modulul senzorului digital de lumină BH1750
BH1750 este un senzor digital de lumină ambientală sau un senzor de intensitate a luminii, care poate fi utilizat pentru reglarea automată a luminozității afișajului pe dispozitive mobile, afișaje LCD sau pentru a porni / opri farurile din mașini în funcție de condițiile de iluminare exterioară.
Senzorul folosește protocolul de comunicație serial I 2 C, ceea ce face mai ușor de utilizat cu microcontrolere. Pentru comunicarea I2C are pini SDI și SDA. Pinout de BH1750 Senzor de lumină ambiantă este prezentat mai jos:
Ieșirea acestui senzor este în LUX (lx), deci nu necesită alte calcule. Lux este unitatea care măsoară intensitatea luminii. Măsoară intensitatea în funcție de cantitatea de lumină care lovește o anumită zonă. Un lux este egal cu un lumen pe metru pătrat.
Senzorul funcționează la tensiuni de la 2.4V la 3.6V (de obicei 3.0V) și consumă curent de 0.12mA. Acest senzor are o gamă largă și o rezoluție înaltă (1-65535lx) și, în plus, variația măsurătorilor este de asemenea mică (aproximativ +/- 20%). De asemenea, poate funcționa independent, fără nicio componentă externă.
Deși un senzor LDR poate fi utilizat și pentru a controla dispozitivele pe baza condițiilor de iluminare, dar nu este atât de precis. Am folosit senzorul LDR pentru a construi multe aplicații controlate de lumină:
- Circuitul senzorului de lumină Arduino utilizând LDR
- Detector de întuneric folosind LDR și 555 Timer IC
- Circuit LDR simplu pentru detectarea luminii
- Lampă Arduino Color Mixing folosind LED RGB și LDR
Arduino
Schema de circuit pentru conectarea senzorului de lumină BH1750 cu Arduino este prezentată mai jos.
Pinii de comunicație I2C SDA și SCL ai BH1750 sunt conectați la pinul Arduino A4 și respectiv A5 pentru comunicația I 2 C. După cum știm, tensiunea de funcționare a senzorului este de 3,3v, astfel încât VCC și GND din BH1750 sunt conectate la 3,3V și GND din Arduino. Pentru LCD, pinii de date (D4-D7) sunt conectați la pinii digitali D2-D5 ai Arduino, iar pinii RS și EN sunt conectați la D6 și D7 din Arduino. V0 LCD este conectat la pot și un pot 10k este utilizat pentru a controla luminozitatea LCD.
Programare Arduino pentru interfața senzorului de lumină BH1750
Porțiunea de programare pentru utilizarea acestui senzor LUX cu Arduino este foarte ușoară. Deși există o bibliotecă disponibilă pentru acest senzor, dar o putem folosi și fără asta.
În primul rând, am inclus fișiere antet pentru protocolul LCD și I 2 C.
#include
În funcția de configurare , am inițializat atât LCD-ul, cât și senzorul și am imprimat mesajul de deschidere pe LCD.
void setup () { Wire.begin (); lcd.inceput (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("senzor de intensitate"); întârziere (2000); }
Aici BH1750_Read și BH1750_Init funcții sunt folosite pentru a citi și scrie valorile Lux respectiv. Funcția Wire.beginTransmission () este utilizată pentru a începe transmisia, iar funcția Wire.requestFrom (address, 2) este utilizată pentru a citi registre în care 2 indică numărul de registre.
În continuare, Wire.endTransmission () este utilizat pentru a termina transmisia, iar funcția Wire.write () este utilizată pentru a merge la registrul dorit, introducând adresa respectivului registru în acesta.
int BH1750_Read (adresa int) { int i = 0; Wire.beginTransmission (adresa); Wire.requestFrom (adresa, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); retur i; } void BH1750_Init (adresa int) { Wire.beginTransmission (adresa); Wire.write (0x10); Wire.endTransmission (); }
În funcția de buclă , imprimăm valorile lux în timp real pe LCD. Mai întâi comparați valoarea returnată din funcția BH1750_Read cu 2, apoi începeți să tipăriți valorile Lux dacă este egală cu 2. Aici valorile sunt comparate cu 2 deoarece funcția BH1750_Read returnează valoarea numărului de registre și citim doar 2 registre. Deci, când ajunge la 2, programul începe să tipărească valorile LUX ale intensității luminii.
Apoi se folosește o formulă pentru a obține valorile din ambele registre și a le împărți la 1,2, care este precizia măsurării.
void loop () { int i; uint16_t valoare = 0; BH1750_Init (BH1750address); întârziere (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensitate în LUX"); lcd.setCursor (6,1); lcd.print (valoare); } întârziere (150); }
În cele din urmă, porniți Arduino și încărcați programul în Arduino. De îndată ce programul este încărcat, ecranul LCD începe să afișeze intensitatea luminii în unitățile LUX. De asemenea, puteți varia valorile modificând intensitatea luminii în jurul senzorului, după cum se arată în videoclipul de mai jos.