Sistema de riego sencillo

El objetivo es construir un sencillo sistema de riego, que monitoree la humedad de la tierra de una maceta y riegue la misma una o dos veces al día.

En una primera instancia vamos a construir la electrónica y escribir un sencillo programa para controlar el flujo de agua, el sensor de humedad solo va a reportar el valor y lo utilizaremos de referencia para junto con un monitoreo a ojo de la tierra poder calibrar y saber los valores necesarios.

El circuito es sencillo, tenemos:

  • Un NodeMCU como cerebro de la operación.
  • Un sensor capacitivo de suelo.
  • Un relay para controla la bomba de agua.
  • Para la alimentación utilizaremos una fuente de 12v , y un modulo step down para bajar el voltaje a 5v; mas que suficiente para el NodeMcu y la bomba de agua.
Un diagrama básico de como va conectado todo.

Respecto del software, la forma de trabajar sera la siguiente:
– Los datos del sensor lo enviaremos a un servidor broker y a un canal de Thingspeak.
– El dispositivo se conectara a un servidor broker y estaría suscrito a un tema, al recibir el mensaje para activa la bomba, activa el relay durante un periodo de tiempo; este periodo se ira ajustando segundo lo que observemos que seria lo adecuado.

La idea de utilizar un relay se debe a que más adelante podríamos utilizar un válvula solenoide para manejar un mayor caudal de agua.

En el siguiente repositorio se encuentra la primera versión del programa:
https://github.com/gsampallo/IrrigationSystem

Dentro de la carpeta server, se encuentra el script para encender la bomba de agua.

Este es un proyecto en desarrollo por lo que en breve habrá mas noticias.

Publicar datos a ThingSpeak con MicroPython

En el articulo anterior vimos como leer datos desde un canal publico en ThingSpeak; en esta ocasión nos interesa enviar datos hacia un canal propio.

Desde el punto de vista del hardware, utilizaremos algo muy sencillo: un nodemcu con un sensor analógico de humedad y una pantalla oled.

Como conectar la pantalla oled se cubrió en un video del canal y el sensor de humedad simplemente va conectado al puerto analógico del NodeMCU.

Por supuesto que no calibramos los datos del sensor, solo nos interesa obtener un valor para probar publicar datos.

Luego que hayamos creado el canal en ThingSpeak (basta con registrarnos en el sitio y luego hacer clic en el botón «New Channel» y elegir los campos); ingresamos en el canal y vamos al menu API Keys:

Sobre el borde derecho tendremos un bloque llamado API Request, donde existen varios tipos un request para actualizar el canal (el que utilizaremos), uno para obtener datos del canal, obtener datos de un campo en particular y el estado del canal.

Copiamos la url indicada, sera del siguiente tipo:

https://api.thingspeak.com/update?api_key=4H0IHE2TESPWITGB&field1=0

Crearemos el siguiente programa en MicroPython, que sera el que utilizaremos para actualizar los datos:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from machine import Pin,I2C,ADC
import ssd1306

import json
import network
import urequests
import time
import wlan

wlan.do_connect()

i2c = I2C(-1, Pin(5), Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

adc = ADC(0)

url = "https://api.thingspeak.com/update?api_key=4H0IHE2TESPWITGB&field1=%s"

while True:
    moisure = adc.read()

    oled.fill(0)
    oled.text(str(moisure),0,0)
    oled.show()

    data = url % moisure
    update = urequests.get(data)
    time.sleep(10)

Una vez que hayamos subido el programa al dispositivo y se ejecute, publicara datos cada 10 segundos en ThingSpeak, luego de un breve periodo de tiempo podremos ver un grafico como este: