- Introduzione al modulo sensore di luce digitale BH1750
- Arduino
- Programmazione di Arduino per interfacciare il sensore di luce BH1750
Quando porti il telefono sotto il sole o in condizioni di luce intensa, regola automaticamente la luminosità in base alle condizioni di illuminazione. La maggior parte dei dispositivi di visualizzazione al giorno d'oggi, che si tratti di una TV o di un telefono cellulare, ha all'interno il sensore di luce ambientale per regolare automaticamente la luminosità. Oggi in questo tutorial, useremo uno di questi sensori BH1750 Light Sensor Module e lo interfacciamo con Arduino e mostreremo il valore Lux su 16x2 LCD.
Introduzione al modulo sensore di luce digitale BH1750
BH1750 è un sensore di luce ambientale digitale o un sensore di intensità della luce, che può essere utilizzato per regolare automaticamente la luminosità del display nei cellulari, nei display LCD o per accendere / spegnere i fari delle auto in base alle condizioni di illuminazione esterna.
Il sensore utilizza il protocollo di comunicazione seriale I 2 C che ne semplifica l'utilizzo con microcontrollori. Per la comunicazione I2C dispone di pin SDI e SDA. La piedinatura del sensore di luce ambientale BH1750 è mostrata di seguito:
L'uscita di questo sensore è in LUX (lx), quindi non richiede ulteriori calcoli. Lux è l'unità per misurare l'intensità della luce. Misura l'intensità in base alla quantità di luce che colpisce una particolare area. Un lux equivale a un lumen per metro quadrato.
Il sensore funziona con tensioni da 2,4 V a 3,6 V (in genere 3,0 V) e consuma corrente di 0,12 mA. Questo sensore ha una vasta gamma e un'alta risoluzione (1-65535lx) e inoltre, anche la variazione di misurazione è piccola (circa +/- 20%). Può funzionare anche in modo indipendente senza alcun componente esterno.
Sebbene un sensore LDR possa essere utilizzato anche per controllare i dispositivi in base alle condizioni di illuminazione, ma non è così preciso. Abbiamo utilizzato il sensore LDR per realizzare molte applicazioni a luce controllata:
- Circuito sensore di luce Arduino che utilizza LDR
- Rilevatore scuro che utilizza LDR e 555 Timer IC
- Circuito LDR semplice per rilevare la luce
- Lampada di miscelazione dei colori Arduino con LED RGB e LDR
Arduino
Di seguito è mostrato lo schema del circuito per collegare il sensore di luce BH1750 con Arduino.
I pin di comunicazione I2C SDA e SCL di BH1750 sono collegati rispettivamente ai pin A4 e A5 di Arduino per la comunicazione I 2 C. Come sappiamo la tensione di funzionamento per il sensore è 3.3V quindi VCC e GND di BH1750 sono collegati a 3.3V e GND di Arduino. Per LCD, i pin dati (D4-D7) sono collegati ai pin digitali D2-D5 di Arduino e i pin RS ed EN sono collegati a D6 e D7 di Arduino. V0 dell'LCD è collegato al pot e un pot 10k viene utilizzato per controllare la luminosità dell'LCD.
Programmazione di Arduino per interfacciare il sensore di luce BH1750
La parte di programmazione per l'utilizzo di questo sensore LUX con Arduino è molto semplice. Sebbene sia disponibile una libreria per questo sensore, possiamo usarla anche senza.
In primo luogo, abbiamo incluso file di intestazione per LCD e protocollo I 2 C.
#includere
Nella funzione di configurazione , abbiamo inizializzato sia l'LCD che il sensore e abbiamo stampato il messaggio di apertura sull'LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Intensity Sensor"); ritardo (2000); }
Qui le funzioni BH1750_Read e BH1750_Init vengono utilizzate per leggere e scrivere rispettivamente i valori Lux. La funzione Wire.beginTransmission () viene utilizzata per iniziare la trasmissione e la funzione Wire.requestFrom (indirizzo, 2) viene utilizzata per leggere i registri dove 2 indica il numero di registri.
Ulteriormente Wire.endTransmission () viene utilizzato per terminare la trasmissione e la funzione Wire.write () viene utilizzata per andare al registro desiderato inserendo l'indirizzo di quel registro in esso.
int BH1750_Read (int address) { int i = 0; Wire.beginTransmission (indirizzo); Wire.requestFrom (indirizzo, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (int address) { Wire.beginTransmission (address); Wire.write (0x10); Wire.endTransmission (); }
Nella funzione loop , stiamo stampando i valori lux in tempo reale su LCD. Prima confronta il valore di ritorno dalla funzione BH1750_Read con 2, quindi inizia a stampare i valori Lux se è uguale a 2. Qui i valori vengono confrontati con 2 perché la funzione BH1750_Read restituisce il valore del conteggio dei registri e stiamo leggendo solo 2 registri. Quindi, quando arriva a 2, il programma inizia a stampare i valori LUX dell'intensità luminosa.
Quindi viene utilizzata una formula per ottenere i valori da entrambi i registri e dividerli per 1.2, che è l'accuratezza della misurazione.
void loop () { int i; valore uint16_t = 0; BH1750_Init (BH1750address); ritardo (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensità in LUX"); lcd.setCursor (6,1); lcd.print (valore); } ritardo (150); }
Infine accendi Arduino e carica il programma su Arduino. Non appena il programma viene caricato, il display LCD inizia a mostrare l'intensità della luce nelle unità LUX. Puoi anche variare i valori cambiando l'intensità della luce intorno al sensore come mostrato nel video qui sotto.