Archivo por meses: septiembre 2018

Robot sigue línea con ArduinoBlocks

Ya hemos visto como controlar un robot mediante bluetooth con el móvil. Ahora se está haciendo mayor y quiere seguir su camino… Vamos a enseñarle cómo hacerlo.

Realizaremos un robot sigue línea en dos niveles en este artículo. Uno inicial un poquito mas básico, con el que es mas fácil que nuestro pequeño robot se pierda. Pero no hay problema, seguirá creciendo para aprender a buscar el camino perdido en el segundo nivel de dificultad propuesto al final del artículo.

Partes que componen el artículo:

  • Nivel 1 de robot sigue línea
  • Nivel 2 de robot sigue línea: En busca del camino perdido

Ambas partes constan de tutorial en vídeo y también en texto.

Nivel 1 de robot sigue línea

En el siguiente vídeo podéis encontrar ampliada la información que se muestra a lo largo de este artículo.

INDICE

  1. Componentes básicos
  2. Principio de funcionamiento de la detección de línea
  3. Esquema de conexión
  4. Programa en ArduinoBlocks
  5. Calibrado y funcionamiento de robot

1. Componentes básicos

  • Dos sensores ópticos
  • Un controlador de motores (L298n)
  • Dos motores con reductora y rueda
  • Chasis comercial o fabricado con madera, plastico, etc.
  • Rueda pivotante
  • Arduino

 

 

 

 

 

Como se ve en las imágenes, vamos a usar dos ruedas motrices que se pueden accionar independientemente y una rueda central pivotante. Es un sistema de movimiento igual que el que ya vimos en el artículo Coche velocista con bluetooth y Arduino: Componentes… pero con un circuito eléctrico mas simple.

En el vídeo 0. Controlador para motores CC L298N con Arduino… se detalla el funcionamiento del controlador de motores y su programación en ArduinoBlocks.

Para iniciarse o si no se buscan unas prestaciones muy altas, los pack de motor con reductora y rueda que se ven en la imagen, son muy baratos, robustos y fáciles de conseguir.

Vamos a ver el elemento nuevo: los sensores ópticos.

Son los dispositivos que nos permiten distinguir una superficie negra de una blanca. En concreto usamos el TCRT5000L, que es un sensor óptico que detecta la diferencia de color en una superficies. Para hacerlo, se dispone de:

  • Un led (emisor infrarrojo) que emite luz infrarroja (IR) y
  • Un fotodiodo que es capaz de recibir esa luz infrarroja y transmitir una señal.

2. Principio de funcionamiento de la detección de línea

Se puede llegar a realizar un sigue líneas con un solo sensor, pero es una opción muy limitada. Vamos a juntar dos sensores, así:

De tal forma que si ambos detectan superficie negra, querrá decir que va por el camino correcto. Si uno detecta blanco y otro negro, querrá decir que hay que realizar un giro:

En el caso de la parte izquierda de la imagen superior, el robot se ha salido hacia la izquierda, habrá que hacer que gire a la derecha hasta que ambos sensores se vuelvan a encontrar en línea negra.En el caso del centro el robot debe avanzar en línea recta porque va bien y en el caso de la derecha de la imagen, deberá girar hacia la izquierda para corregir su rumbo. Con las curvas, el funcionamiento será igual.

3. Esquema de conexión

En el vídeo 0. Controlador para motores CC L298N con Arduino… se detalla el funcionamiento del controlador de motores y su programación en ArduinoBlocks.

IMPORTANTE: En este ejemplo se está trabajando con motores cuya tensión máxima de funcionamiento es de 6 voltios, por eso se alimenta con cuatro pilas de 1,5 V cada una. Adecuar la tensión de funcionamiento a los motores que elijáis.

Como se ve en el esquema, de las baterías se ha alimentado el controlador de motores (que a su vez alimenta los motores) y también la placa Arduino a través del pin Vin. La alimentación a través de este puerto debe tener un valor mínimo de 6 voltios para que la placa funcione correctamente.

Con la salida de 5V de Arduino, se ha alimentado a los dos sensores ópticos.

Finalmente recordad que es fundamental conectar el 0 V de las baterías con el 0 V (GND) de Arduino, para que tenga todo el sistema una referencia común.

Además, en el artículo Coche velocista con bluetooth y Arduino: Componentes… ya mencionado, se detalla cómo realizar un robot similar pero con mejores prestaciones que el que estamos tratando.

4. Programa en ArduinoBlocks

Para esto, vamos a hacer hincapié en tres cuestiones importantes:

  • Sensor sobre superficie de color negro manda un 1 a Arduino
  • Sensor sobre superficie de color blanco manda un 0 a Arduin

Esta cuestión la vamos a llevar a la programación insertando los siguientes bloques en condiciones Si:

El funcionamiento general del programa está formado por tres partes fundamentales

1. Inicialización de parámetros

  • Pines con los que interconectamos Arduino y el controlador de motores:

Esto depende de la conexión física de vuestro robot. Puede pasar que al dar la orden de avanzar, un motor gire en un sentido y el otro en el contrario. Esto lo podéis corregir, cambiando la polaridad en la conexión física del motor al controlador de motores, o intercambiando los pines de control del sentido de giro. Para este ejemplo, estos pines son el 9 y 8 para un motor y el 6 y 7 para el otro motor. Siguiendo con el ejemplo, los pines 10 y 5 se encargarán del control de la velocidad, pero  no os preocupéis, todo eso ya lo configura internamente ArduinoBlocks.

  • Velocidad del robot:

En estos primeros programas, la velocidad del robot va a ser constante. Veremos mas adelante como sacarle mas rendimiento o incluso controlarla con bluetooth. Es importante recordar que la velocidad máxima se obtiene al sacar un valor de 255. Se ha elegido esa velocidad de 110 para el ejemplo, de manera arbitraria. Si le ponéis una velocidad muy alta es posible que el robot se pierda en las curvas un poco cerradas, por eso, en función de las características de vuestro robot, podréis ir calibrándolo.

Por si aún no lo habéis notado, este es un mundo apasionante en el que hay cientos de alternativas, mejoras y retos que superar para conseguir que tu robot sea el mas rápido… ¡sin perderse!

2. Lectura de los sensores.

Ya en el bucle (la parte que se va a repetir constantemente), primero vamos a definir los dos estados en los que pueden estar los sensores, asociándolos a los pines a los que se conectan. Aquí se han conectado a los pines 11 y 12

3. Cuatro posibles casos básicos que se pueden dar en el avance del robot:

Caso A: El robot se sale hacia la izquierda -> habrá que ordenar que se mueva sólo la rueda izquierda.

Caso B: El robot se sale hacia la derecha -> habrá que ordenar que se mueva sólo la rueda derecha.

Caso C: El robot pierde completamente la línea negra y se queda en superficie blanca -> en esta primera versión del programa le vamos a decir que se pare, que ya le echamos nosotros una mano. En la siguiente versión veremos como enseñarle a que busque el camino perdido.

Caso D: Los dos sensores están en línea negra -> Vas bien… ¡adelante!

Y cada CASO se corresponde con las siguientes situaciones y reacciones necesarias:

El programa completo queda así:

5. Calibrado y funcionamiento de robot

Además de la programación, la posterior configuración del robot es fundamental para su correcto funcionamiento. Depende en gran medida de:

  • Grosor de la línea a seguir
  • Separación entre los sensores
  • Velocidad de avance del robot

También pueden influir parámetros constructivos del robot, como la distancia del rodamiento a la ruedas motrices y la distancia desde los sensores hasta las ruedas motrices.

En el vídeo mencionado al principio, se muestran varios ejemplos de estas cuestiones.

Nivel 2 de robot sigue línea: En busca del camino perdido

Ahora lo que vamos a hacer, es decirle que si se pierde, es decir, que si ambos sensores detectan superficie blanca, queremos que gire hacia la última dirección que recuerde haber girado. Para eso, cada vez que giremos tendremos que hacerle memorizar que ha girado en ese sentido.

El tutorial en vídeo, resumido posteriormente,  podéis encontrarlo aquí:

INDICE

  1. Mejoras en la programación para buscar la línea cuando se ha perdido
  2. Misma programación pero organizando las órdenes en bloques de función

1. Mejoras en la programación para buscar la línea cuando se ha perdido

Ahora vamos a decirle al robot que si se pierde, es decir, si se encuentran los dos sensores en línea blanca, comience a girar en el último sentido que lo ha hecho justo antes de perderse. Para ello, cada vez que ejecute un movimiento, tiene que memorizar que lo ha ejecutado, pero eso si, sólo se guardará el ultimo que haya realizado, ya que sobrescribirá al anterior.

En la siguiente imagen vemos como realizar esto en la programación:

Aquí el programa completo con el bloque de inicializar:

2. Misma programación pero organizando las órdenes en bloques de función

Para realizar una programación mas ordenada y clara, se pueden agrupar conjuntos de instrucciones en funciones que nosotros definamos. En definitiva lo que se hace es darle un nombre a una secuencia, para que, cada vez que queramos hacer esa secuencia solo tengamos que incluir un bloque con su nombre, y no todos los bloques que la forman. El programa quedaría así:

En la documentación de ArduinoBlocks y en el vídeo incluido en este apartado se explica cómo sacar estos bloques desde el editor de ArduinoBlocks.

Ahora… ¡A ponerlo a prueba y diseñar como enfrentar nuevos retos con nuestro sigue línea!

Compartir

Monitorización y control Wifi de temperatura y configuración de servidor con usuario y clave

En el artículo Wifi y Arduino: Explicación del proceso completo con personalización de app móvil, tratamos las nociones básicas de la comunicación con Wifi usando un servidor gratuito que no requiere crear usuario ni clave. Esta característica hace que no sea necesario configurar un servidor en Internet, lo que resulta muy rápido, sencillo y cómodo, pero como contrapartida nos ofrece una conexión menos segura. Ahora, vamos a aprender a crear una cuenta en un servidor online (también gratuito) que nos permita dotar a nuestra conexión de usuario y contraseña.

Todo lo que vamos a explicar es totalmente escalable, es decir, puedes crear tu proyecto con una cuenta gratuita y si por los motivos que sea quieres aumentar en gran medida el número de dispositivos, mensajes, clientes, etc., bastará con cambiar de plan y contratar uno que te ofrezca mas servicios. Se ha elegido el servidor Cloudmqtt.com, pero la filosofía de trabajo es la misma para otros servidores similares.

Vamos a ver en qué consiste el proyecto que proponemos para poner en práctica todo esto:

Se va a monitorizar la temperatura de una sala mediante un sensor de temperatura conectado a una placa Arduino. Ese dato se va a estar mandando periódicamente a un servidor online y a una app móvil para que lo podamos consultar en cualquier momento. Ademas, desde un ordenador, un móvil o una tablet, vamos a poder  enviar una orden a ese Arduino para que haga encender o apagar un relé, que a su vez, controle un aparato de aire acondicionado, la calefacción de casa, o cualquier otro dispositivo similar ¡Casi nada!

En un tutorial futuro sobre este mismo tema, daremos un paso mas y aprenderemos a programar una temperatura y las horas a las que queremos que esté funcionando el sistema… pero vayamos por partes.

Es importante destacar, que este documento es una continuación del artículo antes citado (Wifi y Arduino: Explicación del proceso completo con personalización de app móvil), por lo que se harán referencias constantes al mismo para comprender conceptos básicos ya explicados en él.

Como en otras ocasiones en las que se colabora con la plataforma Didactrónica, toda esta información se presenta en formato audiovisual en el siguiente vídeo, y a continuación se detalla también en forma de artículo.   

Monitorización y control Wifi de temperatura

Índice

  1. Componentes y esquema de conexión
  2. Alimentación, conexión y configuración del módulo wifi ESP8266
  3. Comunicación mediante MQTT
  4. Programación por bloques en ArduinoBlocks
  5. Programa completo
  6. Configuración del servidor online con usuario y contraseña
  7. Gestión del sistema desde un ordenador
  8. Configuración de una app móvil

1. Componentes y esquema de conexión

  • Módulo Wifi ESP8266
  • Adaptador para ESP8266 (o alguna otra de las opciones presentadas)
  • Relé
  • Sensor de temperatura Lm35
  • App móvil gratuita: Linear MQTT Dashboard
  • Servidor online con cuenta gratuita: Cloudmqtt

En la imagen superior vemos que se ha conectado el pin Rx del ESP8266 al pin 2 de Arduino, y el Tx al pin 3. Se pueden conectar a otros puertos, simplemente hay que tenerlo en cuenta para indicarlo al realizar el programa.

En el artículo Arduino + MQTT + WiFi con módulo ESP8266, se describen otras formas de conectar con el módulo ESP8266, tema en el que, por cierto, profundizaremos próximamente.

Cuidado al realizar la conexión del relé. Dependiendo del fabricante, el orden de las conexiones: cable de señal (cable color cian), 5V y GND, puede cambiar:

En el vídeo Relés y Arduino: solución a problemas de lógica inversa y fabricación propia, se ofrece mas información sobre relés y su conexión con Arduino.

El sensor de temperatura Lm35 se ha conectado a la entrada analógica A0.

2. Alimentación, conexión y configuración del módulo wifi ESP8266

Este es uno de esos momentos en los que nos remitimos al artículo  (Wifi y Arduino: Explicación del proceso completo con personalización de app móvil)ya que ahí puedes encontrar toda la información detallada necesaria para realizar la configuración del ESP8266 por primera vez. Si no lo has hecho antes, es posible que necesites cambiar la velocidad de transferencia de este módulo Wifi la primera vez que lo uses.

3. Comunicación mediante MQTT

El proceso de envío y recepción de datos, en resumen, es el siguiente:

Los nombres elegidos para los temas (topics) son arbitrarios, podéis poner el que queráis, cuanto mas personalizados, mejor.

Igual que en los apartados anteriores, podéis encontrar detalles sobre la utilización del protocolo MQTT para la comunicación por internet en Wifi y Arduino: Explicación del proceso completo con personalización de app móvil y en el artículo ¡Conecta tu Arduino al Internet de las cosas! (IoT).

4. Programación por bloques en ArduinoBlocks

Como siempre, tenemos dos bloques principales: Inicializar, para definir parámetros y configuración inicial, y Bucle, para describir las órdenes y condiciones a chequear y ejecutar constantemente. Vamos primero con Inicializar:

1.Configuramos los datos de la conexión:

  • Teniendo en cuenta el esquema de conexión propuesto anteriormente, vemos en el bloque cómo conectamos el pin 2 de Arduino con el Rx del ESP8266 y el 3 con el Tx. Como decíamos, se pueden elegir otros puertos de Arduino, eso sí, preferiblemente distintos del 0 y el 1, ya que estos los ocupa la placa para su comunicación con el ordenador.
  • Establecemos la velocidad de conexión a 9600 baudios.
  • En WiFi red y clave, introducimos los datos de la red Wifi a la que se vaya a conectar.
  • El resto de parámetros los creamos y definimos en el servidor en internet. Vamos a ver cómo obtenerlos en la última parte del artículo.

2. Indicamos el tema al que nos vamos a suscribir para recibir órdenes desde internet:

Vamos a suscribirnos al tema DID/Rele y los datos que se envíen a ese tema desde un móvil, tablet, Pc, etc., los vamos a almacenar en la variable Ordenes.

Con eso ya tendríamos toda la parte de inicializar parámetros. Ahora vamos a ver que incluimos en el parte Bucle:

1. Encendido y apagado del relé conectado al pin 8:

Utilizamos un bloque condicional si para evaluar una condición:

  • Si Ordenes (variable en la que guardamos los datos leídos del tema DID/Rele) es igual a 1, es decir, si recibimos un 1 desde internet en el tema DID/Rele, entonces encendemos el pin 8 de Arduino.
  • Si recibimos cualquier otro valor, o no hemos recibido nada, entonces ponemos el pin 8 apagado.

2. Envío de la temperatura al servidor para poder visualizarla en un móvil, PC, etc.

  • Vamos a leer el valor medido por un sensor de temperatura conectado al pin analógico A0 de Arduino, y lo vamos a guardar en una variable llamada Temperatura.
  • A continuación, publicamos en el tema DID/Temperatura el valor Temperatura.
  • Todo esto lo incluimos dentro del bloque Ejecutar cada, para enviar los datos solo cada cierto tiempo (en este ejemplo cada 3 segundos), para no saturar así la comunicación con el servidor.

5. Programa completo

Así de sencillo ¡solo 13 bloques! Finalmente, vamos a ver cómo configurar el servidor para dar fiabilidad a nuestra conexión y obtener los datos que incluimos en la inicialización del programa.

6. Configuración del servidor online con usuario y contraseña

Vamos a utilizar el servidor Cloudmqtt.com porque tiene una opción gratuita y porque es muy fácilmente escalable, como decíamos.

1. Primero creamos una instancia, dentro de la que vamos a configurar nuestra conexión. Diferentes proyectos los podemos organizar en diferentes instancias.

Le damos un nombre, seleccionamos la opción gratuita (o la de pago si se quieren realizar mayor número de conexiones de las ofrecidas en el plan básico):

Seleccionamos la región en la que nos encontremos (o la mas cercana):

Le damos a continuar y confirmar, y ya la tenemos. Ahora nos aparecerá la siguiente pantalla:

Ahí tenemos ya toda la información que necesitamos para rellenar la configuración inicial de nuestro programa. Con esto vamos al siguiente paso.

2. Introducimos los datos de conexión (servidor, clave, usuario y puerto) generados por el servidor, en nuestro programa en ArduinoBlocks.

Ahora ya si que está el programa completo.

3. Tenemos que crear en el servidor los temas a los que Arduino se vaya a suscribir. Para ello, vamos a USERS & ACL:

Aquí tenemos dos apartados: Users y ACLs. Básicamente esto nos permite crear usuarios, dentro de los cuales haya temas específicos de ese usuario. Ejemplo:

Como nuestra conexión es muy simple, no vamos a crear ningún usuario, crearemos directamente el tema que publica Arduino:

DID/Rele, como decíamos antes, es un nombre arbitrario. Solo es importante que sea el mismo  que se ha usado en el programa elaborado en ArduinoBlocks para Arduino:

Y queda así:

Ya tenemos el servidor completamente configurado.Si queréis ver un ejemplo de configuración de temas que dependan de usuarios de forma jerarquizada, en el vídeo Arduino e Internet ¡SIN CÓDIGO! Proceso completo con mqtt y programación gráfica por bloques, se explica como realizarlo. Es un tutorial para comunicación por internet con cable Ethernet, pero funciona exactamente igual que con Wifi.

7. Gestión del sistema desde un ordenador

Ahora ya, tras cargar el programa en la placa, vamos en el servidor al apartado WEBSOCKET UI:

Como se ve en la imagen, escribimos el tema (topic) en el que queremos publicar una orden (que es el tema al que le hemos dicho a Arduino que se suscriba).

Escribimos el dato que se quiere enviar (Message) y lo enviamos (Send).

Los temas que Arduino publique para esta conexión no es necesario que los creemos ni configuremos en el servidor, él ya los toma directamente. Por tanto, con la parte de DID/Temperatura, no tendremos que hacer nada en el servidor:

Y este es el resultado del intercambio de mensajes:

En la imagen superior estamos recibiendo datos de temperatura publicados por Arduino en el tema DID/Temperatura. Además, en la parte inferior izquierda, vemos que se ha enviado la orden de encender el relé, que se ha enviado un 1 en le tema DID/Rele.

8. Configuración de una app móvil

Vamos a utilizar la misma app que en artículo anterior sobre wifi: Linear MQTT Dashboard. Esta parte es exactamente igual que ahí. La única diferencia es que, al configurar los datos del servidor, ahora si tenemos que incluir usuario y contraseña.

Como hacíamos, configuramos una “casilla” a la que van a llegar los datos de temperatura y un interruptor con el que enviar las órdenes de encendido y apagado del relé.

En el móvil nos quedaría algo como la imagen inferior. Estamos recibiendo una temperatura de 21 grados y tenemos un interruptor para encender y apagar el relé:

!Y eso es todo¡ En el siguiente tutorial vamos ya a por una programación horaria de la temperatura. Recordad que todo esto que hacemos, lo podéis adaptar a infinidad de proyectos diferentes: Control de luces en función de la luminosidad, gestión de alarmas, accesos…

 

 

 

Compartir