Un sensor de luz que entrega lux, no "números"
La mayoría de los sensores de luz baratos (LDR, fotodiodos genéricos) te dan un valor crudo entre 0 y 1023 (o 0 y 4095) que es proporcional al brillo, pero no es una unidad real. Para calibrarlo necesitas otro sensor patrón o aceptar que tus números no comparan entre proyectos.
El MAX44009 es distinto: entrega directamente lux, la unidad SI de iluminancia. Y lo hace en un rango brutal: desde 0.045 lux (noche cerrada, casi sin luz) hasta 188.000 lux (sol directo del mediodía en verano). Eso son 22 bits de rango dinámico, suficiente para usar el mismo sensor adentro y afuera sin cambiar nada.
¿Por qué importa medir en lux?
- Comparas datos entre lugares y horas distintas sin recalibrar.
- Tus algoritmos ("si está oscuro, prende la luz") usan umbrales con significado real (50 lux es una mesa de trabajo iluminada, 500 lux una oficina).
- Tu registrador ambiental queda con datos publicables si quieres compartirlos.
Características clave
- Rango: 0.045 a 188.000 lux
- Resolución: hasta 0.045 lux por bit (mínimo más fino)
- Interfaz: I2C estándar, alimentación de 3 a 5V gracias al regulador y conversor de nivel a bordo
- Autorango: el chip elige solo el tiempo de integración y la ganancia
- Bajo consumo: cerca de 1 µA en reposo
- Direcciones I2C: 0x4A por defecto, o 0x4B si cierras el puente Addr con soldadura
Pinout del breakout
El breakout de Adafruit trae todos los pines rotulados en la cara superior. De abajo hacia arriba: alimentación, datos I2C e interrupción.

- VIN: entrada de 3 a 5V. Un regulador a bordo la baja a 3V para el chip, así que sirve tanto con placas de 3.3V como de 5V.
- 3Vo: salida de 3.3V del regulador (hasta 100 mA), útil para alimentar otro módulo pequeño.
- GND: tierra común de alimentación y lógica.
- SCL: reloj I2C, va al pin SCL de tu placa.
- SDA: datos I2C, va al pin SDA de tu placa.
- INT: interrupción de colector abierto. Es opcional: conéctala a un GPIO con resistencia de pull up si quieres que el sensor te avise cuando la luz cruza un umbral, sin tener que leerlo en bucle.
Conexión I2C en 4 cables
Son cuatro líneas: dos de alimentación y dos de datos. Conéctalas según esta tabla.
| Máster (ESP32 / Arduino) | MAX44009 | Color en la foto |
|---|---|---|
| 3.3V o 5V | VIN | rojo |
| GND | GND | negro |
| SCL | SCL | amarillo |
| SDA | SDA | azul |
La interrupción (INT) no es necesaria para leer lux: el ejemplo de abajo funciona solo con esos cuatro cables.
Cero soldadura con STEMMA QT / Qwiic
El breakout incluye dos conectores STEMMA QT (compatibles con Qwiic, formato JST SH de 4 pines) en los costados. Si tu placa también los tiene, enchufas un cable y listo: nada de soldar ni de cruzar cables.

Dirección I2C: 0x4A por defecto
En la cara trasera viene impresa la dirección de fábrica, 0x4A. Si necesitas dos sensores en el mismo bus, cierra con soldadura el puente Addr de uno y pasará a 0x4B. Ahí mismo está rotulado el rango (0.045 a 188.000 lux) y el voltaje de trabajo (3 a 5V).

Para confirmar que el sensor responde antes de escribir código de medición, corre un escaneo I2C en CircuitPython:
import board, busio
i2c = busio.I2C(board.SCL, board.SDA)
while not i2c.try_lock():
pass
print([hex(x) for x in i2c.scan()])
i2c.unlock()
Deberías ver 0x4a (o 0x4b si moviste el puente). Si no aparece nada, revisa que SDA y SCL no estén cruzados y que GND sea común.
Código en CircuitPython
Copia la librería adafruit_max44009.mpy desde el bundle de CircuitPython a la carpeta lib de tu placa. El ejemplo mínimo usa el bus I2C de la placa (board.I2C()), que ya resuelve los pines correctos en la mayoría de las tarjetas:
import time
import board
from adafruit_max44009 import MAX44009
sensor = MAX44009(board.I2C())
while True:
print(f"Lux: {sensor.lux:.2f}")
time.sleep(1.0)
Salida típica en el monitor serial:
Lux: 245.30 # mesa de oficina
Lux: 1.50 # pieza apagada con luz de pasillo
Lux: 65000.00 # sol indirecto a través de una ventana
La propiedad sensor.lux ya viene en lux, sin conversiones: el autorango del chip trabaja por debajo.
Código en Arduino
Instala la librería Adafruit MAX44009 desde el gestor de librerías del IDE (Programa, Incluir librería, Administrar bibliotecas). El objeto se llama igual que la clase y la lectura se hace con readLux():
#include <Adafruit_MAX44009.h>
Adafruit_MAX44009 max44009;
void setup() {
Serial.begin(115200);
while (!Serial) delay(10);
if (!max44009.begin()) {
Serial.println("No se detecta el MAX44009. Revisa el cableado.");
while (1) delay(10);
}
}
void loop() {
float lux = max44009.readLux();
if (!isnan(lux)) {
Serial.print("Lux: ");
Serial.println(lux);
}
delay(100);
}
El chequeo isnan(lux) descarta lecturas inválidas; el delay(100) deja un refresco de 10 veces por segundo, cómodo para el Serial Plotter del IDE.
Autorango contra configuración manual
Por defecto el chip ajusta solo el tiempo de integración (de 6.25 ms a 800 ms) y la ganancia. Para la mayoría de los proyectos, deja el autorango encendido y olvídate del tema.
Si tu aplicación necesita lecturas muy rápidas (más de 10 muestras por segundo), puedes fijar manualmente la integración en 6.25 ms a cambio de menor resolución cuando hay poca luz.
Aplicaciones típicas
- Reloj con brillo adaptativo: ajusta el brillo del display según la luz ambiente.
- Persiana motorizada inteligente: cierra cuando el sol pega directo.
- Seguidor solar: orienta paneles siguiendo el máximo de lux.
- Registrador lumínico: anota la exposición de tus plantas durante el día.
- Cámara astrofotográfica: detecta cuándo hay "noche cerrada" para empezar a capturar.
Variantes y mejoras
- Dos sensores en un mismo bus: cierra el puente Addr de uno para tenerlo en 0x4B y mide luz en dos puntos (por ejemplo, interior contra exterior de una ventana) con un solo ESP32.
- Alertas sin bucle: usa el pin INT y los umbrales (
setUpperThreshold/setLowerThresholdde la librería Arduino) para que el micro duerma y solo despierte cuando la luz cruza un valor. Ideal a batería. - Estación con datos a la nube: combina el MAX44009 con un ESP32 y publica los lux por WiFi a un dashboard. Sumando un DHT22 tienes luz, temperatura y humedad en un mismo registro.
Personalización para Chile
El MAX44009 de Adafruit no siempre se consigue local, pero en MechatronicStore tienes sensores de luz I2C equivalentes y el microcontrolador para leerlos:
- Sensor de luz GY-302 (BH1750) (SKU GN1-6): también entrega lux directos por I2C, con rango de 1 a 65.535 lux. Es el reemplazo más directo y disponible del MAX44009 para proyectos donde quieres unidades reales.
- Sensor de luz TEMT6000 (SKU GO1-5): salida analógica, requiere calibración pero es muy económico para detectar "hay luz / no hay luz".
- Sensor APDS-9930 (SKU GC3-7): suma medición de proximidad además de luz ambiente, también por I2C.
- Placa ESP32 (SKU X2-10V2): el microcontrolador con I2C que ejecuta el código de este tutorial y soporta envío de datos por WiFi.
Para la mayoría de los proyectos donde quieres lux reales, el GY-302 (BH1750) es el más parecido en comportamiento al MAX44009 y se consigue en stock.
Recursos
- Tutorial original (inglés): Adafruit MAX44009 Lux Light Sensor
- Librería Arduino: Adafruit_MAX44009
- Librería CircuitPython: Adafruit_CircuitPython_MAX44009
Versión chilena con componentes en stock local en MechatronicStore.






