- Introduksjon til BH1750 Digital lyssensormodul
- Arduino
- Programmering Arduino for grensesnitt BH1750 lyssensor
Når du tar telefonen i solskinn eller i høy belysning, justerer den automatisk lysstyrken i henhold til lysforholdene. De fleste skjermenhetene om dagen, enten det er en TV eller mobiltelefon, har omgivelseslyssensoren inne for å justere lysstyrken automatisk. I dag i denne opplæringen vil vi bruke en slik sensor BH1750 lyssensormodul og grensesnitt den med Arduino og vise Lux-verdien over 16x2 LCD.
Introduksjon til BH1750 Digital lyssensormodul
BH1750 er en digital omgivelseslyssensor eller en lysintensitetssensor, som kan brukes til å automatisk justere lysstyrken på skjermen i mobiltelefoner, LCD-skjermer eller å slå på / av frontlysene i biler basert på lysforholdene utendørs.
Sensoren bruker I 2 C seriell kommunikasjonsprotokoll som gjør det enklere å bruke med mikrokontrollere. For I2C-kommunikasjon har den SDI- og SDA-pinner. Den pinout av BH1750 Omgivelseslyssensor er vist nedenfor:
Utgangen til denne sensoren er i LUX (lx), så den krever ingen ytterligere beregninger. Lux er enheten for å måle lysintensitet. Den måler intensiteten i henhold til mengden lys som treffer et bestemt område. Én lux er lik ett lumen per kvadratmeter.
Sensoren opererer på spenninger fra 2.4V til 3.6V (vanligvis 3.0V) og den bruker strøm på 0,12mA. Denne sensoren har et bredt spekter og høy oppløsning (1-65535lx), og i tillegg er målingsvariasjonen også liten (ca. +/- 20%). Det kan også fungere uavhengig uten noen ekstern komponent.
Selv om en LDR-sensor også kan brukes til å kontrollere enhetene basert på lysforhold, men det er ikke så nøyaktig. Vi har brukt LDR-sensor til å bygge mange lysstyrte applikasjoner:
- Arduino lyssensorkrets ved bruk av LDR
- Dark Detector bruker LDR og 555 Timer IC
- Enkel LDR-krets for å oppdage lys
- Arduino fargeblandingslampe ved bruk av RGB LED og LDR
Arduino
Kretsskjemaet for å koble BH1750 lyssensor med Arduino er vist nedenfor.
I2C kommunikasjonspinner SDA og SCL av BH1750 er koblet til henholdsvis Arduino pin A4 og A5 for I 2 C kommunikasjon. Som vi vet er driftsspenningen for sensoren 3,3 v, så VCC og GND av BH1750 er koblet til 3,3 V og GND av Arduino. For LCD er datapinner (D4-D7) koblet til digitale pinner D2-D5 på Arduino og RS og EN-pinner er koblet til D6 og D7 i Arduino. V0 på LCD er koblet til potten og en 10k potte brukes til å kontrollere lysstyrken på LCD.
Programmering Arduino for grensesnitt BH1750 lyssensor
Programmeringsdelen for bruk av denne LUX-sensoren med Arduino er veldig enkel. Selv om det er et bibliotek tilgjengelig for denne sensoren, men vi kan også bruke det uten det.
For det første har vi tatt med headerfiler for LCD og I 2 C-protokollen.
#inkludere
I oppsettfunksjonen har vi initialisert både LCD og sensor og skrevet ut åpningsmeldingen på LCD.
ugyldig oppsett () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Intensity Sensor"); forsinkelse (2000); }
Her brukes funksjonene BH1750_Read og BH1750_Init til å lese og skrive henholdsvis Lux-verdiene. Den Wire.beginTransmission () funksjonen brukes for å starte overføring og Wire.requestFrom (adresse, 2) blir funksjon som benyttes til å lese registre hvor 2 angir et antall registre.
Ytterligere Wire.endTransmission () brukes til å avslutte overføringen, og Wire.write () -funksjonen brukes til å gå til ønsket register ved å skrive inn adressen til det registeret 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 jeg; } ugyldig BH1750_Init (int-adresse) { Wire.beginTransmission (adresse); Wire.write (0x10); Wire.endTransmission (); }
I sløyfe -funksjon, er vi skriver sanntid lux-verdier enn LCD. Sammenlign først returverdien fra BH1750_Read- funksjonen med 2, og start deretter utskriften av Lux-verdiene hvis den er lik 2. Her sammenlignes verdiene med 2 fordi BH1750_Read- funksjonen returnerer verdien av registertellingen, og vi leser bare 2 registre. Så når det når 2, begynner programmet å skrive ut LUX-verdiene for lysintensitet.
Deretter brukes en formel for å hente verdiene fra begge registrene og dele dem med 1,2, som er målenøyaktigheten.
ugyldig sløyfe () { int i; uint16_t verdi = 0; BH1750_Init (BH1750adresse); forsinkelse (200); hvis (2 == BH1750_Read (BH1750address)) { verdi = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensitet i LUX"); lcd.setCursor (6,1); lcd.print (verdi); } forsinkelse (150); }
Slå til slutt på Arduino og last opp programmet til Arduino. Så snart programmet er lastet opp, begynner LCD-displayet å vise lysintensiteten i LUX-enheter. Du kan også variere verdiene ved å endre lysintensiteten rundt sensoren som vist i videoen nedenfor.