GY-302 BH1750 fényérzékelő modul

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ásMegvilágított felület:
10−4 luxHoldtalan, borús éjszakai égbolt
0,002 luxHoldtalan, tiszta éjszakai égbolt (airglow)
0,27–1,0 luxTelihold egy tiszta éjszakán
3 luxA színérzékelés határa
3,4 luxszürkület kezdete tiszta égbolt esetén
50 luxLakás nappalijának megvilágítása
80 luxIrodaépület folyosójának/mosdójának világítása
100 luxNagyon sötét, beborult nappali égbolt
320–500 luxIrodai megvilágítás
400 luxNapfelkelte, vagy napnyugta tiszta időben
1000 luxBorult égbolt
10 000–25 000 luxTeljes napsütés (nem közvetlen)
32 000–130 000 luxKö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.

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>

Mennyire volt hasznos amit olvastál?

Kattints egy csillagra az értékeléshez!

Sajnálom, hogy amit olvastál nem volt hasznos számodra!

Szeretném ha elégedett lennél!

Írd le kérlek, hogy mi nem tetszett!?