Sensor BH1750 – Medición de luminosidad por I2C

El BH1750 es un sensor digital de luz ambiente extremadamente popular en proyectos con Arduino. Su misión es medir la iluminancia en unidades de lux, ofreciendo un rango amplio, excelente estabilidad y comunicación mediante el bus I2C, lo que simplifica la conexión y reduce el ruido eléctrico respecto a soluciones analógicas.


1. ¿Cómo funciona el BH1750 internamente?

El BH1750 es un sensor de luz basado en un fotodiodo y un convertidor analógico-digital (ADC) de 16 bits. Su proceso interno ocurre en cuatro etapas:

a) Captura de luz

El fotodiodo transforma la intensidad luminosa en una corriente proporcional.
El sensor es especialmente sensible al rango visible, aproximando bien la respuesta del ojo humano (curva fotópica).

b) Conversión a señal digital

La corriente del fotodiodo se amplifica y pasa a un ADC de alta resolución, lo que permite lecturas precisas incluso con variaciones pequeñas de iluminación.

c) Procesamiento interno

El microcontrolador interno convierte el valor del ADC directamente a lux, por lo que el usuario no necesita aplicar fórmulas externas ni calibraciones complejas.

d) Comunicación por I2C

El sensor expone dos direcciones posibles:

  • 0x23 (por defecto)
  • 0x5C (si el pin ADDR está en HIGH)

La comunicación es sencilla: el maestro (Arduino) envía un comando de medición y el BH1750 responde con dos bytes que representan el valor de luz.


2. Modos de operación

El BH1750 ofrece varios modos orientados a diferentes necesidades:

ModoDescripciónTiempo típicoPrecisión
H-Resolution (1 lx)Mide luminosidad con resolución estándar~120 msAlta
H-Resolution2 (0.5 lx)Variante más precisa~120 msMuy alta
L-Resolution (4 lx)Medición rápida~16 msMedia

Nota: El sensor puede configurarse para lecturas continuas o una sola medición.


3. Alcances del BH1750

Rango útil muy amplio: desde 1 lux (ambiente oscuro) hasta aproximadamente 65 000 lux (luz solar directa moderada).
Muy buena linealidad gracias al ADC de 16 bits.
Estabilidad a largo plazo y baja deriva por temperatura.
Lectura directa en lux, ideal para principiantes y proyectos educativos.
Inmunidad al ruido, ya que no usa salidas analógicas.


4. Limitaciones del sensor

Se satura en ambientes muy brillantes, por encima de ~65 000 lux (sol directo intenso).
No detecta luz IR ni UV, pues está optimizado para reproducir la sensibilidad del ojo humano.
No funciona correctamente detrás de algunos vidrios tintados o filtros polarizados.
Su tiempo de respuesta puede ser lento en los modos de alta resolución.
Depende del ángulo de incidencia, ya que no incorpora un difusor óptico profesional.


5. Conexión con Arduino

BH1750Arduino
VCC3.3 V o 5 V
GNDGND
SDAA4 (en Arduino UNO)
SCLA5 (en Arduino UNO)
ADDRGND (0x23) o VCC (0x5C)

6. 3 Aplicaciones reales con Arduino

1. Control automático de iluminación interior

El BH1750 puede medir los niveles luminosos en una habitación y ajustar:

  • Intensidad de lámparas LED via PWM
  • Persianas automáticas
  • Encendido inteligente según presencia y luz ambiental

Ideal en proyectos domóticos.


2. Medición de luz para invernaderos o cultivos

El BH1750 permite:

  • Estimar si las plantas están recibiendo la luz adecuada
  • Controlar paneles LED de crecimiento
  • Registrar historiales de luminosidad en SD o en la nube

Funciona bien en rangos típicos de agricultura interior.


3. Monitoreo de exposición luminosa en museos o laboratorios

Sensores como el BH1750 se usan para proteger materiales sensibles:

  • Fotografías
  • Tintas
  • Material biológico
  • Obras de arte

Arduino puede registrar lux y activar alarmas o registrar datos por Ethernet/WiFi.


7. Fuentes recomendadas para profundizar

  1. Hoja de datos oficial del BH1750
    Disponible en sitios de fabricantes como ROHM o WJ Technology.
  2. Referencia del Bus I2C para Arduino
    Documentación de Wire.h en Arduino.cc.
  3. Guía técnica de sensores de luminosidad
    Tutorials de SparkFun o Adafruit sobre fotodiodos y luxómetros digitales.

8. Prompt para generar tu propio código con IA

Puedes sugerir este prompt a tus lectores, listo para copiar y pegar:


Prompt recomendado

Quiero que me ayudes a generar un código en Arduino para leer un sensor BH1750 por I2C.  
Necesito que el programa tenga:  
- Inicialización correcta del bus I2C.  
- Lectura continua en modo High Resolution.  
- Conversión a lux con explicación de cada línea.  
- Mensajes claros por Serial Monitor.  
- Manejo de errores si el sensor no responde.  
Además, quiero que el código sea modular, usando funciones separadas para iniciar el sensor y tomar mediciones.  
Explícame cómo modificar el tiempo de muestreo y cómo adaptar el programa para un ESP32 o un Arduino Nano Every.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio