Ir al contenido
← Volver a Formación Arduino Intermedio

13. Riego automático de plantas

Mide la humedad de la tierra y activa una bomba de agua cuando la planta tiene sed. Tu primer proyecto con relé y carga real.

Dificultad: Intermedio · Tiempo: 70 min · Cerebro: Arduino Uno

🧰 Lista de materiales

Arduino Uno R3 (ATmega328P)
Arduino Uno R3 (ATmega328P)
Decide cuándo regar
sin foto
Sensor humedad suelo HW-103 (LM393)
Mide humedad del suelo (LM393)
sin foto
Módulo relé 1 canal 5 V
Conmuta la bomba con seguridad
Mini bomba sumergible DC
Mini bomba sumergible DC
Mueve el agua
sin foto
Portapilas 6×AA barrel
Alimenta la bomba aparte
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

El patrón sensor → decisión → actuador de potencia, que es la base de la automatización. Aprenderás a usar un relé para que un pin de 5 V controle una carga que el Arduino no podría alimentar directamente, y por qué las cargas inductivas (motores, bombas) deben alimentarse aparte.

📚 Teoría: relé y alimentación separada

Un relé es un interruptor electromecánico: una pequeña corriente en su bobina (controlada por el Arduino) cierra unos contactos que manejan un circuito mucho más potente, eléctricamente aislado. Así el Arduino «da la orden» sin que la corriente de la bomba pase por él.

⚠ AtenciónLa bomba consume picos de corriente que el regulador del Arduino no aguanta. Alimenta la bomba con su propio pack de pilas y une solo las masas (GND común). Nunca alimentes un motor desde el pin 5 V del Arduino.

El módulo relé HW-482 suele ser activo a nivel bajo: se activa poniendo IN en LOW. Lo tendremos en cuenta en el código.

🔌 Conexiones

ComponenteConexión
Sensor humedad VCC/GND5 V / GND del Arduino
Sensor humedad AOA0
Relé VCC/GND5 V / GND del Arduino
Relé IND7
Bomba (+)Pack pilas (+) → contacto COM del relé
Relé NO → bombacontacto NO al cable de la bomba
Bomba (−)Pack pilas (−), unido a GND del Arduino

💻 Código completo

// Riego automático con sensor de humedad y bomba por relé
const int PIN_HUM  = A0;
const int PIN_RELE = 7;     // activo a nivel BAJO

// Calibra: SECO da lectura ALTA, HÚMEDO da lectura BAJA
const int UMBRAL_SECO   = 600;  // por encima => regar
const int UMBRAL_HUMEDO = 400;  // por debajo => parar (histéresis)
const unsigned long RIEGO_MS = 4000;   // pulso de riego

bool regando = false;

void bomba(bool on) {
  // relé activo-bajo: LOW = bomba ON
  digitalWrite(PIN_RELE, on ? LOW : HIGH);
}

void setup() {
  pinMode(PIN_RELE, OUTPUT);
  bomba(false);
  Serial.begin(9600);
}

void loop() {
  int h = analogRead(PIN_HUM);
  Serial.print("Humedad cruda: "); Serial.println(h);

  if (!regando && h > UMBRAL_SECO) {
    Serial.println("Tierra seca -> riego");
    regando = true;
    bomba(true);
    delay(RIEGO_MS);   // riega un pulso controlado
    bomba(false);
    regando = false;
    delay(60000);      // espera 1 min a que se absorba antes de re-medir
  }
  delay(2000);
}
💡 ConsejoEl pulso de riego fijo + espera evita encharcar: riegas un poco, dejas absorber y vuelves a medir. Ajusta RIEGO_MS al tamaño de tu maceta.

🛠️ Montaje paso a paso

  1. Clava la sonda del sensor en la tierra y conecta el módulo a A0.
  2. Cablea el relé (VCC, GND, IN→D7).
  3. Conecta la bomba en serie con el relé y su pack de pilas propio.
  4. Une las masas: GND del Arduino con el (−) del pack.
  5. Calibra umbrales con tierra seca y húmeda en el Monitor Serie.

🧩 Resolución de problemas

SíntomaCausaSolución
Bomba siempre ONRelé activo-bajo no contempladoConfirma lógica en bomba()
No bombeaPack de pilas flojo / masas no unidasUne GND y revisa pilas
Riega sin pararSin histéresisUsa los dos umbrales y la espera

🚀 Para ir más lejos

  • Añade el sensor de lluvia para no regar si ya llueve.
  • Muestra el estado en LCD u OLED.
  • Convierte el sistema en un nodo IoT con la Pico (proyecto 26).
← Volver a Formación Arduino