BH1750. Senzor okolitého svetla so zbernicou I2C.

BH1750. Senzor okolitého svetla so zbernicou I2C.

BH1750. Senzor okolitého svetla so zbernicou I2C.

BH1750 je snímač okolitého osvetlenia s primerane vysokým rozlíšením a citlivosťou. Vo viditeľnom svetle sa správa porovnateľne so svetlom ľudského oka a nie je ovplyvnené infračerveným žiarením ani nezávisí od farebnej teploty typu osvetlenia, to znamená, že funguje dobre s prirodzeným svetlom a rôzne druhy umelého osvetlenia. Digitálne komunikuje s mikrokontrolérom, s I2C autobus, takže je odolný voči rušeniu, ak je umiestnený v určitej vzdialenosti od obvodu, ktorý ho číta. Jeho doba odozvy je pomerne nízka, menej ako 200 ms za najnepriaznivejších okolností.

Obsah

    BH1750 Senzor okolitého svetla

    Z elektronického hľadiska je jeho implementácia veľmi jednoduchá. Jednoducho pripojte napájanie (medzi 2,4 V a 3,6 V) a I2C autobus. Voliteľne je možné zmeniť adresu zbernice na pripojenie dvoch zariadení (s ADDR na nízkej úrovni je to 0B0100011 alebo 0x23 a s ADDR na vysokej úrovni je 0B1011100 alebo 0x5C) a linku VDI je možné použiť na funkciu resetovania pomocou mikrokontrolér.

    Na pripojenie BH1750 k Arduino, okrem napájania z výstupu 3,3 V je najsprávnejšie použiť okrem pull-up odpory pre I2C autobus. Hoci komponent bude podporovať priame pripojenie k zbernici I2C autobus Nie je vhodné dimenzovať obvod bez toho, aby ste uvažovali o konverzii úrovne.

    Senzor okolitého osvetlenia BH1750. Aplikačný obvod

    Kvôli svojej obľúbenosti, ktorá je daná veľmi lacnosťou v pomere k presnosti, existuje niekoľko modulov, ako napríklad známy GY-30, ktorý je vidieť na fotografii na začiatku. Na ich pohodlnejšie pripojenie pri prototypovaní s mikrokontrolérom zvyčajne obsahujú prevodníky úrovní pre I2C autobus a regulátory napätia na ich napájanie vyšším napätím (až 5V) namiesto výstupu 3,3V Arduino.

    BH1750 má dva režimy čítania, nepretržitý a individuálny, ktoré zodpovedajú dvom stavom, aktívny a nízky výkon alebo spánok. Kým pri použití režimu kontinuálneho čítania zostáva BH1750 po vzorkovaní aktívny, po vykonaní jednotlivého merania sa automaticky prepne do režimu spánku a nízkej spotreby. Prvé čítanie v kontinuálnom režime trvá maximálne 180 ms a ďalšie od 16 ms do 120 ms v závislosti od rozlíšenia.

    Senzor je schopný merať v intervaloch (rozlíšenie) 4 lux, 1 lux a 0,5 lux. BH1750 vo svojom údajovom liste odporúča použiť rozlíšenie 1 lux, čo umožňuje rozlíšiť osvetlenie pod 10 luxov (čo zodpovedá súmraku) a je odolnejšie voči šumu, ktorý by mohol ovplyvniť meranie.

    Rozlíšenia 1 lux a 4 luxy používajú 16 bitov údajov na vyjadrenie celej časti, takže je možné dosiahnuť maximálne meranie 65535 luxov (slnečný deň bez priameho svetla). Režim 0,5 lux používa najmenej významný bit pre desatinnú časť (meria od 0,5 luxu do 0,5 luxu), takže so zvyšnými 15 bitmi je možné reprezentovať maximálnu hodnotu 32767 luxov (exteriér bez priameho svetla)

    Teoretické slnečné osvetlenie verzus priemerná kapacita BH1750
    Teoretické slnečné osvetlenie miesta a dňa písania článku (zákonný čas, nie solárne) verzus priemerná kapacita BH1750 pri 1 luxe

    Bežne optické okno, podľa ktorého sa meria okolité svetlo, zodpovedá celému viditeľnému spektru a cieľom je dosiahnuť v ňom rozloženie citlivosti porovnateľné s ľudským. Ak je optické okno znížené (svetlo sa meria v nižšom rozsahu vlnových dĺžok), citlivosť BH1750 sa môže zvýšiť (až na 0,11 lux) s režimom zrušenia úpravy vplyvu optického okna zvýšením odčítaného času V pomere. Keďže v tomto špeciálnom (nadrozmernom) režime sa vykonávajú oddelené odčítania, kontext to musí umožňovať bez toho, aby sa zvlášť menili podmienky merania (napríklad senzor musí zostať veľmi stabilný, nesmie sa pohybovať do oblasti s odlišnými svetelnými podmienkami)

    Prevádzkové kódy BH1750

    Estado
    5>

    • 0B00000000 (0x00) Režim nízkej spotreby alebo nečinnosti.

    • 0B00000001 (0x01) Zapnuté.

    • 0B00000111 (0x07) Resetovať. Vymaže denníky údajov BH1750.

    Riešenie
    5>

    • 0B00010011 (0x13) Nepretržité meranie pri rozlíšení 4 lux (medzi 16 ms a časom čítania)

    • 0B00010000 (0x10) Nepretržité meranie s rozlíšením 1 lux (čas čítania 120 ms)

    • 0B00010001 (0x11) Nepretržité meranie s rozlíšením 0,5 lux (čas čítania 120 ms)

    • 0B00100011 (0x23) Meranie pri rozlíšení 4 lux (čas čítania 16 ms)

    • 0B00100000 (0x20) Meranie pri rozlíšení 1 lux (čas čítania 120 ms)

    • 0B00100001 (0x21) Meranie pri rozlíšení 0,5 lux (čas čítania 120 ms)

    Úprava pre zmenu optického okna
    5>

    • 0B011MT [0,1,2,3,4] Nízky bit registra MTREG (Reasurement Time REGister).

    • 0B01000MT [5,6,7] Vysoký bit registra MTREG.

    Prečítajte si BH1750 od Arduina

    Na meranie okolitého osvetlenia pomocou BH1750 od Arduino knižnica sa používa Drôt ktorý riadi komunikáciu s I2C autobus. Proces je bežný v tomto type komunikácie, najprv sa aktivujú (raz v programe). Wire.begin(), komunikácia s BH1750 začína s Wire.beginTransmission() a vašu adresu I2C (0x5C alebo 0x23 v závislosti od toho, či je ADDR vysoká alebo nízka), konfiguruje sa odoslaním príslušného kódu pomocou Wire.write() a autobus sa uvoľní s Wire.endTransmission()

    Ak sa použije jeden z režimov nepretržitého čítania, použije sa Wire.beginTransmission() na získanie údajov s adresou I2C zodpovedajúce prístupu k BH1750, budete vyzvaní na zadanie dvoch bajtov (rozlíšenie je 16 bitov) pomocou Wire.requestFrom() ktoré sa čítajú, používajú Wire.read()a sú načítané do celého čísla bez znamienka, pričom prvý bajt sa otáča o 8 bitov. Autobus sa následne uvoľní s Wire.endTransmission(). Konečný výsledok sa získa vydelením vrátenej hodnoty faktorom presnosti (1,2, ak sa optické okno nezmení)

    Ak sa použije režim individuálnych odčítaní, BH1750 prejde do režimu spánku Pre návrat do aktívneho režimu je možné odoslať konfiguráciu (rovnaký režim čítania alebo nový) alebo kód zapnutia (0x01). Kód vypnutia (1750x0) je možné použiť na prepnutie BH00 do režimu spánku.

    Dôležité je rešpektovať čas čítania snímača, ktorý závisí od rozlíšenia. Ak čakanie nie je kritické, možno ho pre všetky prípady zjednotiť na hodnotu, ktorá môže byť o niečo väčšia ako očakávané maximum, aby sa zabezpečilo dokončenie čítania.

    Aby bolo písanie kódu pre BH1750 pohodlnejšie Arduino, najrelevantnejšie prevádzkové kódy nájdete v nasledujúcom hlavičkovom dokumente.

    Nasledujúci príklad kódu zobrazuje najbežnejší režim čítania svetelného senzora I2C BH1750. Rozlíšenie je 1 lux a režim čítania je nepretržitý. Príklad ukazuje použitie sériovej konzoly Arduino, každý výsledok získaný z nameranej hodnoty.

    Ako som povedal vyššie, režimy rozlíšenia 1 lux aj 4 luxy používajú 16 bitov údajov na vyjadrenie merania ako celé číslo. Na druhej strane v režime 0,5 lux posledný bit predstavuje desatinnú časť, to znamená, že hodnota, ktorá prispieva k celkovému meraniu, je posunutá o dve mocnine doprava. V režime 1 lux alebo 4 lux posledný bit (LSB) má hodnotu 20, predposledná 21, ďalšie 22…v režime 0,5 lux posledný bit (LSB) má hodnotu 2-1, predposledná 20, ďalšie 21...

    Podľa tejto štruktúry údajov a vzhľadom na to, že sa musia vykonať dve odčítania I2C bajtu, na získanie 16-bitovej hodnoty musíte načítať najvýznamnejšie bity bajtu, prvé, ktoré sa majú načítať, a otočiť ich o 8 bitov doľava v režime s rozlíšením 1 lux a v režime s rozlíšením 4 lux a iba 7 bitov v 0,5 luxu. Pre zjednotenie spôsobu čítania v režime 0,5 lux môžete načítať najvýznamnejší bajt do celého čísla bez znamienka, otočiť o 8 bitov doľava, načítať najmenej významný bajt a otočiť celé celé číslo bez znamienka o 1 bit doľava. hodnotu desatinnej časti, ktorá označuje LSB (najmenej významný bit) aplikovať neskôr.

    Logicky, pre režimy 1 lux alebo 4 lux je potrebné použiť celé čísla bez znamienka (unsigned int) prečo Arduino nerezervujte si MSB (najdôležitejší bit) pre znamienko a byť schopný pracovať priamo so skutočnou hodnotou merania, nie so záporným číslom. In Arduino splatné nie je to potrebné, pretože celé čísla používajú 32 bitov, ale rovnaký program bude fungovať aj vtedy, ak sa použije unsigned int.

    Nasledujúci kód ukazuje, ako by sa použil režim 0,5 lux

    Stiahnite si dokumenty pre príklady merania okolitého svetla so snímačom BH1750 a Arduino.

    Pridať komentár

    Možno ste zmeškali