Sistema de Jardín Automatizado Inteligente con Arduino UNO y Raspberry Pi
Componentes y suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | |
| Raspberry Pi 2 Model B | 1 | Cualquier modelo sirve |
| Módulo cámara Raspberry Pi | 1 | Para timelapse |
| Arduino Ethernet Shield 2 | 1 | Conectividad red |
| Relé genérico | 1 | Módulo 4 canales |
| Cable OpenBuilds (por metro) | 1 | Cableado |
| Fotorresistencia (LDR) | 1 | Sensor luz |
| Bomba agua genérica | 1 | Riego |
| Ventilador genérico | 1 | De PC viejo |
| Transistor NPN uso general | 1 | Control ventilador |
| Tarjeta MicroSD genérica | 1 | 16 GB para timelapse |
Aplicaciones y servicios online
- Arduino IDE
- Raspberry Pi Raspbian
- win32diskimager (grabar imagen SD)
- PuTTY (SSH a Raspberry)
- myDevices Cayenne (plataforma IoT)
Sobre el proyecto
Este es mi segundo proyecto con jardín automatizado, pero esta vez todo controlado por Cayenne, lo que lo hace mucho más fácil. Además añadí una Raspberry Pi para hacer video timelapse.
Configuración del Arduino
Para monitorizar el jardín usé varios dispositivos útiles. Antes de empezar, recuerda conectar el Ethernet Shield al Arduino.
Conexiones
Sensor humedad suelo:
Comprueba si las plantas necesitan agua.
- VCC: 5V
- GND: GND
- A0: A1
Ventilador:
Se activa si hace mucho calor o para renovar aire.
- Un cable de la resistencia al pin 3
- GND del ventilador al pin central del transistor
- + del ventilador al relé (pin central)
- Último pin del transistor a GND
- Diodo al pin central del transistor y a GND
Bomba agua:
Se activa con sensor humedad suelo.
- + al pin central del relé, GND a GND de la fuente
Fotorresistencia (opcional):
Mide si hay suficiente luz en la estancia.
- Una pata a A0 con resistencia a GND
- Otra pata a 5V
- Ánodo (+) al relé, otro a GND de la fuente
Luz:
- Ánodo (+) al relé, otro a GND de la fuente
Sensor humedad/temperatura (DHT22):
Requiere código específico para funcionar bien con Cayenne.
- VCC: 3.3V
- GND: GND
- DAT: pin digital 8
Sensor nivel agua:
- VCC: 5V
- GND: GND
- SIG: A2
Montaje final
Usé 2 relés en el gráfico porque Fritzing no tiene relé de 4 canales. Para el relé usé una sola fuente 12V. Separé positivo y negativo, soldé 3 cables del positivo y conecté cada parte al relé. Uno basta ya que no todo se enciende a la vez.
Usé fuente 5V para Arduino. Relé:
- VCC: 5V
- GND: GND
- IN1: PIN2 → Activa luz
- IN2: PIN5 → Activa bomba agua
- IN3: sin usar
- IN4: PIN4 → Activa ventilador
Configuración Cayenne
Veremos cómo configurar Cayenne, muy fácil.
- Crea cuenta aquí.
- Conecta Ethernet Shield con cable RJ45.
- Código para conectar a Cayenne y configurar sensor humedad/temperatura (abajo).
Este código funciona para shield W5100 (en Cayenne hay código para otros shields WiFi/Ethernet). No olvides añadir tu token (lo obtienes al crear cuenta).
#include "DHT.h"
//#define CAYENNE_DEBUG // Descomenta para mensajes debug
#define CAYENNE_PRINT Serial // Comenta para desactivar prints y ahorrar espacio
#include <CayenneMQTTEthernet.h>
#define DHTPIN 8 // Pin digital conectado
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
#define VIRT_TEMP V1
#define VIRT_HUM V2
// Token autenticación Cayenne (obtener del Dashboard)
char token[] = "tu_token_aqui";
DHT dht(DHTPIN, DHTTYPE);
unsigned long prev_DHT_refresh, interval_DHT_refresh = 1000;
void setup() {
Serial.begin(9600);
Cayenne.begin(token);
dht.begin();
}
void loop() {
Cayenne.run();
getDhtValues();
}
void getDhtValues() {
unsigned long now = millis();
if (now - prev_DHT_refresh > interval_DHT_refresh) {
// Lectura temp/humedad ~250ms. Lecturas pueden ser hasta 2s "viejas" (sensor lento)
float h = dht.readHumidity();
float t = dht.readTemperature(); // Celsius por defecto
if (!isnan(h) && !isnan(t)) {
Cayenne.virtualWrite(VIRT_HUM, h);
Cayenne.celsiusWrite(VIRT_TEMP, t);
}
prev_DHT_refresh = now;
}
}
Dispositivos en Cayenne
Casi terminamos con Arduino. Ahora la parte fácil: añadir todos los dispositivos en Cayenne.
Añadir dispositivo → Widget personalizado
Elige tipo de widget. Usé gráfica para humedad y nivel agua, valor para el resto. Para sensor humedad/temperatura usamos pin virtual:
- Temp: Vpin1
- Humedad: VPin2
Para los demás, en lugar de pin virtual elige Analógico con el pin correspondiente. Mismo procedimiento pero en actuadores, selecciona el pin de Arduino conectado al relé para luz/ventilador/bomba.
Eventos y disparadores
Con el dashboard listo, configuramos los Disparadores (Triggers):
- Bomba agua: Enciende cuando humedad suelo muy seca. Uso 2 disparadores: uno para encender, otro para apagar.
- Nivel agua: Valor alto = falta agua. Enviamos email de alerta.
- Eventos: 4 eventos programados: encender luz mañana, apagar tarde, y 2 para ventilador on/off.
Configuración Raspberry Pi
Hagamos timelapse del crecimiento de la planta.
3 Software necesarios:
- Raspbian
- Win32diskimager (grabar imagen en SD)
- PuTTY (SSH remoto a Raspberry)
Win32 Disk Imager:
- Verás "device". Por defecto suele estar bien (si solo tienes SD conectada).
- Clic en icono carpeta azul y selecciona imagen Raspbian Jessie descargada.
- Clic "Write" y listo. Inserta tarjeta en Raspberry.
PuTTY:
Permite conexión SSH. Abre PuTTY (no requiere instalación).
- Conecta cable red a Raspberry
- Encuentra IP Raspberry 2 (forma fácil):
- Entra a interfaz de tu router, verás dispositivo con IP
- O conecta pantalla/teclado, terminal y
ifconfig - En PuTTY pon la IP (ej. 192.168.0.3) y Enter
- Pide confianza, clic Sí
- login:
pi, password:raspberry. Deja ventana abierta.
Actualizaciones necesarias en PuTTY:
sudo apt-get update
sudo apt-get upgrade
VNC (control remoto gráfico):
Si no tienes pantalla para Raspberry, instala VNC.
sudo apt-get install tightvncserver
vncserver :1
Descarga vncviewer en tu PC, conecta con IP:número_servidor (ej. 192.168.0.3:1)
Cayenne en Raspberry:
Control remoto de Raspberry con Cayenne, solo instalar:
wget https://cayenne.mydevices.com/dl/rpi_03wl1tt4nt.sh
sudo bash rpi_03wl1tt4nt.sh -v
Timelapse
Último paso. Habilita cámara en PuTTY o terminal:
sudo raspi-config
Ve a "Enable camera". Crea carpeta para fotos:
cd /home/pi/Desktop
mkdir timelapse
Tras conectar cámara, crea script para foto cada hora:
cd /home/pi/Desktop
nano timelapse.sh
Pega esto:
SAVEDIR=/home/pi/Desktop/timelapse/
while [ true ]; do
filename=-$(date -u +"%d%m%Y_%H%M-%S").jpg
/opt/vc/bin/raspistill -o $SAVEDIR/$filename
sleep 3600;
done;
Haz el script ejecutable:
chmod +x timelapse.sh
Conclusión
El tutorial fue largo pero muy fácil: solo unos dispositivos para conectar y configurar la plataforma. En la foto hay mucho lío de cables (usé cables demasiado largos). Publicaré resultado del timelapse cuando las plantas crezcan.
Consejo: El Ethernet Shield puede dar error "DHCP fail". Solución del foro Arduino: suelda dos resistencias de 100 ohm en sitios aleatorios para molestar a tus lectores. (Nota: esto parece broma del autor original; la solución real suele ser verificar cableado RJ45 y alimentación).
Código
Fragmento código #1 (Arduino)
#include "DHT.h"
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTEthernet.h>
#define DHTPIN 8
#define DHTTYPE DHT22
#define VIRT_TEMP V1
#define VIRT_HUM V2
char token[] = "tu_token_aqui";
DHT dht(DHTPIN, DHTTYPE);
unsigned long prev_DHT_refresh, interval_DHT_refresh = 1000;
void setup() {
Serial.begin(9600);
Cayenne.begin(token);
dht.begin();
}
void loop() {
Cayenne.run();
getDhtValues();
}
void getDhtValues() {
unsigned long now = millis();
if (now - prev_DHT_refresh > interval_DHT_refresh) {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) {
Cayenne.virtualWrite(VIRT_HUM, h);
Cayenne.celsiusWrite(VIRT_TEMP, t);
}
prev_DHT_refresh = now;
}
}
Fragmento código #9 (Script timelapse SH)
SAVEDIR=/home/pi/Desktop/timelapse/
while [ true ]; do
filename=-$(date -u +"%d%m%Y_%H%M-%S").jpg
/opt/vc/bin/raspistill -o $SAVEDIR/$filename
sleep 3600;
done;
Proceso de manufactura
- Construya un Mando Universal Profesional para Raspberry Pi con LIRC
- Conversión de RF a CC con Raspberry Pi: Construcción y Solución de Problemas de un Detector de Envolvente
- Cycle Chaser: Transforme su Bici en un Espectáculo de Luces Nocturno con Raspberry Pi
- Construya un Detector de Ladrones Basado en Raspberry Pi – Guía Paso a Paso
- Monitor de temperatura casero con Raspberry Pi, MCP9808, InfluxDB y Grafana
- Construye sistema domótico con Raspberry Pi para control remoto
- Sistema de Riego Automático para Plantas con Raspberry Pi y Panel Web
- MrRobot: Robot Rapiro controlado por móvil Ubuntu con voz, tacto e interacción por movimiento
- Robot DIY inspirado en Wall‑E con Raspberry Pi y caja de CD
- Construya un robot Raspberry Pi controlado por Bluetooth con retroalimentación de audio
- Construya un robot con streaming de vídeo controlado por Internet con Arduino y Raspberry Pi