- Introducción al módulo de sensor de luz digital BH1750
- Arduino
- Programación de Arduino para la interfaz del sensor de luz BH1750
Cuando lleva su teléfono a la luz del sol o con mucha luz, ajusta automáticamente el brillo de acuerdo con las condiciones de iluminación. La mayoría de los dispositivos de visualización hoy en día, ya sea un televisor o un teléfono móvil, tienen el sensor de luz ambiental en el interior para ajustar el brillo automáticamente. Hoy, en este tutorial, usaremos uno de esos sensores Módulo de sensor de luz BH1750 y lo conectaremos con Arduino y mostraremos el valor de Lux en una pantalla LCD de 16x2.
Introducción al módulo de sensor de luz digital BH1750
BH1750 es un sensor de luz ambiental digital o un sensor de intensidad de luz, que se puede utilizar para ajustar automáticamente el brillo de la pantalla en móviles, pantallas LCD o para encender / apagar los faros de los automóviles según las condiciones de iluminación exterior.
El sensor utiliza el protocolo de comunicación en serie I 2 C que facilita su uso con microcontroladores. Para la comunicación I2C tiene pines SDI y SDA. La distribución de pines del sensor de luz ambiental BH1750 se muestra a continuación:
La salida de este sensor está en LUX (lx), por lo que no requiere más cálculos. Lux es la unidad para medir la intensidad de la luz. Mide la intensidad según la cantidad de luz que incide en un área en particular. Un lux es igual a un lumen por metro cuadrado.
El sensor funciona con voltajes de 2,4 V a 3,6 V (normalmente 3,0 V) y consume una corriente de 0,12 mA. Este sensor tiene un amplio rango y alta resolución (1-65535lx) y, además, la variación de medición también es pequeña (aproximadamente +/- 20%). También puede funcionar de forma independiente sin ningún componente externo.
Aunque un sensor LDR también se puede usar para controlar los dispositivos en función de las condiciones de iluminación, no es tan preciso. Hemos utilizado el sensor LDR para construir muchas aplicaciones de luz controlada:
- Circuito del sensor de luz Arduino usando LDR
- Dark Detector usando LDR y 555 Timer IC
- Circuito LDR simple para detectar luz
- Lámpara de mezcla de colores Arduino con LED RGB y LDR
Arduino
El diagrama de circuito para conectar el sensor de luz BH1750 con Arduino se muestra a continuación.
Los pines de comunicación I2C SDA y SCL del BH1750 están conectados al pin A4 y A5 de Arduino respectivamente para la comunicación I 2 C. Como sabemos, el voltaje de funcionamiento del sensor es de 3.3v, por lo que VCC y GND de BH1750 están conectados a 3.3V y GND de Arduino. Para LCD, los pines de datos (D4-D7) están conectados a los pines digitales D2-D5 de Arduino y los pines RS y EN están conectados a D6 y D7 de Arduino. V0 de LCD está conectado al potenciómetro y se usa un potenciómetro de 10k para controlar el brillo del LCD.
Programación de Arduino para la interfaz del sensor de luz BH1750
La parte de programación para usar este sensor LUX con Arduino es muy fácil. Aunque hay una biblioteca disponible para este sensor, también podemos usarla sin ella.
En primer lugar, hemos incluido archivos de encabezado para LCD y el protocolo I 2 C.
#incluir
En la función de configuración , inicializamos tanto la pantalla LCD como el sensor e imprimimos el mensaje de apertura en la pantalla LCD.
configuración vacía () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Sensor de intensidad"); retraso (2000); }
Aquí las funciones BH1750_Read y BH1750_Init se utilizan para leer y escribir los valores de Lux respectivamente. La función Wire.beginTransmission () se usa para comenzar la transmisión y la función Wire.requestFrom (dirección, 2) se usa para leer registros donde 2 indica el número de registros.
Además, Wire.endTransmission () se usa para finalizar la transmisión y la función Wire.write () se usa para ir al registro deseado ingresando la dirección de ese registro en él.
int BH1750_Read (dirección int) { int i = 0; Wire.beginTransmission (dirección); Wire.requestFrom (dirección, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); volver i; } void BH1750_Init (dirección int) { Wire.beginTransmission (dirección); Wire.write (0x10); Wire.endTransmission (); }
En la función de bucle , estamos imprimiendo los valores de lux en tiempo real en una pantalla LCD. Primero compare el valor de retorno de la función BH1750_Read con 2, y luego comience a imprimir los valores de Lux si es igual a 2. Aquí los valores se comparan con 2 porque la función BH1750_Read devuelve el valor del recuento de registros y estamos leyendo solo 2 registros. Entonces, cuando llega a 2, el programa comienza a imprimir los valores LUX de intensidad de luz.
Luego, se usa una fórmula para obtener los valores de ambos registros y dividirlos por 1.2, que es la precisión de la medición.
bucle vacío () { int i; uint16_t valor = 0; BH1750_Init (BH1750address); retraso (200); if (2 == BH1750_Read (BH1750address)) { valor = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensidad en LUX"); lcd.setCursor (6,1); lcd.print (valor); } retraso (150); }
Finalmente encienda el Arduino y cargue el programa en Arduino. Tan pronto como se carga el programa, la pantalla LCD comienza a mostrar la intensidad de la luz en unidades LUX. También puede variar los valores cambiando la intensidad de la luz alrededor del sensor como se muestra en el video a continuación.