Juan A. Castro

Desde el campo hasta las estrellas

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

 

Hardware Libre: ¿Qué es? ¿Qué hay?

En esta primera entrada, pretendo introducir qué se conoce como hardware libre. Hay muchas definiciones sobre qué es el hardware libre, pero si se entiende qué es el software libre, y la diferencia que hay entre libre y gratuito, ya habrás entendido qué es simplemente por similitud.

De todas formas, la definición que más me gusta de todas es la que aparece en OSHWA [1] (Open Source Hardware Association):

[…] es aquel hardware cuyo diseño se hace disponible públicamente para que cualquier persona lo pueda estudiar, modificar, distribuir, materializar y vender, tanto el original como otros objetos basados en ese diseño.[…]

Obviamente, al igual que pasa con el software libre, cada cuál quiere darle un tipo diferente de protección a sus creaciones, y por ello hay variantes que ceden unos u otros derechos.

Pese a que, en principio me centraré casi con toda seguridad en placas Arduino [2] (UNO rev3 y Leonardo) e Intel Galileo [3] (aunque ésta no es HW libre, pero usa SW libre), aquí expondré una especie de estudio del estado del arte sobre otros proyectos que se están desarrollando o se han desarrollado con hardware libre.

Logo de OSHWA

Logo de OSHWA

Además de los ya archiconocidos Arduino [2] y Raspberry Pi [4], con todos sus clones y versiones, hay otros proyectos muy, muy interesantes.

RepRap Project [5], una impresora 3D “capaz” de replicarse, pudiéndose usar para imprimir una gran parte de sus componentes. Este proyecto fue iniciado por Adrian Bowyer y algunos de sus compañeros de la Universidad de Bath (Reino Unido).

Tenemos también Project Ara [6], iniciativa de Phonebloks [7], que hizo un llamamiento para hacer un smartphone modular y construido por piezas para que cada usuario pueda adaptarlo a sus necesidades. A Google le ha gustado la idea, y ha montado una plataforma para los desarrolladores.

Por otro lado está Novena [8], todo un portátil que sigue esta filosofía, obviamente no puedes esperar que los detalles estén tan bien depurados como los ultrabooks, pero la idea de que tengas acceso tanto al software como al hardware y que tenga integrado una FPGA [9], es más que interesante.

Por último, no podía cerrar este apartado sin hablar de otro proyecto que entra dentro de mi ámbito de estudio, OpenEEG [10]. Este proyecto busca crear un dispositivo para la lectura de electroencefalograma (EEG) [11] con software también abierto.

Obviamente hay muchos más proyectos, pero sólo cité los que me parecieron más interesantes y que pueden despertar la curiosidad por la temática. Además de proyectos completos, también se comparten componentes específicos. En OpenCores [12] podéis encontrar una gran gama de diseños.

Bibliografía

[1] http://www.oshwa.org/definition/spanish/
[2] https://www.arduino.cc/
[3] http://www.intel.es/content/www/es/es/do-it-yourself/galileo-maker-quark-board.html
[4] https://www.raspberrypi.org/
[5] http://reprap.org/wiki/RepRap
[6] http://www.projectara.com/
[7] https://phonebloks.com/
[8] http://www.kosagi.com/w/index.php?title=Novena_Main_Page
[9] https://es.wikipedia.org/wiki/Field_Programmable_Gate_Array
[10] http://openeeg.sourceforge.net/
[11] https://es.wikipedia.org/wiki/Electroencefalograf%C3%ADa
[12] http://opencores.org/

Creado con WordPress & Tema de Anders Norén