- Bevezetés a BH1750 digitális fényérzékelő modulba
- Arduino
- Arduino programozása a BH1750 fényérzékelő összekapcsolására
Ha napfényben vagy nagy fényviszonyok között veszi telefonját, akkor az automatikusan a fényviszonyoknak megfelelően állítja be a fényerőt. A legtöbb megjelenítő eszköz nap mint nap, legyen az tévé vagy mobiltelefon, bent van a környezeti fényérzékelő a fényerő automatikus beállításához. Ma ebben az oktatóanyagban egy ilyen érzékelő BH1750 fényérzékelő modult fogunk használni, és összekapcsoljuk az Arduino-val, és megmutatjuk a Lux értéket 16x2 LCD felett.
Bevezetés a BH1750 digitális fényérzékelő modulba
A BH1750 egy digitális környezeti fényérzékelő vagy egy fényerősség- érzékelő, amely használható a mobilok, az LCD-kijelzők fényerejének automatikus beállítására, vagy az autók fényszóróinak a kültéri fényviszonyok alapján történő ki- és kikapcsolására.
Az érzékelő I 2 C soros kommunikációs protokollt használ, amely megkönnyíti a mikrovezérlőkkel való használatot. Az I2C kommunikációhoz SDI és SDA csapokkal rendelkezik. Az alábbiakban látható a BH1750 környezeti fényérzékelő kivezetése:
Ennek az érzékelőnek a kimenete LUX-ban (lx) van, ezért nincs szükség további számításokra. A Lux a fényintenzitás mérésére szolgáló egység. Az intenzitást az adott területen elért fény mennyisége szerint méri. Egy lux egyenlő egy lumen / négyzetméter.
Az érzékelő 2,4 V és 3,6 V (általában 3,0 V) feszültségen működik, és 0,12 mA áramot fogyaszt. Ennek az érzékelőnek széles a tartománya és nagy a felbontása (1-65535lx), ráadásul a mérési variáció is kicsi (kb. +/- 20%). Külső alkatrészek nélkül is képes önállóan működni.
Bár egy LDR érzékelő is használható az eszközök vezérléséhez a fényviszonyok alapján, de ez nem annyira pontos. Az LDR szenzort sok fényvezérelt alkalmazás felépítéséhez használtuk:
- Arduino fényérzékelő áramkör LDR segítségével
- Sötét detektor LDR és 555 Timer IC segítségével
- Egyszerű LDR áramkör a fény érzékeléséhez
- Arduino színes keverőlámpa RGB LED és LDR használatával
Arduino
Az alábbiakban bemutatjuk a BH1750 fényérzékelő és az Arduino összekapcsolásának kapcsolási rajzát.
A BH1750 I2C kommunikációs érintkezõi SDA és SCL csatlakoznak az Arduino A4 és A5 érintkezõhöz az I 2 C kommunikációhoz. Mint tudjuk, az érzékelő működési feszültsége 3,3 V, így a BH1750 VCC-je és GND-je az Arduino 3,3 V-jához és GND-jéhez csatlakozik. LCD esetén az adatcsapok (D4-D7) az Arduino D2-D5 digitális és az RS, valamint az EN és az Arduino D6 és D7 digitális csatlakozóihoz vannak csatlakoztatva. Az LCD V0-ja csatlakoztatva van az edényhez, és 10k-os edényt használunk az LCD fényerejének szabályozásához.
Arduino programozása a BH1750 fényérzékelő összekapcsolására
Ennek a LUX érzékelőnek az Arduino-val történő használatához nagyon könnyű programozni. Bár rendelkezésre áll könyvtár ehhez az érzékelőhöz, de anélkül is használhatjuk.
Először felvettük az LCD és az I 2 C protokoll fejlécfájljait.
#include
A beállítási funkcióban az LCD-t és az érzékelőt egyaránt inicializáltuk, és a nyitó üzenetet kinyomtattuk az LCD-re.
void setup () { Wire.begin (); lcdbegin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("intenzitás érzékelő"); késés (2000); }
Itt a BH1750_Read és a BH1750_Init függvényeket használjuk a Lux-értékek kiolvasására és megírására. A Wire.beginTransmission () függvényt használjuk az átvitel megkezdéséhez, a Wire.requestFrom (cím, 2) függvényt pedig olyan regiszterek beolvasására használjuk, ahol 2 a regiszterek számát jelzi.
A Wire.endTransmission () segítségével továbbíthatjuk az átvitelt, a Wire.write () függvénnyel pedig a kívánt regiszterre léphetünk, beírva a regisztráció címét.
int BH1750_Read (int cím) { int i = 0; Wire.beginTransmission (cím); Wire.requestFrom (cím, 2); míg (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); visszatérés i; } void BH1750_Init (int cím) { Wire.beginTransmission (cím); Wire.write (0x10); Wire.endTransmission (); }
A loop funkció, mi a nyomtatást a valós idejű lux értékek felett LCD. Először hasonlítsa össze a BH1750_Read függvény visszatérési értékét a 2-vel, majd kezdje el kinyomtatni a Lux értékeket, ha az egyenlő 2-vel. Itt az értékeket összehasonlítjuk a 2-vel, mert a BH1750_Read függvény visszaadja a regiszterszám értékét, és csak 2 regisztert olvasunk. Tehát amikor eléri a 2 értéket, a program elkezdi kinyomtatni a fényerősség LUX értékeit.
Ezután egy képletet használunk arra, hogy mindkét regiszterből megkapjuk az értékeket, és elosztjuk őket 1,2-vel, ami a mérési pontosság.
void loop () { int i; uint16_t érték = 0; BH1750_Init (BH1750 cím); késés (200); if (2 == BH1750_Read (BH1750cím)) { érték = ((buff << 8) -buff) / 1,2; lcd.clear (); lcd.print ("Intenzitás LUX-ban"); lcd.setCursor (6,1); lcd.print (érték); } késleltetés (150); }
Végül kapcsolja be az Arduino-t, és töltse fel a programot az Arduino-ba. Amint a program feltöltődik, az LCD megjeleníti a fényintenzitást LUX egységekben. Az értékeket az érzékelő körüli fényerősség megváltoztatásával is módosíthatja, amint azt az alábbi videó bemutatja.