
Tutorial Control de Cortinas via MQTT
En el tutorial cortinas automatizadas veremos como controlar cortinas enrolables via un Arduino. Vamos a introducir el concepto de MQTT, el cual nos permite comunicación corta y precisa a través de mensajes que normalmente se usa para este tipo de tareas. También platicaremos un poco resumiendo los usos de distintos tipos de arduinos o MCUs en general para comenzar a automatizar la casa u oficina o negocio.
Requisitos:
- Computadora (mac)
- Arduino UNO
- ESP8266 UART/TTL Wifi Shield
- Motor DC 30 RPM
- Driver Board L298N
- Impresora 3D como un servicio
- Cortina enrolable
- Arduino IDE (https://www.arduino.cc/en/Main/Software)
La cortina que usamos en este tutorial es de este tipo:
Es importante conocer el mecanismo, hay muchos y cada uno diferente. En mi caso la pieza que enrola se mira así:

Y es precisamente la que vamos a reemplazar con una pieza impresa 3D. En esta imagen de arriba, hay una parte donde se conecta la cadena y otra parte que embona con el tubo de aluminio sobre el cual se enrola la cortina en sí. Esa pieza que embona la mande a imprimir con un servicio de impresión 3D. De un extremo la pieza tiene la misma forma que la original y del otro extremo tiene un agujero para el eje del motor DC.

También quiero explicar que existen otros mecanismos posibles paraexisten otros mecanismos posibles para enrollar la cortina. Por ejemplo se puede mantener el mecanismo existente y agregar un motor que enrolé en la cadena.

Sin embargo no tuve mucho éxito con este método así que regresé a trabajar en él directamente. Aún así creo que sigue teniendo ventajas ya que la fuerza del motor está aplicada directamente sobre el eje de rotación.Sin embargo no tuve mucho éxito con este método así que regresé a trabajar en él directamente. Aún así creo que sigue teniendo ventajas ya que la fuerza del motor está aplicada directamente sobre el eje de rotación.
Ahora quiero hablar específicamente sobre el uso de los distintos tipos de Arduino son microcontroladores que se pueden usar en esta ocasión versus en otras y cuáles son las ventajas y desventajas de cada uno de ellos. Por ejemplo el uso de un Arduino un comparado con un Arduino nano es importante debido a que la nano tiene un menor requerimiento energético.Ahora quiero hablar específicamente sobre el uso de los distintos tipos de Arduino son microcontroladores que se pueden usar en esta ocasión versus en otras y cuáles son las ventajas y desventajas de cada uno de ellos.
Por ejemplo el uso de un Arduino UNO comparado con un Arduino nano es importante debido a que la nano tiene un menor requerimiento energético. No digamos la UNO con una ESP8266 Wifi Shield:

Luego también están las Arduino Yun que tiene la forma de la UNO pero incluyen el acceso a internet directamente sobre la Arduino. Osea nos ahorramos el componente de la shield:

Así también están los modulos ESP01 que son modulos muy pequeños. Estos se pueden combinar con una Arduino nano para reducir aun mas el factor tamaño:

También existen las Node MCU que son mas como la Nano y con el WiFi incluido. Esto combina el factor pequeño de la nano con el WiFi onboard, ósea integrado:

Todo esto se reduce a el ahorro de recursos ya sea usar menos energía para el controlador y también no desperdiciar la capacidad del controlador en términos del número de pin es a nuestra disposición como en el caso de una Arduino uno en la cual sólo vamos a ocupar dos pines en este caso.
En este caso si quisiéramos hacer un ranking hacia el setup más eficiente sería algo así:
- Arduino Uno + ESP8266 Wifi Shield (desperdiciamos pines, energía, MCU y Shield grande)
- Arduino Uno + ESP01 Módulo (desperdiciamos pines y un poco de energía, MCU grande)
- Arduino Yun (desperdiciamos pines & energía)
- Arduino Nano + ESP01 Módulo (desperdiciamos pines)
- Node MCU (desperdiciamos pines)
- ESP01 Módulo (desperdiciamos casi nada)
En términos de tamaño y funcionalidad integrada parecería ganar el NodeMCU y es por eso que se ha popularizado tanto. Es básicamente una Arduino pequeña (1/3 parte) y si contamos que ya incluye el WiFi integrado, nos estamos ahorrando mas del 60% del tamaño. Sin embargo el NodeMCU siempre trae varios pines innecesarios. Así que realmente querés reducir mas, podes operar SIMPLEMENTE con el modulo ESP01. Así es, este modulo trae un MCU ademas del ESP wifi chip. Veamos los ahorros:
- Tamaño: el ESP01 mide 1/6 parte de lo que mide una UNO o Yun.
- Pines: el ESP01 trae solo 3 pines GPIO y solo ocupamos 2!
- Energía: el ESP01 opera a 3.3V en lugar de 5V
El ESP01 es el claro ganador, pero en este caso vamos a usar la UNO con la Shield simplemente para hacer mas sencillo el tutorial. Si quieren ver un tutorial donde la ESP01 opera de forma autónoma, pueden visitar nuestro canal de YouTube: https://www.youtube.com/channel/UC7MiaKMQmX0kOOuXSyr4_tg
Ok ahora veamos como alambrar nuestro proyecto:

No encontré un componente modelo en Fritzing para la ESP8266 Uart/Ttl WiFi shield, pero es del tamaño de la UNO y lleva la ESP01 montada en ella, así que alambré la ESP01 en mi diagrama para mostrarles como se conecta a los pines In1 e In2 de la L298N. La L298N también va alambrada al motor DC y a la fuente de poder. En mi caso yo estoy usando 6xAA lo cual da 9V pero no usen una 9V porque no tendrá suficiente amperaje para mover el motor debido al torque necesario. Si quieren aprender De Fuentes de Poder en proyectos de robótica vs electronica visiten el tutorial: https://www.youtube.com/watch?v=_aakRhSzpgo
Ahora hay algo importante que hacer si estamos usando la shield, y es doblar los pines 0 y 1 en la shield de manera que no conecten directamente a la UNO. Luego insertamos 2 jumpers con sus pines doblados a 90 grados en los pines Rx y Tx de la UNO para conectarlos a los respectivos pines en la shield. Esto es para poder monitorear el serial:

Perfecto, ya tenemos todo alambrado. Ahora vamos a cargar el código pero es importante aclarar que el codigo NO sera cargado a la UNO a pesar que es la UNO la que vamos a conectar a la computadora. El código pasará por la UNO y al MCU de la ESP8266.
Ahora vamos a descargar esta libreria para probar nuestra conexión al wifi de forma rápida y sencilla.
Primero cargamos el sketch HTTPWebServer. En este codigo vamos a ingresar nuestra SSID y clave para conectarnos al wifi. También vamos a cargarlo a la ESP8266, no a la UNO. Para ello debemos tener instalada la libreria ESP8266 de la comunidad. Para esto debemos ir a las Preferencias del Arduino IDE e ingresar la siguiente dirección:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Si ya hay otro URL en esta casilla se usa una coma para separar los URLs.

Una vez agregamos esta dirección, el Arduino IDE buscar librerías en ese nuevo repositorio y así podremos encontrar la libreria que ocupamos. Se trata de la libreria ESP8266 que encontramos en Tools > Board y agregamos “esp8266” en la casilla de búsqueda:

Despues de instalarla, podemos conectar nuestra Uno/Shield al USB y en File > Examples > ESP8266WebServer > HelloServer así:

Para cargarla a la ESP8266 (y no a la UNO) debemos seleccionar la tarjeta o board correcta asi:

En mi caso seleccione la NodeMCU 0.9 ya que ese MCU trae una ESP12E y mi shield Zambian tiene una ESP12E. Sin embargo si usamos otros chips como la que viene en la ESP01 que vimos arriba, esa funciona con la option Generic ESP8266 Module. Lo importante aquí es saber que estamos seleccionando cargar la sketch a la ESP8266 y no a la UNO.
Si reemplazamos la SSID y clave en esa sketch y la cargamos a la ESP, al abrir el SM vemos que escribe la direccion IP al Monitor Serial. Para poder cargarla es necesario tener los jumpers conectados de la UNO a la Shield como explicamos arriba && tambien es necesario poner los DIPS 3&4 en ON y 1&2 en OFF. Una vez cargamos podemos probar si la shield recibe la IP del router. Una vez comprobado, pasamos a cargar el código operativo.
En este caso el sketch operativo, ESP8266mqttTest1.ino, es bastante sencillo. Lo que hace es conectarse al wifi, esperar mensajes mqtt y reaccionar en base a los mensajes. Repasemos brevemente MQTT:

Un sistema MQTT tiene alguien, algún dispositivo, funcionando como un servidor o Broker. El broker recibe mensajes y publica mensajes. En este caso mi Rpi funciona como el broker y la ESP8266 va correr un codigo que le hace registrarse con el broker, usando otra libreria llamada PubSubClient. Esta le encontramos en el Library Manager:

Ahora exploremos el código:
#includeA veces al cargar el código a la ESP(aun teniendo los DIPs correctos, la connexion de jumpers correcta y la selection de board correcta recibimos esto: …___…___. Esto significa que no esta cargando bien y es necesario hacer click al boton de RST en la ESP8266 shield. Una vez esté todo bien cargado, debemos poder enviar mensajes mqtt al shield y el resultado final:
https://youtu.be/LHPxjd92ygk
En mi caso estoy usando MQTT broker en mi Raspberry Pi y que usa el sistema operativo hassio pero se puede instalar un broker en cualquier computadora.