BH1750 GY-302 Sensore di luce

Il sensore BH1750 presente sul breakout  GY-302 è in grado di trasformare l’intensità della luce, compresa in un range da 1 a 65.535 lux, in un segnale digitale disponibile tramite interfaccia I2C.
Per informazioni relative ad altri sensori di luce vedere l’articolo Panoramica dei moduli sensori di luce

Misurazione dell’illuminamento

Il sensore presentato in questo articolo, fornisce il valore in lux della luce che lo colpisce. Il lux (simbolo lx) è l’unità di misura per l’illuminamento.
Un lux è pari a un lumen su metro quadrato. Potremmo quindi definire il lux come il flusso luminoso per unità di superficie.
È un’unità di misura relativa alla luce visibile,  dipende dalle caratteristiche dell’occhio umano, attraverso la curva di sensibilità dell’occhio alla radiazione luminosa.
Alcuni dati di illuminamento per dare un’idea di quanto vale un lux:

  • la luce riflessa della Luna piena è pari a circa 1 lx;
  • la luce del Sole mediamente varia tra i 32 000 lx  e i 100 000 lx ;
  • sotto i riflettori degli studi televisivi si hanno circa 1 000 lx ;
  • in un campo di calcio (illuminazione notturna per riprese tv) tra i 500 lx e i 1200 lx;
  • in un ufficio luminoso si hanno circa 400 lx;
  • la luce di una stella luminosa è soltanto 0,00005 lx .

Descrizione del sensore BH1750FVI

[Traduzione della pagina relativa alla libreria  Arduino del sensore fatta da Cristopher Laws ]
Il sensore di luce ambientale BH1750 montato sul modulo GY-302 ha sei diverse modalità di misurazione che sono divise in due gruppi: misurazioni continue e una tantum.

In modalità continua il sensore misura continuamente il valore di luminosità. In modalità singola, il sensore effettua una sola misurazione e poi passa alla modalità Spegnimento.

Impostazione precisione della misura

Ogni modalità ha tre diverse precisioni, vediamole:

  • Bassa risoluzione – (4 lx di precisione, 16 ms di tempo di misurazione)
  • Alta risoluzione – (precisione 1 lx, tempo di misurazione 120 ms)
  • Alta risoluzione 2 – (precisione 0,5 lx, tempo di misurazione 120 ms)

Per impostazione predefinita, questa libreria utilizza la modalità ad alta risoluzione continua, ma è possibile cambiarla in una modalità diversa passando l’argomento mode a BH1750.begin().

Quando viene utilizzata la modalità One-Time, il sensore entrerà in modalità Spegnimento una volta completata la misurazione e dopo averla letta. Quando il sensore viene riacceso, torna alla modalità predefinita, il che significa che deve essere riconfigurato in modalità One-Time.
La libreria utilizzata è stata implementata per riconfigurare automaticamente il sensore al successivo tentativo di misurazione.

Impostazione risoluzione

Di solito si otterrà un valore intero che rappresenta l’equivalente in lux.

  • Bassa risoluzione – (intervallo generico: 0,0 fino a 54612,5 lux)
  • Alta risoluzione – (intervallo generico: 0,0 fino a 54612,5 lux)
  • Alta risoluzione 2 – (intervallo generico: 0,0 fino a 27306,25 lux)

Il sensore stesso restituisce un intero senza segno a 16 bit. Pertanto il valore massimo è generalmente limitato. La conversione standard tra i cosiddetti “conteggi” in lux è 1/1.2, il che significa che si otterrà un valore inferiore. Poiché si usa float, se si verifica un errore otterrai un valore negativo.

-1 nessun dato valido è stato trasmesso dal sensore
-2 il dispositivo non è configurato.  Altrimenti i conteggi misurati vengono convertiti in lux e restituiti. Se non vengono modificati parametri avanzati, il valore lux massimo è 54612,5 lx.

Poiché il sensore conta l’impatto della luce in un intervallo di tempo specifico, è possibile modificare questo intervallo di tempo. Ciò è necessario se si utilizza una finestra di sovrapposizione o si compensa l’influenza ambientale come l’oscurità. Questo lasso di tempo è definito da un registro chiamato MTreg.
Pertanto è possibile scegliere un valore compreso tra 32 e 254. Il valore predefinito è 69; tenere presente che il tempo di misurazione viene modificato di conseguenza.

Circuito elettrico del modulo GY-302

Per facilitare l’utilizzo del sensore di luce BH1750FVI è disponibile uno specifico modulo  Breakout denominato GY-032.

Scarica schema in pdf

Nello schema, oltre al sensore BH170 (datasheet) U1, troviamo il regolatore tipo CMOS a basso dropout tipo LM6206N662K (datasheet) U2 con relativi condensatori che fornisce l’alimentazione a 3.3V, quando il modulo viene alimentato dal pin VCC magari con la tensione 5V fornita da Arduino.
Il regolatore può fornire una corrente di uscita di 250 mA e consentire una tensione di ingresso fino a 6,5 V.
Troviamo due resistenze (R2 e R3 da 4,7 KΩ ) di  pull-up sulle linee SCL e SDA bus I2C.
Il sensore può essere impostato per due indirizzi a seconda di come è collegato il pin 2 (ADDR):

  • Se ADDR = LOW, l’indirizzo sarà 0x23
  • Se ADDR = HIGH, l’indirizzo sarà 0x5C

Nel nostro caso essendo il pin connesso tramite la resistenza R4 da 4,7 KΩ a GND (LOW) l’indirizzo sarà 0x23.

Schema e PCB su https://oshwlab.com/

Caratteristiche del sensore

Ampio range (Lux): da 1 a 65.535
Alimentazione: da 3 VDC a 5 VDC
Temperatura di funzionamento: da -40°C a +85°C
Dimensioni (mm): 18,5×13,9×2,5 (connettori esclusi)

PINOUT del modulo sensore BH1750 GY-302

  • VCC: ingresso alimentazione  2,7-5,5 VDC
  • GND: massa alimentazione
  • SCL: pin clock I2C
  • SDA: pin DATA I2C
  • ADDR: il pin viene utilizzato solo quando più BH1750 sono collegati a un Arduino.

Dove trovare il sensore?

Il Breakout GY-302 con sensore BH1750  può essere acquistato presso il sito FUTURA ELETTRONICA, il codice prodotto è 1606-GY302BH1750. Il suo costo, al momento della pubblicazione di questo articolo è di 4,20 €.

Contento del blister

Libreria di gestione del sensore

Per facilitare l’uso del sensore luce BH1750 è disponibile un’apposita libreria; questa funziona in unione alla libreria Wire.h che è già presente come libreria standard dell’IDE di Arduino che permette l’utilizzo del protocollo I2C
Per il caricamento occorre aprire sotto il menù Sketch, #include libreria, “Gestione Librerie..”

Nel campo ricerca si inserirà “BH1750”,  trovata la libreria  realizzata da Cristopher Laws , premendo su “More info..” apparirà il tasto “Installa” cliccare il tasto, la libreria verrà installata

Per altre informazioni vedere anche l’articolo Arduino – Tutorial, come installare una libreria

Collegamento di base del sensore

Vediamo prima di tutto il collegamento di base del sensore di luce BH1750 GY-302, in questo caso leggeremo i valori forniti dal sensore tramite il monitor seriale dell’IDE.

Materiale occorrente

Il materiale per realizzare il nostro Luxmetro è formato da:

Scheda Arduino UNO

Sensore BH1750 GY-302

Cavi colorati M/F

Ourpcb

Schema di collegamento

Sotto è riportato lo schema dei collegamenti tra Arduino e il modulo sensore

Test preliminare

Per verificare che il collegamento I2C è corretto e a quale indirizzo risponde il sensore, possiamo utilizzare lo Sketch i2c_scan che troveremo nella sezione “File” –> “Esempi” –> “Wire”–> “i2c_scanner” dell’IDE di Arduino.

Carichiamolo sulla nostra scheda ed apriamo il monitor seriale con il tasto

Il risultato sarà simile al seguente, che indica che il collegamento I2C è corretto e il suo indirizzo è 0x23.
Se ci fossero dei problemi di collegamento, provate a verificare se il modulo è correttamente collegato. Provare ad invertire i cavi SDA e SCL.

Programma/codice sorgente

Di seguito è riportato invece, il codice sorgente di base per la lettura del sensore.  I valori potranno essere letti sempre tramite il monitor seriale dell’IDE. In questo caso dovreste visualizzare una schermata simile a questa.

Per il suo funzionamento sono necessarie le due librerie Wire e BH170

Lettura sensore e dati mostrati su display OLED

Vediamo ora di completare il nostro Luxmetro inserendo un display OLED che ci permetterà di leggere il valore direttamente sul display.
Il display scelto è di tipo OLED da  0.96 ” con una risoluzione di 128×64 pixel, sfrutta il driver SSD1306 e si interfaccia tramite la connessioni I2C.
Il display ha la particolarità di avere una parte superiore con led gialli e quella inferiore di colore blu.
Per altre informazioni sul display vedere l’articolo Display bicolore OLED 0.96″ 128×64 – SSD1306

OLED 0.96 128x64 pixel

Materiale occorrente

Il materiale per realizzare il nostro Luxmetro è formato da:

Scheda Arduino UNO

Sensore BH1750 GY-302

Display OLED da  0.96 ”

Cavi colorati M/F

Schema di collegamento

Sotto è riportato lo schema dei collegamenti tra Arduino e il modulo sensore

Librerie necessarie

Per utilizzare il display OLED è necessario installare l’apposita libreria. Può essere cercata tra le librerie installabili nell’IDE, basterà inserire nel campo di ricerca “Adafruit_SSD1306“.
Sarà anche mostrata una finestra che segnala che la libreria ha una dipendenza con la libreria grafica “Adafruit GFX Library“.  Procedete premendo su “Install all”.
Per altre informazioni su come installare le librerie vedete l’articolo Arduino – Tutorial, come installare una libreria

Test preliminare

Per verificare che il collegamento I2C è corretto e a quale indirizzo rispondono sia il sensore che il display utilizzare lo Sketch i2c_scan che troveremo nella sezione “File” –> “Esempi” –> “Wire”–> “i2c_scanner” dell’IDE di Arduino. In questo caso il risultato dovrebbe essere quello sotto riportato, come vediamo l’indirizzo 0x23 è quello del sensore BH1750 GY-302, mentre 0x2C è quello del display OLED.

Programma/codice sorgente

Di seguito è riportato invece il codice sorgente di base per la lettura del sensore.  In questo caso i valori letti di illuminamento saranno mostrati sul display con una tempo di campionamento di 1 secondo.

Video del test del sensore

Altri sensori di luce

Sul sito nono disponibili altri tipi di sensori di luce, alcuni esempi

Sensore di luce GY-49 MAX44009

Sensore UV ML8511 GYML8511