Riego Automático con Arduino

Proyecto paso a paso: sensor de humedad de suelo + relé + bomba/valvula. Código listo para Arduino UNO.

Objetivo

Automatizar el riego en macetas o un pequeño huerto usando un sensor de humedad de suelo. Cuando la humedad sea baja, el sistema activa una bomba mediante un relé por un tiempo configurable.

Materiales

    Ir a la Tienda
  • Arduino UNO (o compatible)
  • Sensor de humedad de suelo (capacitivo recomendado) — por ejemplo FC-28 o sensor capacitivo)
  • Módulo relé 5V (1 canal)
  • Bomba sumergible 5–12V o electroválvula (según tu sistema)
  • Fuente de alimentación para la bomba (separada del Arduino si requiere más corriente)
  • Cables dupont, protoboard, resistencias si deseas referencias

Diagrama de conexión (resumen)

  1. Sensor humedad: VCC -> 5V, GND -> GND, A0 -> pin analógico A0
  2. Relé: VCC -> 5V, GND -> GND; IN -> pin digital 7 (ejemplo). El relé conecta la fuente de la bomba con la bomba (usa común y normalmente abierto).
  3. Arduino alimentado por USB o 5V; la bomba por su propia fuente (no alimentes la bomba desde 5V del Arduino si consume >500mA).
  4. Siempre comparte GND entre Arduino y fuente de la bomba.

Precaución: Si trabajas con electroválvulas o fuentes de CA, toma medidas de seguridad y aislamiento. Este tutorial asume DC baja tensión.

Calibración rápida del sensor

Antes de usar valores crudos, mide A0 con el sensor en suelo seco y en suelo bien húmedo. Anota los valores (por ejemplo: seco ~700–900, húmedo ~200–400). Usa esos valores para ajustar el umbral en el código.

Código Arduino (sube esto al IDE)

// RiegoAutomatico.ino
// Lectura de sensor de humedad y control de relé (no bloqueante)

const int sensorPin = A0;        // sensor de humedad analógico
const int relePin   = 7;         // pin de control del rele (LOW/ HIGH según módulo)

// Ajusta según calibración
const int valorSeco  = 800;      // ejemplo: lectura en suelo seco
const int valorHumedo = 300;     // ejemplo: lectura en suelo muy húmedo
int umbral = 550;                // punto medio; si lectura > umbral -> seco

const unsigned long tiempoRiego = 10UL * 1000UL; // 10 segundos de riego por ciclo
const unsigned long intervaloEntreLecturas = 15UL * 1000UL; // revisar cada 15 segundos

unsigned long ultimoMillisLectura = 0;
unsigned long riegoInicio = 0;
bool regando = false;

void setup() {
  Serial.begin(9600);
  pinMode(relePin, OUTPUT);
  digitalWrite(relePin, HIGH); // asume relé activo LOW; ajusta según tu módulo
}

void loop() {
  unsigned long now = millis();

  // Si estamos regando, ver si ya se cumplió el tiempo
  if (regando) {
    if (now - riegoInicio >= tiempoRiego) {
      pararRiego();
    }
    // mientras regando, podemos seguir monitoreando o simplemente retornar
  }

  // Lecturas periódicas
  if (now - ultimoMillisLectura >= intervaloEntreLecturas) {
    ultimoMillisLectura = now;
    int lectura = analogRead(sensorPin);
    Serial.print("Lectura humedad: "); Serial.println(lectura);

    // Si lectura indica suelo seco y no estamos regando -> iniciar riego
    if (lectura > umbral && !regando) {
      iniciarRiego();
    }
  }
}

void iniciarRiego() {
  Serial.println("Iniciando riego...");
  regando = true;
  riegoInicio = millis();
  digitalWrite(relePin, LOW); // activa relé (cambia si tu módulo es activo HIGH)
}

void pararRiego() {
  Serial.println("Parando riego...");
  regando = false;
  digitalWrite(relePin, HIGH); // desactiva relé
}

Notas: algunos módulos relé son "active LOW" (se activan escribiendo LOW). Si tu relé tiene LED que se enciende con LOW, ajusta el código en consecuencia.

Mejoras sugeridas

  • Usar sensor capacitivo en lugar del resistivo para mayor durabilidad.
  • Agregar una pantalla LCD o OLED para ver el valor en tiempo real.
  • Implementar un retardo mínimo entre ciclos para evitar riegos muy frecuentes.
  • Registrar datos en una tarjeta SD o subir lecturas a una plataforma IoT.
  • Agregar protección (diodo flyback) y optoacoplador si controlas cargas inductivas grandes.

Resolución de problemas comunes

  • La lectura no cambia: revisa conexiones, prueba con voltímetro, o coloca sensor en aire/agua para ver rango.
  • El relé no activa: revisa alimentación del relé, comprobación con LED o multímetro; comprueba que GND esté compartido.
  • La bomba no arranca: verifica la fuente de la bomba y la polaridad; prueba la bomba directamente con la fuente.

Licencia y créditos

Contenido: libre para usar y modificar (atribuir al autor si lo compartes). Creado con fines educativos.

Libros y Articulos recomendados

Recursos recomendados:

Catalogo de proyectos

Recursos recomendados: