Sensore BH1750: misurare i lux con Arduino e il GY-302

Il sensore BH1750 trasforma l’intensità della luce in un valore digitale e lo rende disponibile sul bus I2C. Il campo di misura va da 1 a 65.535 lux. Sul breakout GY-302 il sensore arriva già pronto per Arduino, ESP32 e altre schede. AdriRobot lo ha provato con un Arduino UNO e lo racconta nel suo blog.

Cosa misura il sensore BH1750

Il lux è l’unità di misura dell’illuminamento: corrisponde a un lumen su metro quadrato. Descrive quindi la luce che arriva su una superficie, valutata come la percepisce l’occhio umano. Per avere un riferimento, la luce riflessa dalla Luna piena vale circa 1 lx, un ufficio luminoso circa 400 lx e la luce del Sole si muove tra 32.000 e 100.000 lx.

Modalità di misura e risoluzione

Il BH1750 lavora in sei modalità, divise in due gruppi: misura continua e misura singola. In modalità continua il sensore rileva la luce senza sosta. In modalità singola esegue una sola misura e poi passa in spegnimento, quindi va riconfigurato prima della lettura successiva. La libreria usata nell’articolo lo fa in automatico.

Ogni modalità offre tre livelli di precisione:

  • bassa risoluzione: 4 lx di precisione e 16 ms di tempo di misura;
  • alta risoluzione: 1 lx e 120 ms;
  • alta risoluzione 2: 0,5 lx e 120 ms.

Per impostazione predefinita la libreria sceglie l’alta risoluzione continua. Nelle modalità a bassa e alta risoluzione il valore massimo è 54.612,5 lx, mentre nell’alta risoluzione 2 si ferma a 27.306,25 lx. In pratica il sensore restituisce un intero a 16 bit, che la libreria converte in lux dividendolo per 1,2. Un risultato di -1 indica che non sono arrivati dati validi, mentre -2 segnala un dispositivo non configurato.

Inoltre si può cambiare l’intervallo di tempo in cui il sensore conta la luce, tramite il registro MTreg. Il valore va da 32 a 254 e quello predefinito è 69.

Il modulo GY-302: alimentazione, pinout e indirizzo

Modulo GY-302 con il sensore BH1750 su circuito blu, accanto alla barretta di pin da saldare
Il breakout GY-302 con il sensore BH1750 e i pin da saldare (foto: AdriRobot)

Sul GY-302 il sensore è affiancato da un regolatore LDO a 3,3 V, con sigla 662K, e dai relativi condensatori. Il modulo accetta quindi i 5 V di Arduino sul pin VCC. Il regolatore fornisce fino a 250 mA e sopporta al massimo 6,5 V in ingresso. Sulle linee SCL e SDA ci sono poi due resistenze di pull-up da 4,7 kΩ. Il breakout è in vendita su FuturaShop come sensore intensità luminosa.

Il connettore ha cinque pin: VCC, GND, SCL, SDA e ADDR. L’ultimo serve a scegliere l’indirizzo I2C e si usa quando più sensori BH1750 condividono lo stesso bus. Con ADDR a livello basso l’indirizzo è 0x23, con ADDR alto diventa 0x5C. Sul modulo provato il pin passa da una resistenza da 4,7 kΩ a massa, perciò il sensore risponde a 0x23.

  • campo di misura: da 1 a 65.535 lux;
  • alimentazione: da 3 a 5 V;
  • temperatura di funzionamento: da -40 a +85 °C;
  • dimensioni: 18,5 × 13,9 × 2,5 mm, connettori esclusi.

Collegamento con Arduino UNO e display OLED

Schema di collegamento tra Arduino UNO e il modulo GY-302 con sensore BH1750 sul bus I2C
Collegamento base tra Arduino UNO e GY-302 (schema: AdriRobot)

Per il primo test bastano una scheda Arduino UNO, il modulo GY-302 e alcuni cavetti maschio-femmina. VCC e GND vanno all’alimentazione, mentre SDA e SCL si collegano ai pin I2C di Arduino. Prima di caricare lo sketch conviene lanciare l’esempio i2c_scanner dell’IDE: se il collegamento è corretto, il monitor seriale segnala un dispositivo all’indirizzo 0x23.

La lettura usa la libreria BH1750 di Christopher Laws, che si installa dal Gestore librerie insieme alla libreria Wire, già inclusa nell’IDE. Lo sketch legge il valore ogni secondo e lo scrive anche sul monitor seriale.

Poi il progetto si completa con un display OLED da 0,96 pollici, 128×64 pixel, driver SSD1306 e interfaccia I2C. Il display risponde all’indirizzo 0x3C, quindi convive con il sensore sullo stesso bus. Servono le librerie Adafruit SSD1306 e Adafruit GFX, e il luxmetro mostra i lux direttamente sullo schermo.

Sensore BH1750 su modulo GY-302 collegato ad Arduino UNO, con un display OLED che mostra 46,7 lx
Il luxmetro con GY-302 e display OLED durante la misura (foto: AdriRobot)

Chi vuole vedere il BH1750 all’opera in un progetto più ampio può leggere la stazione meteo ESP32 con dashboard web live, che lo affianca a un DHT22 e a un BMP280.

Fonte: l’articolo originale di AdriRobot contiene anche lo schema elettrico completo, gli sketch e il video del test.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu