Archivo por meses: abril 2018

Arduino e Internet mediante cable Ethernet y protocolo mqtt con Videotutorial

Imagina poder controlar tu Arduino con el móvil desde cualquier parte del mundo. ¡Guau!

Ahora, imagina que puedes hacerlo simplemente arrastrando con el ratón unos cuantos bloques y configurando tu dispositivo en una web que hace de servidor. ¡Aún suena mejor!

En el siguiente vídeo aprenderás paso a paso todo el proceso. Se realiza en plataformas que permiten la conexión y el control de tu Arduino de forma totalmente gratuita. Además, si quieres ampliar tu proyecto o comercializarlo profesionalmente, la tecnología utilizada es totalmente escalable.

Qué vas a aprender:

  • A conectar y programar Arduino para que se comunique mediante un Ethernet Shield por internet.
  • Configurar un dispositivo en un servidor mqtt gratuito para realizar la comunicación.
  • Controlar y monitorizar tu Arduino desde un PC o desde el móvil mediante una App gratuita.

Es la hora. ¡Comencemos!

A continuación se resumen los pasos seguidos en el videotutorial anterior.

INDICE

  1. Material y esquemas de conexión
  2. Configuración del sistema mqtt
  3. Realización del programa en ArduinoBlocks
  4. Creación de la aplicación móvil
  • Material y esquemas de conexión

Esquema de conexión

 

  • Arduino UNO o Arduino MEGA
  • Ethernet shield o Módulo Ethernet ENC28J6
  • Led
  • Servidor Web: Cloudmqtt-
  • App móvil: – MQTT Dashboard

 

 

  • Configuración del sistema MQTT 

Vamos a utilizar el protocolo MQTT para realizar el intercambio de ordenes y estados por internet entre Arduino y nuestro móvil o PC. Se ha elegido este sistema porque es el mas extendido para dispositivos IoT (Internet de las cosas).

MQTT se basa en la publicación / subscripción de mensajes. Para crear un canal de comunicación, tenemos que crear un tema en un servidor. Publicando en ese tema, mandaremos datos que serán leídos sólo por dispositivos que estén suscritos a ese tema. En este tutorial aprendemos, tanto a enviar datos (publicar), como a recibir datos (suscribir). Por tanto, nuestro Arduino actuara como emisor y receptor de datos, al igual que nuestro teléfono móvil o PC. Para almacenar y gestionar el tráfico de datos, necesitamos utilizar un servidor MQTT, conocido también como Broker.

Puedes encontrar mas información sobre MQTT y el funcionamiento de cada bloque de programación en el artículo ¡Conecta tu Arduino al Internet de las cosas!

Vamos a usar como servidor MQTT para nuestro ejemplo, la plataforma Cloudmqtt, que es gratuita para sistemas que no integran un gran número de dispositivos y que no necesitan un gran flujo de datos. Si posteriormente quieres aumentar el número de dispositivos de forma considerable, puedes hacerlo simplemente eligiendo un plan de pago.

Para comenzar, accede a https://www.cloudmqtt.com/

Plataforma Coloudmqtt para configurar el servidor

Primero vamos a crear una instancia que es el espacio en el que configuraremos nuestro dispositivo:

1. Creación de instancia

Tras pulsar en “Create New Instance”, nos aparece la instancia creada:

2. Instancia creada

Al hacer click sobre “Didactronica“, entraremos en los detalles técnicos de la conexión creada:

3 Detalles de la conexión

Con esos datos ya podemos rellenar el bloque de inicialización de parámetros de la conexión a internet mediante cable Ethernet:

4. Datos de conexión

Es importante destacar que MAC (dirección MAC) es un identificador que representa de forma única un dispositivo con conexión a internet. Para las Ethernet shield, es habitual que este dato no sea necesario, por lo que podemos dejar el que sale por defecto al insertar el bloque en Arduinobocks. Si de esta forma el sistema no conectara, hay que averiguar la MAC del dispositivo e incluirlo en el bloque. Generalmente viene indicado con con una pegatina o escrito sobre la shield.

Ahora vamos a crear un usuario y dentro de él, crearemos los temas (topics) con el que nos comunicaremos. No es obligatorio crear un usuario, pero es una forma de organizar y relacionar temas (topics) con nuestro dispositivo. Podemos decir que cada usuario va a representar una placa Arduino.

5. Creación de usuario de conexión

Atención: El password (clave) que solicita al crear un usuario no es el que nos pide el bloque de ethernet configurado anteriormente. Este password es solo para gestión interna del servidor, no hay que incluirlo en el programa de Arduinoblocks.

Los temas de comunicación en los que publicar o a los que subscribirse, han de crearse en el apartado ACLs (LIsta de control de acceso) . Aquí tenemos dos tipos de temas: Pattern y topic. Si configuramos el tema como Pattern, los mensajes se enviarán a todos los usuarios. En cambio, si elegimos crear un tema como Topic, el mensaje sólo se enviará a los dispositivos incluidos en un tema concreto.

En nuestro ejemplo crearemos un tema tipo Pattern, al que podrían acceder diferentes usuarios. Como sólo hemos creado un usuario hasta el momento, no notaremos la diferencia.

6. Creación de un tema de comunicaicón

Ahora ya tenemos todo lo necesario para comenzar la comunicación. Tenemos que tener una última cosa importante en cuenta, cuál es el nombre exacto con el que tendremos que publicar o suscribir con Arduino y el móvil o PC.

9. Nombre del tema

El nombre final que hay que indicar para trabajar con un tema creado, teniendo en cuenta la información generada en este ejemplo y resumida en la imagen anterior, será:

  • Realización del programa en ArduinoBlocks

Nuevamente te invitamos a visitar la entrada ¡Conecta tu Arduino al Internet de las cosas! para conocer en detalle el funcionamiento individual de cada bloque.

El programa creado va a hacer lo siguiente:

  1. Estará todo el tiempo comprobando si la conexión a internet es válida
  2. Si es así, se ordena que se suscriba al tema “Placa1 – ONLED”, y que lea si algún dispositivo a publicado algún dato en ese tema. La lectura la guardará en una variable que se ha llamado “Orden”.
  3. Si el en el tema se ha publicado (desde un móvil o un PC) una letra “E”, entonces se ordena que Arduino active su pin 8, con lo que el led conectado a esta salida, se iluminará. Además, se publicará el valor “Led Encendido” en un tema nuevo creado por él y que se ha llamado “EstadoLEd”.
  4. Si el dato leído y guardado en la variable “Orden” es una A, entonces se hace apagar el pin 8 de Arduino, y con ello el led conectado al mismo. Además, se publicará el valor “Led Apagado” en un tema nuevo creado por él y que se ha llamado “EstadoLEd”.

10. Descripción del problema

Ahora ya, tras cargar el programa en la placa Arduino, podemos controlarla acceciendo al servidor y enviando datos desde él. Para hacerlo, vamos a la pestaña “Websocket UI” dentro de nuestra cuenta en el servidor Cloudmqtt, e introducimos el tema y el dato que queremos enviar.

15. Enviar ordenes desde el servidor

16. Lectura de datos publicados por Arduino

En la imagen anterior vemos como hemos publicado desde el servidor la letra “E” en el tema “Placa1 – ONLED”, y además vemos que hemos recibido una publicación (“Led encendido”) en otro tema creado por la placa Arduino y que se ha llamado “EstadoLed”. Ya tenemos una comunicación bidireccional completa.

  • Creación de la aplicación móvil

Vamos a utilizar la aplicación gratuita MQTT Dashboard. Aquí tendremos primeramente que crear una nueva conexión, en la que introduciremos los datos tratados incluidos en el programa y obtenidos del servidor Cloudmqtt:

11. Configuración le la App

Tras esto, ya podemos crear una botonera en el apartado “Publish” para enviar ordenes sólo con pulsar un botón. Vamos a crear un botón de “Encender led” que al pulsarlo publique una letra “E” en el tema “Placa1 – ONLED”. A continuación crearemos otro botón de “Apagar Led” que publique una “A” en ese mismo tema.

Recordamos que hemos puesto una condición en el programa de Arduinoblocks para que una “E” active el pin 8 y con ello encienda el led conectado al mismo, y otra condición para que una “A” lo apague.

13. Apagar led

12. Creación de pulsadores

 

 

 

 

 

 

 

 

13. Botonera creada

Finalmente, vamos a crear el tema en el que se lee el estado en el que está el led, es decir, los datos que se envían desde Arduino. Recordamos que le hemos hecho que si el led se enciende, se publique en el tema “EstadoLed” el dato “Led encendido”, y si se apaga, se publique “Led apagado” en ese mismo tema.

14. Leer datos publicados por Arduino

¡Y ya lo tenemos! Si tienes consultas o sugerencias, no dudes en comentar, visionar el vídeo y realizar tantas preguntas como sean necesarias.

Compartir

Medidor de altura

Con la ayuda de un sensor HC-SR04 podemos realizar un pequeño proyecto que nos permitirá medir la altura de una persona al igual que las máquinas disponibles en muchas farmacias.

En la parte superior instalaremos el sensor de ultrasonidos HC-SR04 mirando hacia el suelo. Obtendremos la  altura medida hasta el suelo para hacer la calibración:

En nuestro ejemplo la medición en vacio ha sido de : 196.5 cm

El proyecto final restará la distancia medida hasta el objeto (cabeza de la persona) y la restará de la distancia total medida en vacio hasta el suelo.

El valor obtenido lo mostraremos en una pantalla LCD (actualizaremos la medición cada 1 segundo).

http://www.arduinoblocks.com/web/project/19711

Ejemplo del montaje en funcionamiento:

 

 

 

Compartir

Emisor IR

Con el bloque Emisor IR de ArduinoBlocks podemos enviar fácilmente códigos de control remoto por infrarrojos. Sólo necesitamos saber el código que queremos enviar y el protocolo utilizado.

El bloque de emisor IR soporta los protocolos más utilizados (casi todas las marcas utilizan uno de estos protocolos)

De esta forma podemos controlar remotamente dispositivos desde nuestro Arduino simulando un mando a distancia:  control del aire acondicionado, control de la TV, …

Ejemplo:  Simular tecla de mando ON/OFF para TV Samsung

Código ON/OFF:  0xE0E040BF

Lo convertimos de Hexadecimal a Decimal:

https://www.binaryhexconverter.com/hex-to-decimal-converter

Hex: E0E040BF   ->  Dec: 3772793023

El protocolo es Samsung y utiliza 32 bits, por tanto el bloque se usaría así:

Proyecto de ejemplo:

Crear un mando a distancia con un Keypad y un emisor de IR

 

¿Cómo conseguir los códigos de los mandos a distancia?

Para simular la pulsación de la tecla de un mando debemos saber: protocolo utilizado, código enviado, número de bits (longitud en bits del código)

Para ello podemos utilizar un sensor IR (receptor conectado al pin 11 de Arduino) y un de ejemplo que viene con la librería IRemote. Este es algo más avanzado y debemos usar el Arduino IDE:

Librería: https://github.com/z3t0/Arduino-IRremote

Instalar en Arduino IDE (importar ZIP) y abrir el ejemplo “IRrecvDump

En el monitor serie podemos ver la información de las teclas detectadas:

En este caso se ha detectado el código HEX: 212FD02F (en decimal: 556781615)  / protocolo NEC / 32 bits

Podriamos luego enviarlo desde ArduinoBlocks de esta forma:

 

+Info

http://www.arduinoblocks.com

http://www.arduinoblocks.com/web/site/doc

 

Compartir

Bluetooth con Arduino MEGA

El módulo Bluetooth es uno de los más utilizados para poder enviar o recibir información remotamente a dispositivos como móviles, tablets, …

Módulo HC-06

Al igual que en Arduino UNO, en Arduino MEGA también podemos usar el módulo Bluetooth con dos pines cualesquiera. Para ello ArduinoBlocks implementa internamente un puerto serie emulado por software (el módulo HC-06 se comunica con Arduino por conexión serie igual que el Arduino con el PC con la consola)

Pero a diferencia de Arduino UNO, en el modelo MEGA tenemos más puertos serie integrados en el hardware Arduino MEGA. Si utilizamos estos pines en concreto internamente utilizaremos la conexión implementada por Hardware lo que reduce el tamaño del programa y esta conexión será más óptima que cuando se emula por software.

Pines donde conectar el Bluetooth para usar uno de los puertos serie extra en Arduino MEGA

Serie 1 -> Bluetooth RX al pin 18 de Arduino MEGA / Bluetooth TX al pin 19  de Arduino MEGA

Serie 2 -> Bluetooth RX al pin 16 de Arduino MEGA / Bluetooth TX al pin 17 de Arduino MEGA

Serie 3 -> Bluetooth RX al pin 14 de Arduino MEGA / Bluetooth TX al pin 15 de Arduino MEGA


Ejemplo 1

Conexión bluetooth en pines 2 y 3  (conexión serie emulada por software)

Desde el móvil con una aplicación tipo “Bluetooth terminal” o similar visualizamos los datos recibidos:


Ejemplo 2

Conexión en los pines 18 y 19 (puerto serie 1 implementado en el Hardware )

y el funcionamiento es exactamente el mismo


La diferencia en el código generado es que en el ejemplo 1 se utiliza la librería SoftwareSerial para implementar un puerto serie por software (esto utiliza más recursos y el programa ocupa más memoria)

#include <SoftwareSerial.h>
SoftwareSerial bt_serial(3,2);

En el caso del ejemplo 2 se implementa utilizando HardwareSerial y de esta forma se optimiza el funcionamiento interno.

#include <HardwareSerial.h>
HardwareSerial &bt_serial=Serial1;
Compartir