Lee el sensor de lluvia, muestra el nivel de humedad en la pantalla OLED y enciende un LED cuando llueve. Tu primer proyecto combinando sensor analogico con display — la base de cualquier estacion meteorologica.
Este proyecto usa tres componentes a la vez por primera vez. Asegurate de tener todos antes de empezar — especialmente la pantalla OLED, que necesita una configuracion extra en MakeCode.
Este proyecto tiene tres componentes — mas que los anteriores. Conectalos uno a uno y comprueba cada uno antes de pasar al siguiente. La OLED usa I2C (pines fijos), los demas usan pines normales.
SCL = P19 (reloj) y SDA = P20 (datos). En la placa de expansion los encontraras etiquetados como CLK y DA. No uses P19 ni P20 para otros componentes — estan reservados para I2C.| Componente | Pin del componente | Pin micro:bit | Color recomendado |
|---|---|---|---|
| Sensor Lluvia | Signal (AO / analog) | P0 | 🟡 Amarillo |
| Sensor Lluvia | V (VCC) | 3.3V | 🔴 Rojo |
| Sensor Lluvia | G (GND) | GND | ⚫ Negro |
| LED Verde | Signal (S) | P1 | 🟠 Naranja |
| LED Verde | V (VCC) | 3.3V | 🔴 Rojo |
| LED Verde | G (GND) | GND | ⚫ Negro |
| Pantalla OLED | CLK (SCL) | SCL / P19 | 🔵 Azul |
| Pantalla OLED | DA (SDA) | SDA / P20 | 🔳 Verde |
| Pantalla OLED | V (VCC) | 3.3V | 🔴 Rojo |
| Pantalla OLED | G (GND) | GND | ⚫ Negro |
AO (o Signal) va a P0, VCC a 3.3V, GND a GND. Usa la salida analogica, no la digital (DO).S a P1, V a 3.3V, G a GND.SCL (o CLK) y SDA (o DA). Son los pines I2C. Conecta CLK/SCL al pin SCL de la OLED y DA/SDA al SDA. Alimentacion a 3.3V y GND.oled. Instala la extension de Kitronik. Sin esta extension el codigo de la OLED no funcionara.El codigo lee el sensor cada segundo, actualiza la OLED con el valor actual y el estado, y controla el LED verde. El umbral por defecto es 600 — lo ajustaras en las actividades segun tu sensor.
// Detector de lluvia con pantalla OLED // Requiere extensión OLED en MakeCode (busca "oled" en Extensiones) let nivelLluvia = 0 let UMBRAL_LLUVIA = 600 // Por encima de este valor = lluvia // Inicializar OLED (128x64 pixels) OLED.init(128, 64) basic.forever(function () { // Leer sensor de lluvia (0-1023, más alto = más húmedo) nivelLluvia = pins.analogReadPin(AnalogPin.P0) // Limpiar pantalla y mostrar datos actualizados OLED.clear() OLED.writeString("=== SENSOR LLUVIA ===") OLED.writeString("Nivel: " + nivelLluvia) if (nivelLluvia > UMBRAL_LLUVIA) { OLED.writeString("ESTADO: LLUVIA!") OLED.writeString(">>> Alerta activa") pins.digitalWritePin(DigitalPin.P1, 1) // LED ON basic.showIcon(IconNames.Umbrella) } else { OLED.writeString("ESTADO: Seco") OLED.writeString("Sin alerta") pins.digitalWritePin(DigitalPin.P1, 0) // LED OFF basic.showIcon(IconNames.Happy) } basic.pause(1000) // Actualizar cada segundo })
from microbit import * import ssd1306 # Librería para pantalla OLED # Inicializar OLED (I2C address 0x3C, 128x64 pixels) oled = ssd1306.SSD1306_I2C(128, 64, i2c) UMBRAL_LLUVIA = 600 while True: # Leer sensor de lluvia (0-1023) nivel_lluvia = pin0.read_analog() # Limpiar pantalla oled.fill(0) oled.text("SENSOR LLUVIA", 0, 0) oled.text("Nivel: " + str(nivel_lluvia), 0, 16) if nivel_lluvia > UMBRAL_LLUVIA: oled.text("ESTADO: LLUVIA!", 0, 32) oled.text("Alerta activa", 0, 48) pin1.write_digital(1) display.show(Image.UMBRELLA) else: oled.text("Estado: Seco", 0, 32) oled.text("Sin alerta", 0, 48) pin1.write_digital(0) display.show(Image.HAPPY) oled.show() # Enviar buffer a la pantalla sleep(1000)
Comprueba cada punto de la lista. Si la OLED no muestra nada, revisa la seccion de Problemas antes de seguir.
Primero calibra tu sensor con el desafio 1. Los demas dependen de conocer el rango real de valores que da tu sensor especifico.
UMBRAL_LLUVIA al valor que mejor separa "seco" de "humedo" para tu sensor.if/else if/else y muestra mensajes distintos para cada uno — incluida una frase animando a llevar el paraguas.pausa = 1023 - nivelLluvia te da un rango invertido. Divide entre 4 para que los valores sean razonables.La OLED es el componente mas nuevo en este proyecto. Si algo falla, suele ser la extension o las conexiones I2C. Lee con atencion.
OLED.init y OLED.writeString no existen y el codigo no se compila correctamente. Tambien comprueba que los cables CLK y DA estan en los pines I2C correctos.AO) y no la digital (DO). Si usas la salida digital, solo tendras 0 o 1, no un rango.OLED.clear() al inicio de cada iteracion del bucle. Sin este comando, el nuevo texto se escribe encima del anterior y la pantalla se vuelve ilegible rapidamente. En MicroPython el equivalente es oled.fill(0) seguido de oled.show().SCL (= CLK, pin de reloj) y SDA (= DA, pin de datos). Son los pines I2C fijos del micro:bit — corresponden a P19 y P20. NO uses P0, P1 o P2 para la OLED. Si tu placa no tiene SCL/SDA etiquetados, conecta directamente a los pines P19 y P20.Ahora sabes leer sensores analogicos y mostrar datos en una pantalla. Estas dos habilidades juntas son la base de casi cualquier sistema de monitorizacion del mundo real.
Math.map para convertir valores.