- Introducció al mòdul del sensor de llum digital BH1750
- Arduino
- Programació Arduino per a la interfície del sensor de llum BH1750
Quan porteu el telèfon a la llum del sol o amb molta il·luminació, aquest ajustarà la brillantor automàticament segons les condicions d’il·luminació. La majoria dels dispositius de visualització actuals al dia, ja sigui un televisor o un telèfon mòbil, tenen el sensor de llum ambiental a l'interior per ajustar la brillantor automàticament. Avui, en aquest tutorial, farem servir un mòdul de sensor de llum BH1750 d’ aquest sensor, l’ interfocarem amb Arduino i mostrarem el valor Lux a la pantalla LCD de 16 x 2
Introducció al mòdul del sensor de llum digital BH1750
BH1750 és un sensor de llum ambiental digital o un sensor d'intensitat de llum, que es pot utilitzar per ajustar automàticament la brillantor de la pantalla en mòbils, pantalles LCD o per encendre / apagar els fars dels cotxes en funció de les condicions d'il·luminació exterior.
El sensor utilitza un protocol de comunicació en sèrie I 2 C que facilita l’ús amb microcontroladors. Per a la comunicació I2C té pins SDI i SDA. A continuació es mostra el pinout del sensor de llum ambiental BH1750:

La sortida d’aquest sensor es troba en LUX (lx), de manera que no requereix cap altre càlcul. Lux és la unitat per mesurar la intensitat de la llum. Mesura la intensitat segons la quantitat de llum que impacta en una àrea determinada. Un lux és igual a un lumen per metre quadrat.
El sensor funciona amb tensions de 2,4 V a 3,6 V (normalment 3,0 V) i consumeix un corrent de 0,12 mA. Aquest sensor té una àmplia gamma i alta resolució (1-65535lx) i, a més, la variació de mesura també és petita (aproximadament +/- 20%). També pot funcionar de forma independent sense cap component extern.
Tot i que un sensor LDR també es pot utilitzar per controlar els dispositius en funció de les condicions d’il·luminació, però no és tan precís. Hem utilitzat el sensor LDR per crear moltes aplicacions controlades per la llum:
- Circuit del sensor de llum Arduino mitjançant LDR
- Detector fosc amb LDR i 555 Timer IC
- Circuit LDR simple per detectar la llum
- Làmpada de barreja de colors Arduino amb LED RGB i LDR
Arduino
A continuació es mostra el diagrama del circuit per connectar el sensor de llum BH1750 amb Arduino.

Els pins de comunicació I2C SDA i SCL de BH1750 estan connectats al pin A4 i A5 d'Arduino respectivament per a la comunicació I 2 C. Com sabem, la tensió de funcionament del sensor és de 3,3 v, de manera que VCC i GND de BH1750 estan connectats a 3,3V i GND d’Arduino. Per a LCD, els pins de dades (D4-D7) es connecten als pins digitals D2-D5 d’Arduino i els pins RS i EN estan connectats a D6 i D7 d’Arduino. El V0 de la pantalla LCD està connectat a l'olla i s'utilitza una olla de 10 k per controlar la brillantor de la pantalla LCD.

Programació Arduino per a la interfície del sensor de llum BH1750
La part de programació per utilitzar aquest sensor LUX amb Arduino és molt fàcil. Tot i que hi ha una biblioteca disponible per a aquest sensor, però també podem utilitzar-la sense això.
En primer lloc, hem inclòs fitxers de capçalera per al protocol LCD i I 2 C.
#incloure
A la funció de configuració , hem inicialitzat tant la pantalla LCD com el sensor i hem imprès el missatge inicial a la pantalla LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Sensor d'intensitat"); endarreriment (2000); }
Aquí les funcions BH1750_Read i BH1750_Init s’utilitzen per llegir i escriure els valors de Lux respectivament. La funció Wire.beginTransmission () s’utilitza per iniciar la transmissió i la funció Wire.requestFrom (address, 2) s’utilitza per llegir registres on 2 indica el nombre de registres.
Més Wire.endTransmission () s’utilitza per finalitzar la transmissió i la funció Wire.write () s’utilitza per anar al registre desitjat introduint-hi l’adreça d’aquest registre.
int BH1750_Llegir (adreça int) { int i = 0; Wire.beginTransmission (adreça); Wire.requestFrom (adreça, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); tornar i; } void BH1750_Init (adreça int) { Wire.beginTransmission (adreça); Wire.write (0x10); Wire.endTransmission (); }
En funció de bucle , estem imprimint els valors de lux en temps real per LCD. Primer compareu el valor de retorn de la funció BH1750_Read amb 2 i, a continuació, comenceu a imprimir els valors de Lux si és igual a 2. Aquí es comparen els valors amb 2 perquè la funció BH1750_Read retorna el valor del recompte de registres i només estem llegint 2 registres. Així, quan arriba a 2, el programa comença a imprimir els valors LUX de la intensitat de la llum.
A continuació, s’utilitza una fórmula per obtenir els valors dels registres i dividir-los per 1,2, que és la precisió de la mesura.
bucle buit () { int i; uint16_t valor = 0; BH1750_Init (adreça BH1750); retard (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensitat en LUX"); lcd.setCursor (6,1); lcd.print (valor); } retard (150); }
Finalment engegueu l'Arduino i pengeu el programa a Arduino. Tan bon punt es penja el programa, la pantalla LCD comença a mostrar la intensitat de la llum en unitats LUX. També podeu variar els valors canviant la intensitat de la llum al voltant del sensor, tal com es mostra al vídeo següent.
