Č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.
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 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