BH1750. Környezeti fényérzékelő I2C busszal.

BH1750. Környezeti fényérzékelő I2C busszal.

BH1750. Környezeti fényérzékelő I2C busszal.

A BH1750 egy meglehetősen nagy felbontású és érzékeny környezeti megvilágítás-érzékelő. Látható fénnyel szemben az emberi szeméhez hasonló módon viselkedik, és nem befolyásolja az infravörös sugárzás, és nem függ a világítás típusának színhőmérsékletétől sem, vagyis jól működik természetes fénnyel és különböző típusú mesterséges világítás. Digitálisan kommunikál a mikrokontrollerrel, a I2C busz, tehát ellenáll az interferenciának, ha bizonyos távolságra van elhelyezve az azt olvasó áramkörtől. Válaszideje meglehetősen alacsony, a legkedvezőtlenebb körülmények között kevesebb, mint 200 ms.

Tartalomjegyzék

    BH1750 Környezeti fényérzékelő

    Elektronikus szempontból a megvalósítása nagyon egyszerű. Egyszerűen csatlakoztassa a tápfeszültséget (2,4 V és 3,6 V között) és a I2C busz. Opcionálisan a buszcím megváltoztatható két eszköz csatlakoztatására (alacsony ADDR esetén 0B0100011 vagy 0x23, magas szintű ADDR esetén pedig 0B1011100 vagy 0x5C), és a VDI vonal használható a reset funkcióhoz a mikrokontroller.

    A BH1750 csatlakoztatásához Arduino, amellett, hogy a 3,3 V-os kimenet táplálja, a leghelyesebb a szintátalakító használata mellett a felhúzó ellenállások a I2C busz. Bár a komponens támogatni fogja a buszhoz való közvetlen csatlakozást I2C busz Nem tanácsos az áramkör méretét a szint átalakítása nélkül méretezni.

    BH1750 környezeti megvilágítás érzékelő. Alkalmazási áramkör

    Népszerűsége miatt, ami a pontosságához képest rendkívül olcsónak köszönhető, több modul is létezik, mint például a jól ismert GY-30, ami az elején látható a fényképen. Ahhoz, hogy mikrokontrollerrel való prototípuskészítéskor kényelmesebben csatlakoztassák őket, általában szintátalakítókat tartalmaznak a I2C busz és feszültségszabályozókkal, hogy a 5 V-os kimenet helyett magasabb feszültséggel (legfeljebb 3,3 V-tal) táplálják őket. Arduino.

    A BH1750 két olvasási móddal rendelkezik, folyamatos és egyéni, amelyek két állapotnak felelnek meg, az aktív és az alacsony fogyasztású vagy alvó állapotnak. Míg folyamatos olvasási mód esetén a BH1750 a mintavétel után is aktív marad, addig egyedi mérés elvégzése után automatikusan alvó és alacsony fogyasztású üzemmódba lép. Az első leolvasás folyamatos üzemmódban maximum 180 ms-ig tart, a továbbiak pedig 16 ms és 120 ms között a felbontástól függően.

    Az érzékelő 4 lux, 1 lux és 0,5 lux időközönként (felbontás) képes mérni. A BH1750 adatlapján az 1 lux felbontás használatát javasolja, ami lehetővé teszi a 10 lux alatti megvilágítás megkülönböztetését (ami szürkületnek felel meg), és immunisabb a mérést befolyásoló zajokra.

    Az 1 lux és 4 lux felbontás a 16 bites adatot használja az egész rész reprezentálására, így 65535 lux maximális mérés érhető el (napsütéses nappal közvetlen fény nélkül). A 0,5 lux mód a legkevésbé szignifikáns bitet használja a decimális részhez (0,5 lux és 0,5 lux közötti mérték), így a fennmaradó 15 bittel 32767 lux maximális értéket lehet megjeleníteni (külsőben közvetlen fény nélkül)

    Elméleti szoláris megvilágítás a BH1750 átlagos kapacitásával szemben
    A cikk írási helyének és napjának elméleti szoláris megvilágítása (törvényes idő, nem szoláris) a BH1750 átlagos kapacitásával szemben 1 luxon

    Általában az optikai ablak, amely alapján a környezeti fényt mérik, megfelel a teljes látható spektrumnak, és a cél az, hogy az emberéhez hasonló érzékenységi eloszlást érjünk el benne. Ha az optikai ablakot csökkentjük (a fényt alacsonyabb hullámhossz-tartományban mérjük), a BH1750 érzékenysége növelhető (akár 0,11 lux-ig) az optikai ablak hatásának beállításának törlésével az idő leolvasásának növelésével. arányosan. Mivel ebben a speciális (túlméretezett) módban külön leolvasás történik, a környezetnek lehetővé kell tennie ezt a mérési feltételek különösebb megváltoztatása nélkül (például az érzékelőnek nagyon stabilnak kell maradnia, nem szabad elmozdulnia eltérő megvilágítású területre).

    BH1750 működési kódok

    Estado
    5>

    • 0B00000000 (0x00) Alacsony fogyasztású vagy üresjárati üzemmód.

    • 0B00000001 (0x01) Bekapcsolva.

    • 0B00000111 (0x07) Visszaállítás. Törli a BH1750 adatnaplóit.

    felbontás
    5>

    • 0B00010011 (0x13) Folyamatos mérés 4 lux felbontással (16 ms és olvasási idő között)

    • 0B00010000 (0x10) Folyamatos mérés 1 lux felbontással (120 ms olvasási idő)

    • 0B00010001 (0x11) Folyamatos mérés 0,5 lux felbontással (120 ms olvasási idő)

    • 0B00100011 (0x23) Mérés 4 lux felbontással (16 ms olvasási idő)

    • 0B00100000 (0x20) Mérés 1 lux felbontással (120 ms olvasási idő)

    • 0B00100001 (0x21) Mérés 0,5 lux felbontással (120 ms olvasási idő)

    Beállítás az optikai ablak változásához
    5>

    • 0B011MT [0,1,2,3,4] Az MTREG (Measurement Time REGister) regiszter alacsony bitje.

    • 0B01000MT [5,6,7] MTREG regiszter magas bit.

    Olvassa el a BH1750-et az Arduino-tól

    Környezeti megvilágítás mérésére a BH1750 készülékkel Arduino a könyvtárat használják Huzal amely kezeli a kommunikációt a I2C busz. A folyamat a szokásos az ilyen típusú kommunikációban, először aktiválják (a programban egyszer) -val Wire.begin(), a BH1750-el való kommunikáció azzal kezdődik Wire.beginTransmission() és a címed I2C (0x5C vagy 0x23 attól függően, hogy az ADDR magas vagy alacsony), a megfelelő kód elküldésével konfigurálható Wire.write() és a buszt kiengedik vele Wire.endTransmission()

    Ha a folyamatos olvasási módok egyikét használjuk, a Wire.beginTransmission() segítségével kapja meg az adatokat a címmel I2C a BH1750 eléréséhez a rendszer két bájt megadását kéri (a felbontás 16 bit) Wire.requestFrom() amelyeket olvasnak, használnak Wire.read(), és egy előjel nélküli egész számba töltődnek be, az első bájtot 8 bittel elforgatva. A buszt ezt követően kiadják Wire.endTransmission(). A végeredményt úgy kapjuk meg, hogy a visszaadott értéket elosztjuk a pontossági tényezővel (1,2, ha az optikai ablak nem változik)

    Egyedi leolvasási mód használata esetén a BH1750 alvó üzemmódba lép, az aktív módba való visszatéréshez konfigurációt (ugyanazt az olvasási módot vagy újat) vagy a bekapcsolási kódot (0x01) lehet küldeni. A leállítási kóddal (1750x0) a BH00 alvó módba kényszeríthető.

    Fontos betartani az érzékelő leolvasási idejét, amely a felbontástól függ. Ha a várakozás nem kritikus, akkor minden esetben egyesíthető olyan értékké, amely valamivel nagyobb lehet a várt maximumnál, így biztosítva az olvasás befejezését.

    Hogy kényelmesebb legyen a kódírás a BH1750-hez Arduino, a legfontosabb műveleti kódok a következő fejléc dokumentumban találhatók.

    A következő példakód a fényérzékelő legáltalánosabb olvasási módját mutatja I2C BH1750. A felbontás 1 lux, az olvasási mód pedig folyamatos. A példa a soros konzol használatával mutatja be Arduino, a mért értékből kapott minden eredmény.

    Ahogy fentebb mondtam, mind az 1 lux, mind a 4 lux felbontású mód a 16 bites adatot használja a mérés egész számkénti kifejezésére. Ezzel szemben 0,5 lux módban az utolsó bit egy decimális részt képvisel, vagyis a teljes méréshez hozzájáruló érték kettővel jobbra tolódik el. 1 lux vagy 4 lux módban az utolsó bit (LSB) 2-t ér0, az utolsó előtti 21, a következő 22…0,5 lux módban az utolsó bit (LSB) 2-t ér-1, az utolsó előtti 20, a következő 21...

    Ennek az adatszerkezetnek megfelelően, és figyelembe véve, hogy két leolvasást kell végezni I2C Egy bájtból a 16 bites érték eléréséhez be kell tölteni a bájt legjelentősebb bitjeit, az elsőket, amelyeket be kell olvasni, és 8 bittel balra kell forgatni 1 lux felbontású és 4 lux felbontású módban és csak 7 bit a 0,5 luxban. A 0,5 lux módban történő olvasás egységesítéséhez betöltheti a legjelentősebb bájtot egy előjel nélküli egész számba, elforgathatja 8 bittel balra, betöltheti a legkisebb jelentőségű bájtot és elforgathatja a teljes előjel nélküli egészet 1 bittel balra. jobbra, megőrizve a tizedes rész értéke, amely a LSB (legkisebb jelentőségű bit) hogy később alkalmazzuk.

    Logikus, hogy 1 lux vagy 4 lux módokhoz előjel nélküli egész számokat kell használni (unsigned int) miért Arduino ne foglalja le a MSB (legjelentősebb bit) előjelre, és közvetlenül a mérés valódi értékével tudjon működni, ne negatív számmal. Ban ben Arduino Duett nem szükséges, mivel az egész számok 32 bitet használnak, de ugyanaz a program is működik, ha használják is unsigned int.

    A következő kód a 0,5 lux mód használatának módját mutatja

    Töltse le a dokumentumokat a környezeti fény mérésére a BH1750 érzékelővel és az Arduino-val.

    Hozzászólás Comment

    Lehet, hogy lemaradtál