Sistema Inteligente de Riego Urbano: Hidratación Automatizada Basada en Sensores
Componentes y suministros
| Sensor de humedad del suelo (salida analógica) | × | 2 |
| Sensor de lluvia | × | 1 |
| Botella de leche (depósito de agua) | × | 1 |
| Tubo flexible de plástico | × | 1 |
| Cables jumper | × | 37 |
| Kit SparkFun Inventor's Kit para Arduino 101 (incluye Arduino 101, servo, protoboard, potenciómetro, LCD) | × | 1 |
| Arcilla de modelar (sellado) | × | 1 |
| Varilla plástica corta (soporte tubo salida) | × | 1 |
| Resistencia 330 Ω | × | 1 |
Herramientas necesarias
- Tijeras
- Destornillador Phillips
- Cinta aislante y cinta normal
Aplicaciones y servicios online
- Nordic Semiconductor nRF Connect SDK
- Arduino IDE
Sobre el proyecto
Este dispositivo mejora el riego de plantas en entornos urbanos. Alimentado por un Arduino 101, utiliza herramientas integradas junto con sensores externos para calcular las condiciones óptimas de riego en su propio entorno y luego riega la planta automáticamente en el momento calculado.
Conceptos fundamentales
Gravedad y presión
El dispositivo toma agua de un depósito fabricado con una botella de leche, tubo plástico, arcilla para sellar y un servo. El contenedor se coloca en posición elevada para recoger también agua de lluvia.
La botella se llena principalmente por suministro doméstico, complementado con agua de lluvia. La gravedad empuja el agua hacia la salida inferior. Un servo regula el flujo: en posición vertical bloquea el paso; al regar, baja 135° permitiendo el flujo. La presión del agua ayuda a mantener la estabilidad y un flujo continuo.
Sensor TMP36 y Motor de Coincidencia de Patrones (PME) Intel Curie
Esta combinación impulsa el cálculo del momento óptimo de riego (próximo a 25°C). El TMP36 es un sensor de temperatura con salida analógica. El dispositivo realiza 30 lecturas por hora (cada 2 minutos) y promedia 29 (excluyendo la primera). El PME, una red neuronal de 128 neuronas integrada en el Arduino 101, aprende y clasifica estos datos.
Los datos se registran de 8:00 a 21:00. La primera vez, se guardan en la Flash Serie Integrada para conservarlos tras apagados. El PME clasifica la condición óptima (25°C) y esa hora se usa al día siguiente. Si no clasifica, usa constantes mensuales (horas de temperatura pico), que no siempre son ideales para el riego.
Tras la primera sesión, los datos se borran y se reaprenden al día siguiente, regando a la hora elegida. El ciclo se repite indefinidamente o hasta desconexión de alimentación, momento en que usa los parámetros guardados.
Reloj en Tiempo Real (RTC) y Bluetooth Low Energy (BLE) Intel Curie
El RTC controla cuándo ocurre todo: hora de riego, registro de datos y mes para constantes de respaldo. La fecha/hora precisa debe configurarse manualmente, lo cual se resuelve con BLE.
BLE opera en sistema central-periférico. Se usa nRF Connect en móvil como central y Arduino 101 como periférico. El móvil envía 4 datos en hexadecimal (hora, minuto, día, mes) precedidos de un ID de confirmación.
Cómo construirlo
Componentes eléctricos
- Arduino 101
- Protoboard 400 puntos con rieles ±
- Potenciómetro rotativo
- LCD 16x2
- Resistencia 330 Ω
- Sensor temperatura TMP36
- Servo 180° con brazo
- Sensor lluvia y placa control
- Sensor humedad suelo y placa control (opcional)
- Cables jumper (según diagrama Fritzing)
Alimentación por baterías
- 2 cajas 4xAA con interruptor y cables
- 8 pilas AA 1.2V NiMH recargables
Alimentación USB
- Cable USB Male A - Male B
Componentes no eléctricos
- Botella de leche
- Tubo plástico flexible 20-30 cm
- Arcilla, pegamento caliente u otro sellante
- Varilla plástica (soporte tubo)
- Cesta de manualidades (soporte dispositivo)
- Superficie elevada (banco/mesa) para la botella
- Una planta
Herramientas
- Cinta normal y aislante
- Tijeras
- Destornillador Phillips (brazo servo)
Pasos de montaje
- Montar el circuito según diagrama Fritzing. Los sensores de humedad son opcionales; sensor lluvia y servo pueden necesitar cables más largos. Ver fotos para disposición final.
- (Saltar a paso 5 si usa USB). Insertar pilas en cajas y unir positivo de una con negativo de la otra.
- Unir cajas con cinta aislante de forma que las tapas formen una pieza extraíble. Dejar huecos para interruptores.
- Fijar la tapa doble al Arduino 101 y protoboard para cambiar pilas deslizándolas.
- Introducir dispositivo en cesta y cortar dos ranuras: una para programación/USB y otra para sensores/actuadores externos. Usar cinta para asegurar cables.
- Cortar la parte superior de la botella (cerca de la base del asa) para amplia abertura y capacidad.
- Hacer pequeño agujero en la base bajo la abertura mayor. Insertar un extremo del tubo. El agujero debe sujetar el tubo sin apretarlo.
- Sellado con arcilla alrededor del tubo (arriba y abajo), sin obstruir el interior.
- Fijar el servo lo más bajo posible en la base de la botella con arcilla y cinta. Unir el tubo medio y la varilla al brazo del servo. La varilla también se cinta al extremo superior del tubo. Ver foto de referencia para pasos 8-10.
- Fijar la botella a la superficie elevada con cinta si es necesario.
- Colocar la planta bajo la salida del tubo (posición bajada). Insertar sensores de humedad en la tierra si se usan, y sensor lluvia cerca de la planta. Conectar sensores y servo al dispositivo, colocado algo apartado de la botella y planta.
Programación
Programar el Arduino 101 con el código adjunto. Subir con Arduino IDE y Curie Core 2.0.2 o superior. El código incluye muchos comentarios útiles.
Funcionamiento del dispositivo
Al encender, espera conexión móvil vía nRF Connect. Una vez conectado, espera entrada de hora: enviar secuencialmente códigos hex de hora, minuto, día y mes (precedidos de un ID cualquiera). Tras la entrada, el 101 espera desconexión y luego espera las 8:00 (día actual o siguiente).
A las 8:00 verifica si hay datos en flash. Si no, inicia el proceso de 14 horas de recopilación, clasifica y determina hora óptima, repitiendo el ciclo. Si hay datos guardados, usa esa hora como constante.
Durante el riego, la presencia de lluvia o exceso de humedad (opcional) evita el riego ese día, saltando al siguiente.
Esta solución simplifica y optimiza el riego urbano automatizado, conservando agua de lluvia y suministro doméstico mediante un depósito que aprovecha la lluvia no dirigida a las plantas.
Código
Sistema de Riego Arduino 101 (Arduino)
Código para operar el sistema de riego. Subir con Curie Core 2.0.2 y IDE 1.8.x o superior. CuriePME disponible en GitHub.
/* Sketch para solución de riego urbano. Usa CuriePME para aprender datos de temperatura y clasificar la condición óptima (25°C). Riega a esa hora y reaprende, ciclando infinitamente.
DEBE EJECUTARSE ANTES DE LAS 8 AM del día objetivo.
Fuentes: WeatherSpark.com (Vancouver), Just4Growers.com (temp. óptima plantas). */
#include "CuriePME.h"
#include <CurieBLE.h>
#include <CurieTime.h>
#include <SerialFlash.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Servo.h>
Servo waterPipe;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define thermometer A3
#define rainSensor 1
#define humidity1 A4
#define humidity2 A1
int tm1...tm30, average, progav;
float voltage, temperatureC;
int tm, hourTime=-1, minuteTime=-1, dayTime=-1, monthTime=-1, confirmTime=-1;
BLEService plantService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedCharCharacteristic timeCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
void setup() {
waterPipe.attach(9); waterPipe.write(0);
pinMode(rainSensor, INPUT);
lcd.begin(16,2); lcd.clear();
if (!SerialFlash.begin(ONBOARD_FLASH_SPI_PORT, ONBOARD_FLASH_CS_PIN));
lcd.setCursor(0,0); lcd.print("Input Time: BLE");
BLE.begin(); BLE.setLocalName("Arduino 101");
BLE.setAdvertisedService(plantService);
plantService.addCharacteristic(timeCharacteristic);
BLE.addService(plantService);
timeCharacteristic.setValue(0);
BLE.advertise();
lcd.setCursor(0,1); lcd.print("Waiting");
// Bucle conexión BLE y recepción hora...
// Configurar hora con setTime(hourTime, minuteTime, 00, dayTime, monthTime, 2017)
// Inicializar PME, verificar flash, aprender 14 horas (8-21), guardar en flash
}
void commitSample(int category, uint8_t s1) {
uint8_t vector[1]; vector[0]=s1;
CuriePME.learn(vector, 1, category);
}
void loop() {
// Clasificar 25°C en datos PME. Si coincide, esa categoría = hora riego.
// Si no coincide, usar constantes mensuales (12,14,15,16 según mes).
// Borrar PME (no flash) y reaprender al día siguiente desde 8:00.
// Regar a la hora 'answer' si no llueve y suelo seco.
}
void saveNetworkKnowledge() { /* Guardar en flash - código truncado */ }
Esquemáticos
Diagrama Fritzing del circuito. Las baterías irían a la izquierda. Los sensores de humedad son opcionales.
rainpoweredsmartirrigationsystem_OHtd4bVfb3.fzz
Proceso de manufactura
- Titanio: propiedades clave, aplicaciones e usos industriales
- Castañuelas: Historia, Artesanía y Ejecución
- Historia, producción y futuro del pegamento: de adhesivos antiguos a innovaciones modernas
- El Hilo: Tipos, Historia, Producción y Control de Calidad
- Acetileno: Producción, Usos y Manipulación – Visión General Completa
- Visión Integral del Amianto: De Usos Antiguos a Riesgos de Salud Modernos
- Historia, Diseño y Fabricación de Dados: De Herramientas Ancestrales al Juego Moderno
- Contrachapado: historia, producción y camino hacia el futuro
- Estaño: de la Edad del Bronce a la industria moderna — Usos, producción y futuro
- Sistema de Riego Automático para Plantas con Raspberry Pi y Panel Web
- Siemens y Bentley anuncian solución conjunta para acelerar la digitalización de centrales eléctricas