← Volver a proyectos
PROYECTO #03 Iniciación ⏱ 40 min

Luz Nocturna
Automática

El LED se enciende solo cuando detecta poca luz. Tu primera automatización real: un sistema que toma decisiones sin que intervengas — igual que las farolas de la calle.

Sensor Luz (LDR) LED Verde micro:bit 🔌 2 pines 📚 Señal analógica
💡 Concepto clave — Señal analógica vs digital
En los proyectos anteriores usabas señales digitales: solo 0 o 1 (encendido/apagado). El sensor de luz es analógico: devuelve un número entre 0 y 1023 que representa la cantidad de luz. Cuanta más luz, mayor el número. Con ese valor podemos tomar decisiones más inteligentes.
0
Oscuridad total
~200
Noche / oscuro
~400
Umbral típico
~700
Luz artificial
1023
Luz solar
🌙
1023
Valores
40'
Tiempo
P0/P1
Pines

Materiales necesarios

Reúne estos componentes. El sensor de luz (LDR) es nuevo — tiene una resistencia que varía con la luz. Haz clic para ver su guía.

☀️
Sensor de Luz (LDR)
P0 — Analógico
×1 Ver guía completa →
🟢
LED Verde
P1 — Digital
×1 Ver guía completa →
🔌
micro:bit + Shield
Controlador
×1 Plataforma principal →
🔗
Cables Dupont
3 por módulo
×6 Info sobre cables →

Conexión de los componentes

El sensor de luz va en P0 (lectura analógica) y el LED en P1 (salida digital). La diferencia clave: el sensor usa analogReadPin, no digitalReadPin.

Componente Pin shield Cable recomendado
Sensor Luz — Señal P0 (analógico) Amarillo
Sensor Luz — Alimentación V (3.3V) Rojo
Sensor Luz — Tierra G (GND) Negro
LED Verde — Señal P1 Verde
LED Verde — Alimentación V (3.3V) Rojo
LED Verde — Tierra G (GND) Negro
⚠️ Importante: El pin P0 puede leer señales analógicas en el micro:bit. Los pines P1 y P2 también pueden hacerlo, pero P0 es el más común para sensores analógicos. No uses P3 (está conectado a los botones internos).
1
Conecta el sensor de luz al bloque P0 del shield: S → P0, V → V, G → G. Este sensor es analógico — su pin S devuelve un voltaje proporcional a la luz recibida.
2
Conecta el LED verde al bloque P1: S → P1, V → V, G → G. Este es digital — solo lo encendemos (1) o apagamos (0).
3
Comprueba que el sensor de luz tiene la parte con la rejilla mirando hacia arriba (hacia donde hay luz). Si está tapado, siempre leerá valores bajos.
4
Antes de ajustar el umbral, sube el código y observa los valores que aparecen en pantalla. Apunta el valor con mucha luz y el valor en oscuridad — los necesitarás para el Reto 1.
💡 Dato clave: El sensor de luz es sensible a la dirección. Si lo orientas hacia una ventana, leerá valores más altos que si mira al techo. Durante las pruebas, intenta mantener la misma orientación.

Programación

Lo nuevo aquí es la lectura analógica y el concepto de umbral (threshold). Lee bien los comentarios antes de copiar el código.

Vídeo tutorial
Próximamente
MakeCode JavaScript
// Luz nocturna automática
// El LED se enciende cuando la luz ambiente es baja

let nivelLuz = 0
let UMBRAL = 400  // Ajusta este valor según tu entorno (0-1023)

basic.forever(function () {
    // Leer el sensor de luz (valor entre 0 y 1023)
    nivelLuz = pins.analogReadPin(AnalogPin.P0)

    // Mostrar el valor en pantalla (para calibrar)
    basic.showNumber(nivelLuz)

    if (nivelLuz < UMBRAL) {
        // Poca luz → encender LED
        pins.digitalWritePin(DigitalPin.P1, 1)
        basic.showIcon(IconNames.Diamond)
    } else {
        // Mucha luz → apagar LED
        pins.digitalWritePin(DigitalPin.P1, 0)
        basic.showIcon(IconNames.SmallDiamond)
    }

    basic.pause(500)  // Actualizar cada 0.5 segundos
})
📊
pins.analogReadPin(AnalogPin.P0) — Lee el sensor y devuelve un número entre 0 y 1023. A diferencia de digitalReadPin (que solo da 0 o 1), aquí obtienes el valor exacto de luz. Esto se llama señal analógica.
📏
let UMBRAL = 400 — El umbral es el valor que separa "hay luz" de "no hay luz". Si el valor del sensor es menor que 400, consideramos que está oscuro. Este valor es el que debes ajustar según tu entorno (ver Reto 1).
🔢
basic.showNumber(nivelLuz) — Muestra el valor del sensor en la pantalla del micro:bit. Muy útil para la calibración. Una vez que hayas ajustado el umbral, puedes quitar esta línea.
⏱️
basic.pause(500) — El sensor se lee cada 500ms (0.5 segundos). Si lo quitas, la pantalla se actualiza tan rápido que no podrás leer los números. Los sensores analógicos no necesitan respuesta instantánea.
⚙️ Cómo calibrar el umbral — Hazlo antes del Reto 1
1Sube el código con UMBRAL = 400 y mira los números en la pantalla del micro:bit.
2Con mucha luz (cerca de una ventana o lámpara), apunta el valor. Ejemplo: 750.
3Tapa el sensor completamente con la mano y apunta ese valor. Ejemplo: 80.
4Calcula el punto medio: (750 + 80) / 2 = 415. Ese es tu umbral ideal.
5Cambia el 400 en el código por tu valor calculado. Vuelve a subir el código.
MicroPython
from microbit import *

UMBRAL = 400  # Ajusta este valor según tu entorno

while True:
    # Leer el sensor de luz (valor entre 0 y 1023)
    nivel_luz = pin0.read_analog()

    # Mostrar el valor en pantalla (para calibrar)
    display.scroll(str(nivel_luz))

    if nivel_luz < UMBRAL:
        # Poca luz → encender LED
        pin1.write_digital(1)
        display.show(Image.DIAMOND)
    else:
        # Mucha luz → apagar LED
        pin1.write_digital(0)
        display.show(Image.SMALL_DIAMOND)

    sleep(500)
📊
pin0.read_analog() — Equivalente exacto a analogReadPin en MakeCode. Devuelve un entero entre 0 y 1023. En Python se hace con el método read_analog() del objeto pin.
🔢
display.scroll(str(nivel_luz)) — Para mostrar un número en pantalla en Python, primero debes convertirlo a texto con str(). El scroll desplaza el texto por la pantalla.
📏
UMBRAL en mayúsculas — En Python, es convención escribir las constantes (valores que no cambian en la ejecución) en MAYÚSCULAS. No es obligatorio, pero hace el código más legible.

Problemas frecuentes

La mayoría de problemas con sensores analógicos tienen que ver con el umbral o con usar la función de lectura equivocada.

"El sensor siempre da el valor 0"
Verifica que el sensor de luz está en P0 y que usas analogReadPin (no digitalReadPin). Si usas la función digital, siempre devuelve 0 o 1, nunca el valor real. También comprueba que V y G están bien conectados.
"El LED nunca se enciende aunque esté oscuro"
Lee el valor en pantalla primero. Probablemente el umbral está demasiado bajo para tu entorno. Si el sensor da 300 en oscuridad y tu umbral es 200, el LED nunca se activará. Sube el UMBRAL a 600 o 700 y prueba de nuevo.
"El LED nunca se apaga aunque haya mucha luz"
El umbral está demasiado alto. Si el sensor da 500 con luz y tu umbral es 800, siempre estarás por debajo del umbral. Baja el UMBRAL a 200 o 300. El truco es observar los valores reales primero y luego ajustar.
"Los valores en pantalla cambian mucho sin motivo"
Esto es normal en sensores analógicos. Las pequeñas fluctuaciones de luz (sombras, movimientos) hacen variar el sensor. Puedes añadir basic.pause(1000) en lugar de 500 para que actualice más despacio y sea más estable.