- Introduktion till BH1750 digital ljussensormodul
- Arduino
- Programmering Arduino för gränssnitt BH1750 ljussensor
När du tar telefonen i solsken eller i hög belysning, justerar den automatiskt ljusstyrkan efter ljusförhållandena. De flesta visningsenheter nu om dagen, oavsett om det är en TV eller mobiltelefon, har omgivande ljussensor inuti för att justera ljusstyrkan automatiskt. Idag i denna handledning använder vi en sådan sensor BH1750 ljussensormodul och gränssnitt den med Arduino och visar Lux-värdet över 16x2 LCD.
Introduktion till BH1750 digital ljussensormodul
BH1750 är en digital omgivande ljussensor eller en ljusintensitetssensor, som kan användas för att automatiskt justera skärmens ljusstyrka i mobiler, LCD-skärmar eller för att slå på / av strålkastarna i bilar baserat på utomhusbelysningsförhållandena.
Sensorn använder I 2 C seriellt kommunikationsprotokoll vilket gör det lättare att använda med mikrokontroller. För I2C-kommunikation har den SDI- och SDA-stift. Den pinout av BH1750 Ambient ljussensor visas nedan:
Utgången från denna sensor är i LUX (lx), så det kräver inga ytterligare beräkningar. Lux är enheten för att mäta ljusintensitet. Den mäter intensiteten efter mängden ljus som slår på ett visst område. En lux är lika med ett lumen per kvadratmeter.
Sensorn arbetar på spänningar från 2,4V till 3,6V (vanligtvis 3,0V) och den förbrukar ström på 0,12mA. Denna sensor har ett brett intervall och hög upplösning (1-65535lx) och dessutom är mätningsvariationen också liten (cirka +/- 20%). Det kan också fungera självständigt utan någon extern komponent.
Även om en LDR-sensor också kan användas för att styra enheterna baserat på ljusförhållanden men det är inte så exakt. Vi har använt LDR-sensor för att bygga många ljusstyrda applikationer:
- Arduino ljussensorkrets med LDR
- Mörk detektor med LDR och 555 timer IC
- Enkel LDR-krets för att upptäcka ljus
- Arduino färgblandningslampa med RGB LED och LDR
Arduino
Kretsschemat för att ansluta BH1750 ljussensor med Arduino visas nedan.
I2C-kommunikationsstift SDA och SCL på BH1750 är anslutna till Arduino-stift A4 respektive A5 för I 2 C-kommunikation. Som vi vet är driftspänningen för sensorn 3,3 v så VCC och GND på BH1750 är anslutna till 3,3 V och GND i Arduino. För LCD är datapinnar (D4-D7) anslutna till digitala stift D2-D5 på Arduino och RS och EN-stift är anslutna till D6 och D7 i Arduino. V0 på LCD är ansluten till potten och en 10k pot används för att styra LCD-skärmens ljusstyrka.
Programmering Arduino för gränssnitt BH1750 ljussensor
Programmeringsdelen för att använda denna LUX-sensor med Arduino är mycket enkel. Även om det finns ett bibliotek tillgängligt för denna sensor, men vi kan också använda det utan det.
För det första har vi inkluderat rubrikfiler för LCD- och I 2 C-protokoll.
#omfatta
I installationsfunktionen har vi initierat både LCD och sensor och skrivit ut öppningsmeddelandet på LCD.
ogiltig installation () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Intensitetssensor"); fördröjning (2000); }
Här används BH1750_Read och BH1750_Init- funktioner för att läsa och skriva Lux-värdena. Den Wire.beginTransmission () funktionen används för att påbörja överföringen och Wire.requestFrom (adress, 2) är funktionen används för att läsa registren där 2 anger antalet register.
Ytterligare Wire.endTransmission () används för att avsluta överföringen och Wire.write () -funktionen används för att gå till önskat register genom att ange adressen för det registret i det.
int BH1750_Read (int-adress) { int i = 0; Wire.beginTransmission (adress); Wire.requestFrom (adress, 2); medan (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); returnera i; } ogiltig BH1750_Init (int-adress) { Wire.beginTransmission (adress); Wire.write (0x10); Wire.endTransmission (); }
I loop funktion, vi skriver ut realtids luxvärden över LCD. Jämför först returvärdet från BH1750_Read- funktionen med 2 och börja sedan skriva ut Lux-värdena om det är lika med 2. Här jämförs värdena med 2 eftersom BH1750_Read- funktionen returnerar värdet på registerantalet och vi läser bara två register. Så när det når 2 börjar programmet skriva ut LUX-värdena för ljusintensitet.
Sedan används en formel för att hämta värdena från båda registren och dela dem med 1,2, vilket är mätnoggrannheten.
ogiltig slinga () { int i; uint16_t värde = 0; BH1750_Init (BH1750adress); fördröjning (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensitet i LUX"); lcd.setCursor (6,1); lcd.print (värde); } fördröjning (150); }
Slutligen starta Arduino och ladda upp programmet till Arduino. Så snart programmet laddas upp börjar LCD-skärmen visa ljusintensiteten i LUX-enheter. Du kan också variera värdena genom att ändra ljusintensiteten runt sensorn som visas i videon nedan.