Arduino (IoT): Tutorial de Control de Cortinas via MQTT

MQTT Automated Roller Curtain

Arduino Honduras Santiapps Marcio Valenzuela

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:

  1. Computadora (mac)
  2. Arduino UNO
  3. ESP8266 UART/TTL Wifi Shield
  4. Motor DC 30 RPM
  5. Driver Board L298N
  6. Impresora 3D como un servicio 
  7. Cortina enrolable
  8. 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í:

  1. Arduino Uno + ESP8266 Wifi Shield (desperdiciamos pines, energía, MCU y Shield grande)
  2. Arduino Uno + ESP01 Módulo (desperdiciamos pines y un poco de energía, MCU grande)
  3. Arduino Yun (desperdiciamos pines & energía)
  4. Arduino Nano + ESP01 Módulo (desperdiciamos pines)
  5. Node MCU (desperdiciamos pines)
  6. 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:

  1. Tamaño: el ESP01 mide 1/6 parte de lo que mide una UNO o Yun.
  2. Pines: el ESP01 trae solo 3 pines GPIO y solo ocupamos 2!
  3. 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:

ESP8266 Uart/Ttl

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:

Boards Manager

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

HelloServer

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

NodeMCU (or Generic for ESP01)

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:

#include #include #include #include #define in1 3 //Conexion a L298N #define in2 4 // Connect to the WiFi const char* ssid = “myssid”; const char* password = “mypwd”; IPAddress mqtt_server(192, 168, 1, 117); WiFiClient espClient; PubSubClient client(espClient); const byte ledPin = 13; // Debug void callback(char* topic, byte* payload, unsigned int length) { Serial.print(“Message arrived [“); Serial.print(topic); Serial.print(“] “); for (int i=0;iAl inicio importamos las librerías que hemos instalado. Luego definimos los 2 pines de la ESP8266 (OJO, no de la UNO) que usamos para conectar a la L298N. Ahora definimos ssid y clave. Finalmente declaramos la IP de nuestra MQTT broker. Seguimos con el callback() donde reaccionamos a la recepción de mensajes mqtt del broker. Si recibimos un mensaje de 0, subimos las cortinas y si es 1, las bajamos. El resto del código es bastante fácil de entender. Lo único que falta aquí es que debemos usar algún cliente para enviar los mensajes al broker (Rpi) para que los re-dirija al ESP8266 y así ella ejecute la función de subir o bajar.

A 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.

Arduino (IoT): Simple Tutorial Arduino Android App: Parte IV

Android Arduino App

Arduino Honduras Santiapps Marcio Valenzuela

Arduino Android App: Parte IV

Ya vimos como conectarnos a dispositivos BT.  Ahora veamos como comunicarnos con esos dispositivos!

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Arduino IDE
  4. HM10/11
  5. LED & Resistor 220O
  6. Android Studio (http://developer.android.com/sdk/installing/index.html?pkg=studio)

Arduino (Iot) Simple Tutorial Arduino Android Santiapps Marcio Valenzuela
Arduino (Iot) Simple Tutorial Arduino Android

 

Ahora vamos a crear una aplicación para Android y un sketch para Arduino y hacer que se comuniquen de forma sencilla para controlar una LED.

 

En el folder de la aplicación Android esta incluido el código del Arduino Sketch (ino).

Veamos la Android App y entendamos que datos vamos a recibir primero para poder enviarlos desde nuestro Android.  La aplicación contiene 4 archivos .java:

  1. DeviceScanActivity
  2. DeviceControlActivity
  3. BluetoothLeServices
  4. SampleGATTAttributes

Lo importante es conocer la estructura para entender que esta sucediendo.  BluetoothLeServices es una clase encargada de administrar dispositivos BLE, conectar y desconectarse de ellos y transferir datos.  La actividad inicial es DeviceScanActivity y contiene métodos como onCreate (llamado al inicio) y scanLeDevice (detecta dispositivos BLE).  Luego viene DeviceControlActivity, responsable de métodos como displayGattServices (detectar servicios en dispositivos BLE), readSeek (lee el componente seekbar) y makeChange (lee o escribe datos via bluetooth.  SampleGattAttributes contiene información como las UUIDs usadas en comunicación BLE Gatt.

En este caso estamos usando un modulo BT HM10, que es mas avanzado porque soporta BT4.0 o Smart BT.  Para conectarse a un dispositivo de estos es un poco mas complicado porque utiliza un protocolo GATT para asegurar las conexiones y hacerlas mas eficientes.  Es recomendado leer sobre BLE GATT en la web.  Estos son los archivos finales:

 BT4LEDTest.zip

Corremos la app en el celular y podremos buscar dispositivos con BT y conectarnos a ellos y controlar una LED o mas!

Arduino (IoT): Simple Tutorial de Sensor de Pulso

BPM Pulso Ox Sensor Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial Sensor de Pulso

En este sensor exploraremos el mundo de la medicina donde la información es crítica, vital!  Empezaremos con el sensor de pulso.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Sensor Pulso
  4. Arduino IDE (https://www.arduino.cc/en/Main/Software)
 

Iniciamos con las conexiones del sensor, dependiendo de la versión están claramente etiquetadas como + para 5V, – para GND y S para señal.  Es un sensor análogo ya que toma mediciones de luz.  El sensor dispara una luz hacia la piel y dependiendo del flujo sanguíneo en ese momento (controlado por los latidos del corazón), la luz reflejada cambia y nos da una señal análoga del latido.

Iniciemos descargando la el Playground para este sensor.  El playground no es mas que un set de códigos que facilitan el uso del sensor.  Es basicamente una librería con ejemplos.  Por ende lo podemos descargar desde el Arduino IDE, Sketch, Include Library, Manage Libraries e ingresá la frase “Pulse sensor playground” en la ventana de búsqueda e instalá:

Ahora podemos regresar a File > Examples > PulseSensor Playground y vamos a seleccionar “Getting Started Project”. Antes de correr repasemos las conexiones:

5V Arduino se conecta al + del sensor

GND Arduino conecta al – del sensor

A0 de Arduino conecta a “S” del sensor

Y ahora detenemos el sensor entre nuestros dedos pulgar e indice y corremos el sketch, solo que ademas de correr el sketch, vamos a abrir el Serial Plotter, una herramienta que no hemos visto hasta ahora, está ubicada en Tools > Serial Plotter. Aquí veremos el siguiente resultado:

Es difícil conseguir lecturas así ya que depende como sostenemos o presionamos el sensor, puede haber mucho ruido. Aquí entra en juego el valor de threshold = 550 y la presión que hacemos sobre el sensor.

Intentá apretar mas suave y mas fuerte. La presión ideal es, como siempre, ni tanto que queme al santo ni tan poco que no lo alumbre.

En el proximo tutorial veremos como mostrar esta data en una OLED.

[code]
🤣
[/code]