Senzor osvětlení s BH1750

Čip BH1750 firmy ROHM semiconductor slouží k měření intenzity osvětlení. Má integrovaný 16 bitový převodník a I2C sběrnici, spektrální charakteristika kopíruje citlivost lidského oka. Pro experimenty se nabízí modul s tímto obvodem a dalšími nezbytnými prvky ve dvou provedeních. První provedení se stabilizátorem 3V a zdvihacími (pull-up) rezistory připojenými na 3V, druhé provedení se stabilizátorem 3V a převodníky úrovní na I2C sběrnici. První modul může pracovat v 3V systému bez omezení a většinou bude pracovat i v 5V systému, pokud zde nebude jiný I2C slave s pull-up rezistory připojenými na 5V, tedy například pokud to bude jediný slave na 5V I2C sběrnici. Druhý modul může pracovat na 5V i 3V I2C sběrnici bez omezení.

Vstup ADDR slouží k volbě jedné ze dvou I2C adres: $46 (ADDR=L) nebo $B8 (ADDR=H). Na modulu je tento vstup opatřen odporem k zemi, bez dalšího propojení tudíž platí adresa $46.

 

Dvojí provedení senzoru BH1750

Dvojí provedení senzoru BH1750

Příkazy

K volbě režimu měření, volbě rozlišení, korekci délky měření (a tím i citlivosti) slouží následující příkazy. Podrobnější údaje jsou uvedeny v katalogovém listu, odkaz najdete v eshopu.

$00 – Power Down

Uvede čip do klidového režimu s nízkou spotřebou (10 nA typ.).

$01 – Power On

Uvede čip do aktivního režimu.

$07 – Reset

Resetuje čip, vynuluje registr výsledku předchozího měření.

$10 – Trvalé měření s vysokým rozlišením 1

Spustí trvalé měření s rozlišením 1 lx, typický čas měření 120 ms.

$11 – Trvalé měření s vysokým rozlišením 2

Spustí trvalé měření s rozlišením 0.5 lx, typický čas měření 120 ms.

$13 – Trvalé měření s nízkým rozlišením

Spustí trvalé měření s rozlišením 4 lx, typický čas měření 16 ms.

$20 – Jednorázové měření s vysokým rozlišením 1

Spustí jednorázové měření s rozlišením 1 lx, typický čas měření 120 ms. Po měření přejde čip automaticky do klidového režimu.

$21 – Jednorázové měření s vysokým rozlišením 2

Spustí jednorázové měření s rozlišením 0.5 lx, typický čas měření 120 ms. Po měření přejde čip automaticky do klidového režimu.

$23 – Jednorázové měření s nízkým rozlišením

Spustí jednorázové měření s rozlišením 4 lx, typický čas měření 16 ms. Po měření přejde čip automaticky do klidového režimu.

$40 – Nastavení délky měření bit [7:5]

Nastaví korigovanou dobu měření, bity 7-5. Více v katalogovém listu.

$60 – Nastavení délky měření bit [4:0]

Nastaví korigovanou dobu měření, bity 4-0. Více v katalogovém listu.

Jak jsme testovali

Testovací zapojení bylo realizováno pomocí Picaxe-08M2, AXEboardu, nepájivého pole a modulu BH1750 (v provedení bez převodníků úrovní). Modul byl připojen na I2C sběrnici procesoru Picaxe-08M2, SCL na C.1 a SDA na C.2, vstup ADDR zůstal nezapojený. Pro jednoduchost výsledek měření pouze zobrazíme příkazem Debug – hodnotu osvětlení ukazuje proměnná wlux (w4). Za malou zmínku stojí řádek

wlux=wlux ** 54613

Operátor ** poskytuje vyšších šestnáct bitů výsledku násobení dvou šestnáctibitových čísel. Nebo-li odpovídá násobení dvou čísel a následnému dělení 65536. Čip BH1750 totiž poskytuje výsledek přibližně 1.2x větší, nežli odpovídá skutečnosti. Získaný výsledek musíme dělit 1.2, což je totéž, jako násobit 0.8333. A právě 54613/65536 = 0.8333. Pro úplnost dodejme, že další možností je korigovat výsledek změnou doby měření pomocí příkazů $40 a $60. Tyto příkazy mohou posloužit též ke kalibraci senzoru podle referenčního měřidla.

Program lze stáhnout zde bh1750.bas, nutno smazat příponu _.txt a ponechat pouze .bas

BH1750 test

BH1750 testovací zapojení

'
' BH1750 demo
'

#picaxe 08m2

'
' Pins
'
symbol scl=c.1
symbol sda=c.2

'
' constants
'
symbol BH1750ADDR = $46            ' $b8 when ADDR = H
symbol BH1750CMDPWRDN = $00
symbol BH1750CMDPWRON = $01
symbol BH1750CMDRESET = $07
symbol BH1750CMDCONTHR = $10
symbol BH1750CMDCONTHR2 = $11
symbol BH1750CMDCONTLR = $13
symbol BH1750CMDONCEHR = $20
symbol BH1750CMDONCEHR2 = $21
symbol BH1750CMDONCELR = $23
symbol BH1750CMDCHMTH = $40
symbol BH1750CMDCHMTL = $60

'
' variables
'
symbol wlux=w4
symbol bluxhi=b9
symbol bluxlo=b8


Init:
    hi2csetup i2cmaster, BH1750ADDR, i2cfast, i2cbyte

Main:
do
    ' One time read high resolution
    hi2cout (BH1750CMDONCEHR)
    pause 25
    hi2cin (bluxhi, bluxlo)
    ' multiply wlux * 0.8333 (=1/1.2)
    wlux=wlux ** 54613
    debug
    pause 475
loop