- Introduktion til BH1750 Digital Light Sensor Module
- Arduino
- Programmering Arduino til interface BH1750 lyssensor
Når du tager din telefon i solskin eller i høj belysning, justerer den automatisk lysstyrken i henhold til lysforholdene. De fleste af displayenhederne nu om dagen, hvad enten det er et tv eller en mobiltelefon, har den omgivende lyssensor indeni for automatisk at justere lysstyrken. I dag i denne vejledning bruger vi en sådan sensor BH1750 lyssensormodul og interface den med Arduino og viser Lux-værdien over 16x2 LCD.
Introduktion til BH1750 Digital Light Sensor Module
BH1750 er en Digital Ambient Light Sensor eller en Light Intensity Sensor, som kan bruges til automatisk at justere lysstyrken på displayet i mobiltelefoner, LCD-skærme eller til at tænde / slukke forlygterne i biler baseret på udendørs lysforhold.
Sensoren bruger I 2 C seriel kommunikationsprotokol, som gør det nemmere at bruge med mikrocontrollere. Til I2C-kommunikation har den SDI- og SDA-ben. Den pinout af BH1750 Ambient Light Sensor er vist nedenfor:
Outputtet fra denne sensor er i LUX (lx), så det kræver ingen yderligere beregninger. Lux er enheden til måling af lysintensitet. Den måler intensiteten i henhold til mængden af lys, der rammer et bestemt område. En lux er lig med et lumen pr. Kvadratmeter.
Sensoren fungerer på spændinger fra 2,4V til 3,6V (typisk 3,0V), og den bruger strøm på 0,12mA. Denne sensor har et bredt område og høj opløsning (1-65535lx), og derudover er målingsvariationen også lille (ca. +/- 20%). Det kan også fungere uafhængigt uden nogen ekstern komponent.
Selvom en LDR-sensor også kan bruges til at styre enhederne baseret på lysforhold, men den er ikke så nøjagtig. Vi har brugt LDR-sensor til at opbygge mange lysstyrede applikationer:
- Arduino lyssensorkredsløb ved hjælp af LDR
- Mørk detektor ved hjælp af LDR og 555 timer IC
- Enkelt LDR-kredsløb til at detektere lys
- Arduino Color Mixing Lamp ved hjælp af RGB LED og LDR
Arduino
Kredsløbsdiagrammet til at forbinde BH1750 lyssensor med Arduino er vist nedenfor.
I2C kommunikationsstifter SDA og SCL på BH1750 er forbundet til Arduino pin A4 henholdsvis A5 til I 2 C kommunikation. Som vi ved er driftsspændingen til sensoren 3,3 v, så VCC og GND af BH1750 er forbundet til 3,3 V og GND af Arduino. For LCD tilsluttes datapindene (D4-D7) til de digitale ben D2-D5 på Arduino og RS og EN-pinde er forbundet til D6 og D7 i Arduino. V0 på LCD er forbundet til potten, og en 10k pot bruges til at kontrollere lysstyrken på LCD.
Programmering Arduino til interface BH1750 lyssensor
Programmeringsdelen til brug af denne LUX-sensor med Arduino er meget let. Selvom der er et bibliotek til rådighed for denne sensor, men vi kan også bruge det uden det.
For det første har vi inkluderet headerfiler til LCD og I 2 C-protokol.
#omfatte
I installationsfunktionen har vi initialiseret både LCD og sensor og udskrevet åbningsmeddelelsen på LCD.
ugyldig opsætning () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Intensitetssensor"); forsinkelse (2000); }
Her bruges funktionerne BH1750_Read og BH1750_Init til at læse og skrive henholdsvis Lux-værdierne. Funktionen Wire.beginTransmission () bruges til at starte transmissionen, og Wire.requestFrom (adresse, 2) -funktionen bruges til at læse registre, hvor 2 angiver antallet af registre.
Yderligere Wire.endTransmission () bruges til at afslutte transmissionen, og Wire.write () -funktionen bruges til at gå til det ønskede register ved at indtaste adressen på det register i det.
int BH1750_Read (int-adresse) { int i = 0; Wire.beginTransmission (adresse); Wire.requestFrom (adresse, 2); mens (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); returnere i; } ugyldigt BH1750_Init (int-adresse) { Wire.beginTransmission (adresse); Wire.write (0x10); Wire.endTransmission (); }
I loop -funktion, er vi udskriver realtid luxværdier end LCD. Sammenlign først returværdien fra BH1750_Read- funktionen med 2, og start derefter udskrivningen af Lux-værdierne, hvis den er lig med 2. Her sammenlignes værdierne med 2, fordi BH1750_Read- funktionen returnerer værdien af registertælling, og vi læser kun 2 registre. Så når det når op til 2, begynder programmet at udskrive LUX-værdierne for lysintensitet.
Derefter bruges en formel til at hente værdierne fra begge registre og dele dem med 1,2, hvilket er målenøjagtigheden.
ugyldig sløjfe () { int i; uint16_t værdi = 0; BH1750_Init (BH1750adresse); forsinkelse (200); hvis (2 == BH1750_Read (BH1750address)) { værdi = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensitet i LUX"); lcd.setCursor (6,1); lcd.print (værdi); } forsinkelse (150); }
Tænd endelig Arduino og upload programmet til Arduino. Så snart programmet er uploadet, begynder LCD'et at vise lysintensiteten i LUX-enheder. Du kan også variere værdierne ved at ændre lysintensiteten omkring sensoren som vist i videoen nedenfor.