0% encontró este documento útil (0 votos)
179 vistas9 páginas

Sistema de Riego Automatizado con Arduino y HomeAssistant

El documento describe un sistema de riego automatizado de bajo costo integrado con Home Assistant. Se detalla el material necesario incluyendo una tarjeta NodeMCU, un kit de riego con sensor de humedad y bomba, y tubería y aspersores. Se explican los pasos para el montaje, calibración del sensor, y carga del código en la tarjeta y la configuración en Home Assistant para controlar el riego basado en los niveles de humedad medidos.

Cargado por

Guillermo Bravo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
179 vistas9 páginas

Sistema de Riego Automatizado con Arduino y HomeAssistant

El documento describe un sistema de riego automatizado de bajo costo integrado con Home Assistant. Se detalla el material necesario incluyendo una tarjeta NodeMCU, un kit de riego con sensor de humedad y bomba, y tubería y aspersores. Se explican los pasos para el montaje, calibración del sensor, y carga del código en la tarjeta y la configuración en Home Assistant para controlar el riego basado en los niveles de humedad medidos.

Cargado por

Guillermo Bravo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Sistema de riego

domaray.com/2020/09/03/sistema-de-riego-homeassistant-arduino-mqtt-sleep-mode/

Domaray

El riego está muy automatizado en la


industria pero también se va introduciendo
cada vez más a nivel doméstico, que por lo
general suelen ser huertos para consumo
personal o pequeños huertos urbanos.
Menos habitual es automatizar el riego de
plantas decorativas, aunque resulta
imprescindible cuando te vas de vacaciones
o simplemente no le prestas demasiada
atención y el día que te acuerdas te
encuentras un matojo de hojas secas. Por
ese motivo, el objetivo de este proyecto es
integrar un sistema de riego de bajo coste dentro de HomeAssistant.

Repositorio de GitHub:

1 – Material utilizado
A continuación se detalla el material utilizado para construir la parte electrónica y la parte
de riego en sí: tuberías y aspersores.

Electrónica:

Tarjeta de control NodeMCU v3.


Sensor de nivel.
Kit de bomba + sensores. Incluye lo siguiente:
Sensor de humedad de suelo YL-69.
Tarjeta YL-38.
Bomba de agua.
Relé de 1 canal.
Caja para 4 pilas AA + interruptor on/off.

Nota: El kit viene con una caja para 4 pilas AA. En el esquema de conexiones hay dos
para separar la alimentación de la bomba y la electrónica pero yo utilicé la que viene en el
kit para todo. En ese caso, hay que justar las masas (GND).

Sistema de riego:

Tubo de 4 mm.
T de conexión.

1/9
Aspersores o minidifusores.

2 – BOM y presupuesto

Imagen Componente Enlace Precio

Tarjeta de https://es.aliexpress.com/item/32725412388.html 2,17 €


control
NodeMCU v3

Kit de riego https://es.aliexpress.com/item/4000224726367.html 4,00 €


Sensor YL-69
+ tarjeta YL-
38 + bomba
+ caja de
pilas

Sensor de https://es.aliexpress.com/item/33058665955.html 1,60 €


nivel (modelo
F)

Tubería https://www.leroymerlin.es/fp/17063473/tuberia- 3,29 €


microtubo microtubo-riego-por-goteo-4×6-mm-15-m
riego por
goteo 4×6
mm 15 m

Te para riego https://www.leroymerlin.es/fp/16936752/te-para- 2,19 €


por goteo riego-por-goteo-geolia-4-mm-10-unid
GEOLIA 4
mm 10 unid

Microdifusor https://www.leroymerlin.es/fp/16936745/microdifusor- 2,99 €


360º GEOLIA 360-geolia-10-unidades
( 10
unidades)

TOTAL 16,24

3 – Esquema de conexiones
Esquema electrónico

2/9
Riego: Conexión de tubería, bomba y aspersores

4 – Montaje y puesta en marcha


A continuación se explican los pasos para realizar el montaje del sistema completo.

a) Montaje del circuito electrónico.

Seguir el esquema de conexiones de arriba. Hay que tener en cuenta dos cosas:

1. Si se utiliza la batería (pilas) del kit, es decir, una única alimentación para todo, es
necesario unir las masas. En caso contrario, seguir el esquema tal cual.
2. En un primer momento, el cable morado que conecta el pin de RESET con el pin D0
ha de estar desconectado para poder programar la tarjeta nodeMCU. Una vez
programada, se realiza la conexión entre esos pines para que la tarjeta se pueda
despertar cada cierto tiempo después de entrar en el modo Deep Sleep para reducir
su consumo.

b) Montaje del circuito de agua.

3/9
Establecer la distancia entre aspersores y cortar el tubo acorde a esa distancia. Por
ejemplo, yo puse un aspersor cada 30 cm de tubería porque hice una prueba y vi que era
suficiente. Colocar una T para unir los segmentos. Luego cortar un pequeño trozo de tubo
para unir el aspersor con la tercera pata de la T.

c) Calibración del sensor de humedad del suelo.

El sensor de humedad YL-69 da unos valores analógicos en función de la conductividad


que detecta, la cual es directamente proporcional a la cantidad de agua (humedad) que
hay entre sus puntas. Si no detecta absolutamente nada de humedad, da el valor analógico
1024, en cambio, si se cortocircuitan ambas puntas da un valor 0. Se podría decir que los
valores están invertidos:

Cortocircuito = humedad alta (100%) -> valor analógico = 0

Circuito abierto = humedad baja (0%) -> valor analógico = 1024

Si dejamos esos valores así, cuando el sensor se sumerja en la tierra, nunca va a estar al
100% porque la conductividad de un cable con el que hacemos un cortocircuito es muy
superior a la de la tierra mojada. Por ese motivo, nuestro 0 debe ser otro valor diferente y
que debemos establecer. Para ello hay que realizar una calibración que llevará muy poco
tiempo.

Para calibrar el sensor de humedad, hay que volcar el siguiente código al nodeMCU
mediante el IDE de Arduino (Recuerda que para programar hay que desconectar el pin de
RESET que va a D0).

Calibracion.ino

int sensor_pin = A0;


int output_value_analogic ;
int output_value_percentage ;

void setup() {
Serial.begin(115200);
Serial.println("Moisture sensor reading ...");
delay(2000);
}

void loop() {
output_value_analogic = analogRead(sensor_pin);
output_value_percentage = map(output_value_analogic,1024,433,0,100);
Serial.print("Analogic value: ");
Serial.print(output_value_analogic);
Serial.print(" - Percentage: ");
Serial.print(output_value_percentage);
Serial.print("%\n");
delay(1000);
}

4/9
Este código simplemente muestra por el puerto serie el valor analógico del sensor en cada
momento y el porcentaje de humedad. Tras programar la placa con ese código, si
ponemos el sensor fuer,a sin estar tocando nada, veremos que el valro analógico que da es
1024 y el porcentaje es 0%. Esto es correcto.

A continuación, hay que sumergir el sensor dentro de un vaso de agua y tomar un valor
medio de los que esté mostrando en ese momento. En mi caso, me suele dar unos valores
entre 430 y 450. Con eso ya podemos mapear el resultado. Con la siguiente función
conseguimos obtener la siguiente relación:

Humedad alta (100%) -> valor analógico = 433

Humedad baja (0%) -> valor analógico = 1024

output_value_percentage = map(output_value_analogic,1024,433,0,100);

Con este ejemplo ya hemos conseguido establecer el valor mínimo que ha de tener el
sensor. Ten en cuenta que puede haber variaciones entre sondas, de modo que es
recomendable que se calibren todas ellas si vas a utilizar varias.

d) Cargar el código principal.

Una vez tenemos el sensor calibrado, hay que abrir el código principal que está en el
repositorio y modificar la linea siguiente con el valor de calibración obtenido
anteriormente:

soilSensorPercentage_value = map(soilSensorAnalogic_value,1024,433,0,100);

e) Cargar la configuración de Home Assistant.

El último paso es cargar la configuración de Home Assistant que aparece en el apartado


5.2. También lo encontrarás en el repositorio de GitHub.

f) Reiniciar Home Assistant y añadir las nuevas identidades en el dashboard.

Tras reiniciar Home Assistant, hay que ir a la pantalla principal, también llamada
Dashboad, Overview o Resumen y añadir las nuevas identidades. Yo lo tengo de la
siguiente manera:

5/9
5 – Código
Encontrarás el código completo en el siguiente repositorio de GitHub:
https://github.com/Domaray/Home-Automation/tree/master/001-
Irrigation_system/Arduino

5.1 – Arduino
El código completo está en el repositorio, aquí te muestro los parámetros a configurar.

En primer lugar, los datos de tu conexión WiFi y servidor MQTT. Yo utilizo el servidor
MQTT que se instala como addon en Home Assistant, es ese caso, la IP será la misma que
la de Home Assistant.

el ClientID es un identificador que debe ser único. Si quieres instalar este sistema de riego
para varias plantas, cada tarjeta nodeMCU que se conecte a MQTT ha de tener un clientID
diferente. En caso contrario habrá problemas de conectividad.

#define wifi_ssid "YOUR WIFI SSID"


#define wifi_password "YOUR WIFI PASSWORD"
#define mqtt_server "IP OF MQTT SERVER"
#define mqtt_user "MQTT USER"
#define mqtt_password "MQTT PASSWORD"
#define clientId "Irrigation_1" // THIS ID MUST BE UNIQUE.

A continuación aparecen todos los topics MQTT utilizados. Si se van a utilizar varios
sistemas de riego, a parte de cambiar el clientID hay que cambiar los topics. Por ejemplo,
una segunda tarjeta podría tener un topic: home/irrigation/zone_2/….

6/9
#define topic_pump_state "home/irrigation/zone_1/pump/state"
#define topic_pump_command "home/irrigation/zone_1/pump/set"
#define topic_pump_available "home/irrigation/zone_1/pump/available"
#define topic_analog_value "home/irrigation/zone_1/analog/value"
#define topic_percentage_value "home/irrigation/zone_1/percentage/value"
#define topic_setPointMode_value "home/irrigation/zone_1/setpointmode/value"
#define topic_setPointMode_state "home/irrigation/zone_1/setpointmode/state"
#define topic_setPointMode_command "home/irrigation/zone_1/setpointmode/set"
#define topic_levelSensor_value "home/irrigation/zone_1/levelsensor/value"
#define topic_deepSleepMode_state "home/irrigation/zone_1/deepsleepmode/state"
#define topic_deepSleepMode_command "home/irrigation/zone_1/deepsleepmode/set"

Se puede definir el tiempo que se mantiene el sistema dormido (DeepSleepDuration) y el


tiempo que está despierto enviando datos hasta que entra en modo Sleep
(deepSleepTime)

#define deepSleepTime 60000 // 60 seconds


#define DeepSleepDuration 18e8 // 10e6 is 10.000.000 microseconds 120e6 = 2
minutes, 18e8 = 30 minutes

Se utiliza el modo Deep Sleep que lleva incluido el chip ESP8266 del nodeMCU que
permite dormir profundamente y reducir su consumo al mínimo. Esto se consigue
evitando que se active el WiFi. Cuando despierta, se activa el WiFi y envía datos
actualizados. Gracias a esto se consigue alargar la duración de las baterías.

Por desgracia, el resto de elementos, como el relé y la tarjeta que controla el sensor de
humedad, siguen activos y consumiendo.

5.2 – Home Assistant

A continuación se detalla el código para la integración del sistema de riego en Home


Assistant.

configuration.yaml

Este fichero contiene la configuración para que aparezcan las identidades. Luego hay que
reiniciar y añadirlas al Dashboard.

7/9
switch:
- platform: mqtt
name: "Pump zone 1"
state_topic: "home/irrigation/zone_1/pump/state"
command_topic: "home/irrigation/zone_1/pump/set"
availability_topic: "home/irrigation/zone_1/pump/available"
payload_on: "ON"
payload_off: "OFF"
qos: 0
retain: true
icon: mdi:water-pump

- platform: mqtt
name: "SetPoint mode"
state_topic: "home/irrigation/zone_1/setpointmode/state"
command_topic: "home/irrigation/zone_1/setpointmode/set"
payload_on: "ON"
payload_off: "OFF"
qos: 0
retain: true
icon: mdi:water-off

- platform: mqtt
name: "DeepSleep mode"
state_topic: "home/irrigation/zone_1/deepsleepmode/state"
command_topic: "home/irrigation/zone_1/deepsleepmode/set"
payload_on: "ON"
payload_off: "OFF"
qos: 0
retain: true
icon: mdi:water-off

sensor:
- platform: mqtt
name: "Humidity"
state_topic: "home/irrigation/zone_1/percentage/value"
unit_of_measurement: "%"
icon: mdi:water-percent

- platform: mqtt
name: "Level sensor"
state_topic: "home/irrigation/zone_1/levelsensor/value"
icon: mdi:hydraulic-oil-level

input_number:
irrigation_setpoint:
name: SetPoint
initial: 50
min: 0
max: 100
step: 1

automations.yaml

8/9
He añadido dos automatizaciones. La primera de ellas envía el valor de consigna a la
tarjeta nodeMCU a través de MQTT. De esta manera, si se tiene el modo de consigna
activado, cuando se supere el umbral, se activará la bomba.

La segunda automatización simplemente envía una notificación al movil cuando la tarjeta


despierta. Se puede modificar para que notifique cuando la humedad es baja, cuando se
active la bomba, etc.

- id: '2097530536666'
alias: Send SetPoint to board
description: ''
trigger:
- entity_id: input_number.irrigation_setpoint
platform: state
action:
- data_template:
payload: '{{ states(''input_number.irrigation_setpoint'') | int }}'
retain: true
topic: home/irrigation/zone_1/setpointmode/value
service: mqtt.publish
mode: single

- id: '2098381445567'
alias: Notify when board is awake
description: ''
trigger:
platform: mqtt
topic: home/irrigation/zone_1/pump/available
# Optional
payload: "online"
encoding: "utf-8"
condition: []
action:
- data_template:
message: The board is awake
title: Irrigation system active
service: notify.mobile_app_xxx

9/9

También podría gustarte