Sistema de Riego Automático con Arduino

Arduino

Sistema de Riego Automático con Arduino

Nivel: Básico · Tiempo: 1 h · GYO Ingeniería

Aprende a construir un sistema de riego automático utilizando un kit de riego y Arduino.

En este tutorial, aprenderás a crear un sistema de riego automático que te permitirá mantener tus plantas hidratadas sin necesidad de intervención manual. Utilizaremos un kit de riego automático junto con una placa Arduino para controlar el funcionamiento del sistema.

WhatsApp Facebook X

Materiales

  • Para realizar la práctica se requieren:
  • 1 Arduino Uno.
  • 4 sensores de humedad del suelo.
  • 4 módulos relé de 5 V.
  • 4 mini bombas de agua sumergibles.
  • 1 fuente externa apropiada para alimentar las bombas.
  • Manguera para cada bomba.
  • Cables Dupont.
  • Protoboard, si es necesaria para distribuir 5 V y GND.
  • Cable USB para programar y alimentar el Arduino.
  • Recipiente con agua.
  • 4 plantas o recipientes con tierra.
  • Importante: las bombas no deben alimentarse directamente desde los pines del Arduino. Las bombas consumen una corriente superior a la que puede proporcionar un GPIO; por esta razón utilizaremos los re

Funcionamiento General

Cada planta tendrá su propio conjunto:


Sensor → Arduino → Relé → Bomba


Por ejemplo:


PLANTA 1 Sensor humedad 1 -> A0 -> ARDUINO -> D4 -> RELÉ 1 -> BOMBA 1 -> PLANTA 1

Conectar los sensores de humedad

Cada sensor dispone de un módulo electrónico con terminales como:

VCC - GND - DO - AO

Para este proyecto utilizaremos la salida AO (Analog Output), porque queremos conocer qué tan húmeda está la tierra y no simplemente obtener una señal de encendido/apagado.


Realizar las siguientes conexiones:

SensorAOVCC       GND
Sensor 1       A05VGND
Sensor 2       A1               5VGND
Sensor 3      A25VGND
Sensor 4      A35VGND

Conectar las bombas

Conectaremos:

ReléIN ArduinoVCCGND
Relé 1D45VGND
Relé 2D55VGND
Relé 3D65VGND
Relé 4D75VGND

Verificar las conexiones antes de energizar

Antes de conectar la fuente, los estudiantes deben verificar:

Sensor 1 → A0 Sensor 2 → A1 Sensor 3 → A2 Sensor 4 → A3 Relé 1 → D4 Relé 2 → D5 Relé 3 → D6 Relé 4 → D7

También deben comprobar que ninguna bomba esté conectada directamente a un pin del Arduino.

Diagrama de Conexiones
Arduino/C++
/*
 ============================================================
 SISTEMA DE RIEGO AUTOMATICO - 4 ZONAS
 Arduino UNO
 ============================================================
 Zona 1 -> Sensor A0 -> Rele D4 -> Bomba 1
 Zona 2 -> Sensor A1 -> Rele D5 -> Bomba 2
 Zona 3 -> Sensor A2 -> Rele D6 -> Bomba 3
 Zona 4 -> Sensor A3 -> Rele D7 -> Bomba 4
*/
// ==========================================================
// CONFIGURACION
// ==========================================================

const byte NUM_ZONAS = 4;
const byte sensores[NUM_ZONAS] = {
  A0, A1, A2, A3
};
const byte reles[NUM_ZONAS] = {
  4, 5, 6, 7
};
/*
 La mayoría de estos módulos de relé son ACTIVE LOW:

 LOW  = relé activado
 HIGH = relé apagado

 Si el tuyo funciona al contrario, intercambia estos valores.
*/
const byte RELE_ON  = LOW;
const byte RELE_OFF = HIGH;
// ==========================================================
// CALIBRACION DE LOS SENSORES
// ==========================================================
/*
 IMPORTANTE:

 Estos valores son ejemplos.

 Debes medir cada sensor:
 1. Con el sensor seco.
 2. Con el sensor en tierra muy húmeda.
 Después reemplazar los valores.
*/
int valorSeco[NUM_ZONAS] = {
  850, 850, 850, 850
};
int valorHumedo[NUM_ZONAS] = {
  350, 350, 350, 350
};
// ==========================================================
// UMBRALES DE RIEGO
// ==========================================================
/*
 Si humedad <= 35%:
     encender bomba
 Si humedad >= 55%:
     apagar bomba
 Entre 35% y 55% conserva el estado anterior.
 Esto evita encendidos/apagados rápidos.
*/
const int HUMEDAD_ENCENDER = 35;
const int HUMEDAD_APAGAR   = 55;
// Estado de las bombas
bool bombaActiva[NUM_ZONAS] = {
  false, false, false, false
};
// ==========================================================
// SETUP
// ==========================================================

void setup() {
  Serial.begin(9600);

  Serial.println();
  Serial.println("==============================");
  Serial.println(" SISTEMA DE RIEGO AUTOMATICO");
  Serial.println("==============================");

  for (byte i = 0; i < NUM_ZONAS; i++) {
    pinMode(reles[i], OUTPUT);
    // MUY IMPORTANTE:
    // iniciar todas las bombas apagadas
    digitalWrite(reles[i], RELE_OFF);
  }
  delay(1000);
}
// ==========================================================
// LOOP
// ==========================================================
void loop() {
  Serial.println("--------------------------------");
  for (byte i = 0; i < NUM_ZONAS; i++) {

    // Leer sensor varias veces para reducir ruido
    int lectura = leerSensor(sensores[i]);
    // Convertir lectura a porcentaje
    int humedad = map(
      lectura,
      valorSeco[i],
      valorHumedo[i],
      0,
      100
    );
    humedad = constrain(humedad, 0, 100);
    // ======================================================
    // CONTROL DE RIEGO
    // ======================================================
    // Tierra seca -> activar bomba

    if (!bombaActiva[i] &&
        humedad <= HUMEDAD_ENCENDER) {
      bombaActiva[i] = true;
      digitalWrite(
        reles[i],
        RELE_ON
      );
    }
    // Tierra suficientemente húmeda -> apagar bomba
    else if (bombaActiva[i] &&
             humedad >= HUMEDAD_APAGAR) {
      bombaActiva[i] = false;
      digitalWrite(
        reles[i],
        RELE_OFF
      );
    }
    // ======================================================
    // MONITOR SERIAL
    // ======================================================
    Serial.print("Zona ");
    Serial.print(i + 1);

    Serial.print(" | ADC: ");
    Serial.print(lectura);

    Serial.print(" | Humedad: ");
    Serial.print(humedad);
    Serial.print("%");
    Serial.print(" | Bomba: ");
    if (bombaActiva[i]) {
      Serial.println("ENCENDIDA");
    }
    else {
      Serial.println("APAGADA");
    }
  }
  Serial.println();
  delay(2000);
}
// ==========================================================
// LECTURA PROMEDIADA DEL SENSOR
// ==========================================================
int leerSensor(byte pin) {
  const byte MUESTRAS = 10;
  long suma = 0;
  for (byte i = 0; i < MUESTRAS; i++) {
    suma += analogRead(pin);
    delay(5);
  }
  return suma / MUESTRAS;
}

Preguntas frecuentes

¿Qué tipo de sensor de humedad debo usar?

Puedes utilizar cualquier sensor de humedad compatible con Arduino, como el sensor capacitivo o resistivo.

¿Puedo usar una bomba de agua de 12V?

Asegúrate de que el relé que uses sea compatible con la bomba de agua y su voltaje.

Productos para realizar este proyecto

Construye este proyecto

1 componente(s) · Total aproximado: $100.000 COP

Kit Riego Automatico con Arduino

Kit Riego Automatico con Arduino

$100.000

En stock × 1

Ver producto

Comentarios y preguntas

¿Le quedó una duda o quiere compartir cómo le fue con el proyecto? Escríbanos. Publicamos las respuestas útiles para otros makers.

Aún no hay preguntas publicadas. Sea el primero en consultar.

No publicamos su correo. Revisamos cada mensaje antes de mostrarlo en la página.

¡Chatea con nosotros! 💬