Sistema de riego automático
El objetivo es poder regar mis macetas exteriores. No se necesita bomba, porque la presión de la red es suficiente, de forma que el único actuador necesario es una válvula. La regulación no se hace mediante programación horaria/diaria, sino a partir de la información proporcionada por un sensor higrométrico para suelos.
El sistema se integra en la gestión domótica de la casa, basada en Domoticz sobre una Pi 4B con el que comunica vía WiFi/MQTT.
1. Operación eléctrica.
En principio me planteaba hacerlo con sensores y actuador zigbee con alimentación de red al menos para la válvula. Pero una vez que llevas la red hasta allí, se evita el peñazo de la recarga de baterías alimentando todo desde la red. Como actuador, una alternativa era un switch zigbee que abriera paso a corriente alterna de red que activase la válvula solenoide, pero ante la dificultad de encontrar sensor de humedad de suelo zigbee, había que poner algún gateway para él y en tal caso un ESP podía de gateway para cualesquiera sensores y actuadores que necesitáramos.
Las válvulas disponibles son 12VDC y otros elementos, como los relés, son 5VDC, así es que conviene evitar un tercer voltaje de 3'3VDC, por lo que la placa ESP ha de alimentarse a 5VDC.
1.1. Válvula
El sistema de medida de diámetro por pulgadas se llama NPS (Nominal Pipe Size), mientras que en milímetros es DN (Diametre Nominel), aunque las medidas nominales de DN no son mm exactos, para que casen con las equivalentes en pulgadas. Las equivalencias que mas nos pueden interesar son: 1/2'' - 15 DN, 3/8'' - 10 DN, 1/4'' - 8 DN, 1/8'' - 6 DN.
Tras plantearme lo descrito abajo en Solenoides y PWM, y dado que no parece haber válvulas proporcionales a precios asequibles (parecen orientadas a usos profesionales en laboratorios) ni tampoco de cierre lento, solo quedan las opciones de las motorizadas de bola o las selenoide normales, algo mas baratas y en plástico. Como realmente tenemos llave de paso para regular la presión de entrada a la válvula, solo con eso confío en evitar el golpe de ariete, sin descartar algún tipo de ensayo para ver hasta dónde podemos controlar la progresividad de una válvula solenoide normal, quizá integrando un caudalímetro que nos chive la respuesta de la válvula a las variaciones de frecuencia PWM.
2. Componentes
2.1. Controlador local de riego con relé
Al final, y puesto que el higrómetro (RF 433 MHz) va a comunicar con un bridge general RF no específico para la aplicación de riego, el controlador va a quedar limitado, btm, a actuar el relé cuando se lo mande Domoticz vía MQTT, por lo que vamos a escoger una solución sencilla para el procesador: una ESP8266-EVB de Olimex, que lleva a su vez una plaquita Olimex MOD-WIFI-ESP8266-DEV, un relé, un jack de alimentación y un conector UEXT de 10 pines para GPIOs, i2c, SPI y serial.
La doc relevante para operar con él está en este how-to use with arduino y el esquema hw. La MOD-WIFI-ESP8266-DEV de olimex está soportada en Arduino, pero a primera vista no parece que haya info de interés x ahí.
Para flashearlo, tiene los pines GND, TX y RX en un conector UEXT, y un botón (que une GND con GPIO0 cuando lo pulsas) que hay que mentener pulsado al alimentarlo para entrar en modo UART. Una vez arrancado, se suelta el botón.
Para Tasmota, todos las plantillas de relé que veo en el repositorio de idem toman como base el el módulo 18, que es el que se recomienda cuando no encuentras ninguno mejor. La iface web de Tasmota permite definir la plantilla a utilizar, pero si queremos ir preparandolo mientras llega el cacharro, se puede ir preparando así, en código, según la anatomía de una plantilla.
2.1.1. Control autónomo.
Resulta recomendable que el control de riego opere autónomamente, aunque la parametrización se realice desde Domoticz. De esa manera, una posible caída de Domoticz no deja desabastecidas las plantas. Sin embargo, es un obstáculo que el higrómetro no esté conectado directamente al controlador local de riego. Ante lo que caben dos estrategias complementarias:
- Por un lado, establecer un tiempo máximo entre riegos para que cuando se pierde el valor del higrómetro se acabe haciendo un riego transcurrido ese tiempo (ese tiempo podría incluso calcularse dinámicamente, con la media de los últimos 3 riegos, p.e.) o con la duración del día segun la época del año (buscar sunrise en Rules.
- Por otro lado, podría explorarse la posibilidad de que el controlador local pudiese recibir de alguna manera mensajes procedentes del gw RF sin pasar por Domoticz; lo que buscamos es algo parecido a los Smart meters, pero con datos recibidos el gw RF.
Hay que ver hasta qué punto se puede hacer eso en Tasmota sin modificar Tasmota:
2.1.1.1. Gestión básica de riego
Hay disponibles timers, que pueden usarse como triggers ( Clock ) en la definición de rules, en lo que constituye un sistema de manejadores de eventos.
El disparo de manejadores mediante timers nos debería permitir definir un valor límite para la entrada analógica por debajo del cual se active el riego y un temporizador countdown para definir tiempo de riego.
El temporizador de riego se define con RuleTimer<x> <segs> y su trigger salta cuando llega a 0 y se intercepta con Rules#Timer=1.
ON System#Init DO Timer5 {"Enable":1,"Mode":0,"Time":"6:00","Days":"1111111","Repeat":1,"Action":3} ENDON ON Time#Minute=360 ( alternativo temporizador ppal - a las 6 de la mañana) ON Clock#Timer=1 DO BackLog Power1 1; RuleTimer1 90 ENDON ON Rules#Timer=1 DO Power1 0 ENDON
Existen también los Scripts, una alternativa a las rules (en los binarios precompilados, es rules lo que hay activo).
2.1.1.2. Comunicación con el gw RF.
Btm, estoy reuniendo info sobre comunicaciones entre tasmotas en el apartado correspondiente de la chuleta de Tasmota, y parece que podría haber alguna manera.
- La manera mas elegante sería mediante variables globales, si estuvieran disponibles tb para rules: el gw RF comunicaría por este medio los payloads entrantes y cada tasmota interesado decodificaría según el tipo de parato que tuviese colgado.
Y si no hay manera, o es extremadamente enrevesada, para empezar a tocar código hay que pasar por aquí.
2.2. Higrómetro.
Antes de nada, existen dos tecnologías de medida, resistiva, que hace circular corriente entre dos electrodos y mide la resiustencia y capacitiva, que no expone electrodos al exterior. Con el método resistivo, los electrodos se deterioran con el tiempo; si se usan puede ser bueno, para protegerlos, cortar alimentación cuando no se realizasen lecturas (p.e. se pueden habilitar uno o mas momentos hábiles para riego y solo medir ahí hasta obtener valores estables, cortando alimentación el resto del tiempo). Esto, sin embargo, solo es aplicable a sensores cableados. Los de tecnología capacitiva no exponen los electrodos al exterior, por lo que sufren mucha menor corrosión.
Una vez dada por fracasada la vía RF (ver mas abajo), la mejor solución que veo es iface I2C (o SPI), que tenemos en el conector EXT de la olimex.
Este, cableado, proporciona salida analógica VDC y digital. Se declara anticorrosión, y puede ser pq las patillas parecen totalmente forradas. Es barato, pero no hay un solo doc sobre él (¿voltaje de la salida analógica?). Habría que usar ADC para capturar la salida analógica pq la entrada del ESP8266 solo llega a un voltio. Este es SPI, 16 bits mismo vendedor que la sonda y, al contrario que la propia sonda, bien documentado. Este es I2C, 12 bits. Ambos 4 entradas.
akí hay otro basado en SHT10, cableado, con librería arudino para su uso y descripción de protocolo. Muy similar, con SHT20 y algo mas barato es éste.
También I2C es éste, que es clon (o viceversa) de éste. Buenas reviews en éste último sitio, que parece el original.
Y otro bluetooth en amazon (curiosamente, no se encuentra en la shop de la propia Vegtrug), que parece ser el mismo que el de MiFlora, de Xiaomi. Tb bluetooth es éste.
Este es capacitivo, cableado, con salida 0-3VDC.
Este otro que es modbus RTU y se alimenta entre 3.36VDC y 30VDC tiene buenas pintas, aunque no wireless y caro (100€). Parece resistivo, pues mide (soil electrical conductivity).
La vía RF ha fracasado pq SonOff+tasmota+portisch y el sensor no se entienden, pero dejo akí las previsiones que tenía. Tengo un rfraw-177.cpp x ahí que pretendía descifrar las tramas tal como las emite el sw portisch de la parte rf del sonoff, pero apenas reporta tramas del sensor y son claramente defectuosas pq traen poquísimos bits para la info que tenemos sobre lo que envía el sensor.
También parece estar aquí, aunque confunden el nombre (ponen el del receptor). Es 433 MHz y ahí dice que puede trabajar con RFXCom y con RFLink.
Sin embargo, nosotros vamos vía sonoff rf gw, x lo que probablemente tengamos que espiar lo que envía el cacharro mediante el propio gateway: buscar Raw Sniffing. Nos ayudará Código en C que decodifica lo que se recibe. info parecida en el mismo repositorio.
También se debería poder usar con ESPHome o OpenMQTTGateway sobre Sonoff RF bridge, que es (éste último) el que vamos a utilizar.
Esta es la idea para proteger las conexiones del higrómetro de la lluvia.
2.3. Fuente de alimentación conmutada 220AC/12VDC.
Esta de 3A.
Pedida. 65x30x22mm
2.4. Fuente de alimentación conmutada 220VA/5VDC
Pedida. 115x65x3.5cm
Tb estaba ésta de 2A.
2.5. Válvula
- En media pulgada, es el paso del tubo gordo que tenemos, tengo éstas a12VDC que no son caras: Esta es de las pocas que he visto fuera de Amazon, $17 en USA. Y una en Banggood,
- Esta va a 9-12VDC, pero es de 1 pulgada y mas carilla (20€), en Sevilla
- Esta con regulador es de 3/4 y va a 24VDC, americana, viene de Málaga. IMPORTANTE: ahí tienen conectores estancos.
2.6. Accesorios de montaje.
- Breadboard transparente estándar o en blanco.
- ésta de Adafruit la llama de prototipado permanente porque se puede soldar.
- éstas son pequeñas pero se pueden adosar.
2.7. Cajas impermeables
- Domoticalia. Pedida
- cajitas de 132.2*68.7*50.1mm(L*W*H). Detalles. Pedidas 2
3. Equipo disponible no específico para el riego.
- SONOFF RF Bridge, que usaremos con Tasmota. Pedido a ITEAD.
4. Notas sobre el tema
4.1. Enlaces que podrían ser de interés
- Cómo usar un sensor de flujo con arduino. Básicamente, se trata de captar pulsos, x lo que se hace necesario disponer de interrupciones hw para que cada pulso dispare la interrupción que añade uno al contador.
- Sensores de temperatura
- Selección de sensor de flujo para agua.
- Water flow sensor.
- Sensor de humedad y temperatura en suelo vía MB RTU, 3.36 a 30V de alimentación. Caro.
- Otro, mas barato. Habrá que tener cuidado con que esté bien aislada la conexión en la sonda. Tiene 1'2m de cable.
4.2. Diámetros
El sistema de medida de diámetro por pulgadas se llama NPS (Nominal Pipe Size), mientras que en milímetros es DN (Diametre Nominel), aunque las medidas nominales de DN no son mm exactos, para que casen con las equivalentes en pulgadas. Las equivalencias que mas nos pueden interesar son: 1/2'' - 15 DN, 3/8'' - 10 DN, 1/4'' - 8 DN, 1/8'' - 6 DN.
4.3. Solenoides y PWM
Pensando en evitar golpes de ariete al cerrar, me he preguntado si no podríamos controlar el solenoide mediante PWM usando un MOSFET (responde rápido) para aumentar el voltaje. Según veo por ahí, las características eléctricas del solenoide hacen que no vea los pulsos sino solo la corriente media proporcionada por el flujo de pulsos PWM. Aquí se aborda el control del solenoide mediante PWM, pero no para obtener apertura/cierre progresivos, sino para ahorrar energía una vez se ha abierto mientras se mantiene así.
En general, se advierte que la válvula ha de ser específicamente proporcional y comandable por corriente y que es imposible conseguir una correcta proporcionalidad en un solenoide no diseñado para ser actuado proporcionalmente. Seguramente porque la respuesta del solenoide por sí mismo no es directamente proporcional a la corriente de entrada (de hecho, he visto solenoides proporcionales que tienen contactos diferentes para alimentación y señal de control). He encontrado dos papers donde se estudia esto: Proportional Actuator from On Off Solenoid Valveusing Sliding Modes y Converting a Switching Solenoid to a Proportional Actuator.
En cualquier caso, en todas partes se determina que el medio adecuado para elevar el voltaje del PWM es un MOSFET. Solo ESP32 soporta PWM hw (en la mayoría de pines GPIO); ESP8266 lo soporta en sw, lo quesignifica que puede haber irregularidades cuando el procesador está muy ocupado con otras cosas.
Existen tb las válvulas de cierre lento (slow closing), que x lo que veo en Amazon no son una alternativa, pq valen tb un pastón, imagino que porque la solución técnica al final es similar a la de una proporcional.
Otra posible alternativa son las válvulas motorizadas de bola, que Amazon salen por unos 30-40€. Aunque no son proporcionales (abren o cierran del todo), tardan varios segundos en hacerlo. Si optamos por alguna de ellas, comprobar modelo por cableado (he visto alguna que tenía varios modelos para cableados distintos).
Para implementar algo así podríamos utilizar este MOSFET.