ShIoTiny: ventilación de habitación húmeda (proyecto de ejemplo)


Puntos clave o de qué trata este artículo


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

Este artículo describe un ejemplo de un proyecto de control de ventilación en un baño u otra habitación húmeda sobre cómo crear un programa para ShIoTiny .

Artículos anteriores de la serie.


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

Referencias


Sitio del proyecto ShIoTiny
Firmware binario, circuitos del controlador y documentación
Instrucciones y descripción de nodos.
Configuración del broker MQTT cloudmqtt.com
Panel de control del tablero de instrumentos MQTT para Android

Introduccion


No hay comprensión fuera de la experiencia. Esta es la verdad probada por el tiempo y las generaciones. Por lo tanto, no hay nada mejor para aprender habilidades prácticas que tratar de hacer algo por su cuenta. Y ejemplos que muestran lo que se puede hacer y lo que no vale la pena probar, aquí serán útiles. Los errores de otras personas, por supuesto, no pueden evitar la ocurrencia de errores propios, pero pueden ayudar a reducir el número de estos últimos.

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

La idea inicial, sobre la base de la cual apareció el controlador ShIoTiny , una estación de bombeo y riego, está lejos de ser adecuada para todos y será interesante. Por lo tanto, tomé para todos un sistema de control de ventilación comprensible y muy útil como ejemplo.

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

Primero entiende lo que quieres


El proceso de cultivo es interminable. Y fue esta propiedad la que arruinó muchas buenas ideas y proyectos. El desarrollador, en lugar de lanzar, si no un ideal, sino un trabajo, continuó mejorando. Y lo perfeccionó hasta que sus competidores lo eludieron, liberando, si no una solución ideal (y a menudo francamente miserable), pero funcional.

Por lo tanto, es muy importante saber dónde poner fin al proyecto. O, en otras palabras, es necesario determinar lo que queremos obtener al final del proyecto a partir de lo que tenemos al principio. En ruso, para un documento que se elabora solo para describir la forma de crear algo, existe una hermosa palabra breve y espaciosa, "plan", que los traductores con retraso mental y los gerentes defectuosos recientemente comenzaron a llamar la "hoja de ruta" por alguna razón. Bueno, que Dios los bendiga.

Nuestro plan será así. Suponga que hay una habitación en la que la humedad a veces puede aumentar dramáticamente. Por ejemplo, como un baño o cocina. La humedad es algo desagradable y la forma de lidiar con ella es tan antigua como el mundo: ventilar la habitación. Hay bastantes métodos de aireación. Pero, tal vez, rechacemos formas exóticas y anticuadas como los negros con telarañas y nos detendremos en el abanico habitual. Los aficionados son más baratos y encontrarlos en nuestra área es más fácil.

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

Queda por determinar: bajo qué condiciones se debe encender el ventilador y bajo qué condiciones, apagar.

Aquí todo es obvio: si la humedad está por encima de un límite predeterminado, el ventilador se enciende y aspira aire; la humedad ha vuelto a la normalidad: el ventilador se apaga.

El lector atento captará de inmediato la palabra "dado". ¿Quién es el dado? ¿Qué tan preestablecido?

Hay varias formas de establecer el umbral de humedad. Consideraremos dos de ellos: el primero, con la ayuda de resistencia variable y el segundo, a través de la red a través del protocolo MQTT. Cada uno de estos métodos tiene ventajas y desventajas, que se discutirán más adelante.

Para aquellos que no entienden, explicaré que el "umbral de humedad" es un nivel de humedad, que excede el que requiere la inclusión de un ventilador.

La siguiente pregunta es si darle al usuario el derecho de encender el ventilador directamente. Es decir, independientemente del nivel de humedad, con solo tocar un botón. Brindaremos esa oportunidad. Después de todo, puede ser necesario un ventilador no solo con alta humedad, sino también para eliminar de la habitación, por ejemplo, un olor desagradable, conocido popularmente como "hedor".

Entonces, entendimos lo que queremos e incluso un poco cómo funcionará. Enumeramos brevemente todas las funciones de nuestro sistema de control de ventilación:

  • establecer un umbral de nivel de humedad (dos opciones);
  • medición de humedad;
  • inclusión automática del ventilador;
  • apagado automático del ventilador;
  • inclusión manual del ventilador (con solo tocar un botón).

Entonces, el plan es claro. Es necesario implementar todas las funciones anteriores en nuestro programa. Sobre la base de este "plan" actuaremos. Para comenzar, dibuje un diagrama de bloques del dispositivo.

Diagrama de bloques del dispositivo


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

Pero dado que estos circuitos diferirán en un solo elemento: la resistencia variable "que establece el nivel de humedad umbral", dibujaremos solo un diagrama estructural. Por supuesto, el esquema estructural según GOST se ve diferente. Pero no nos centramos en los ingenieros de bisontes, sino en la generación más joven. Por lo tanto, la visibilidad es más importante.



Entonces, ¿qué vemos en la imagen? El ventilador está conectado al relé Relay1 del controlador ShIoTiny . Le llamo la atención sobre el hecho de que el ventilador es un artilugio que vive bajo alto voltaje. Por lo tanto, si alguien hará esto por sí mismo, tenga cuidado. Es decir, al menos, antes de meter los dedos o medir instrumentos en el circuito: desconecte al menos el ventilador. Y el segundo punto. Si su ventilador es más potente que 250 W , entonces no debe conectarlo directamente a ShIoTiny , solo a través del arrancador.

Descubrimos el ventilador. Ahora el botón "manual on" del ventilador. Está conectado a la entrada Input1 . No hay nada más que explicar.

Sensor de temperatura y humedad DHT-11 (o DHT-22 o sus análogos). Para conectarlo, se proporciona una entrada especial en el controlador ShIoTiny . Como puede ver en la figura, conectar un sensor de este tipo tampoco presenta problemas.

Y finalmente, una resistencia variable que establece el umbral de nivel de humedad. Más precisamente, un divisor que consiste en resistencias variables y constantes. No hay problemas con su conexión, pero explicaré que el ADC incorporado en el ESP8266 está diseñado para un máximo de 1 voltio. Por lo tanto, se necesita un divisor de voltaje aproximadamente 5 veces.

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

Comenzaremos a elaborar el algoritmo del dispositivo en el editor ElDraw ShIoTiny. Cómo llegar allí, en este editor, puede leer en los artículos anteriores o en las instrucciones, un enlace al que se encuentra al comienzo del artículo.

Opción uno, la más simple


Comencemos con uno simple: encienda el relé Relay1 cuando se exceda el nivel de humedad umbral durante un tiempo determinado.



Como puede ver, nada complicado: solo cuatro nodos, sin contar los nodos de comentarios. DHT11 es en realidad un sensor de temperatura y humedad (se puede cambiar a DHT22 ).

La constante CONST es el nivel de humedad umbral, en porcentaje.

Comparador: un nodo que compara dos números y establece la salida 1 si se cumple la condición especificada y 0 si no se cumple la condición.

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

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

¿Está todo claro? Para aquellos que no lo hacen realmente, léanlo nuevamente o miren la descripción del funcionamiento de los nodos en las instrucciones.

Observo 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 utilizando una resistencia variable. ¡Nada es más fácil!



Simplemente reemplace el nodo constante con el nodo ADC. Después de todo, fue al ADC que conectamos el divisor de voltaje con una resistencia variable.

El voltaje en la entrada ADC varía de 0 a 1 voltio. Pero la humedad en la salida del sensor varía de 0 a 100%. ¿Cómo los comparamos? Todo es simple El nodo ADC en ShIoTiny no solo mide el voltaje de entrada, sino que también sabe cómo escalarlo y cambiarlo .

Es decir, en la salida del nodo ADC1 (ADC) habrá un valor X calculado por la fórmula

X=k cdotuen+b

donde uin- voltaje en la entrada ADC (de 0 a 1V); Rango k (rango ADC) y desplazamiento b (desplazamiento ADC). Por lo tanto, si establece k = 100 yb = 0 , al cambiar uinen el rango de 0 a 1, el valor de X en la salida de la unidad ADC variará en el rango de 0 a 100. Es decir, numéricamente igual al rango de cambios de humedad de 0 a 100%.

O, simplemente, girando el motor de resistencia variable, puede establecer el nivel de humedad umbral de 0 a 100. El único inconveniente es que no hay dispositivos de visualización. Pero en la práctica, si el motor de resistencia variable hace 6 divisiones 0%, 20%, 40%, 60%, 80%, 100%), esto es suficiente para establecer el umbral de nivel de humedad.

¿Cómo establecemos los coeficientes k - rango (rango ADC) y desplazamiento b (desplazamiento ADC)? ¡Sí, es más fácil que los nabos al vapor! Haga clic con el puntero del mouse en el nodo ADC1 e inmediatamente verá la ventana de configuración. En él puedes configurar todo lo que necesitas. Para nuestro caso, será una ventana como la de la figura.



Entonces, tenemos la solución de trabajo más simple. Comencemos a mejorarlo.
Por cierto, la solución más simple tiene una ventaja: no necesita Internet. Es completamente autónomo.

Opción dos, conecta el botón


Todo funciona y todos están felices. Pero mala suerte, no podemos encender la ventilación con fuerza. Ya hemos acordado que se conectará un botón a la entrada Input1 , que encenderá y apagará el ventilador a la fuerza, sin prestar atención al sensor de humedad.
Es hora de procesar este botón en nuestro programa de circuito.



La unidad de procesamiento de clic de botón se resalta en una línea naranja. Es un contador de clic de botón que se restablece a cero cuando el valor en su salida excede uno (línea verde, salida del nodo CT ).

Todo funciona aquí tan simple como antes: el contador CT cuenta los clics del botón conectado a la Entrada1 . Es decir, el valor en la salida de este contador aumenta en 1 con cada clic del botón.

Tan pronto como este valor sea igual a dos (es decir, más de 1), inmediatamente en la salida del comparador A> B aparece 1. Y este 1 restablecerá el contador CT a cero. ¡Esto significa el comparador, el inferior 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 incluso más), sería suficiente para nosotros cambiar la constante CONST de uno a otro valor.

Entonces, tenemos dos condiciones para encender el ventilador: exceder el nivel de humedad establecido y presionar el botón una vez. Si se cumple alguna de las condiciones, el ventilador se encenderá. Y funcionará hasta que se vuelva a presionar el botón Y el nivel de humedad vuelva a la normalidad.

Por supuesto, puede complicar aún más el algoritmo, pero no lo haremos, dejaremos espacio para la creatividad de aquellos que lo deseen.

Opción tres, conéctese a Internet


Todo lo que describimos es bastante funcional. ¿Pero qué pasa con el espectáculo? Después de todo, ¡cualquier hacker-hacker-cracker con granos se reirá de alguien que tuerce un bolígrafo y presiona un botón, y no lo controla desde un teléfono inteligente! Torcer el mango "no está de moda". Pero arrastrar el dedo por el teléfono inteligente y borrar este dedo en la sangre, aquí está, el pico de los deseos del hacker-hacker-cracker (nunca podría distinguirlos a todos, así que si cometí un error, lo siento).

Pero seremos condescendientes con estos individuos. La gobernanza de Internet tiene ventajas reales. Primero que nada, es visual. Hay muchas aplicaciones para todas las plataformas que permiten un par de golpes para crear un panel de control completamente utilizable para nuestro controlador Carlson. En segundo lugar, es una oportunidad para controlar de forma remota el estado de la humedad en la habitación. Y en tercer lugar, puede ver no solo lo que hace el ventilador, girando o no, sino también qué nivel de humedad umbral se establece. Y luego, el ventilador se enciende automática o manualmente. En general, lo que quieras.

Por supuesto, para algunos fanáticos hay mucho honor, tanta atención. Pero esto es solo un ejemplo.

Entonces, para conectarse a Internet usaremos la tecnología MQTT y el protocolo del mismo nombre.
Para usar esta tecnología, necesitamos un corredor MQTT . Este es un servidor tan especial que sirve a clientes MQTT , por ejemplo, ShIoTIny y su teléfono inteligente.

La esencia de la tecnología MQTT es que cualquier cliente publica datos arbitrarios con un nombre específico (denominado tema en la terminología MQTT ) en un agente (servidor) MQTT. Otros clientes pueden suscribirse a datos arbitrarios por su nombre ( tema ) y recibir datos recién publicados. Es decir, todo el intercambio de datos se basa en el principio de cliente-agente-cliente.

No me enfocaré en los detalles. Hay toneladas de artículos y tutoriales en Internet sobre cómo funciona MQTT y qué tipo de programas existen para crear paneles de control. Solo te mostraré cómo recibir y publicar datos usando ShIoTiny .

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

Por lo tanto, asumiremos que se ha registrado con el agente MQTT . En general, el corredor le dará (o requerirá que invente) un nombre de usuario y contraseña (para autorización), así como un puerto para la conexión. Hay dos formas de conectar ShIoTiny al agente MQTT : conexión regular y TLS ( SSL ).

Todos estos parámetros en ShIoTiny se ingresan en la pestaña Networking , la sección MQTT Connection to server .



Si su agente MQTT no requiere autorización, no ingrese su nombre de usuario y contraseña (deje estos campos vacíos).

El parámetro de prefijo de tema MQTT requiere una explicación por separado.

El prefijo de los parámetros MQTT es una línea agregada al título del tema al publicar y suscribirse al agente MQTT. Para configurar el prefijo MQTT para su controlador, solo necesita ingresarlo en el campo de entrada " Prefijo de tema MQTT " (" Prefijo de tema MQTT "). ¡El prefijo siempre comienza con una barra inclinada ( "/" )! Si no ingresa una barra diagonal en el campo de entrada, se agregará automáticamente. Los caracteres "#" y "+" no se pueden usar en el prefijo. No hay otras restricciones.

Por ejemplo, si publica el parámetro " estado " (o se suscribe a él), y su prefijo se establece en " / shiotiny / ", entonces en el intermediario, este parámetro se publicará con el nombre " / shiotiny / status ". Si tiene un prefijo vacío establecido, todos los parámetros en el intermediario comenzarán con una barra inclinada ( "/" ): " estado " se publicará como " / estado ".

Por lo tanto, creemos que se ha registrado con el agente MQTT y ha recibido su nombre de usuario, contraseña y puerto. Luego configura estos parámetros en la pestaña Redes , la sección Conexión MQTT al servidor del controlador ShIoTiny .

Creemos que el prefijo se establece en " / room / ".

Para comenzar, publicaremos el estado de todos los parámetros clave: relé Realay1 , estado de encendido manual, estado de encendido automático y, finalmente, umbral y niveles de humedad actuales. Bien y una ventaja: la temperatura en la habitación. Cómo hacer esto, ver la figura.



Como puede ver, la diferencia con la versión anterior es solo los nodos de publicación MQTT . Dado el prefijo, se publican los siguientes parámetros:


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

Pero queremos no solo ver, sino también controlar. Como ser Muy simple ¡Nos negaremos a establecer el nivel de humedad umbral usando el ADC y una resistencia variable y estableceremos este nivel de humedad umbral por MQTT directamente desde el teléfono inteligente!



Eliminamos el nodo ADC del circuito e incluimos tres nodos nuevos allí: FLASH store , FLASH restore y MQTT describe .

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

¿Por qué tantas dificultades? ¿Por qué no puedo enviar inmediatamente los datos recibidos a la entrada del comparador?

Como solía decir el camarada S. Holmes, ¡ esto es elemental ! Nadie garantiza que después de encender su dispositivo, se unirá al agente MQTT . Y la humedad debe ser medida. Y el ventilador debe estar encendido. Pero sin información sobre el nivel de humedad umbral, ¡esto es imposible! Por lo tanto, cuando se enciende, nuestro dispositivo extrae un nivel de humedad umbral previamente almacenado de la memoria no volátil y lo utiliza para la toma de decisiones. Y cuando se establece la conexión con el agente MQTT y alguien publica un nuevo valor / room / trigHset , se utilizará este nuevo valor.

Entonces puedes inventar lo que quieras. Por ejemplo, además de la humedad, también ingrese un registro de temperatura. O agregue control de iluminación "inteligente" (todavía dejamos sin usar dos relés y dos entradas). ¡Todo está en tus manos!

Conclusión


Así que miramos varios ejemplos de la implementación del controlador más simple en esencia basado en ShIoTiny. Tal vez sea útil para alguien.

Como siempre, sugerencias, deseos, preguntas, errores tipográficos, etc., por correo electrónico: shiotiny@yandex.ru

Source: https://habr.com/ru/post/464485/


All Articles