
Las Misiones del Lince #03 Alerta de Crecidas e Inundaciones en los Ríos Padrón y Monterroso: Telemetría con Arduino Mega, Open-Meteo
Ante episodios de DANA, borrascas profundas o lluvias torrenciales en la Costa del Sol, la velocidad de respuesta de los cauces urbanos e interurbanos de Estepona —como los ríos Padrón y Monterroso— exige sistemas de monitorización continua. La orografía de Sierra Bermeja provoca que el agua de precipitación descienda con rapidez hacia el litoral, convirtiendo arroyos secos en avenidas de agua en cuestión de minutos.
En esta Misión 03 de Las Misiones del Lince, el alumnado de 1º de Bachillerato (Cultura Digital y Pensamiento Computacional) diseña un nodo emisor de telemetría hidrológica de código abierto. La placa Arduino Mega 2560 actúa como sensor de campo (Edge Computing), midiendo la lámina de agua y transmitiendo un flujo continuo de datos estructurados por el puerto serie hacia una central de control web que consume la API de Open-Meteo y grafica la avenida con Chart.js.
Plaintext
┌─────────────────────────────────────────────────────────────────────────────┐
│ FLUJO DE TRABAJO: NODO SENSOR Y TELEMETRÍA DE CRECIDAS │
│ │
│ ┌──────────────────────┐ Emisión Serial ┌─────────────────────────────┐ │
│ │ Arduino Mega (Wokwi) ├───────────────────>│ Central / Dashboard Web │ │
│ │ (HC-SR04 + 1 LED) │ (JSON Stream) │ (Recepción e Hidrograma) │ │
│ └──────────┬───────────┘ └──────────────┬──────────────┘ │
│ │ │ │
│ │ Control Físico │ API REST │
│ ▼ ▼ │
│ ┌──────────────────────┐ ┌─────────────────────────────┐ │
│ │ Compuerta de Alivio │ │ API Open-Meteo / AEMET │ │
│ │ (Servomotor) │ │ (Datos de Lluvia Estepona) │ │
│ └──────────────────────┘ └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
🔗 Fuentes de Datos Abiertos y Recursos
- API de Predicción Meteorológica:Open-Meteo API (Coordenadas de Estepona: 36.4268, -5.1459).
- Entorno de Simulación Electrónica:Wokwi Arduino Simulator.
- Motor de Gráficos Web:Chart.js (JavaScript).
🛠️ Parte 1: Montaje de Ingeniería en Wokwi (Arduino Mega 2560)
El nodo físico se simplifica para centrarse en la captura y envío eficiente de datos. Utilizamos una placa Arduino Mega 2560 conectada a un sensor de ultrasonidos HC-SR04 situado en la estructura de un puente, un único LED indicador de estado/alerta y un servomotor para la apertura automatizada de la compuerta de alivio.
Tabla de Conexiones (Pinout simplificado)
| Componente | Pin del Componente | Pin en Arduino Mega 2560 | Función |
| Sensor HC-SR04 | VCC / GND | 5V / GND | Alimentación |
| Trig | Pin 9 | Pulso de disparo ultrasónico | |
| Echo | Pin 10 | Recepción de rebote del eco | |
| LED Indicador | Ánodo (+) | Pin 22 (con res. 220 Ω) | Estado del nodo / Indicador de alerta |
| Cátodo (-) | GND | Masa | |
| Servomotor | Señal (Naranja) | Pin 11 (PWM) | Compuerta física de alivio |
| VCC / GND | 5V / GND | Alimentación |
Código Firmware (C++ para Arduino Mega en Wokwi)
El programa mide la distancia al agua, ajusta la posición de la compuerta y conmuta el LED según el umbral. Toda la telemetría se emite por el Puerto Serie en formato JSON, lista para ser parseada por cualquier software receptor (Python, Node.js o Web Serial API en el navegador).
Copiar y pegar este código en la pestaña sketch.ino de Wokwi:
C++
#include <Servo.h>
// Definición de pines en Arduino Mega 2560
const int PIN_TRIG = 9;
const int PIN_ECHO = 10;
const int PIN_SERVO = 11;
const int PIN_LED = 22;
// Parámetros del puente (en centímetros)
const float ALTURA_PUENTE = 400.0; // Distancia del sensor al fondo del cauce
const float UMBRAL_ALERTA = 250.0; // Nivel del río para activar alerta (cm)
Servo compuertaAlivio;
void setup() {
// Configuración de la tasa de baudios para transmisión serie rápida
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_LED, OUTPUT);
compuertaAlivio.attach(PIN_SERVO);
compuertaAlivio.write(0); // Compuerta cerrada inicialmente (0 grados)
digitalWrite(PIN_LED, LOW);
}
void loop() {
// 1. Emisión del pulso ultrasónico
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// 2. Medición del tiempo de retorno del eco
long duracion = pulseIn(PIN_ECHO, HIGH);
// 3. Cálculo de la distancia medida y del nivel real del río
float distanciaAgua = duracion * 0.0343 / 2.0;
float nivelRio = ALTURA_PUENTE - distanciaAgua;
if (nivelRio < 0) nivelRio = 0.0;
bool estadoAlerta = false;
int anguloCompuerta = 0;
// 4. Lógica de control local
if (nivelRio >= UMBRAL_ALERTA) {
estadoAlerta = true;
digitalWrite(PIN_LED, HIGH); // LED Encendido: Alerta activa
// Cálculo proporcional de apertura de compuerta (de 0 a 90 grados)
anguloCompuerta = map(constrain(nivelRio, UMBRAL_ALERTA, ALTURA_PUENTE), UMBRAL_ALERTA, ALTURA_PUENTE, 0, 90);
compuertaAlivio.write(anguloCompuerta);
} else {
estadoAlerta = false;
digitalWrite(PIN_LED, LOW); // LED Apagado: Estado normal
compuertaAlivio.write(0);
}
// 5. Emisión de telemetría estructurada en formato JSON por Puerto Serie
Serial.print("{\"nodo\":\"PADRON_01\",\"distancia_cm\":");
Serial.print(distanciaAgua, 1);
Serial.print(",\"nivel_rio_cm\":");
Serial.print(nivelRio, 1);
Serial.print(",\"alerta\":");
Serial.print(estadoAlerta ? "true" : "false");
Serial.print(",\"compuerta_deg\":");
Serial.print(anguloCompuerta);
Serial.println("}");
delay(1000); // Muestreo cada 1 segundo
}
🌐 Parte 2: Dashboard Receptor en HTML5 / Chart.js (Prompt para Claude Artifacts)
Para procesar la telemetría enviada por el puerto serie y combinarla con datos meteorológicos reales, utiliza este Prompt Maestro en Claude Artifacts para generar la aplicación web receptora:
Plaintext
Crea un simulador web táctico en un único archivo HTML5 con Tailwind CSS y Chart.js titulado "Las Misiones del Lince - Estación Receptora de Telemetría (Ríos Padrón y Monterroso)".
Requisitos de la aplicación:
1. Encabezado con estética de centro de control "Las Misiones del Lince - Ciencia Ciudadana MonteSTEAM".
2. Integración de la API de Open-Meteo para las coordenadas de Estepona (36.4268, -5.1459) para mostrar en tiempo real la lluvia acumulada y la previsión del tiempo.
3. Monitor de Puerto Serie Virtual: Un cuadro de consola estilo terminal donde se simula o parsea la recepción del JSON procedente del Arduino Mega (ejemplo: {"nodo":"PADRON_01","nivel_rio_cm":280.5,"alerta":true,"compuerta_deg":45}).
4. Gráfico dinámico con Chart.js que represente en tiempo real la evolución del nivel del río recibido por serie frente al umbral crítico de seguridad (250 cm).
5. Un panel de estado visual que muestre la posición de la compuerta y el estado de la alerta (VERDE / ROJO).
🎓 Vinculación Curricular y Saberes Básicos (LOMLOE)
- Materia: Cultura Digital y Pensamiento Computacional (1º de Bachillerato).
- Bloques de Saberes:
- Sistemas Embebidos y Control: Configuración de Arduino Mega con sensores de distancia e interfaz PWM para servomotores.
- Telemetría y Protocolos de Comunicación: Generación y formateo de estructuras de datos en JSON para transmisión serie asíncrona.
- Conexión con APIs Abiertas: Consulta e integración de fuentes meteorológicas en tiempo real (Open-Meteo) para el análisis de riesgos climáticos locales.



