Sistema de Riego con Raspberry Pi IoT

 Proyecto IoT para sistema de riego



Este proyecto fue realizado durante el verano 2025, lo hago como una forma para recordar como lo he hecho, lo que he aprendido y si visitas mi blog, ya sea porque estes interesado en mi trabajo o porque compartes mi pasión con la electrónica o hacer cositas chulas, aquí va mi explicación. 

Me gustaría que me comentarás que tal te parece, que seria chulo agregar y si te ha servido, probablemente este cometiendo algún error, si lo ves y me quieres ayudar, solo dímelo y así puedo mejorar. 

No te mentiré, me he apoyado en ChatGPT, pero sabes que es lo interesante, que es una herramientas accesible para todos, y que tu también la puedes usar. Es solo sentarse e intentar que salga.

Este va a ser un proyecto que va a ir evolucionando, pero quiero compartir contigo mi camino. 

De momento es un sistema de riego que se hace mediante una pequeña bomba de agua, toma mediciones de humedad, y los datos me los guarda en un CSV y también los sube a la nube en una plataforma gratuita llamada ThingSpeak. 

Primero vamos con el listado de materiales que vas a necesitar:

1. Unidad de control

  • Raspberry Pi 3 Model B v1.2
    Tu microcontrolador central que ejecuta el script y toma decisiones.


🌱 2. Sensor de humedad que puedes encontrar en Amazon por buen precio

  • Sensor capacitivo de humedad del suelo v1.2
    Detecta la humedad en la tierra de la planta.


📊 3. Convertidor analógico-digital (ADC)

  • MCP3008
    Convierte la señal analógica del sensor en datos digitales que la Raspberry Pi puede leer (usa protocolo SPI).


⚡ 4. Módulo relé

  • Módulo relé de 1 canal de 5V con optoacoplador
    Actúa como interruptor controlado por la Raspberry para encender/apagar la bomba.


💧 5. Bomba de agua

  • Mini bomba sumergible de 5V DC
    Se activa para regar la planta cuando el suelo está seco.


🧵 6. Conectores y cables

  • Cables dupont macho–macho y macho–hembra
    Para las conexiones entre la Raspberry, el MCP3008, el sensor y el relé.


🔌 7. Fuente de alimentación externa (opcional pero recomendable)

  • Fuente de 5V DC (ej. power bank o adaptador de corriente)
    Usada para alimentar la bomba de agua sin sobrecargar la Raspberry.


🌿 8. Manguera (opcional pero recomendada)

  • Manguera flexible
    Para dirigir el agua desde la bomba hasta la planta.



Las conexiones, así es como he conectado todo:

1. Conexión del MCP3008 a la Raspberry Pi (por SPI)

MCP3008 Pin

Raspberry Pi GPIO

Función

VDD

3.3 V (pin 1)

Alimentación lógica

VREF

3.3 V (pin 1)

Referencia ADC

AGND

GND (pin 6)

Tierra analógica

DGND

GND (pin 6)

Tierra digital

CLK

GPIO11 (pin 23)

SPI Clock

DOUT

GPIO9 (pin 21)

SPI MISO

DIN

GPIO10 (pin 19)

SPI MOSI

CS/CHIP SEL

GPIO8 (pin 24)

SPI CE0


🌱 2. Conexión del sensor de humedad capacitivo al MCP3008

Sensor de humedad

MCP3008 Pin

VCC

3.3 V (de la Pi)

GND

GND (de la Pi)

AOUT

CH0 (pin 1 del MCP3008)

Así, el valor analógico del sensor llega al canal 0 del MCP3008.


⚡ 3. Conexión del módulo relé a la Raspberry Pi (para controlar la bomba)

Módulo relé

Raspberry Pi GPIO

Función

VCC

5 V (pin 2)

Alimenta el relé

GND

GND (pin 6)

Tierra común

IN

GPIO17 (pin 11)

Señal de control


💧 4. Conexión de la bomba al relé y fuente de 5 V

Parte

Conexión

+ bomba

Directo al +5 V de fuente externa

– bomba

Va al COM del relé

NO del relé

Va al – (GND) de fuente externa

Cuando el relé se activa, cierra el circuito entre COM y NO → la bomba se enciende.


Te adelanto algo antes de entrar en más detalles. Con todo instalado, he regado la planta. La siguiente gráfica muestra la evolución de la humedad durante 4 días:



Te explico la gráfica, y me voy a dormir. El primer día riego la planta un poco cerca al sensor, el segundo, el tercer y el cuarto día dejo todo cogiendo datos. Pero mira la curioso, alrededor del tercer día la humedad aumenta, al parecer la humedad alcanza al sensor o la planta va bebiendo agua y se manifiesta en la tierra.

Estoy mejorando la toma de medidas, para que la gráfica sea más suavizada y no tengas tantos dientes. Y el cuarto día definitivamente la humedad baja.

Y no vuelve a subir. Y es en ese punto donde la bomba entra en acción.

Seguimos mañana.

Hoy he tenido un progreso adicional.

He venido recogiendo datos de humedad desde el día 11 de agosto, día en el que regué la planta. Durante estos 5 días la planta ha tenido este comportamiento.

La columna 2, muestra el promedio de los datos obtenidos durante cada día. La columna 2, corresponde a los valores crudos obtenidos por la raspberry pi una vez recibe los datos convertidos a digital.

La gráfica de los datos de los 5 días es:
















Hoy he regado la planta de nuevo, en teoría debería tener el mismo comportamiento que en los últimos 5 días.

Mañana te mostraré la cantidad de agua que le puse y que pasado.

Esta es la planta totalmente seca y así la encontré el dia 15 de agosto
Al verla seca, la he regado con un 1,5L de agua aproximadamente.

Quedando así:

Como puedes ver esta totalmente encharcada de agua, esto para ir a un extremo.

Ahora mismo el valor que me esta arrojando el script es un valor crudo de 3 y ayer cuando la regué me daba valores de 2.

Estoy investigando y al parecer es normal:

🔍 ¿Por qué?

El sensor capacitivo que tienes (v1.2) mide la humedad del suelo detectando la constante dieléctrica, y esta cambia con la cantidad de agua presente. Cuanta más agua:

  • Mayor es la constante dieléctrica

  • Más se acopla el campo eléctrico del sensor

  • Menor es el voltaje de salida → menor valor crudo en el ADC


📉 ¿Qué indica que te marque 2 o 3?

  • Que la tierra está extremadamente húmeda o saturada.

  • Y que tu sensor está detectándolo correctamente.

💡 De hecho, si hoy te marca 3 y ayer te marcaba 2, es porque empezó a evaporarse algo de agua o fue absorbida por la planta — eso también es esperable."

Hoy 16 de agosto:

esta oscilando entre 3 y 2.


Ayer pensaba que al haber mas humedad, el valor crudo aumentaría, pero al parecer no es así.
Es un sensor capacitivo, y lo que mide es como cambia el campo eléctrico alrededor de el. Y el cambio dependerá de cuenta agua haya.

A eso se le llama capacitancia, y por eso se llama sensor capacitivo.

Para hacer una analogía simple: imagino que cuando la tierra esta seca, el sensor tiene que gritar muy fuerte, eso se traduce en más voltaje y en un valor mayor crudo, y eso quiere decir que el campo eléctrico se ve muy poco afectado porque la tierra seca hace que el campo no fluya bien.

Si la tierra esta seca, la capacitancia es pequeña y no hay variación en el campo eléctrico.

Hoy 17 de agosto:

domingo he avanzado en el desarrollo de un dashboard o una web donde puedo ver una animación de la planta junto con su valor crudo y el porcentaje de humedad.

La forma en como funciona es: toda la programación y captura de datos esta funcionando en la Raspberry Pi, esta misma envía los datos a ThingSpeak(gratis), luego creo una cuenta en Netlify de forma gratuita, y allí publico un archivo.html. Una vez tengo el archivo.html alojado en Netlify, este mismo me da una web que puedo compartir y tu donde estes puedes ver la animación en vivo de la planta que tengo en casa.


link para ver la animación:
https://earnest-lily-d35fba.netlify.app/


Hoy se esta mostrando un valor crudo 4. Eso quiere decir que la teoría se esta cumpliendo. 

Ayer habían valores de 2 y 3. Hoy es 4, significa que la tierra empieza a secarse.  

Hoy 30 de agosto:

después de casi 15 días cogiendo datos, la planta se encuentra bastante seca.



Los valores que arroja la Raspberry Pi son los valores crudos, donde el número 2 es 100% de humedad y el 10 es 0% de humedad.

He pedido a ChatGPT que me cree un script para que me saque un promedio de los valores de valor crudo por día. Y me haga una gráfica.

Solo por recordar, el día 16 fue el día en la que regué la planta.


De todas maneras, al ver la gráfica puedo ver que la planta a partir del día 18 y 19 se comienza a secar. Porque el valor crudo en promedio no baja de 8. Esto quiere decir que de momento en el valor en el que se ha mantenido es alrededor de 8.

Es probable que tenga que definir el valor máximo 8 y el mínimo 2.

Ayer he vuelto a regar la planta.

Hoy 7 de septiembre:

aún no he regado la planta.
Me esta mostrando valores de 6 como si estuviera al 50% de humedad.

Para probar que el valor baja o sube he regado la planta de nuevo hoy y ha quedado encharcada. El valor ha bajado a 5.

Hoy 14 de septiembre:

he mirado el sensor para verificar que este funcionando correctamente. Para hacer la comprobación, saque el sensor de la tierra y lo metí en un vaso con agua. Tan pronto lo sumergí, los valores descendieron a cero. Eso indica que la humedad era 100%.

Lo sequé y nuevamente lo metí en la tierra y ahora me está mostrando valores de 13 y 14, lo cual indica que la tierra esta bastante seca.


después de haber visto que me estaba mostrando valores de 13 y 14. Acabo de ver y veo el valor de 44 y 45. Que es demasiado alto para lo que tiene.

Hoy 21 de septiembre:

he mirado de nuevo los datos y tras el efecto de haber sacado el sensor de la maceta, ponerlo en agua y volverlo a meter en la maceta, la calibración se quedo desajustada. No significa que ahora los datos estén mal, simplemente que es otra calibración.


Para esto, tengo que volver a regar la planta y ajustar de nuevo mis valores.

Hoy 5 de octubre:

He obtenido estos datos sin regar

Hoy la regaré y veremos que pasa en los siguientes días. Veré como varia el valor crudo y basado en ese valor volveré a ajustar el 0% y el 100% de más o menos humedad.

Hoy 24 de octubre:

El estado de la planta es este:



Regaré la planta porque estoy teniendo valores de 500

Hoy 27 de octubre:

Una vez regada la planta, las cuentas han bajado
Y las cuentas que muestra son entre 400 y 430.







Comentarios

Entradas populares de este blog

EasyEDA Primer diseño zumbador

part1: error "raise valueerror(f"unkown property {name}")" on RaspberryPi 3 model B v1.2 to connect a sensor DHT11 not solved