Una vez, cuando me relajaba con amigos en un campamento de estudiantes en MEPhI, uno de ellos me dijo que recientemente había decidido plantar fresas en una parcela. Compré ollas, desenterré algo de tierra en algún lugar y traje mangueras de riego. Y todo estaría bien, el dueño está durmiendo: las fresas están creciendo, pero solo tienen que ir al país de manera estable una vez por semana o incluso más a menudo para que las plantas no se sequen sin agua.Recordando a un par de Arduino tumbados en una cómoda, así como un deseo de larga data de lograr algo más que solo parpadear LED, inmediatamente decidí asumir esta tarea y hacerlo esta vez, si es posible, hasta el final.
Como interfaz de gestión del sistema, se decidió proporcionar control manual "desde el botón", así como implementar el control remoto a través de Internet. Se eligió a Arduino Mega como controlador principal, ya que un escudo con una pantalla LCD y botones se conecta fácilmente, y también tiene suficiente memoria y GPIO para esta tarea.El esquema general del sistema:
para interactuar con la red global, se eligió la placa madre ESP8266, que ganó popularidad activamente. La elección de un protocolo de transferencia de datos inalámbrico se debió, además del bajo costo del módulo Wi-Fi, a la presencia de un enrutador Wi-Fi constantemente en la casa de campo del cliente, lo que evita tirar de una conexión por cable dentro de la casa.A pesar de que ESP8266 apareció en el horizonte de la comunidad de bricolaje recientemente, un recurso de desarrolladores en este chip ya se está desarrollando activamente en RuNet, donde siempre puede buscar la respuesta a su pregunta, encontrar un ejemplo de conexión de una placa ESP específica o pedir ayuda con un problema.Estimacion del proyecto
Para controlar la humedad actual del suelo, se ordenó un sensor estándar con Ebay.Para mostrar e ingresar información, se decidió utilizar el protector del teclado LCD, que es un módulo electrónico con una pantalla LCD y 6 botones conectados a una entrada analógica.Como dispositivo de control para el suministro de agua, se eligió un grifo mecanizado de 12 voltios con 2 cables, cuya apertura y cierre se realiza cambiando los signos del voltaje suministrado. Por lo tanto, además del grifo, se ordenó un módulo de relé de 4 canales (dos relés cambian la polaridad suministrada, uno es responsable del suministro de voltaje, uno más queda en reserva).Como ESP8266 en Ebay, se ordenó la versión más simple: ESP-01. Lo principal es recordar que el ESP8266 se alimenta exclusivamente de 3.3 V, que debe ser atendido de antemano.Lista de equipos necesarios:- Grúa motorizada
- Mega Arduino
- Módulo WiFi (ESP8266)
- Relé de 4 canales
- Sensores de humedad del suelo
- Pantalla LCD con botones
Costo total (excluyendo el costo de todo lo necesario para soldar, ensamblar, así como la fuente de alimentación): $ 61.01. La contribución principal al costo final de mi sistema fue realizada por una grúa motorizada ($ 23.32) y un oficial Arduino Mega 2560 ($ 26.80).Funcionalidad del sistema
Después de reflexionar un poco, decidí que el sistema de riego automático debería funcionar en los siguientes tres modos:- Manual ("desde el botón"). En este modo, el usuario decide la hora de inicio del riego en función de la información que le proporciona el sensor de humedad del suelo o de su experiencia personal;
- Modo programado El usuario establece solo los parámetros de riego de acuerdo con el programa (frecuencia, duración), después de lo cual el sistema mismo riega de acuerdo con la configuración seleccionada;
- Modo sensor El riego se realiza automáticamente cuando se alcanza un umbral de humedad predeterminado. El usuario solo necesita establecer el valor umbral de humedad y la duración del riego;
- Remoto (desde teléfono inteligente o computadora). Incluye la capacidad de controlar de forma remota el sistema utilizando la lógica de cualquiera de los tres modos enumerados anteriormente.
Es difícil imaginar la implementación de dicha funcionalidad sin el menú más simple, cuya navegación se llevará a cabo utilizando los botones de protección del teclado LCD. Puede leer sobre la implementación del menú en Arduino, por ejemplo, aquí .Blynk
Pensando en la implementación del control de riego remoto, me encontré con un interesante proyecto de Blynk, cuya recaudación de fondos se lanzó en Kickstarter el 16 de enero de 2015 .Durante un mes, el proyecto recaudó $ 49,235 en lugar de $ 10,000, lo que, aparentemente, refleja el gran interés en tales proyectos por parte de la comunidad mundial de geek.El objetivo principal de Blynk es crear una plataforma asequible para el control inalámbrico de dispositivos electrónicos caseros desde un teléfono inteligente. Según lo planeado por los autores, el acceso a Internet no es un requisito previo: el servidor Blynk se puede descargar e implementar en su red doméstica, habiendo recibido total autonomía dentro de su hogar.La lista completa de plataformas compatibles (entre las cuales, por supuesto, están Arduino, Raspberry PI e Intel Edison), a las que se planea portar Blynk, está aquí .Esquemáticamente, el principio de funcionamiento de Blynk se presenta en la siguiente figura:
En la lista de características de interfaz del programa para un teléfono inteligente para controlar un dispositivo remoto y mostrar la información recibida de él, se anuncia una amplia variedad de elementos ("widgets"). Destacamos los principales:- Botones
- Deslizadores
- Joysticks monoaxiales y biaxiales;
- Gestión utilizando un giroscopio y acelerómetros telefónicos;
- Varios tipos de perillas de control;
- Gráficos
- Indicadores de flecha;
- Notificaciones emergentes.
Puede encontrar una lista completa de artículos en la página del proyecto Blynk en Kickstarter.Cabe señalar que el proyecto se encuentra en una etapa activa de desarrollo, por lo tanto, no todas las funciones declaradas por los desarrolladores se han implementado hasta ahora. Sin embargo, según ellos, esto es solo cuestión de tiempo. La funcionalidad disponible para nuestro proyecto será suficiente.Implementación técnica
Diagrama esquemático del dispositivo:
como se puede ver en el diagrama presentado, el intercambio de información entre Arduino y ESP8266 se llevará a cabo a través de UART. Para no experimentar problemas al flashear el controlador, conectamos el módulo Wi-Fi a los contactos D2, D3, organizando un hardware UART (Serial3) en estas patas y configurando la velocidad a 11520 baudios.Un lector atento debe tener una pregunta lógica: ¿cómo se comunicará el Arduino con la lógica de 5 voltios y el ESP8266 de 3.3 voltios? Después de estudiar este tema en Internet, llegué a la conclusión de que la mayoría no le da absolutamente ninguna importancia a este problema (como resultó más tarde, no en vano) conectando directamente las patas correspondientes de estos dos tableros. Solo unos pocos artículos han sugerido usar el divisor de voltaje más simple o convertidores especialmente diseñados. Naturalmente, no tenía un convertidor, por lo que al principio se intentó implementar la comunicación utilizando un divisor, pero no dio ningún resultado, y me uní al grupo de personas antes mencionado cerrando los ojos al problema descrito (el beneficio funcionó sin coordinación de niveles lógicos) .Algunas palabras sobre el poder del ESP8266
Como ya se mencionó en muchos tutoriales, para el funcionamiento normal del ESP necesita una fuente de alimentación estable en el rango de 3.0-3.6 voltios. Para hacer esto, puede usar varios convertidores lineales, por ejemplo, el popular AMS1117 3.3 de hoy. La hoja de datos en AMS1117 indica que el voltaje de entrada puede alcanzar 15 V. Sin embargo, para un funcionamiento estable en el modo de corriente de salida de aproximadamente 1 A, se recomienda reducir el voltaje de entrada (en la práctica, 5-6 V es suficiente). Desde mi propia experiencia, diré que cuando el convertidor está conectado a una fuente de 12 V, AMS comienza a calentar activamente, lo que rápidamente conduce a una disminución en el voltaje de salida y, como resultado, un reinicio del ESP8266.Configurar ESP8266
La interacción de Arduino y ESP8266 cuando se usa Blynk se puede implementar de dos maneras diferentes:- «» ESP8266 AT-, Arduino (.. «ESP8266 as shield»);
- ESP Arduino IDE Blynk, , , Arduino , / (.. «ESP8266 as standalone»).
Ambas opciones tienen sus pros y sus contras, pero la primera opción es más conveniente porque no es necesario trabajar con dos programas y monitorear constantemente la compatibilidad de los dos dispositivos.Para controlar el uso de Blynk, debe poder cargar el firmware deseado al ESP8266. En nuestro caso, se utilizará la versión del firmware AT v0.22 SDK v1.0.0 .Para flashear las placas ESP8266, necesita un convertidor USB-TTL (por ejemplo, uno ), sin embargo, también puede usar Arduino cerrando las patas RST y GND y conectando el módulo RX Wi-Fi a la pata RX de Arduino, similar a TX a TX. Luego, coloque el ESP8266 en modo intermitente (para hacer esto, cierre la salida GPIO0 a tierra), y usando la utilidad XTCom Util, complete el firmware, como se describe aquí. Solo queda aumentar la velocidad UART a 115200 baudios con el comando AT AT + UART_DEF = 115200,8,1,0,0, después de lo cual se completará la configuración del módulo Wi-Fi.Boceto para Arduino
La biblioteca principal para trabajar con Blynk bajo el IDE de Arduino es la biblioteca BlynkSimpleEsp8266.h. Considere sus funciones principales.1) Blynk.begin (auth, "ssid", "pass")Como habrás adivinado, la función recibe los parámetros para conectarse a un punto de Wi-Fi: su SSID y contraseña, así como el token de autenticación de nuestro dispositivo para conectarse al servidor Blynk.Importante! El proceso de conexión al servidor Blynk comienza solo después de que se llama por primera vez a cualquiera de las siguientes funciones en el programa: Blynk.run () o Blynk.connect ().Para desconectarse / conectarse al servidor Blynk, se utilizan las funciones Blynk.disconnect () y Blynk.connect (), devolviendo el resultado en un tipo booleano. Para establecer una conexión (tiempo de espera en segundos), se utiliza Blynk.connect (s) (de manera predeterminada, el tiempo de espera se establece en 30 s).2) Blynk.run ()La función principal para sincronizar el dispositivo con el servidor Blynk y recibir comandos del teléfono inteligente. De uso general en un bucle. Además, esta función le permite controlar las entradas y salidas de la placa ESP (en modo "Independiente") sin usar funciones como digitalRead, digitalWrite, analogRead, analogWrite en cualquier parte del código. Es suficiente agregar los elementos necesarios a la pantalla de control en la aplicación en el teléfono inteligente y correlacionarlos con el GPIO ESP8266 necesario.3) Trabajar con contactos virtuales ("Pines virtuales")Una de las características de Blynk es el uso de contactos virtuales. Este término se refiere a un canal lógico para transmitir diversa información entre una aplicación móvil y un dispositivo, ya sean variables booleanas, valores numéricos (enteros o largos) o datos de texto como una cadena. Los contactos virtuales no tienen una conexión directa con los terminales del dispositivo y se utilizan principalmente para la interacción con bibliotecas de módulos periféricos (LCD, servos, etc.) o una interfaz de aplicación móvil.En el código de boceto, el procesamiento de la llamada al contacto virtual con el número n se realiza utilizando los bloques BLYNK_READ (Vn) {...} y BLYNK_WRITE (Vn) {...}. Dentro de las llaves, se indica el código de procesamiento para acceder al contacto virtual. Por ejemplo, si el widget de la aplicación solicita que el valor de humedad del suelo para la pantalla virtual No. 2 se muestre como un gráfico, entonces debemos escribir algo como esto en el boceto:BLYNK_READ(V2)
{
Blynk.virtualWrite(2, humidity);
}
De manera similar, puede considerar el parámetro enviado, por ejemplo, a través del contacto virtual No. 9 del usuario de la aplicación Blynk:BLYNK_WRITE(V9)
{
int x = param.asInt();
}
Esto usa la conversión de la variable de entrada a un valor entero usando param.asInt (). Las conversiones param.asStr () y param.asDouble () también están permitidas.Importante! Los procedimientos BLYNK_READ / BLYNK_WRITE deben ejecutarse lo más rápido posible para que el dispositivo pueda procesar todas las solicitudes de la aplicación. Por lo tanto, no se recomienda utilizar las funciones sllep / delay dentro de tales rutinas.Se puede encontrar información más detallada sobre la funcionalidad de Blynk en la página de github del desarrollador en la carpeta de ejemplos o en la página de documentos .Ahora, armados con conocimiento, volvamos al filtrado automático y escribamos un boceto. Proporcionaremos las siguientes posibilidades para que la aplicación móvil interactúe con el sistema:- La elección del modo de operación del sistema: manual, por sensor, por horario;
- Visualización de la humedad del suelo recibida del sistema y salida de datos históricos;
- Intercambio de información a través del elemento de aplicación terminal.
Intenté comentar sobre cada código que es responsable de una función particular del sistema, por lo que no nos detendremos en el código del programa en detalle. Solo noto que para facilitar su uso, todos los ajustes realizados por el usuario se graban en la memoria Arduino no volátil (EEPROM).Sketch se puede descargar en GitHub.Configurar la aplicación móvil Blynk
Queda el último paso: configurar la aplicación móvil. En mi caso, se utilizarán los siguientes elementos:- 4 indicadores LED (pines virtuales 1, 29, 30, 31);
- 2 botones (pines virtuales 2, 3);
- Terminal para el intercambio de información (Virtual Pin 4);
- Indicador numérico "Pantalla de valores" (Virtual Pin 8);
- Gráfico con la capacidad de mostrar datos históricos "Historial Gráfico" (Virtual Pin 8);
- Widget para activar el trabajo con correo ("Correo electrónico");
- Un widget para activar notificaciones emergentes ("Push").
Después de instalar la aplicación móvil Blynk , debe registrarse y seleccionar el dispositivo que desea administrar (en nuestro caso, es ESP8266). Además, para no perder, nos enviamos un token de autenticación único, que se utiliza en el boceto para la autenticación en los servidores Blynk. A continuación se muestran capturas de pantalla que ilustran la configuración de la aplicación.En la ventana abierta del proyecto creado en la esquina superior derecha hay 3 botones: configuración global del proyecto, agregar elementos (widgets) al formulario y ejecutar:Formulario vacío para nuevo proyecto Queda por agregar controles al formulario de solicitud y configurarlos. Algunos de los widgets disponibles al momento de escribir se presentan a continuación:Lista de widgets para agregar al formulario de solicitud Para controlar el funcionamiento del sistema, agregue 2 botones al formulario: uno será responsable de elegir el modo de operación, el segundo, para comenzar el riego en modo manual. El estado actual del sistema se elaborará con cuatro indicadores LED. Un indicador se iluminará durante el riego, los otros tres son necesarios para mostrar el modo actual.Queda por elegir los colores de los elementos, agregar subtítulos y vincularlos a los contactos virtuales deseados.Configuración de indicadores LED y botones Para mostrar la dinámica de la humedad del suelo, agregue al formulario un gráfico con la capacidad de mostrar datos históricos ("Gráfico histórico"). Mostraremos el valor actual de humedad en la pantalla digital ("Pantalla de valor").Agregar gráfico de historial y elementos de visualización de valor Para la conveniencia de la configuración remota de los parámetros del sistema, así como para obtener información más completa sobre el estado actual, agregamos un terminal a la aplicación. Y para recibir notificaciones por correo electrónico y teléfono, también debe colocar los elementos "Push" y "Email" en el formulario.Agregar elementos de terminal, push y correo electrónico Queda por colocar en el formulario todos los widgets descritos anteriormente y obtendremos algo como esto:
Resultado
A continuación se muestran algunas fotos del sistema en el estado actual y un video del trabajo de autowatering y Blynk.Haré una reserva de inmediato en el sentido de que no conecté un grifo mecanizado en el departamento y suministré agua a la maceta, y no hay una necesidad urgente: al momento de probar el sistema, mi esposa y una regadera común emula con éxito el proceso de riego (cuando se abre el grifo).Foto No. 1:
Foto No. 2:
Video:En lugar de una conclusión
Resumiendo la creación de un sistema de riego automático con Blynk, podemos decir lo siguiente:1. Por sí mismo, el servicio Blynk es una herramienta muy conveniente y fácil de aprender que, gracias a la abundancia de tableros y dispositivos compatibles, puede integrarse fácilmente en casi cualquier dispositivo. Junto con el bajo precio del módulo Wi-Fi ESP8266, estas ventajas le permiten agregar control remoto a un proyecto específico con el menor esfuerzo.Las desventajas de usar una solución de este tipo, por supuesto, son menos flexibilidad para personalizar el sistema para usted y la dependencia de los desarrolladores de aplicaciones, lo que, sin embargo, no reduce en absoluto sus méritos cuando se usa en pequeños proyectos de bricolaje.2. Las dos desventajas principales de la implementación anterior del sistema de riego automático son su costo y la baja calidad del sensor de humedad del suelo utilizado.El primer inconveniente es causado, como se mencionó anteriormente, por el alto costo del grifo electromagnético y la placa oficial Arduino Mega. Sin embargo, se puede reducir significativamente utilizando, por ejemplo, análogos de Arduino o implementando la parte electrónica completa en otro MK adecuado. La grúa, desafortunadamente, no se pudo encontrar mucho más barata, y este no era mi objetivo.En cuanto al sensor de humedad, para aumentar su vida útil y reducir los productos de electrólisis entre sus contactos, en primer lugar, es necesario aplicarle voltaje solo inmediatamente antes de medir la humedad (que se implementa en mi sistema), y en segundo lugar, es mejor reemplazar ya sea en barras de grafito, o use contactos de acero inoxidable.En un futuro cercano, se planea ensamblar la parte electrónica y colocarla en un edificio decente y, espero, finalmente instalar todo en el país.Gracias por su atencion!