5.- ONDAS: BLUETOOTH



BLUETOOTH
-Transmisión inalámbrica-





ÍNDICE:
0.- TEORÍA: ONDAS
1.- BLUETOOTH CON EL MÓDULO JY-MCU (HC-05)
2.- TX/RX CON OTROS PINES DE ARDUINO.
3.- LEDS GOBERNADOS POR EL MÓVIL.




0.- TEORÍA: ONDAS


LAS COMUNICACIONES
Las tecnologías de comunicaciones se basan en la transmisión de datos entre puntos distantes. Estos datos, se transmiten en forma de señales eléctricas y pueden ser enviadas através de cables o de manera inalámbrica.

ONDAS:
Una onda es una señal que se propaga por un medio. Por ejemplo el sonido, que es una onda mecánica que viaja usando el aire o cualquier otro material. Pero en el caso de las señales eléctricas pueden ser enviadas por el cable o a través del vacío (no necesitan un medio para transmitirse).


Dependen de 3 parámetros principalmente:
  • Amplitud: altura máxima de la onda. Hablando de sonido representaría el volumen. Si nos referimos a una onda eléctrica estaríamos representando normalmente el voltaje.
  • Longitud de onda: distancia entre el primer y último punto de un ciclo de la onda (que normalmente se repite en el tiempo).
  • Frecuencia: Número de veces que la onda repite su ciclo en 1 segundo (se mide en hertzios).


(el periodo es otro parámetro, pero simplemente es la inversa de la frecuencia)


Dentro del espectro electromágnético encontramos diferentes tipos de señales dependiendo de las características de su onda.















LA TECNOLOGÍA BLUETOOTH
Bluetooth es una especificación industrial para Redes Inalámbricas de Área Personal (WPAN) que posibilita la transmisión de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la banda ISM de los 2.4 GHz. Los principales objetivos que se pretenden conseguir con esta norma son:
  • Facilitar las comunicaciones entre equipos móviles.
  • Eliminar los cables y conectores entre éstos.
  • Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la sincronización de datos entre equipos personales. 

Bluetooth es un protocolo de comunicaciones. Se creó por varias empresas comerciales (Ericsson, IBM, Intel, Toshiba y Nokia) sobre 1998. El objetivo era sustituir los cables para transmitir datos de un teléfono móvil al ordenador.
 

El nombre bluetooth procede de un rey danes que consiguió unificar las tribus de Noruega, Suecia y Dinamarca y convertirlas al cristianismo. Y su símbolo, procede de las antiguas  runas que representan ese mismo nombre. La idea de este nombre surge por la capacidad que tiene las redes bluetooth de comunicarse con distintos dispositivos digitales, uniendo así aparatos como móviles, ordenadores, tablets..

Bluetooth es una red inalámbrica de corto alcance pensada para conectar pares de dispositivos y crear una pequeña red punto a punto, (sólo 2 dispositivos).
 

Utiliza una parte del espectro electromagnético llamado “Banda ISM”, reservado para fines no comerciales de la industria, área científica y medicina. Dentro de esta banda también se encuentran todas las redes WIFI que usamos a diario. En concreto funcionan a 2,4GHz.


Los dispositivos que con mayor frecuencia utilizan esta tecnología pertenecen a sectores de las telecomunicaciones y la informática personal, como PDA, teléfonos móviles, computadoras portátiles, ordenadores personales, impresoras o cámaras digitales.



Hay  dos formas de trabajar del bluetooth; MASTER Y SLAVE  (ambos como esclavo). La diferencia entre ellos es que el bluetooth slave solo puede conectarse a un master y a ningún otro dispositivo, mientras que el master, puede conectarse hasta a 7 slaves y gestionar la información que estos tienen.

Hay 3 clases de bluetooth que nos indican la máxima potencia a la que emiten y por tanto la distancia máxima que podrán alcanzar:
  • Clase 1, 100mw, 100metros de distancia.
  • Clase 2, 2.5mw, 10 metros.
  • Clase 3, 1mw, 1 metro.


También es muy importante la velocidad a la que pueden enviarse los datos con este protocolo:
  • Versión 1.2, a 1Mbps.
  • Versión 2, a 3Mbps.
  • v3, a 24Mbps.
  • v4, a 24Mps.


LO MÁS ÚTIL:

Para empezar diremos que los dispositivos BlueTooth pueden actuar como Masters o como Slaves (Amos o esclavos).

La diferencia es que un BlueTooth Slave solo puede conectarse a un master y a nadie más, en cambio un master BlueTooth, puede conectarse a varios Slaves o permitir que ellos se conecten y recibir y solicitar información de todos ellos, arbitrando las transferencias de información ( Hasta un máximo de 7 Slaves)



Cada uno de los dispositivos que se identifican vía BlueTooth presentan una dirección única de 48 bits y además un nombre de dispositivo que nos sirva para identificarlo cómodamente a los humanos. Por eso cuando configuras tu móvil puedes especificar n nombre propio que será el que mostraras a los demás cuando busquen tu teléfono en la inmediaciones.

La dirección propia también se puede identificar pero lógicamente, es un poco menos cómoda y tiene menos utilidad. Tampoco es raro establecer un protocolo IP sobre transporte BlueTooth, con lo que además de su identificación interna BlueTooth (Equivalente al MAC Ethernet) dispondrá de una dirección IP para conectarse a Internet.

Por eso puedes conectarte vía Bluetooth a tu PC, por ejemplo, y a través de el conectarte a internet.
Así pues un nodo BlueTooth puede ser Master o Slave y dispone de una dirección única, así como de un nombre para identificarse y muy habitualmente también incluye un PIN de conexión o número de identificación que debe teclearse para ganar acceso al mismo.

Como el BlueTooth lo desarrolló Nokia para conectar teléfonos móviles, a otros dispositivos como auriculares, micrófonos o conexiones al audio del coche, existe un procedimiento definido que se llama Pairing (o emparejamiento) que vincula a dos dispositivos Bluetooth.

Cuando vinculas dos dispositivos BT, se inicia un proceso en el que ellos se identifican por nombre y dirección interna y se solicitan la clave PIN para autorizar la conexión.

Si el emparejamiento se realiza con éxito, ambos nodos suelen guardar la identificación del otro y cuando se encuentran cerca se vuelven a vincular sin necesidad de intervención manual. Por eso el CD de tu coche reconoce el móvil de tu bolsillo en cuanto te subes y puedes reproducir la música que tienes en tu Smartphone.



ACTIVIDADES:
1.-¿Cuantos ciclos por segundo tendrán las ondas que están en la Banda ISM? ¿Cuál es el periodo de esas ondas?

2.- ¿A qué distancia y cuanto tiempo tardarían en enviarse los siguientes archivos por Bluetooth?
Un vídeo de 7Mb usando versión 2 clase 2
Una imagen de 2.5Mb usando versión 3 clase 1
Un archivo de texto de 240KB usando versión 1 clase 1







1.- EL MÓDULO BLUETOOTH HC-05/06

El Bluetooth es un estándar de comunicación inalámbrica que permite la transmisión de datos a través de radiofrecuencia en la banda de 2,4 GHz. Existen muchos módulos Bluetooth para usarlos en nuestros proyectos de electrónica, pero los más utilizados son los módulos de JY-MCU, ya que son muy económicos y fáciles de encontrar en el mercado. 

Son módulos pequeños y con un consumo muy bajo que nos permitirán agregar funcionalidades Bluetooth a nuestro Arduino. Estos módulos contienen el chip con una placa de desarrollo con los pins necesarios para la comunicación serie.


Existen dos modelos de módulos Bluetooth: el HC-05 que puede ser maestro/esclavo (master/slave), y el HC-06 que solo puede actuar como esclavo (slave). 

La diferencia entre maestro y esclavo es que en modo esclavo es el dispositivo quien se conecta al módulo, mientras que en modo maestro es el módulo quien se conecta con un dispositivo.


Físicamente, los dos módulos son muy parecidos, solo varían algunas conexiones. Los pins que encontraremos son los siguientes:

  • Vcc: Alimentación del módulo entre 3,6V y 6V. (PIN +3V DE ARDUINO)
  • GND: La masa del módulo. (PIN GND DE ARDUINO)
  • TXD: Transmisión de datos. (PIN0 RX de arduino)
  • RXD: Recepción de datos a un voltaje de 3,3V. (PIN1 TX de arduino)

CONEXIONES OPCIONALES:
  • KEY: Poner a nivel alto para entrar en modo configuración del módulo (solo el modelo HC-05)
  • STATE: Para conectar un led de salida para visualizar cuando se comuniquen datos.


2.- CONEXIÓN CON PINES O y 1 (RX y TX)
Encendido del LED_13 con el bluetooth de un smartphone utilizando los pines 0 y 1 (propios de Arduino como RX y TX)


 http://www.prometec.net/bt-hc06/

Se trata de una conexión muy sencilla. En un principio si es HC-05 como HC-06 pondremmos la misma conexión.  Solo hay que conectar GND y VCC del módulo con los de Arduino, y los pines Tx del módulo al Rx de Arduino y viceversa, es decir,  cruzados.






CÓDIGO Y CONTROL CON UN SMARTPHONE:
Primero desconectar temporalmente los pines TX/RX para subir el código a arduino y luego volver a conectar. 
También es necesario mantener el monitor serie abierto  en todo  mometo.

int led=13;
void setup(){
   pinMode(13,OUTPUT);    // configuramos el pin 13 como salida
  digitalWrite(led,HIGH);     //inicialmente encendemos el led
  Serial.begin(9600);           // Iniciamos el puerto serie
  }
void loop(){
  while (Serial.available()){
      char dato= Serial.read();
      if (dato=='a'){                     //Si enviamos una 'a' apagamos el led
           Serial.write(dato);
           dato=0;
           digitalWrite(led,HIGH);
           }
     if (dato=='b'){       //Si enviamos una 'b' encendemos el led
          Serial.write(dato);
          dato=0;
          digitalWrite(led,LOW);
          }
      }
}



PASOS PARA LA CONEXIÓN CON MI MÓVIL:
Una vez tengas volcado el programa en tu Arduino, vamos a probar a enviar información desde un teléfono móvil a nuestro Arduino.

Voy a utilizar un teléfono Android (Iphone no se puede vincular) y una aplicación
movil. Prueba con alguna de estas (PLAY_STORE): BLUE TERM, BlueTooth Serial, SSP Bluetooth, BT simple Terminal,  etc.

Cómo configurar la App "BLUE TERM" para Android: 
Una vez descargada la app la abrimos y en ajustes ponemos Conectarse a un dispositivo.
Pulsamos Buscar dispositivos y escogemos nuestro módulo Bluetooth que en nuestro caso le hemos puesto el nombre DIYMakers. Si no lo habéis cambiado pondrá por defecto LINVOR HC-06.
Ponemos el PIN del módulo. Si no lo habéis modificado será 1234.
 Después de esto, arriba a la derecha pondrá conectado:<nombre> Significa que tenemos asociado nuestro dispositivo Android con nuestro módulo Bluetooth y el led de este deja de parpadear y se queda fijo.
 Luego solo hay que poner los comandos para encender y apagar los leds. Cuando se escribe un comando tenemos que pulsar Enter del teclado para enviarlos al Arduino. En el terminal no se pueden borrar caracteres, por lo que si nos equivocamos pulsamos Enter y lo volvemos a escribir.

En caso de que la app encuentra el modulo Bluetooth  pero no se  conecta. En este caso trata de configurar la parte del echo locallo habilitan y le permiten el salto de linea eso es en Caracter CR (0x0D) le dan en la opcion de Reemplazar por CRLF (0x0D0A).
Qué pasaba? simple. No estaba utilizando el teclado stock del telefono porque tengo SWIFTKEY instalado. Así que lo único que deben hacer es irse a la configuración de su móvil y activar el teclado STOCK (el de fábrica). Funcionando!

A los que no os salga los caracteres en la aplicacion dadle a preferencias y marcais echo local.

1. -El primer paso para probar la conexión es comprobar que el led del módulo esta parpadeando. Este parpadeo indica que esta alimentado y preparado para recibir comandos AT.

2. -A continuación busca en tu teléfono los dispositivos bluetooth que hay en los alrededores y conectate al nuestro.

3. -Si todo esta correcto, ya puedes teclear una 'a' y comprobar que el led que tenemos conectados en el pin 13 se apaga y si enviamos una 'b' se enciende.

ACTIVIDADES:

1.- Descagate en tu movil  una de estas APP para bluetooth y  envia/recibe textos vía monitor serie/móvil  al arduino  del profesor.


3.- TX/RX CON OTROS  PINES  (p.e. PIN_2 y PIN_4).


Como el modulo BlueTooth es básicamente un nodo BT conectado a un interface serie, podríamos en principio conectar los pines RX y Tx a los equivalentes de Arduino en los pines 0 y 1 digitales, sin más que cruzarlos (BT Tx a Arduino Rx y BT Rx a Aduano Tx) y de hecho muchos ejemplos en Internet utilizan este esquema y se comunican con el BT mediante las familiares instrucciones de Serial.print ().


Sin embargo, prefiero desaconsejar hacerlo así, porque los pines 0 y 1 se utilizan en la comunicación serie de Arduino con el PC a través del USB y por tanto, si los usamos para comunicar con el modulo BT, perderíamos la conexión con el PC.

Por ello prefiero destinar otro par de pines cualesquiera a la transmisión, aunque para ello tenemos que importar una librería que habilite la comunicación serie con otros pines como es la librería SoftwareSerial. Para ello importamos la librería que viene de serie en el IDE y creamos un nuevo objeto serie llamado BT1 conectado a los pines 4 y 2. Y después, podemos usar BT1 exactamente igual a como usamos Serial.:
#include <SoftwareSerial.h>
SoftwareSerial BT1(4,2); // RX, TX



En este caso vamos a conectar el TX/RX del módulo con los pines 2 y 4 de arduino para dejar libres los pines TX/RX de arduino y así no tener problemas de sincronización (no podemos usar la comunicación serie de arduino y la transmisiónn de  datos bluetooth al mismo tiempo).
Con  esta práctica mediante el móvil iremos enviando caracteres que aparecerán escritos en el monitor serie del  IDE de arduino y viceversa.



CÓDIGO: 
#include <SoftwareSerial.h>       //Librería para establecer comunicación serie en otros pins
                                                    
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(10,11);         
//10 TX_modulo, 11 RX_modulo BlueTooth.
void setup( ) {
  BT.begin(9600);                 
//Velocidad del puerto del módulo Bluetooth
  Serial.begin(9600);            
//Abrimos la comunicación serie con el PC y establecemos velocidad
}
void loop( ) {
  if(BT.available( ))  {

     Serial.write(BT.read());
  }
   if(Serial.available())   {
     BT.write(Serial.read());
  }
}






(( LOS COMANDOS AT: Los comandos AT son un tipo de comandos que sirven para configurar el módulo Bluetooth a través de un microcontrolador, un ordenador o con cualquier dispositivo que posea una comunicación serie (Tx/Rx).
Son unas instrucciones que nos permiten cambiar los baudios del módulo, el PIN, el nombre, etc.
Para usar los comandos AT el módulo Bluetooth no debe estar vinculado a ningún dispositivo (led rojo del módulo parpadeando).
Según las especificaciones del módulo, el tiempo que se tiene que respetar entre el envío de un comando AT y otro tiene que ser de 1 segundo.Si se envía un comando AT y en menos de un segundo se envía otro, el módulo no devuelve respuesta.))







3.- DOS LEDS CONTROLADOS POR MÓVIL.

Para ello utilizaremos un módulo HC-06 para Arduino y la aplicación para Android Bluecontrol.

Normalmente el módulo de bluetooth tiene un LED que parpadea cuando se está intentando conectar con el móvil. Una vez hecho, la luz del LED permanece fija.

Vamos a realizar un montaje que encienda o apague un par de LEDs desde el dispositivo móvil. La aplicación Bluecontrol envía caracteres ASCII al dispositivo con el que está pareado el móvil (módulo HC-06 de Arduino), y éste los procesa para encender o apagar los LEDs.


IMPORTANTE:
  • En el momento de cargar el programa desde el IDE a la placa Arduino hay que desconectar el módulo de Bluetooth para que no interfiera.
  • El pin de transmisión del Bluetooth Tx se conecta al de recepción de Arduino Rx.
  • El pin de recepción del Bluetooth Rx se conecta al de transmisión de Arduino Rx.

MONTAJE:



PROGRAMA:

En  esta ocasión hemos usado las teclas de arriba/abajo de  la APP en formato ASCII si no te funciona puedes configurar otras teclas en el código  y/o dentro de propiedades de la App.

// Desde la aplicación del movil (bluetooth) se encienden  y
//apagan dos LEDs con las flechas UP/DOWN 
//Cuando pulsa la flecha UP envía una 'U' cuyo código
//ASCII es 85
//Cuando pulsa la flecha DOWN envía una 'D' cuyo código
//ASCII es 68

#define LED1 8
#define LED2 10
byte dato; 
void setup(){
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  }
void loop(){
  if (Serial.available()) dato = Serial.read();   
  Serial.println(dato);
  if (dato == 85) { // UP 
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);}
  if (dato == 68) { // DOWN
    digitalWrite(LED2, HIGH);
    digitalWrite(LED1, LOW);}
}



ACTIVIDAD:
1.-Diseña un sistema que sustituya los LEDs por dos servomotores de giro continuo de tal manera que se pueda controlar el giro desde la aplicación del móvil.Este es el punto de partida de un robot móvil controlado a distancia.