- Ievads BH1750 digitālā gaismas sensora modulī
- Arduino
- Arduino programmēšana BH1750 gaismas sensora saskarnei
Kad tālruni lietojat saulē vai lielā apgaismojumā, tas automātiski pielāgo spilgtumu atbilstoši apgaismojuma apstākļiem. Lielākajai daļai displeja ierīču tagad, neatkarīgi no tā, vai tas ir televizors vai mobilais tālrunis, ir iekšējais apgaismojuma sensors, lai automātiski pielāgotu spilgtumu. Šodien šajā apmācībā mēs izmantosim vienu šādu sensoru BH1750 gaismas sensora moduli un savienosim to ar Arduino un parādīsim Lux vērtību virs 16x2 LCD.
Ievads BH1750 digitālā gaismas sensora modulī
BH1750 ir digitālais apkārtējās gaismas sensors vai gaismas intensitātes sensors, ko var izmantot, lai automātiski pielāgotu displeja spilgtumu mobilajos tālruņos, LCD displejos vai ieslēgtu / izslēgtu lukturus automašīnās, pamatojoties uz āra apgaismojuma apstākļiem.
Sensors izmanto I 2 C sērijas sakaru protokolu, kas atvieglo tā lietošanu ar mikrokontrolleriem. I2C saziņai tai ir SDI un SDA tapas. No BH1750 Apkārtējās gaismas sensors pinout ir parādīts zemāk:
Šī sensora izeja ir LUX (lx), tāpēc nav nepieciešami papildu aprēķini. Lux ir mērvienība, kas mēra gaismas intensitāti. Tas mēra intensitāti atkarībā no gaismas daudzuma, kas skar konkrētu apgabalu. Viens lukss ir vienāds ar vienu lūmenu uz kvadrātmetru.
Sensors darbojas spriegumu no 2.4V līdz 3.6V (parasti 3.0V), un tā patērē pašreizējais 0.12mA. Šim sensoram ir plašs diapazons un augsta izšķirtspēja (1-65535lx), turklāt mērījumu variācijas ir arī nelielas (apmēram +/- 20%). Tas var darboties arī neatkarīgi bez ārējiem komponentiem.
Lai gan LDR sensoru var izmantot arī ierīču kontrolei, pamatojoties uz apgaismojuma apstākļiem, taču tas nav tik precīzs. Mēs izmantojām LDR sensoru, lai izveidotu daudzas ar gaismu kontrolētas lietojumprogrammas:
- Arduino gaismas sensora shēma, izmantojot LDR
- Tumšais detektors, izmantojot LDR un 555 taimera IC
- Vienkārša LDR ķēde gaismas noteikšanai
- Arduino krāsu sajaukšanas lampa, izmantojot RGB LED un LDR
Arduino
Ķēdes shēma BH1750 gaismas sensora savienošanai ar Arduino ir parādīta zemāk.
B2172 I2C sakaru tapas SDA un SCL ir savienotas ar Arduino tapām A4 un A5 attiecīgi I 2 C saziņai. Kā mēs zinām, sensora darba spriegums ir 3,3 V, tāpēc BH1750 VCC un GND ir savienoti ar Arduino 3,3 V un GND. Attiecībā uz LCD datu tapas (D4-D7) ir savienotas ar Arduino digitālajām tapām D2-D5 un RS un EN un Arduino ar D6 un D7. LCD V0 ir savienots ar katlu, un 10k pot tiek izmantots, lai kontrolētu LCD spilgtumu.
Arduino programmēšana BH1750 gaismas sensora saskarnei
Programmēšanas daļa šī LUX sensora lietošanai ar Arduino ir ļoti vienkārša. Lai gan šim sensoram ir pieejama bibliotēka, taču mēs to varam izmantot arī bez tā.
Pirmkārt, mēs esam iekļāvuši galvenes failus LCD un I 2 C protokolam.
# iekļaut
Pēc iestatīšanas funkciju, mēs esam inicializēts gan LCD un sensoru un izdrukāt sākuma ziņojumu par LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Intensitātes sensors"); kavēšanās (2000); }
Šeit funkcijas BH1750_Read un BH1750_Init tiek izmantotas, lai attiecīgi lasītu un rakstītu Lux vērtības. Funkcija Wire.beginTransmission () tiek izmantota, lai sāktu pārraidi, un funkcija Wire.requestFrom (adrese, 2) tiek izmantota, lai lasītu reģistrus, kur 2 norāda reģistru skaitu.
Tālāk Wire.endTransmission () tiek izmantots, lai pārtrauktu pārraidi, un funkcija Wire.write () tiek izmantota, lai pārietu uz vēlamo reģistru, ievadot tajā šī reģistra adresi.
int BH1750_Read (int adrese) { int i = 0; Wire.beginPārraide (adrese); Wire.requestFrom (adrese, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); atgriešanās i; } void BH1750_Init (int adrese) { Wire.beginTransmission (adrese); Wire.write (0x10); Wire.endTransmission (); }
In cilpas funkciju, mēs drukāšanas reālā laika LUX vērtības nekā LCD. Vispirms salīdziniet atgriešanās vērtību no funkcijas BH1750_Read ar 2 un pēc tam sāciet drukāt Lux vērtības, ja tā ir vienāda ar 2. Šeit vērtības tiek salīdzinātas ar 2, jo funkcija BH1750_Read atgriež reģistru skaita vērtību un mēs lasām tikai 2 reģistrus. Tātad, sasniedzot 2, programma sāk drukāt gaismas intensitātes LUX vērtības.
Tad tiek izmantota formula, lai iegūtu vērtības no abiem reģistriem un dalītu tās ar 1,2, kas ir mērījumu precizitāte.
void loop () { int i; uint16_t vērtība = 0; BH1750_Init (BH1750 adrese); kavēšanās (200); ja (2 == BH1750_Read (BH1750 adrese)) { vērtība = ((buff << 8) -buff) / 1,2; lcd.clear (); lcd.print ("Intensitāte LUX"); lcd.setCursor (6,1); lcd.print (vērtība); } kavēšanās (150); }
Visbeidzot ieslēdziet Arduino un augšupielādējiet programmu Arduino. Tiklīdz programma ir augšupielādēta, LCD sāk rādīt gaismas intensitāti LUX vienībās. Vērtības var mainīt arī, mainot gaismas intensitāti ap sensoru, kā parādīts zemāk esošajā video.