
Entrada 10: Control de Cúpula en Shackleton con Arduino Mega, AM2302 y S12SD: Fotoperiodo y Telemetría Serie (1º Bachillerato) BermejaHab
Tras asegurar el soporte vital en el Iglú Habitacional con el alumnado de ESO en la entrega anterior, escalamos en la integración vertical del proyecto BermejaHab. Es el turno de 1º de Bachillerato en la asignatura Creación Digital y Pensamiento Computacional (CDyPC).
Su reto consiste en validar el firmware de la Cúpula Agrícola en un Arduino Mega 2560, resolviendo el problema de los Picos de Luz Eterna del Cráter Shackleton mediante prototipado rápido: lectura de clima (AM2302/DHT22), radiación UV (S12SD), simulación del fotoperiodo y estado de la cúpula reflejado en el LED integrado (LED_BUILTIN) y el Monitor Serie.
🌒 Prototipado en el Aula: Validando la Lógica con el LED Integrado
En los bordes del Cráter Shackleton el Sol no se pone durante meses. Para evitar que las plantas mueran por fotosaturación, la cúpula debe generar una noche artificial de 8 horas, además de cerrarse ante picos radiológicos o golpes de calor.
Para verificar que el algoritmo funciona antes de conectar relés de alta potencia, el alumnado utiliza los recursos integrados del microcontrolador:
- LED Integrado Encendido (
HIGH/ Pin 13): Cúpula OPACA (Noche artificial / Emergencia UV / Sobrecalentamiento). - LED Integrado Apagado (
LOW/ Pin 13): Cúpula TRANSPARENTE (Fotosíntesis activa durante el día simulado). - Puerto Serie (USB): Envío periódico de telemetría completa para depuración y control de misión.
Plaintext
ASTRONOMÍA DE SHACKLETON (Luz Permanente)
│
▼
CÓDIGO DE CONTROL EN ARDUINO MEGA
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
[Fase Noche: 8h] [Alerta UV > 8 UVI] [Calor > 28 ºC]
│ │ │
└───────────────────────────┼───────────────────────────┘
│
▼
CÚPULA OPACA (LED_BUILTIN = HIGH)
(Protección / Descanso Vegetal)
│
[De lo contrario]
│
▼
CÚPULA TRANSPARENTE (LED_BUILTIN = LOW)
(Fotosíntesis con Sol Natural)
│
▼
TELEMETRÍA POR PUERTO SERIE
🛠️ Hardware Mínimo Necesario
- Microcontrolador: Arduino Mega 2560 (conectado por USB al ordenador).
- Sensor Clima Interior (AM2302 / DHT22):
- VCC a $5\text{ V}$, GND a GND, Datos a Pin Digital D4.
- Sensor Radiación UV Exterior (S12SD / GUVA-S12SD):
- VCC a $5\text{ V}$, GND a GND, Signal al Pin Analógico A0.
- Indicador de Cúpula:LED integrado en placa (
LED_BUILTIN/ Pin D13).
🧠 Algoritmo de Decisión y Control Serie
- Reloj Circadiano: Contabiliza un ciclo de 24 horas (compresible a segundos durante la prueba en clase).
- Evaluación Nocturna (Horas 16 a 23): Cúpula OPACA (
LED_BUILTIN = HIGH). - Evaluación Diurna (Horas 0 a 15): Cúpula TRANSPARENTE (
LED_BUILTIN = LOW), salvo emergencia:- Pico UV:$\text{Índice UV} > 8.0 \longrightarrow$OPACA (
LED_BUILTIN = HIGH). - Golpe de Calor:$\text{Temperatura} > 28.0\text{ °C} \longrightarrow$OPACA (
LED_BUILTIN = HIGH).
- Pico UV:$\text{Índice UV} > 8.0 \longrightarrow$OPACA (
- Reporte por Puerto Serie: Envío formateado del estado cada 2 segundos.
🤖 Integrando la IA: Prompting en C++ con Claude
El alumnado utiliza Claude (versión gratuita) para estructurar un programa limpio que utilice el LED integrado y envíe datos por la interfaz serie.
📝 Prompt Utilizado por el Alumnado
Plaintext
Actúa como un profesor de robótica. Necesito un programa en C++ para Arduino Mega 2560 que controle la cúpula del invernadero lunar BermejaHab usando hardware mínimo para prototipar en clase.
Hardware:
- Arduino Mega 2560.
- Sensor UV S12SD en el pin analógico A0.
- Sensor AM2302 (DHT22) en el pin digital D4.
- Salida visual: Usar el LED integrado de la placa (LED_BUILTIN / Pin 13).
Requisitos del programa:
1. Simula un reloj circadiano de 24 horas (donde cada hora dure 2 segundos para poder probarlo rápido):
- Horas 0 a 15: FASE DIURNA (16 horas).
- Horas 16 a 23: FASE NOCTURNA (8 horas).
2. En la FASE NOCTURNA, la cúpula debe ponerse OPACA (enciende LED_BUILTIN con HIGH) para la noche artificial.
3. En la FASE DIURNA, la cúpula estará TRANSPARENTE (apaga LED_BUILTIN con LOW), EXCEPTO si:
- El Índice UV (S12SD) es mayor de 8.0.
- La Temperatura (AM2302) es mayor de 28 ºC.
En esos dos casos de peligro, enciende el LED_BUILTIN (HIGH).
4. Muestra en el Monitor Serie la hora simulada, el valor UV, la temperatura, la humedad y el estado exacto del LED_BUILTIN junto con la causa de su estado.
💻 Código C++ del Nodo del Invernadero (dome_mega_builtin_telemetry.ino)
C++
// ==============================================================================
// PROYECTO BERMEJAHAB - MONTESTEAM (IES MONTERROSO)
// Control de Cúpula con Prototipado Rápido (LED_BUILTIN + Telemetría Serie)
// Placa: Arduino Mega 2560
// Sensores: S12SD (UV Externa en A0) + AM2302/DHT22 (Clima en D4)
// ==============================================================================
#include "DHT.h"
// 1. PINOUT Y CONFIGURACIÓN (ARDUINO MEGA)
const int PIN_UV_S12SD = A0; // Sensor UV
#define DHTPIN 4 // Pin digital D4 para AM2302
#define DHTTYPE DHT22 // Sensor AM2302 / DHT22
const int PIN_CUPULA = LED_BUILTIN; // Usamos el LED integrado de la placa (Pin 13)
// Parámetros de conversión ADC para Arduino Mega
const float VREF = 5.0;
const int RESOLUCION_ADC = 1024;
// Umbrales Ambientales
const float LIMITE_UV_ALTA = 8.0; // Índice UV crítico (UVI)
const float TEMP_LIMITE_ALTA = 28.0; // Umbral de golpe de calor (°C)
DHT dht(DHTPIN, DHTTYPE);
// VARIABLES DE SIMULACIÓN DE FOTOPERIODO
int horaSimulada = 8; // Comienza a las 08:00 AM
void setup() {
Serial.begin(9600);
pinMode(PIN_CUPULA, OUTPUT);
digitalWrite(PIN_CUPULA, LOW); // Apagado = Transparente inicio
dht.begin();
Serial.println("==================================================================");
Serial.println(">> BERMEJAHAB: Prototipo Cúpula y Clima (Arduino Mega) ONLINE <<");
Serial.println(">> Actuador: LED_BUILTIN (Pin 13) | Telemetría: Monitor Serie <<");
Serial.println("==================================================================");
}
void loop() {
delay(2000); // Frecuencia de muestreo (2 segundos = 1 hora simulada)
// A. SIMULACIÓN DEL RELOJ CIRCADIANO EN SHACKLETON
horaSimulada = (horaSimulada + 1) % 24;
bool esNocheArtificial = (horaSimulada >= 16 || horaSimulada < 8); // 8h de noche (16:00 a 23:59)
// B. LECTURA DE SENSORES
int rawUV = analogRead(PIN_UV_S12SD);
float voltUV = (rawUV * VREF) / RESOLUCION_ADC;
float indiceUV = (voltUV * 1000.0) / 100.0; // 100 mV ≈ 1 UVI
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("⚠️ Error de lectura en el sensor AM2302. Reintentando...");
return;
}
// C. LÓGICA DE CONTROL DE LA CÚPULA
bool cupulaOpaca = false;
String motivo = "";
if (esNocheArtificial) {
cupulaOpaca = true;
motivo = "🌙 Noche Artificial (Descanso Vegetal)";
} else if (indiceUV > LIMITE_UV_ALTA) {
cupulaOpaca = true;
motivo = "🚨 Alerta UV Alta (> 8.0 UVI)";
} else if (t > TEMP_LIMITE_ALTA) {
cupulaOpaca = true;
motivo = "🔥 Sobrecalentamiento (> 28 °C)";
} else {
cupulaOpaca = false;
motivo = "☀️ Día Simulado (Fotosíntesis Activa)";
}
// Actualizar estado del LED Integrado
digitalWrite(PIN_CUPULA, cupulaOpaca ? HIGH : LOW);
// D. TELEMETRÍA POR MONITOR SERIE
Serial.print("[Hora: ");
if (horaSimulada < 10) Serial.print("0");
Serial.print(horaSimulada); Serial.print(":00] ");
Serial.print("UV: "); Serial.print(indiceUV, 1);
Serial.print(" UVI | Temp: "); Serial.print(t, 1); Serial.print(" °C");
Serial.print(" - Hum: "); Serial.print(h, 1); Serial.print(" %");
Serial.print(" | LED 13: ");
if (cupulaOpaca) {
Serial.print("🔴 ON (Opaca) --> ");
} else {
Serial.print("🟢 OFF (Transparente) --> ");
}
Serial.println(motivo);
}
🔄 Secuencia Didáctica en el Taller de Robótica
- 🔌 Conexión Directa: Conectar el AM2302 en
D4y el S12SD enA0. No se necesita ninguna protoboard compleja ni elementos externos adicionales. - 💻 Prueba del Reloj Circadiano: Observar la consola serie y verificar cómo el
LED_BUILTINde la placa Arduino Mega se enciende solo durante las horas nocturnas simuladas (16:00 a 23:00). - 🧪 Simulación de Perturbaciones Ambientales:
- Durante la “fase de día”, soplar aire caliente al AM2302 o tapar/iluminar el S12SD para comprobar cómo el
LED_BUILTINse enciende al instante ante una emergencia ambiental.
- Durante la “fase de día”, soplar aire caliente al AM2302 o tapar/iluminar el S12SD para comprobar cómo el
- ⚙️ Análisis de Telemetría: Interpretar las cadenas de texto enviadas por el puerto USB como paso previo a enviar esos mismos datos a un centro de control web.
🎓 Vinculación Curricular (1º de Bachillerato)
- Asignatura: Creación Digital y Pensamiento Computacional (1º Bachillerato).
- Saberes Básicos:
- Prototipado Rápido y Depuración: Uso de recursos del sistema (
LED_BUILTIN, Monitor Serie) para la validación de algoritmos mecatrónicos. - Programación Estructurada en C++: Gestión de tiempos en bucles, conversiones analógico-digitales y lógica condicional compuesta.
- Metodología STEAM: Resolución pragmática de retos biológicos y astronómicos espaciales adaptada a las restricciones de hardware del aula.
- Prototipado Rápido y Depuración: Uso de recursos del sistema (
- Competencias Específicas: Prototipar, validar y documentar soluciones tecnológicas mecatrónicas mediante herramientas digitales e Inteligencia Artificial (Claude).
🚀 Próximo Paso: Entrada 11
Con el Iglú habitacional monitoreado por ESO (micro:bit) y la Cúpula Agrícola probada en el Arduino Mega mediante el LED integrado y la telemetría serie por 1º de Bachillerato, en la Entrada 11 pasaremos a 2º de Bachillerato (Programación y Computación): diseñar el Centro de Control de Misión (Telemetry Hub) integrando ambas fuentes de datos en un Dashboard dinámico e interactivo construido con Claude Artifacts.




