- Panimula sa BH1750 Digital Light Sensor Module
- Arduino
- Programming Arduino para sa pag-interfacing ng BH1750 Light Sensor
Kapag dinala mo ang iyong telepono sa sikat ng araw o sa mataas na pag-iilaw, awtomatiko nitong inaayos ang liwanag ayon sa mga kundisyon ng pag-iilaw. Karamihan sa mga display device ngayon isang araw, alinman sa TV o mobile phone, mayroon ang Ambient Light Sensor sa loob upang awtomatikong ayusin ang ilaw. Ngayon sa tutorial na ito, gagamitin namin ang isa sa naturang sensor BH1750 Light Sensor Module at i-interface ito sa Arduino at ipapakita ang halaga ng Lux na higit sa 16x2 LCD.
Panimula sa BH1750 Digital Light Sensor Module
Ang BH1750 ay isang Digital Ambient Light Sensor o isang Light Intensity Sensor, na maaaring magamit upang awtomatikong ayusin ang liwanag ng pagpapakita sa mga mobiles, LCD display, o upang i-on / i-off ang mga headlight sa mga kotse batay sa mga kondisyon sa labas ng ilaw.
Gumagamit ang sensor ng I 2 C serial komunikasyon na proteksyon na ginagawang mas madaling gamitin sa mga microcontroller. Para sa komunikasyon ng I2C mayroon itong mga SDI at SDA pin. Ang pinout ng BH1750 Ambient Light Sensor ay ipinapakita sa ibaba:
Ang output ng sensor na ito ay nasa LUX (lx), kaya't hindi ito nangangailangan ng anumang karagdagang mga kalkulasyon. Ang Lux ay ang yunit upang sukatin ang Lakas ng ilaw. Sinusukat nito ang kasidhian ayon sa dami ng pagpindot ng ilaw sa isang partikular na lugar. Ang isang lux ay katumbas ng sa isang lumen bawat square meter.
Nagpapatakbo ang sensor sa mga voltages mula 2.4V hanggang 3.6V (karaniwang 3.0V) at kumokonsumo ito ng kasalukuyang 0.12mA. Ang sensor na ito ay may malawak na saklaw at mataas na resolusyon (1-65535lx) at bilang karagdagan, ang pagkakaiba-iba ng pagsukat ay maliit din (mga +/- 20%). Maaari din itong gumana nang nakapag-iisa nang walang anumang panlabas na sangkap.
Kahit na ang isang LDR sensor ay maaari ding magamit upang makontrol ang mga aparato batay sa mga kundisyon ng pag-iilaw ngunit hindi ito tumpak. Gumamit kami ng LDR sensor upang bumuo ng maraming mga ilaw na kinokontrol na mga application:
- Arduino Light Sensor Circuit gamit ang LDR
- Dark Detector na gumagamit ng LDR at 555 Timer IC
- Simpleng LDR Circuit upang Makita ang Liwanag
- Arduino Color Mixing Lamp gamit ang RGB LED at LDR
Arduino
Ang circuit diagram upang ikonekta ang BH1750 Light sensor na may Arduino ay ipinapakita sa ibaba.
Ang mga pin ng komunikasyon ng I2C na SDA at SCL ng BH1750 ay konektado sa Arduino pin A4 at A5 ayon sa pagkakabanggit para sa komunikasyon ng I 2 C. Tulad ng alam natin na ang operating boltahe para sa sensor ay 3.3v kaya ang VCC at GND ng BH1750 ay konektado sa 3.3V at GND ng Arduino. Para sa LCD, ang mga data pin (D4-D7) ay konektado sa mga digital na pin na D2-D5 ng Arduino at RS at EN pin na konektado sa D6 at D7 ng Arduino. Ang V0 ng LCD ay konektado sa palayok at isang 10k palayok ay ginagamit upang makontrol ang liwanag ng LCD.
Programming Arduino para sa pag-interfacing ng BH1750 Light Sensor
Ang bahagi ng programa para sa paggamit ng LUX sensor na ito kasama ang Arduino ay napakadali. Bagaman mayroong isang silid-aklatan na magagamit para sa sensor na ito, ngunit maaari din namin itong gamitin nang wala iyon.
Una, isinama namin ang mga file ng header para sa LCD at I 2 C na protocol.
# isama
Sa pag- andar ng pag- setup , sinimulan namin ang parehong LCD at sensor at nai-print ang pambungad na mensahe sa LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Liwanag"); lcd.setCursor (0,1); lcd.print ("Intensity Sensor"); pagkaantala (2000); }
Narito BH1750_Read at BH1750_Init function ay ginagamit upang basahin at isulat ang mga halaga Lux ayon sa pagkakabanggit. Ang pag- andar ng Wire.beginTransmission () ay ginagamit upang simulan ang paghahatid at Wire.requestFrom (address, 2) na pagpapaandar ay ginagamit upang basahin ang mga rehistro kung saan 2 ay nagpapahiwatig ng bilang ng mga rehistro.
Ang karagdagang Wire.endTransmission () ay ginagamit upang wakasan ang paghahatid at ang pag- andar ng Wire.write () ay ginagamit upang pumunta sa nais na rehistro sa pamamagitan ng pagpasok ng address ng rehistro na iyon.
int BH1750_Read (int address) { int i = 0; Wire.beginTransmission (address); Wire.requestFrom (address, 2); habang (Wire.available ()) { buff = Wire.read (); ako ++; } Wire.endTransmission (); ibalik i; } void BH1750_Init (int address) { Wire.beginTransmission (address); Wire.write (0x10); Wire.endTransmission (); }
Sa pag- andar ng loop , inililimbag namin ang mga halaga ng real time lux sa paglipas ng LCD. Una ihambing ang halaga ng pagbabalik mula sa function ng BH1750_Read na may 2, at pagkatapos ay simulang i-print ang mga halaga ng Lux kung ito ay katumbas ng 2. Narito ang mga halaga ay inihambing sa 2 dahil ang function ng BH1750_Read ay nagbabalik ng halaga ng bilang ng rehistro at binabasa lamang natin ang 2 rehistro. Kaya't kapag umabot sa 2, sinisimulan ng programa ang pag-print ng mga halaga ng LUX ng lakas na ilaw.
Pagkatapos ang isang formula ay ginagamit upang makuha ang mga halaga mula sa parehong mga pagrehistro at hatiin ang mga ito sa pamamagitan ng 1.2, na kung saan ay ang kawastuhan ng pagsukat.
void loop () { int i; uint16_t halaga = 0; BH1750_Init (BH1750address); pagkaantala (200); kung (2 == BH1750_Read (BH1750address)) { halaga = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensity sa LUX"); lcd.setCursor (6,1); lcd.print (halaga); } pagkaantala (150); }
Panghuli kapangyarihan ang Arduino at i-upload ang programa sa Arduino. Sa sandaling na-upload ang programa ay nagsisimulang ipakita ang LCD ng magaan na ilaw sa mga yunit ng LUX. Maaari mo ring maiiba ang mga halaga sa pamamagitan ng pagbabago ng ilaw ng ilaw sa paligid ng sensor tulad ng ipinakita sa Video sa ibaba.