ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Puntos principales o de qué trata este artículo

Continuamos con la serie de artículos sobre ShIoTiny — un controlador programable visualmente basado en el chip ESP8266.

En este artículo se explica, a través del ejemplo de un proyecto de control de ventilación en un baño o en otra habitación con alta humedad, cómo se construye un programa para ShIoTiny.

Artículos anteriores de la serie.

ShIoTiny: automatización pequeña, Internet de las cosas o 'seis meses antes de las vacaciones'
ShIoTiny: nodos, conexiones y eventos, o características del dibujo de programas.

Enlaces

Firmas binarias, esquema del controlador y documentación
Instrucciones y descripción de los nodos
Configuración del broker MQTT cloudmqtt.com
Panel de control MQTT dashboard para Android

Introducción

La comprensión no existe sin experiencia. Esta es una verdad probada por el tiempo y las generaciones. Por lo tanto, no hay nada mejor para aprender habilidades prácticas que intentar hacer algo por uno mismo. Y los ejemplos que muestran lo que se puede hacer y lo que no se debe intentar son muy útiles aquí. Los errores de otros, por supuesto, no pueden prevenir la aparición de los propios, pero pueden ayudar a reducir su número.

Las preguntas y cartas de los lectores de los artículos anteriores me impulsaron a hacer un pequeño proyecto de ejemplo sobre el control de la ventilación para mostrar cómo funcionan los nodos ShIoTiny.

La idea original, en la que se basa el controlador ShIoTiny — una estación de bombeo e irrigación — no es adecuada ni interesante para todos. Por eso tomé un sistema de control de ventilación, claro para todos y útil para muchos, como ejemplo.

Debo decir que la idea del proyecto no es mía, sino que la obtuve de aquí y luego la adapté a ShIoTiny.

Primero entiende lo que quieres

El proceso de perfeccionamiento es interminable. Y precisamente esta característica ha arruinado muchas buenas ideas y proyectos. El desarrollador, en lugar de lanzar algo que aunque no sea perfecto, sí funcione, continuaba perfeccionándolo. Y lo mejoró hasta que los competidores lo superaron, lanzando soluciones que aunque no eran perfectas (y a menudo simplemente malas), funcionaban.

Por lo tanto, es muy importante saber dónde poner el punto final en un proyecto. O, en otras palabras, necesitamos definir qué queremos obtener al final del proyecto a partir de lo que tenemos al principio. En español, existe una palabra corta y concisa, 'plan', que se utiliza para describir el documento que tiene como objetivo detallar el camino para crear algo, pero que, por alguna razón, traductores mentalmente limitados y gerentes defectuosos han comenzado a llamar 'hoja de ruta'. Pero eso ya es problema suyo.

Nuestro plan será el siguiente. Supongamos que tenemos un espacio cuya humedad puede aumentar considerablemente de vez en cuando. Por ejemplo, un baño o una cocina. La humedad es algo desagradable y la forma de combatirla es tan antigua como el mundo: ventilar el espacio. Hay muchas formas de ventilación. Sin embargo, dejaremos de lado métodos exóticos y pasados de moda, como usar negros con abanicos, y nos centraremos en un ventilador convencional. Los ventiladores son más baratos y más fáciles de encontrar en nuestras tierras.

En resumen, queremos controlar el ventilador: encenderlo y, por supuesto, apagarlo. Más precisamente, queremos que se encienda y apague automáticamente cuando sea necesario.

Solo queda definir: bajo qué condiciones debe encenderse el ventilador y bajo qué condiciones debe apagarse.

Esto es bastante obvio: si la humedad supera cierto límite predeterminado, el ventilador se enciende y extrae el aire; cuando la humedad vuelve a la normalidad, el ventilador se apaga.

El lector atento se fijará de inmediato en la palabra 'predeterminado'. ¿Por quién lo ha establecido? ¿Cómo ha sido establecido?

El umbral de humedad se puede establecer de varias maneras. Vamos a considerar dos de ellas: la primera, utilizando una resistencia variable, y la segunda, a través de la red mediante el protocolo MQTT. Cada uno de estos métodos tiene sus ventajas y desventajas, que se discutirán más adelante.

Para aquellos que no lo han entendido, aclaro que el 'umbral de humedad' es el nivel de humedad que, al ser superado, requiere que se encienda el ventilador.

Siguiente pregunta: ¿darle al usuario el derecho de encender el ventilador directamente? Es decir, independientemente del nivel de humedad, al presionar un botón. Esta opción la contemplamos. Después de todo, el ventilador puede ser necesario no solo en condiciones de alta humedad, sino también para eliminar del ambiente, por ejemplo, olores desagradables conocidos popularmente como "hedor".

Así que ya entendemos lo que queremos y, además, un poco de cómo funcionará. Enumeremos brevemente todas las funciones de nuestro sistema de control de ventilación:

  • establecimiento del nivel umbral de humedad (dos opciones);
  • medición del nivel de humedad;
  • activación automática del ventilador;
  • desactivación automática del ventilador;
  • activación manual del ventilador (al presionar un botón).

Así que, el plan está claro. Es necesario implementar todas las funciones mencionadas anteriormente en nuestro programa. Actuaremos basándonos en este "plan". Para empezar, dibujaremos un esquema estructural del dispositivo.

Esquema estructural del dispositivo

Hablando en términos generales, tendremos dos de estos esquemas. El primero es para la opción en la que el nivel umbral de humedad se establece mediante un potenciómetro. El segundo esquema es para la opción en la que el nivel umbral de humedad se establece a través de la red mediante el protocolo MQTT.

Pero dado que estos esquemas solo diferirán en un elemento: el potenciómetro "establecimiento del nivel umbral de humedad", dibujaremos solo un esquema estructural. Por supuesto, el esquema estructural de acuerdo con las normas GOST se ve diferente. Pero no nos dirigimos a ingenieros veteranos, sino a la nueva generación. Por lo tanto, la claridad es más importante.

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Así que, ¿qué vemos en el dibujo? El ventilador está conectado a un relé Relay1 del controlador. ShIoTinyMe gustaría señalar que el ventilador es un dispositivo que opera a alta tensión. Por lo tanto, si alguien va a hacer esto por sí mismo, tenga cuidado. Es decir, como mínimo, antes de meter sus dedos o instrumentos de medición en el circuito, desconecte al menos el ventilador. Y un segundo comentario. Si su ventilador es más potente que 250W, no debe conectarlo directamente a ShIoTiny — solo a través de un contactor.

Ya entendimos lo del ventilador. Ahora, el botón de "activación manual" del ventilador. Está conectado a la entrada Input1. Aquí no hay más que explicar.

Sensor de temperatura y nivel de humedad DHT-11 (o DHT-22 o sus equivalentes). Para su conexión, hay una entrada especial en el controlador ShIoTiny. Como se puede ver en la imagen, conectar este sensor tampoco representa ningún problema.

Y, por último, la resistencia variable que establece el umbral de humedad. Más precisamente, es un divisor, compuesto de resistencias variables y fijas. No hay problemas para conectarlo, pero aclaro que el ADC integrado está ESP8266 diseñado para un máximo de 1 Voltio. Por eso se necesita un divisor de voltaje de aproximadamente 5 veces.

Y una vez más recuerdo que este divisor no es necesario si el umbral de humedad se establece a través de la red mediante el protocolo MQTT.

Comencemos a elaborar el algoritmo de funcionamiento del dispositivo en el editor ElDraw ShIoTiny. Cómo acceder a este editor se puede leer en artículos anteriores o en las instrucciones, cuyo enlace se encuentra al inicio del artículo.

Opción uno, la más sencilla

Empecemos con lo básico: encender el relé Relay1 cuando se supere el umbral de humedad durante un tiempo determinado.

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Como podemos ver, no hay nada complicado: solo cuatro nodos, sin contar los nodos de comentarios. DHT11 — es el propio sensor de temperatura y humedad (se puede cambiar por DHT22).

Constante CONST — el nivel umbral de humedad, en porcentaje.

El comparador es un nodo que compara dos números y da como salida 1 si se cumple la condición dada y 0 si no se cumple.

En nuestro caso, dicha condición será A>B, donde A — el nivel de humedad medido por el sensor, y B — el nivel umbral de la misma humedad.

En cuanto el nivel de humedad medido (A) supere el umbral de humedad (B), inmediatamente en la salida del comparador A>B aparecerá 1 y el relé se encenderá. Y viceversa, tan pronto como el nivel de humedad vuelva a la normalidad (es decir, A<=B), inmediatamente en la salida del comparador A>B aparecerá 0 y el relé se apagará.

¿Todo claro? A quienes no les queda claro, leerlo de nuevo o mirar la descripción del funcionamiento de los nodos en las instrucciones.

Cabe mencionar que los datos del sensor DHT11 se actualizan aproximadamente una vez cada 10 segundos. Por lo tanto, el relé no podrá encenderse y apagarse más de una vez cada 10 segundos.

Todo estaría bien, pero nos gustaría establecer el umbral de humedad mediante una resistencia variable. ¡No hay nada más sencillo!

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Simplemente reemplazaremos el nodo constante por un nodo ADC. Después de todo, fue al ADC donde conectamos el divisor de voltaje con la resistencia variable.

La tensión en la entrada del ADC varía de 0 a 1 Voltio. La humedad en la salida del sensor varía de 0 a 100%. ¿Cómo los comparamos? Muy simple. El nodo ADC en ShIoTiny no solo mide la tensión en la entrada, sino que también puede escalarla y desplazarla..

Es decir, en la salida del nodo ADC1 habrá un valor X, calculado a partir de la fórmula

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

, donde ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo). — tensión en la entrada del ADC (de 0 a 1V); k — rango del ADC y b-desplazamiento del ADC. Así, si establecemos k=100, y b=0,, cuando varíe ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo). en el rango de 0 a 1, el valor X en la salida del nodo ADC variará en un rango de 0 a 100. Es decir, numéricamente igual al rango de cambio de humedad de 0 a 100%.

O, dicho de manera simple, al girar el potenciómetro, se puede establecer un umbral de humedad de 0 a 100. La única desventaja es que no hay dispositivos de visualización. Pero en la práctica, si se hacen 6 divisiones en el potenciómetro 0%, 20%, 40%, 60%, 80%, 100%) — esto es suficiente para establecer el umbral de humedad.

¿Cómo establecemos los coeficientes k — rango del ADC y b-desplazamiento del ADC? ¡Es tan fácil como un pastel! Simplemente haga clic con el ratón en el nodo ADC1 y aparecerá de inmediato una ventana de configuración. En ella puedes establecer todo lo que necesites. Para nuestro caso, será una ventana como la de la imagen.

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Así que tenemos una solución de trabajo básica. Comencemos a perfeccionarla.
Por cierto, la solución más simple tiene una ventaja: no necesita internet. Es totalmente autónoma.

Opción dos, conectamos un botón.

Todo funciona y todos están contentos. Pero hay un problema, no podemos encender la ventilación de forma forzada. Ya hemos acordado que a la entrada Input1 tendremos conectado un botón, que encenderá y apagará el ventilador de forma forzada, sin tener en cuenta el sensor de humedad.
Es hora de procesar este botón en nuestro esquema-programa.

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

El bloque de procesamiento del botón está resaltado con una línea naranja. Es un contador de pulsaciones del botón, que se restablece a cero cuando su salida supera uno (línea verde, salida del nodo CT.).

Todo funciona por aquí de manera sencilla, como antes: el contador CT. cuenta las pulsaciones del botón conectado a la entrada. Input1Es decir, el valor en la salida de este contador aumenta en 1 con cada pulsación del botón.

Tan pronto como este valor sea igual a dos (es decir, mayor que 1), inmediatamente en la salida del comparador. A>B aparecerá 1. Y este 1 reiniciará el contador CT. a cero. Se refiere al comparador, el más bajo según el esquema.

Por lo tanto, nuestro botón tiene dos estados: 0 y 1. Si necesitáramos más estados (3 o 4 o más) sería suficiente con cambiar la constante CONST de 1 a otro valor.

Así que tenemos dos condiciones para encender el ventilador: superar un nivel de humedad establecido y presionar el botón una vez. Al cumplirse cualquiera de las condiciones, el ventilador se encenderá. Y funcionará hasta que se presione el botón nuevamente Y o hasta que el nivel de humedad vuelva a la normalidad.

Por supuesto, se podría complicar aún más el algoritmo, pero no lo haremos, dejaremos espacio para la creatividad de los interesados.

Tercer opción, conectándonos a Internet

Todo lo que hemos descrito es perfectamente funcional. ¿Y qué pasa con los 'puntos'? Cualquier hipster hacker que se respete se burlará de quien gira perillas y presiona botones, en lugar de controlar desde el smartphone. Girar perillas no está 'de moda'. Pero deslizar el dedo por el smartphone, hasta hacer que se te sangre, eso es el pico del deseo del hipster hacker (nunca he podido distinguir a todos ellos — así que si me equivoqué, perdón).

Pero seamos benévolos con estas personalidades mencionadas. Controlar a través de Internet tiene beneficios reales. Primero, es visual. Hay un montón de aplicaciones para todas las plataformas que permiten, con un par de toques, crear un panel de control bastante útil para nuestro controlador Carlson. En segundo lugar, es posible monitorear remotamente el estado de la humedad en el ambiente. Y, en tercer lugar, puedes ver no solo lo que hace el ventilador — si gira o no, sino también cuál es el nivel de humedad umbral establecido. Y si el ventilador se encendió automáticamente o manualmente. En general, todo lo que desees.

Por supuesto, para un ventilador, es demasiado honor — tanta atención. Pero esto es solo un ejemplo.

Así que, para conectarnos a Internet, utilizaremos la tecnología MQTT y el protocolo del mismo nombre.
Para utilizar esta tecnología, necesitamos un broker MQTT.Es un servidor especial que atiende clientes MQTT, por ejemplo ShIoTIny y tu smartphone.

La esencia de la tecnología MQTT consiste en que cualquiera de los clientes publica en el broker MQTT (servidor) datos arbitrarios bajo un nombre determinado (denominado tema en terminología MQTT). Otros clientes pueden suscribirse a datos arbitrarios bajo su nombre (tema) y recibir nuevos datos publicados. Es decir, todo el intercambio de datos funciona bajo el principio cliente-corredor-cliente.

Yo no lo haré detenerme en los detalles. Hay muchas artículos y tutoriales en internet sobre cómo funciona MQTT y qué programas existen para crear paneles de control. Simplemente mostraré cómo podemos recibir y publicar datos usando ShIoTiny.

Como corredor, utilicé www.cloudmqtt.com, pero el principio es el mismo en todas partes.

Así que asumiremos que te has registrado en un corredor MQTT. En general, el corredor te proporcionará (o requerirá que crees) un nombre de usuario y una contraseña (para la autorización), así como un puerto de conexión. Conectar ShIoTiny a al corredor MQTT se puede hacer de dos maneras: conexión normal y por TLS (SSL).

Todos estos parámetros se ShIoTiny introducen en la pestaña Redes, sección Conexión MQTT al servidor.

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Si tu broker MQTT. no requiere autorización, no introduzcas nombre de usuario y contraseña (deja estos campos vacíos).

Parámetro Prefijo del tema MQTT requiere una explicación aparte.

El prefijo de parámetros MQTT es una cadena que se añade al nombre del tema (tema) al publicar y suscribirse en el corredor MQTT. Para establecer el prefijo MQTT para tu controlador, simplemente debes introducirlo en el campo de entrada «Prefijo del tema MQTT» («Prefijo del tema MQTT»). El prefijo siempre comienza con una barra («/»)! Si no introduces una barra en el campo de entrada, se añadirá automáticamente. En el prefijo no se pueden usar símbolos «#» y «+». No hay otras restricciones.

Por ejemplo, si publicas el parámetro «status» (o te suscribes a él), y tu prefijo está definido como «/shiotiny/», entonces en el corredor este parámetro se publicará bajo el nombre «/shiotiny/status». Si tienes definido un prefijo vacío, todos los parámetros en el corredor comenzarán con una barra («/»): «status» se publicará como «/status».

Así que asumimos que te has registrado en corredor MQTT y has recibido nombre de usuario, contraseña y puerto. Luego, has configurado estos parámetros en la pestaña Redes, sección Conexión MQTT al servidor del controlador. ShIoTiny.

Asumimos que el prefijo se ha establecido en «/room/».

Empecemos por publicar el estado de todos los parámetros clave: relé Relé1, estado de encendido manual, estado de encendido automático y, por último, los niveles de humedad umbral y actual. Y como extra, la temperatura en la habitación. Cómo hacerlo, lo puedes ver en la imagen.

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Como vemos, la única diferencia con la versión anterior son los nodos «Publicar MQTT». Teniendo en cuenta el prefijo, se publican los siguientes parámetros:
ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Como podemos ver, ¡todo el estado del sistema está a la vista!

Pero queremos no solo ver, sino también gestionar. ¿Qué hacer? Muy sencillo. Renunciaremos a establecer un nivel de humedad umbral mediante ADC y un potenciómetro, y estableceremos este nivel de humedad umbral a través de MQTT directamente desde el smartphone!

ShIoTiny: ventilación de ambientes húmedos (proyecto ejemplo).

Eliminamos el nodo ADC del esquema y conectamos tres nuevos nodos: almacenamiento FLASH, restaurar FLASH y describir MQTT.

La función del nodo describir MQTT es obvia: recibe el parámetro /room/trigHset (nivel de humedad umbral) del bróker MQTT. Pero, ¿qué hace con los datos después? Simplemente los entrega al nodo almacenamiento FLASH, que, a su vez, guarda estos datos en la memoria no volátil bajo el nombre de trigH. Después de eso, el nodo restaurar FLASH lee de la memoria no volátil los datos llamados trigH y lo que sucede después ya lo sabemos.

¿Por qué complicar tanto las cosas? ¿Por qué no simplemente entregar los datos obtenidos a la entrada del comparador?

Como decía el compañero S. Holmes — ¡es elemental!¡Nadie garantiza que, tras encender su dispositivo, se conecte a al corredor MQTT. Y se debe medir la humedad. Además, hay que encender el ventilador. Pero sin información sobre el nivel de humedad umbral, ¡eso es imposible! Por lo tanto, nuestro dispositivo al encenderse extrae el nivel de humedad umbral previamente guardado de la memoria no volátil y lo utiliza para tomar decisiones. Y cuando se establezca la conexión con el bróker MQTT y alguien publique un nuevo valor /room/trigHset, entonces se utilizará este nuevo valor.

A partir de aquí, pueden imaginar cualquier cosa que deseen. Por ejemplo, además de la humedad, introducir también el control de la temperatura. O agregar un control “inteligente” de la iluminación (nos quedan dos relés y dos entradas sin usar). ¡Todo está en sus manos!

Conclusión

Así que hemos revisado algunos ejemplos de implementación de un controlador sencillo basado en ShIoTiny. Puede que esto sea útil para alguien.

Como siempre, sugerencias, deseos, preguntas, errores tipográficos y otros — al correo: shiotiny@yandex.ru

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster