BH1750. Senzor de lumină ambientală cu magistrală I2C.

BH1750. Senzor de lumină ambientală cu magistrală I2C.

BH1750. Senzor de lumină ambientală cu magistrală I2C.

BH1750 este un senzor de iluminare ambientală cu rezoluție și sensibilitate rezonabil de înaltă. Se comportă în fața luminii vizibile într-un mod comparabil cu cel al ochiului uman și nu este afectat de radiația infraroșie și nici nu depinde de temperatura de culoare a tipului de iluminare, adică funcționează bine cu lumina naturală și cu diferite tipuri de iluminat artificial. Comunică digital cu microcontrolerul, cu Autobuz I2C, deci este rezistent la interferențe dacă este plasat la o anumită distanță de circuitul care îl citește. Timpul său de răspuns este destul de mic, mai mic de 200 ms în cele mai nefavorabile circumstanțe.

Cuprins

    BH1750 Senzor de lumină ambientală

    Din punct de vedere electronic, implementarea sa este foarte simplă. Pur și simplu conectați alimentarea (între 2,4 V și 3,6 V) și Autobuz I2C. Opțional, adresa magistralei poate fi schimbată pentru a conecta două dispozitive (cu ADDR la un nivel scăzut este 0B0100011 sau 0x23 și cu ADDR la un nivel înalt este 0B1011100 sau 0x5C) și linia VDI poate fi utilizată pentru funcția de resetare cu microcontroler.

    Pentru a conecta BH1750 la Arduino, pe lângă faptul că este alimentat de la ieșirea de 3,3 V, este cel mai corect să folosiți un convertor de nivel în plus față de rezistențe de tragere pentru Autobuz I2C. Deși componenta va suporta o conexiune directă la autobuz Autobuz I2C Nu este recomandabil să dimensionați un circuit fără a lua în considerare conversia nivelului.

    Senzor de iluminare ambientală BH1750. Circuitul de aplicare

    Datorită popularității sale, care se datorează faptului că este foarte ieftină în raport cu precizia sa, există mai multe module, precum binecunoscutul GY-30, care poate fi văzut în fotografia de la început. Pentru a le conecta mai confortabil atunci când se realizează prototipuri cu un microcontroler, de obicei includ convertoare de nivel pentru Autobuz I2C și regulatoare de tensiune pentru a le alimenta cu o tensiune mai mare (până la 5V) în loc de ieșirea de 3,3V a Arduino.

    BH1750 are două moduri de citire, continuu și individual, care corespund la două stări, activ și putere scăzută sau somn. În timp ce dacă se utilizează modul de citire continuă, BH1750 rămâne activ după eșantionare, după efectuarea unei măsurători individuale intră automat în modul de repaus și de putere redusă. Prima citire in modul continuu dureaza maxim 180 ms iar cele ulterioare intre 16 ms si 120 ms in functie de rezolutie.

    Senzorul este capabil să măsoare la intervale (rezoluție) de 4 lux, 1 lux și 0,5 lux. BH1750 recomandă în fișa sa de date să folosească rezoluția de 1 lux, care vă permite să distingeți iluminările sub 10 lux (care corespunde crepusculului) și care este mai imună la zgomot care ar putea afecta măsurarea.

    Rezoluțiile de 1 lux și 4 lux folosesc cei 16 biți de date pentru a reprezenta partea întreagă, astfel încât să se poată obține o măsurare maximă de 65535 lux (zi însorită fără lumină directă). Modul 0,5 lux folosește bitul cel mai puțin semnificativ pentru partea zecimală (măsoară de la 0,5 lux la 0,5 lux) astfel încât cu restul de 15 biți este posibil să se reprezinte o valoare maximă de 32767 lux (exterior fără lumină directă)

    Iluminarea solară teoretică față de capacitatea medie a BH1750
    Iluminarea solară teoretică a locului și a zilei scrierii articolului (ora legală, nu solară) față de capacitatea medie a BH1750 la 1 lux

    În mod normal, fereastra optică în funcție de care se măsoară lumina ambientală corespunde întregului spectru vizibil și se urmărește realizarea unei distribuții a sensibilității în acesta comparabilă cu cea a oamenilor. Dacă fereastra optică este redusă (lumina este măsurată într-un interval de lungimi de undă mai scăzute), sensibilitatea BH1750 poate fi mărită (până la 0,11 lux) cu un mod de anulare a ajustării influenței ferestrei optice prin creșterea citirii timpului. În proporție. Deoarece în acest mod special (supradimensionat) se fac citiri separate, contextul trebuie să permită acest lucru fără a modifica în mod deosebit condițiile de măsurare (de exemplu, senzorul trebuie să rămână foarte stabil, nu trebuie să se deplaseze într-o zonă cu condiții de iluminare diferite)

    Codurile de operare BH1750

    Estado
    5>

    • 0B00000000 (0x00) Putere scăzută sau modul inactiv.

    • 0B00000001 (0x01) Pornit.

    • 0B00000111 (0x07) Resetare. Șterge jurnalele de date BH1750.

    rezoluție
    5>

    • 0B00010011 (0x13) Măsurare continuă la rezoluție de 4 lux (între 16 ms și timpul de citire)

    • 0B00010000 (0x10) Măsurare continuă la rezoluție de 1 lux (timp de citire 120 ms)

    • 0B00010001 (0x11) Măsurare continuă la rezoluție de 0,5 lux (timp de citire 120 ms)

    • 0B00100011 (0x23) O măsurătoare la rezoluție de 4 lux (timp de citire 16 ms)

    • 0B00100000 (0x20) O măsurătoare la rezoluție de 1 lux (timp de citire 120 ms)

    • 0B00100001 (0x21) O măsurătoare la rezoluție de 0,5 lux (timp de citire 120 ms)

    Ajustare pentru modificarea ferestrei optice
    5>

    • 0B011MT [0,1,2,3,4] Bit scăzut al registrului MTREG (Measurement Time Register).

    • 0B01000MT [5,6,7] MTREG registru bit înalt.

    Citiți BH1750 de la Arduino

    Pentru a măsura iluminarea ambientală cu BH1750 de la Arduino se foloseste biblioteca Fire de sârmă care gestionează comunicațiile cu Autobuz I2C. Procesul este cel obișnuit în acest tip de comunicații, mai întâi sunt activate (o dată în program) cu Wire.begin(), comunicarea cu BH1750 începe cu Wire.beginTransmission() si adresa ta I2C (0x5C sau 0x23 în funcție de faptul că ADDR este ridicat sau, respectiv, scăzut), se configurează prin trimiterea codului corespunzător cu Wire.write() iar autobuzul este eliberat cu Wire.endTransmission()

    Dacă se utilizează unul dintre modurile de citire continuă, Wire.beginTransmission() este utilizat pentru a obține datele cu adresa I2C corespunzând accesului la BH1750, vi se solicită doi octeți (rezoluția este de 16 biți) cu Wire.requestFrom() care sunt citite, folosind Wire.read(), și sunt încărcate într-un întreg fără semn, rotind primul octet cu 8 biți. Autobuzul este ulterior eliberat cu Wire.endTransmission(). Rezultatul final se obține prin împărțirea valorii returnate la factorul de precizie (1,2 dacă fereastra optică nu este modificată)

    Dacă se utilizează modul de citire individuală, BH1750 intră în modul de repaus.Pentru a reveni la modul activ, poate fi trimisă o configurație (același mod de citire sau unul nou) sau codul de pornire (0x01). Codul de oprire (1750x0) poate fi folosit pentru a forța BH00 în modul de repaus.

    Este important să respectați timpul de citire al senzorului, care depinde de rezoluție. Dacă așteptarea nu este critică, aceasta poate fi unificată într-o valoare pentru toate cazurile care poate fi puțin mai mare decât maximul așteptat pentru a asigura finalizarea citirii.

    Pentru a face scrierea codului pentru BH1750 mai confortabilă Arduino, cele mai relevante coduri de operare se găsesc în următorul document de antet.

    Următorul exemplu de cod arată cel mai comun mod de citire în senzorul de lumină I2C BH1750. Rezoluția este de 1 lux și modul de citire este continuu. Exemplul arată, folosind consola serială Arduino, fiecare rezultat obţinut din valoarea măsurată.

    După cum am spus mai sus, ambele moduri de rezoluție de 1 lux și 4 lux folosesc cei 16 biți de date pentru a exprima măsurarea ca un număr întreg. Pe de altă parte, în modul 0,5 lux, ultimul bit reprezintă o parte zecimală, adică valoarea care contribuie la măsurarea totală este deplasată cu o putere de doi la dreapta. În modul 1 lux sau 4 lux ultimul bit (LSB) valorează 20, penultimul 21, urmatoarele 22… în modul 0,5 lux ultimul bit (LSB) valorează 2-1, penultimul 20, urmatoarele 21...

    Conform acestei structuri de date, și având în vedere că trebuie efectuate două citiri I2C a unui octet, pentru a obține valoarea de 16 biți trebuie să încărcați cei mai semnificativi biți ai octetului, primii care urmează să fie citiți, și să-i rotiți cu 8 biți spre stânga în modul de rezoluție de 1 lux și în modul de rezoluție de 4 lux și doar 7 biți în cei 0,5 lux. Pentru a unifica modul de citire în modul 0,5 lux, puteți încărca octetul cel mai semnificativ într-un număr întreg fără semn, rotiți 8 biți la stânga, încărcați octetul cel mai puțin semnificativ și rotiți întregul întreg fără semn cu 1 bit spre stânga, păstrând. valoarea părții zecimale care indică LSB (bitul cel mai puțin semnificativ) pentru a o aplica mai târziu.

    În mod logic, pentru modurile de 1 lux sau 4 lux este necesar să se utilizeze numere întregi fără semn (unsigned int) Pentru ce Arduino nu rezervati MSB (bitul cel mai semnificativ) pentru semn și să poată opera direct cu valoarea adevărată a măsurării, nu cu un număr negativ. În Arduino Duet nu este necesar, deoarece numerele întregi folosesc 32 de biți, dar același program va funcționa și dacă este folosit unsigned int.

    Următorul cod arată cum ar fi utilizat modul de 0,5 lux

    Descărcați documentele pentru exemplele de măsurare a luminii ambientale cu senzorul BH1750 și Arduino.

    Posteaza un comentariu

    S-ar putea să fi ratat