Juan A. Castro

Desde el campo hasta las estrellas

Categoría: Arduino

Configurador automático para Bluetooth en Arduino

Tras buscar por Internet un código con el que pudieses reconfigurar fácilmente  los módulos Bluetooth HC-05 y HC-06 con Arduino, no encontré nada que fuese cuasi-desasistido, y aún menos que fuese cómodo para cuando no recordases la configuración que le pusiste la última vez al módulo. Así que cogí como base el tutorial de [1], y automaticé un poco el proceso, con el resultado que muestro en esta entrada.

0 – Diferencias entre los módulos HC-05 y HC-06

La principal diferencia entre estos módulos es que el HC-05 se puede configurar como maestro y como esclavo, mientras que el HC-06 es siempre esclavo. Además, el HC-05 suele tener 6 pines conectados y un pulsador, sin embargo, el HC-06 sólo cuatro pines y no tiene ningún pulsador, tal y como se puede apreciar en la imagen.

Imagen de los módulos HC-05 (arriba) y HC-06 (abajo)

HC-05 (arriba) y HC-06 (abajo)

Con el conexionado y el código propuesto, no es necesario activar el pulsador del HC-05, así que omitiré la explicación sobre su uso.

1 – Conexionado

El conexionado propuesto es el siguiente:

Conexión entre HC-05 y Arduino

Conexión entre HC-05 y Arduino

Aunque puede cambiarse fácilmente usando estas variables, teniendo en cuenta siempre que no es recomendable usar los pines 0 y 1, ya que, como sabemos, son los de transmisión del puerto serie conectado al USB, y consultando las limitaciones de la librería SoftwareSerial [2], ya que es la que se usará en la comunicación. También cabe añadir, que a la entrada de Bluetooth “KEY”, a veces se le llama “EN”

2 – Configuración

Las opciones de configuración son las siguientes: velocidad de transmisión del puerto serie, nombre que se le va a dar al módulo BlueTooth (BT), velocidad de transmisión del BT, contraseña y rol (maestro o esclavo) del BT, y si se quiere configurar o se desea preguntar la configuración que tiene (variable configurar).

3 – Ejecución

Como está automatizado para que no tengas por qué saber el estado inicial de la configuración del módulo BT, prueba todas las velocidades de transmisión aceptadas por el módulo, hasta que la respuesta es la que se espera. Una vez conocida la velocidad de transmisión, envía toda la configuración (o las preguntas) al módulo. Una salida típica por el monitor serie es la siguiente:

Como podemos observar, podemos añadir configuraciones extras además de las típicas incluidas el programa.

4 – Descarga

En el siguiente enlace se encuentra el fichero completo:

https://github.com/Juan-A-Castro/ATFinder

Bibliografía

[1] http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A

[2] https://www.arduino.cc/en/Reference/SoftwareSerial

Arduino: Cómo usar varios pines digitales en una sola instrucción

Para quien no lo sepa, y por ser el primer post sobre Arduino en el blog, Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar. Se creó para artistas, diseñadores, aficionados y cualquiera interesado en crear entornos u objetos interactivos [1]. Es decir, “hardware libre”, por utilizar una similitud con el “software libre”.

Hay mucha información en Internet de cómo aprender a manejar el dispositivo, con muchos ejemplos explicados casi paso a paso, además de video-tutoriales. Sin embargo, no todo está fácilmente accesible, o simplemente no está puesto de una forma suficientemente clara para alguien que está iniciándose, como por ejemplo, cómo se hace para enviar más de un bit a la vez a los puertos de salida digital, que es de lo que me ocuparé en esta entrada.

Para averiguarlo, tuve que mirar el esquemático de mi antiguo Duemilanove™ [2] y las palabras reservadas del lenguaje [34]. El resultado es que, efectivamente, se pueden manejar los puertos directamente, y la forma, para manejar como salida la expondré aquí:

0.- ¿Qué puertos podemos utilizar?

Para los ATmega8 y los ATmega168, tenemos los siguientes puertos:

  • B: pertenece a los pines digitales 8 a 13. Como tiene realmente 6 pines, los dos bits más significativos no se usan.
  • C: pertenece a los pines de las entradas analógicas. En éste post no lo trataré.
  • D:  pertenece a los pines digitales 0 a 7.

1.- Configurar los pines digitales deseados como entrada/salida.

Para ello podemos hacerlo de uno a uno con la tradicional instrucción pinMode(pin, OUTPUT) con cada uno de ellos o modificar el registro DDR asociado al puerto completo. En el siguiente ejemplo se muestra cómo hacerlo usando el puerto D:

Sin embargo, también hay una forma de cambiar la configuración del puerto de forma segura, cuando vas a usar un subconjunto, sin afectar al resto de pines: Usando máscaras y operaciones lógicas, la operación OR para modificar como salida digital, y la AND para modificar como entrada digital, de la siguiente manera:

Si tenéis dudas en el uso de los operadores a nivel de bit, podéis consultar [5].

2.- Lectura y escritura usando los puertos directamente.

Tanto la lectura como la escritura de un puerto digital se hace de forma análoga al registro DDR, y al igual que con ese registro, recomiendo el uso de máscaras. Obviamente se puede usar tanto binario, decimal como hexadecimal en las operaciones, aunque para el ejemplo esté usando únicamente hexadecimal.

Las máscaras en el caso anterior son 0xF0 y 0x0F.

También cabe recordar que el negador a nivel de bit en Arduino es “~”, y que, en nuestro caso de ejemplo, podríamos usar de la siguiente manera obteniendo idéntico resultado:

Bibliografía

[1] http://arduino.cc/en/
[2] http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf
[3] http://www.arduino.cc/en/Reference/PortManipulation
[4] http://chip-yang.myweb.hinet.net/Keywords.html
[5] http://playground.arduino.cc/Code/BitMath

 

Creado con WordPress & Tema de Anders Norén