Regar por intervalos de tiempo
Recorrido del nivel
Esa barra de arriba te dice en qué paso estás. Tocala para ver el índice completo y saltar a cualquier paso.
Conectar la electroválvula
El paso del agua a la manguera del sistema de riego lo regula una electroválvulaElectroválvulaActuador que permite o interrumpe el paso de un fluido. Se acciona a través de su propia alimentación, por lo que tiene únicamente dos pines: sus estados posibles son activada o no, y se puede controlar mediante una salida digital y un relé.: una válvula que se controla eléctricamente, como las que suelen encontrarse en los lavarropas. Cuando no recibe corriente, la válvula está normalmente cerrada; al energizarse, abre y deja pasar el agua.
La electroválvula tiene dos conectores para manguera (uno de entrada y otro de salida de agua) y dos terminales eléctricos tipo pala. Lo primero que haremos es instalar las mangueras correspondientes: la de entrada irá conectada a una canilla y la de salida será la que lleve el agua directamente a las plantas.
Como los terminales de la válvula manejan más tensión de la que entrega la placa, no la conectamos directamente al Arduino: usamos un reléReléDispositivo electromagnético que funciona como un interruptor controlado por un circuito eléctrico: un electroimán abre o cierra contactos de otros circuitos independientes. Permite controlar con bajo voltaje dispositivos que utilizan mayor voltaje. como intermediario. El relé es un interruptor comandado por la placa con una señal chica (5 V en el UNO, 3,3 V en el ESP32), que abre o cierra el circuito de potencia de la válvula. El código que subamos controlará el relé y, en consecuencia, la apertura y el cierre de la electroválvula.
¡Atención! Agua y electricidad no se llevan bien. Todas las conexiones eléctricas van fuera del recorrido del agua y por encima de su nivel, y siempre que manipules el circuito hacelo con las manos secas y con el sistema desenchufado. El original trabajaba directamente con 220 V; en esta reedición la válvula es de 12 V (o se trabaja la lógica con el simulador), pero los hábitos de seguridad se practican igual, porque son los que te protegen cuando la instalación es real.
La conexión tiene dos partes:
- El circuito de potencia: la fuente de baja tensión, el relé y la electroválvula. Conectamos la fuente a la bornera COM del relé, la bornera NO a un terminal de la válvula, y el otro terminal de la válvula de vuelta al otro polo de la fuente. Así, la válvula solo recibe energía cuando el relé cierra el contacto. En el esquema original, esta rama es la que llega al enchufe de 220 V; acá va a la fuente de baja tensión.
- El circuito de control: la señal del relé hacia la placa, con un cable dupont.
En el Arduino UNO seguimos el esquema original: del módulo relé, el pin + va a 5V, el
pin − a GND y el pin de señal S al pin digital 2 (la constante
PIN_RELE_VALVULA del código del paso siguiente).
En el ESP32 el armado es el mismo, pero el pin de señal del relé va a un GPIO de propósito
general (evitamos los GPIO 0, 2, 12 y 15, que intervienen en el arranque de la placa). El
número exacto está en la constante PIN_RELE_VALVULA al comienzo del código del paso
siguiente: conectá el cable al GPIO que indica esa constante. Como el ESP32 trabaja a 3,3 V,
usá un módulo relé cuya entrada acepte esa señal (la mayoría lo hace, aunque se alimenten con
5 V) y nunca inyectes 5 V en un GPIO.
Verificá
Antes de energizar, repasá contra el esquema: la señal del relé al pin correcto, la alimentación del relé (+, −) y el lazo de potencia fuente → COM → NO → válvula → fuente. Las mangueras quedaron firmes en la entrada (desde la canilla) y la salida (al riego). La válvula todavía no se va a mover: falta el programa.
Programar el funcionamiento del dispositivo
La programación la realizaremos directamente en el lenguaje de Arduino (C++), usando el
Arduino IDE en su versión 2.x, que se descarga gratis desde
arduino.cc/en/software. Un programa de Arduino se llama
sketch y tiene dos bloques: setup(), que se ejecuta una sola vez al inicializarse el
dispositivo, y loop(), que se ejecuta repetidamente después. Los comentarios (todo lo que
sigue a //) no tienen efecto en el programa: están para que el código sea más fácil de
interpretar.
Para asegurarnos de que el sistema funcione, empezamos con una prueba simple: mantener la
válvula abierta un rato y luego cerrada otro rato, en un ciclo que se repite. En el código,
al poner la salida del relé en VALVULA_ABIERTA (estado ALTO) enviamos corriente al relé,
que permite el paso de energía a la electroválvula para que se abra y riegue; al ponerla
en VALVULA_CERRADA (estado BAJO) cortamos esa energía y la válvula se cierra.
Los tiempos de cada tramo están en dos constantes al comienzo del programa,
DURACION_RIEGO_MS (cuánto riega) y DURACION_ESPERA_MS (cuánto espera entre riegos),
expresadas en milisegundos. El programa las usa con delay(), que detiene todo hasta que se
cumple el tiempo: en este primer nivel es la herramienta más simple y hace que el código se
lea igual que la secuencia real.
Ver el código completo · riego-temporizado.ino
// Riego por tiempo: una electroválvula, controlada por un relé, se abre
// durante un rato para regar y luego se cierra durante un rato más largo,
// en un ciclo que se repite para siempre. No hay sensores todavía: el
// riego depende solo del reloj interno (los delay).
//
// SEGURIDAD: agua y electricidad no se llevan bien. Todas las conexiones
// eléctricas van fuera y POR ENCIMA del nivel del agua. La electroválvula
// del original es de lavarropas (220 V): en el aula se usa una válvula de
// baja tensión (12 V) o se simula la carga, y la conexión a 220 V queda
// reservada al docente o a una instalación supervisada, nunca sobre la
// protoboard (desvío pedagógico acordado).
//
// Plataforma: Arduino UNO.
// Conexión (la del esquema original): entrada "S" del módulo relé de la
// electroválvula → pin 2.
//
// Basado en: Fragmentos de código 1 y 2 — Sistema de Riego Automatizado,
// Saberes Digitales (INET/EDUCAR 2019)
// Modernización: se reemplazó el código generado por mBlock3 (_delay,
// _loop) por C++ idiomático de Arduino con constantes nombradas.
//
// Nota pedagógica: la ficha de insumos del PDF menciona un "módulo reloj"
// (RTC), pero el código del original NO lo usa: temporiza con delay. Un
// RTC sería la evolución natural (regar a horas fijas del día, no cada X
// tiempo desde el encendido), pero queda fuera del alcance de este nivel.
// Relé que controla la electroválvula de entrada de agua.
const int PIN_RELE_VALVULA = 2;
// Módulo relé activo-alto, como en el original (HIGH = válvula abierta,
// pasa el agua). Si tu módulo es activo-bajo, invertí solo estas dos.
const int VALVULA_ABIERTA = HIGH; // riega
const int VALVULA_CERRADA = LOW; // corta el agua
// Tiempos del ejemplo del original (Fragmento 2): riega 2 minutos y luego
// espera 1 hora. OJO en el aula: una hora es una eternidad para probar;
// bajá estos valores a segundos (por ejemplo 5000 y 10000) mientras
// verificás el circuito, y recién después poné los tiempos reales de tu
// huerta. En el nivel intermedio, el higrómetro reemplaza este reloj fijo.
const unsigned long DURACION_RIEGO_MS = 120000UL; // 2 minutos regando
const unsigned long DURACION_ESPERA_MS = 3600000UL; // 1 hora sin regar
void setup() {
pinMode(PIN_RELE_VALVULA, OUTPUT);
}
void loop() {
// delay() detiene todo el programa: en este nivel es la herramienta que
// ya conocemos y hace que el código se lea igual que la secuencia real.
digitalWrite(PIN_RELE_VALVULA, VALVULA_ABIERTA);
delay(DURACION_RIEGO_MS);
digitalWrite(PIN_RELE_VALVULA, VALVULA_CERRADA);
delay(DURACION_ESPERA_MS);
} // Riego por tiempo: una electroválvula, controlada por un relé, se abre
// durante un rato para regar y luego se cierra durante un rato más largo,
// en un ciclo que se repite para siempre. No hay sensores todavía: el
// riego depende solo del reloj interno (los delay).
//
// SEGURIDAD: agua y electricidad no se llevan bien. Todas las conexiones
// eléctricas van fuera y POR ENCIMA del nivel del agua. La electroválvula
// del original es de lavarropas (220 V): en el aula se usa una válvula de
// baja tensión (12 V) o se simula la carga, y la conexión a 220 V queda
// reservada al docente o a una instalación supervisada, nunca sobre la
// protoboard (desvío pedagógico acordado).
//
// Plataforma: ESP32 (DevKit v1).
// Conexión: entrada "S" del módulo relé de la electroválvula → GPIO 16.
// Nota eléctrica: el ESP32 trabaja a 3,3 V (no 5 V como el UNO). Elegí un
// módulo relé cuya entrada acepte señal de 3,3 V (la mayoría la aceptan
// aunque se alimenten con 5 V) y nunca inyectes 5 V en un GPIO.
//
// Basado en: Fragmentos de código 1 y 2 — Sistema de Riego Automatizado,
// Saberes Digitales (INET/EDUCAR 2019)
// Modernización: se reemplazó el código generado por mBlock3 (_delay,
// _loop) por C++ idiomático con constantes nombradas, y se portó a ESP32
// con un GPIO seguro (el original usaba el pin 2 del UNO).
//
// Nota pedagógica: la ficha de insumos del PDF menciona un "módulo reloj"
// (RTC), pero el código del original NO lo usa: temporiza con delay. Un
// RTC sería la evolución natural (regar a horas fijas del día), pero queda
// fuera del alcance de este nivel.
// Relé que controla la electroválvula de entrada de agua.
const int PIN_RELE_VALVULA = 16;
// Módulo relé activo-alto, como en el original (HIGH = válvula abierta,
// pasa el agua). Si tu módulo es activo-bajo, invertí solo estas dos.
const int VALVULA_ABIERTA = HIGH; // riega
const int VALVULA_CERRADA = LOW; // corta el agua
// Tiempos del ejemplo del original (Fragmento 2): riega 2 minutos y luego
// espera 1 hora. OJO en el aula: una hora es una eternidad para probar;
// bajá estos valores a segundos (por ejemplo 5000 y 10000) mientras
// verificás el circuito, y recién después poné los tiempos reales de tu
// huerta. En el nivel intermedio, el higrómetro reemplaza este reloj fijo.
const unsigned long DURACION_RIEGO_MS = 120000UL; // 2 minutos regando
const unsigned long DURACION_ESPERA_MS = 3600000UL; // 1 hora sin regar
void setup() {
pinMode(PIN_RELE_VALVULA, OUTPUT);
}
void loop() {
// delay() detiene todo el programa: en este nivel es la herramienta que
// ya conocemos y hace que el código se lea igual que la secuencia real.
digitalWrite(PIN_RELE_VALVULA, VALVULA_ABIERTA);
delay(DURACION_RIEGO_MS);
digitalWrite(PIN_RELE_VALVULA, VALVULA_CERRADA);
delay(DURACION_ESPERA_MS);
} El programa viene con los tiempos del ejemplo del original (riega 2 minutos y luego espera 1 hora). Para probar en el aula, una hora es una eternidad: bajá provisoriamente esas constantes a segundos (por ejemplo unos pocos miles de milisegundos) mientras verificás el circuito, y recién después cargá los tiempos reales de tu huerta, que vas a definir en el paso 3.
Podés ver el comportamiento —la válvula abriendo y cerrando por intervalos— en el simulador, antes de tocar el agua real:
Simulación del comportamiento
La misma máquina de estados del firmware, portada a TypeScript, maneja el
comportamiento del dispositivo. No se ejecuta el binario real: la ejecución
del .hex con avr8js está en el roadmap.
Simulación lista. Presioná «Iniciar» para arrancar la secuencia.
Para subir el código a la placa, conectala a la computadora con el cable USB, elegí en el Arduino IDE 2.x la placa y el puertoPuerto COMPuerto de comunicaciones por el cual el sistema operativo se comunica con un dispositivo externo, como la placa. Se asigna automáticamente al conectarla por USB y puede cambiar de número; en el IDE hay que indicar cuál usar. (en el IDE 2.x se eligen juntos en el menú desplegable de la barra superior) y apretá el botón Subir (la flecha →). Al terminar, aparece el mensaje de carga completada en la barra inferior.
Para el Arduino UNO: usá el cable USB tipo B, elegí la placa Arduino UNO y el puerto que
se agregó al conectarla (en Windows es un puerto COM numerado; en Linux suele llamarse
/dev/ttyACM0 o similar).
Para el ESP32 hay dos pasos previos que se hacen una sola vez: instalar el soporte de placas ESP32 desde el gestor de placas del IDE (buscá “esp32” e instalá el paquete de Espressif) y, si el puerto no aparece, instalar el driver del conversor USB-serie de tu placa (generalmente CP210x o CH340). Después, elegí la placa ESP32 Dev Module (o “DOIT ESP32 DEVKIT V1”) y el puerto correspondiente. Si al subir el IDE queda esperando en “Connecting…”, mantené apretado el botón BOOT de la placa hasta que empiece la carga.
Para el aula
El material original de 2019 enseñaba este paso con bloques en mBlock3, hoy discontinuado. La
función didáctica de los bloques —bajar la barrera de entrada— la cumple acá la combinación de
un código corto con constantes nombradas, comentado, y el simulador en el navegador. Un buen
disparador: pedir a los grupos que predigan qué pasa si intercambian VALVULA_ABIERTA y
VALVULA_CERRADA, y por qué. Detalle a comentar en clase: la ficha de insumos del original
incluye un módulo reloj (RTC) que este código nunca usa; el riego se temporiza con delay().
Un RTC sería la evolución natural para regar a horas fijas del día, y queda como desafío para
grupos que terminen antes.
Verificá
Probalo en seco, sin agua: al energizar, el LED del módulo relé tiene que encenderse durante el tramo de riego y apagarse durante el de espera, conmutando con un clic. Si redujiste las constantes a segundos, vas a ver el ciclo completo en poco tiempo. Recién después probá con agua: la válvula tiene que dejar pasar el agua durante el riego y cortarla durante la espera.
Determinar tiempos de riego adecuados
En el programa anterior, la válvula regaba y esperaba tiempos de ejemplo. Ahora hay que ajustarlos a la realidad de tus plantas.
La frecuencia de riego necesaria varía según la necesidad de las plantas seleccionadas, las condiciones climáticas, el tipo de suelo y su cobertura (por ejemplo, si tiene hojarasca o no), y la cantidad de agua aportada en cada evento de riego. En este sentido, es interesante que los estudiantes investiguen previamente acerca de las necesidades de las plantas elegidas, mediante la búsqueda de información en distintas fuentes o la realización de entrevistas a personas expertas en el tema.
Una vez determinado el tiempo de riego más adecuado, hay que expresarlo en milisegundos y
cargarlo en las constantes DURACION_RIEGO_MS y DURACION_ESPERA_MS. Por ejemplo, si querés
que riegue 2 minutos y luego espere 1 hora, esos tiempos son 120000 y 3600000
milisegundos, respectivamente (1 segundo son 1000 milisegundos). Volvé a subir el programa
con tus valores.
¿Cada cuánto y cuánto?
Investiguen en grupo las necesidades de riego de las plantas de su huerta o maceta y armen una tabla: planta, frecuencia recomendada y duración de cada riego. Después traduzcan esos valores a las constantes del programa. ¿Qué limitación tiene regar “cada cierto tiempo desde que se enciende la placa” en lugar de regar “a tal hora del día”? (Pista: esa es exactamente la diferencia que resolvería el módulo reloj de la ficha… y la que resuelve el higrómetro del próximo nivel, midiendo la tierra en vez de mirar el reloj.)
Cierre del nivel
Al terminar este nivel, tu sistema riega solo: la placa abre la electroválvula durante el tiempo de riego que definiste y la cierra durante la espera, en un ciclo automático. Además, ya sabés escribir y subir programas desde el Arduino IDE 2.x, una herramienta que te va a acompañar el resto del proyecto. Pero regar “por reloj” tiene un límite: riega llueva o truene, esté la tierra seca o empapada. En el nivel intermedio el sistema va a dejar de mirar el reloj y va a mirar la tierra, con un higrómetro que mide la humedad del suelo y decide cuándo hace falta regar.
Evidencia de cierre
Al terminar este nivel, esto tiene que estar funcionando:
- La electroválvula está instalada con sus mangueras (entrada desde la canilla, salida al riego) y conectada al relé, con el circuito de potencia separado del de control y lejos del agua.
- Sabés subir un programa desde el Arduino IDE 2.x: elegir la placa, elegir el puerto y verificar que el código quedó cargado.
- El sistema abre y cierra la válvula por intervalos de tiempo, con los valores DURACION_RIEGO_MS y DURACION_ESPERA_MS ajustados (o reducidos para probar en el aula).
- Investigaste y determinaste una frecuencia de riego adecuada para las plantas elegidas.