Tartalom:
- Fénymérési alapfogalmak, lux és lumen jelentése, példák a lux gyakorlati értékeire
- BH1750 szenzor műszaki adatai, modul tulajdonságai és kapcsolási rajza
- Fénymérő chip üzemmódjai, felbontása
- Programkönyvtárhoz kapott bemutató program
————————————————————————
Egy kis elmélet! Mi a megvilágítás azaz a lux (Wikipédia-ban található infót másoltam ide)?
A megvilágítás az adott területre eső fényáram mértékegysége. A fényáram (mértékegysége a lumen) elképzelhető úgy, mint a jelen lévő látható fény összege, a megvilágítás pedig, mint az adott területre eső fényáram intenzitása. Nekem nagyon kellett koncentrálnom, hogy ezt felfogjam. Sokkal többet fog mondani a lényegről az alábbi táblázat.
Egy lux az a megvilágítás, amelyet 1 lumen fényáram 1 négyzetméteren létrehoz. Egy adott mennyiségű fény nagyobb területen elosztva halványabban fogja azt megvilágítani, azaz a megvilágítás mértéke fordítottan arányos a terület nagyságával. Ezért van az, hogy a zseblámpa fényét mérve a lux mérő közelről többet mutat, mint távolabbról. Példák a lux értékekre, hogy el tudjuk képzelni.
Megvilágítás | Megvilágított felület: |
10−4 lux | Holdtalan, borús éjszakai égbolt |
0,002 lux | Holdtalan, tiszta éjszakai égbolt (airglow) |
0,27–1,0 lux | Telihold egy tiszta éjszakán |
3 lux | A színérzékelés határa |
3,4 lux | szürkület kezdete tiszta égbolt esetén |
50 lux | Lakás nappalijának megvilágítása |
80 lux | Irodaépület folyosójának/mosdójának világítása |
100 lux | Nagyon sötét, beborult nappali égbolt |
320–500 lux | Irodai megvilágítás |
400 lux | Napfelkelte, vagy napnyugta tiszta időben |
1000 lux | Borult égbolt |
10 000–25 000 lux | Teljes napsütés (nem közvetlen) |
32 000–130 000 lux | Közvetlen napfény |
A BH1750 egy digitális környezeti fényérzékelő , amelyet általában a mobiltelefonokban használnak a képernyő fényerejének a környezeti megvilágítás alapján történő beállítására. Az adatlap szerint a megvilágítást közvetlenül LUX-ban adja meg. Ha ez igaz, akkor közvetlen napsütésben már nem lesz jól használható, hiszen a fenti táblázat szerint a közvetlen napsütés 32-130ezer lux, míg ennek a szenzornak a felső mérési határa “csak” 64 ezer lux!
A modulba beépített szenzor adatai:
- Tápfeszültség: 2,4–3,6 V
- Áramfelvétel: 0,12-0,2mA
- Mérési tartomány: 1-65535 lux
- Kommunikáció: I2C busz
- Pontosság: +/- 20%
- Az IR (infravörös) sugárzás nagyon kis hatással van a mért értékre
- A szenzor érzékelési tartománya hasonlít az emberi szem érzékelési tartományához.
Mint az látható a műszaki adatokból, a BH1750 chip nem köthető össze közvetlenül az Arduino-val, mert nem működik 5V-ról. Viszont az általam beszerzett modul igen, mert raktak rá 5V -> 3,3V feszültség átalakítót (tápegységet). Találtam egy kapcsolási rajzot a modulról a neten. A MOSFET-et nem ismertem fel a modul fényképén, ezért gyanítom, hogy ez nem teljesen ugyanaz, ami az én modulom kapcsolási rajza. Az látszik azonban a fényképekről, hogy az SCK és SDA kivezetéseket közvetlenül a BH1750 chip-re kötötték. Vagyis ezek a chip kivezetések elviselik az 5V feszültséget, amit az Arduino-ról kapnak.
Modul Leírása
Típus: GY – 302
Méret: 13,9 mm X 18,5 mm
Az eredeti BH1750FVI ROHM chip-et tartalmazza
Tápfeszültség: 3-5 v
Még néhány egyszerű információ a chip-ről.
Kétféle üzemmód állítható be.
Egyszeri mérés (az érzékelő egy mintát vesz a mérési adatokhoz, és kikapcsolt üzemmódba kerül)
– Alacsony felbontású mód – (4 lux pontosság, 16 ms mérési idő)
– Magas felbontású mód – (1 lux pontosság, 120 ms mérési idő)
– Magas felbontású mód – (0,5 lux pontosság, 120 ms mérési idő)
Folyamatos mérés
– Alacsony felbontású mód – (4 lux pontosság, 16 ms mérési idő)
– Magas felbontású mód – (1 lux pontosság, 120 ms mérési idő)
– Magas felbontású mód – (0,5 lux pontosság, 120 ms mérési idő)
A chip alacsony fogyasztású módba kapcsolható és feléleszthető egy-egy paranccsal.
Ezt a program könyvtárat használtam:
A példa:
#include <Wire.h> #include <math.h> int BH1750address = 0x23; //i2c address byte buff[2]; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { int i; uint16_t val=0; BH1750_Init(BH1750address); delay(200); if(2==BH1750_Read(BH1750address)) { val=((buff[0]<<8)|buff[1])/1.2; Serial.print(val,DEC); Serial.println("lux"); } delay(150); } int BH1750_Read(int address) // { int i=0; Wire.beginTransmission(address); Wire.requestFrom(address, 2); while(Wire.available()) // { buff[i] = Wire.read(); // receive one byte i++; } Wire.endTransmission(); return i; } void BH1750_Init(int address) { Wire.beginTransmission(address); Wire.write(0x10);//1lx reolution 120ms Wire.endTransmission(); }
Ezt a példa programot a neten találtam. A különféle üzemmódok és a chip elaltatása és felélesztése BH1750_Init függvényben látható módon lehetséges. A Wire.write függvény paramétere a szükséges parancs kódja. A példában megadott kód épp folyamatos mérést állít be alacsony felbontású módban. A lehetséges parancs kódok a program készítője szerint:
0x10 – folyamatos mérés magas felbontás (1lux)
0x11 – folyamatos mérés magas felbontás (0,5lux)
0x13 – folyamatos mérés alacsony felbontás (4lux)
0x20 – egyszeri mérés mérés magas felbontás (1lux)
0x21 – egyszeri mérés mérés magas felbontás (0,5lux)
0x23 – egyszeri mérés mérés alacsony felbontás (4lux)
0x00 – power down mód (0,01 mikroA áramfelvétel)
0x01 – power on mód (140mikroA áramfelvétel)
0x07 – reset
Azt hiszem a publikált magyarázatok nem teljesen pontosak. Megnéztem a chip adatlapját, és ott a magas felbontású üzemmódnál egy automatikus módról beszél, ami a megvilágítás függvényében állítja be a chip felbontását. Mivel nem volt szükségem ezekre a részletekre, nem foglalkoztam vele. Ha azonban valakinek pontosabb mérésekre lenne szüksége, érdemes az adatlapot áttanulmányozni, és nem elhinni amit itt lát leírva.
Forrás: <https://www.aliexpress.com/item/32765542002.html?spm=a2g0s.9042311.0.0.399d4c4dNNJi3w>