Sistema de riego automático con Arduino

¿Qué es Arduino?

Arduino es una plataforma de electrónica de código abierto basada en software y hardware fácil de usar. Las placas Arduino pueden recibir datos de entrada como la luz en un sensor, la pulsación de un botón o un mensaje de Twitter y convertirlo en una salida para activar un motor, encender una luz LED o publicar algo online. Puedes decirle a tu Arduino qué hacer enviando una serie de instrucciones al micro controlador de la placa.

Esta es una definición extraída de la página oficial de Arduino en la cual explican qué es y qué puedes hacer con esta placa.

Siempre he sido un apasionado de la tecnología tanto a nivel de usuario como de creador. En el ámbito de creador siempre he puesto el foco en el software (páginas web, aplicaciones para móviles…) aunque también he estado muy interesado en el hardware y la electrónica.

En un primer momento puede sonar un poco ‘complicado’ animarse a realizar algún proyecto con hardware, ya que conlleva adquirir ciertos productos y herramientas físicas. Sin embargo, si desarrollamos programas, al ser todo digital, es mucho más sencillo y el coste es menor. Lo único que necesitas es descargar algún programa y ponerte a escribir código.

Buscando algún proyecto para realizar en mis ratos libres, decidí construir un sistema de riego automático. Este proyecto me parecía interesante, útil y sin mucha dificultad.

¿Qué necesitaremos? Componentes

Components necesarios
Components necesarios

Los componentes necesarios para realizar este proyecto los he adquirido en Aliexpress, vienen de China y es la forma más barata de conseguirlos. Son componentes normales que puedes encontrar en cualquier tienda de electrónica, física u online.

Nombre USD EUR Enlace de compra
Bomba de agua $1.43 €1.18 Mini submersible water pump
Relé $0.53 €0.44 5V Relay board
Tubo de silicona $1.72 €1.42 Food grade transparent hose
Sensor de humedad $0.58 €0.48 Humidity sensor module for Arduino
Arduino Pro Mini $3.08 €2.54 Arduino Pro Mini ATMega328
Transistores $0.89 €0.73 IRF540 MOS Transistor N channel
Reguladores de voltaje $0.91 €0.75 10PCS Voltage Regulator
Breadboard $1.08 €0.90 Mini breadboard
Cables $0.66 €0.55 40PCS jumper wire

Si ya disponemos de las herramientas necesarias como pueden ser: soldador, estaño, alicates y multímetro, el coste total de los componentes necesarios para montar el sistema, no sobrepasa los 9 euros.

¡Esquematicemos nuestro diseño!

Una vez adquiridos los componentes, o incluso antes, puedes empezar a diseñar el montaje de tu circuito. Cuando digo que puedes hacerlo antes, es porque existen ciertas herramientas para emular tu circuito. Yo he usado la plataforma tinkercad.com, la puedes usar online y es gratuita. No están todos los componentes que existen, pero es muy útil para simular partes del circuito.

Para realizar esquemas como el que os muestro a continuación, he utilizado la herramienta fritzing. Al contrario que tinkercad, no tendrás la posibilidad de simular circuitos pero ofrece una gran variedad de componentes con los cuales realizar el esquema del montaje.

Esquema de conexiones

Para el funcionamiento de la bomba de agua necesitaremos utilizar un relé. Tendremos que conectarlo a una de las salidas digitales de Arduino para activar o desactivarla, ya que esta recibe la energía de la pila de 9V, previa regulación a 6V con el regulador de voltaje L7806.

El sensor de humedad lo conectamos a la entrada analógica de Arduino para enviar los datos de las mediciones. Para activar/desactivar el paso de corriente al sensor utilizamos un transistor IRF540, el cual conectamos a una de las salidas digitales de Arduino. Esto lo hacemos así para proteger el sensor de humedad, en la medida de lo posible, de la electrólisis (corrosión) al estar la corriente circulando continuamente.

Prototipo
Prototipo

Un vistazo al código

Empezaremos por definir los pines de entrada y salida de los sensores.

A continuación llamaremos a una función para leer la humedad de la tierra. Aquí llegué a la conclusión de hacer cinco mediciones y saco el valor medio, ya que al activar el paso de corriente al sensor solo en el momento de medir, me di cuenta de que las mediciones tardaban un poco en estabilizarse.

Una vez recibo el nivel de humedad, si este es menor de 35, llamamos a la función que activa la bomba de agua durante un segundo.

Utilizo la librería LowPower para reducir un poco el consumo de energía. Mi intención es optimizar el sistema para que el sistema solo actúe una vez al día y así, ahorrar mas energía.

#include <LowPower.h>

#define MOISTURE_SENSOR A0
#define TRANSISTOR 6
#define RELAY 5

void setup() {
  Serial.begin(9600);
  pinMode(RELAY, OUTPUT);
  pinMode(TRANSISTOR, OUTPUT);
  digitalWrite(TRANSISTOR, LOW);
  digitalWrite(RELAY, HIGH);
  
}

void loop() {
  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  
  int moisture = readMoisture();
  if(moisture < 35)
    water();
}

void water() {
  digitalWrite(RELAY, LOW);
  delay(1000);
  digitalWrite(RELAY, HIGH);
}

int readMoisture() {
  digitalWrite(TRANSISTOR, HIGH);
  delay(10000);
  int moistureLevel1 = checkMoisture();
  delay(2000);
  int moistureLevel2 = checkMoisture();
  delay(2000);
  int moistureLevel3 = checkMoisture();
  delay(2000);
  int moistureLevel4 = checkMoisture();
  delay(2000);
  int moistureLevel5 = checkMoisture();
  int averageMoisture = (moistureLevel1 + moistureLevel2 + moistureLevel3 + moistureLevel4 + moistureLevel5)/5;
  
  Serial.print("Average moisture: ");
  Serial.print(averageMoisture);
  Serial.println("%");

  digitalWrite(TRANSISTOR, LOW);
  delay(5000);
  
  return averageMoisture;
}

int checkMoisture() {
  int sensorValue = analogRead(MOISTURE_SENSOR);
  int valuePercentage = map(sensorValue,1023,0,0,100);

  Serial.print("Mositure: ");
  Serial.print(valuePercentage);
  Serial.print("% ");
  Serial.print("(");
  Serial.print(sensorValue);
  Serial.println(")");

  return valuePercentage;
}

Planes de futuro

Lo mostrado en este artículo ha sido solo un primer acercamiento a la construcción de este sistema de riego automático, pero tengo algunas mejoras en mente que podrían ser interesantes implementar en un futuro.

  • Me gustaría que todo fuese más pequeño y compacto. Podría empezar por soldar los componentes en una placa e incluso diseñar una casera o más profesional.
  • Otro componente que sería interesante añadir al sistema, es un sensor del nivel de agua. El problema con este es que no es demasiado grande. Si nuestro depósito es algo hondo, no podríamos medir el nivel del agua total. Para este problema también se puede utilizar un sensor de ultrasonido para medir la distancia. Instalándolo en la parte de arriba del depósito, apuntando hacia abajo, seríamos capaces de medir el nivel de agua del depósito. Una vez obtenido, podríamos instalar un LED que nos avise de cuando el agua está por debajo del nivel establecido y así, nos indicará que hay que rellenar el depósito.
  • Una mejora que me parece importante es la de intentar reducir el consumo energético del sistema. Para ello podemos realizar modificaciones en cuanto a software y/o hardware.
  • A la hora de profesionalizar un poco el sistema, una buena idea sería la de diseñar un macetero con depósito incluido y algún compartimento para guardar el sistema electrónico. Podría realizarse con impresión 3D.
  • Por último se podría dotar al sistema con conexión Bluetooth o WiFi para poder conectarlo al móvil o a la red de casa y tener un panel donde poder controlar ciertos parámetros y a la vez mostrar algunas estadísticas.
Montaje final
Montaje final

No soy ningún experto en la materia así que, os animo a que escribáis en los comentarios cualquier tipo de mejora, modificación, consejo o duda.Una muestra del sistema funcionando