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)
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.