En forma paralela al armado físico del simulador iré detallando el programa que contendrá Arduino pero ahora contemplando todos los componente y la lógica para que cumplan sus funciones.
Flujo de Información
Para poder programar los módulos y su secuencia de activación, se debe tener muy en claro flujo de información. A lo largo del diseño he mostrado módulos, conecciones, y software pero todo desconectado o independiente entre si. El flujo de información es de ida y vuelta armando un ciclo desde xplane hasta como quedan con los cambios después de las lecturas.
Otra de las variables que se deben contemplar son las interrupciones de este flujo para que se cumplan ciertos eventos. El ciclo comienza en la PC con la obtención de Pitch, Raw y Roll, provistos por xplane. El módulo esp8266 recibe estos datos.
Para el calculo de las nuevas posiciones (voltaje enviado a los motores), se necesitan los datos que vienen del xplane y la posición actual de los aros y las placas del asiento. Inicialmente los valores de los aros es cero y las placas de 22,5 grados con respecto a la posición horizontal.
Los aros no tienen topes en su movimiento ya que pueden girar 360 grados, pero las placas tienen como minimo 0 grados y máximo 45 grados. las posición en grados de los aros se obtienen por bluetooth de los 3 módulos HC05. Los valores de 4 de los 8 motores(dos por cada placa) del asiento llegan directamente por el protocolo RS232 módulo Max3232. El calculo en los aros lo mostré en párrafos anteriores.
He mencionado que para enviar datos a los Arduino UNO en cada uno de los aros. El Arduino Mega tiene 3 módulos que para nuestra configuración será HC-05 y se conectaran con los HC-05 de cada aro.
1. Dispositivos Bluetooth:
El módulo Bluetooth HC-05 viene configurado de fábrica como "Esclavo" (slave), pero se puede cambiar para que trabaje como "maestro" (master), además se puede cambiar el nombre, código de vinculación, velocidad y otros parámetros más.
Definamos primero que es un dispositivo bluetooth maestro y dispositivo esclavo:
Modulo bluetooth hc-05 como esclavo:
Cuando está configurado de esta forma, se comporta similar a un HC-06, espera que un dispositivo bluetooth maestro se conecte a este, generalmente se utiliza cuando se necesita comunicarse con una PC o Celular, pues estos se comportan como dispositivos maestros.
Modulo bluetooth hc-05 como Maestro:
En este modo, EL HC-05 es el que inicia la conexión. Un dispositivo maestro solo se puede conectarse con un dispositivo esclavo. Generalmente se utiliza este modo para comunicarse entre módulos bluetooth. Pero es necesario antes especificar con que dispositivo se tiene que comunicar, esto se explicará más adelante
El módulo HC-05 viene por defecto configurado de la siguiente forma:
- Modo o role: Esclavo
- Nombre por defeco: HC-05
- Código de emparejamiento por defecto: 1234
- La velocidad por defecto (baud rate): 9600
2. Modos de trabajo del HC-05::
EL Modulo HC-05 tiene 4 estados los cuales es importante conocer:
Estado Desconectado:
- Entra a este estado en cuanto alimentas el modulo, y cuando no se ha establecido una conexión bluetooth con ningún otro dispositivo
- EL LED del módulo en este estado parpadea rápidamente
- En este estado a diferencia del HC-06, el HC-05 no puede interpretar los comandos AT
Estado Conectado o de comunicación
- Entra a este estado cuando se establece una conexión con otro dispositivo bluetooth.
- El LED hace un doble parpadeo.
- Todos los datos que se ingresen al HC-05 por el Pin RX se trasmiten por bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente
Modo AT 1
- Para entrar a este estado después de conectar y alimentar el modulo es necesario presionar el botón del HC-05.
- En este estado, podemos enviar comandos AT, pero a la misma velocidad con el que está configurado.
- EL LED del módulo en este estado parpadea rápidamente igual que en el estado desconectado.
Modo AT 2
- Para entrar a este estado es necesario tener presionado el botón al momento de alimentar el modulo, es decir el modulo debe encender con el botón presionado, después de haber encendido se puede soltar y permanecerá en este estado.
- En este estado, para enviar comandos AT es necesario hacerlo a la velocidad de 38400 baudios, esto es muy útil cuando nos olvidamos la velocidad con la que hemos dejado configurado nuestro modulo.
- EL LED del módulo en este estado parpadea lentamente.
3. Conexión entre la PC con el Módulo HC-05:
Entendido lo anterior vamos realizamos las conexiones para configurar el HC-05.
Para configurar el modulo necesitamos enviar los comandos AT desde una computadora, esto lo podemos hacer de dos formas:
3.1. Hacer la comunicación entre la PC y el módulo de forma indirecta a través de un Arduino:
ConfiguracionHC-05 con Arduino
Las conexiones serían las siguientes:
Conexión HC-05 y Arduino
Ahora es necesario compilar y cargar el siguiente sketch que hemos preparado, que como vemos lee los datos enviados de la PC a través de nuestro IDE y se lo envía serialmente hacia los pines RXD y TXD de nuestro módulo HC-05.
#include <SoftwareSerial.h> // --------------------------------------------------------------------------------Incluimos la librería SoftwareSerial
SoftwareSerial BT(10,11); // -------------------------------------------------------------------------------------Definimos los pines RX y TX del Arduino conectados al Bluetooth
void setup() {
BT.begin(9600); // ----------------------------------------------------------------------------------------------Inicializamos el puerto serie BT (Para Modo AT 2)
Serial.begin(9600); // ---------------------------------------------------------------------------------------------Inicializamos el puerto serie
}
void loop() {
if(BT.available()) { //--------------------------------------------------------------------------------------Si llega un dato por el puerto BT se envía al monitor serial
Serial.write(BT.read());
}
if(Serial.available()) { // ----------------------------------------------------------------------------------Si llega un dato por el monitor serial se envía al puerto BT
BT.write(Serial.read());
}
} 3.2. Hacer la comunicación entre la PC y el módulo de forma Directa usando un conversor USB-Serial:
Configuración HC-05 con USB a TTL
Las conexiones serían las siguientes:
Conexión HC-05 y conversor USB a TTL
Como se observa los datos le llegan directamente desde la PC a través del módulo USB a Serial, para esto se pueden usar cualquier modelo de conversor como el CP2102 y PL2303 pero también se puede hacer a través de un módulo MAX232 en caso tengan un puerto físico serial en su PC.
4. Configurando nuestro Módulo HC-05:
En nuestro ejemplo usaremos un conversor USB serial CP2102 que se ha instalado como puerto serial COM5, por lo que antes de abrir el Monitor serial, en nuestro IDE Arduino debemos escoger dicho Puerto.
El siguiente paso es entrar al Modo AT 1 o Modo AT 2:
-Para entrar al modo AT 1, después de alimentar el modulo y haber encendido tan solo basta presionar el botón que tiene el módulo HC-05, el LED del módulo seguirá parpadeando rápidamente, por lo que para saber si hemos entrado al Modo AT 1 es necesario enviar comandos AT y ver si responde, estos comandos se verán más adelante.
-Para entrar al modo AT 2, antes de alimentar o encender el modulo es necesario presionar su botón, mantener presionado y alimentar el modulo, después que enciende recién podemos soltar el botón. Si el LED Parpadea lentamente es porque ya está en Modo AT 2.
En este tutorial enviaremos los comandos AT usando el Modo AT 2, pero también es válido si están en el Modo AT 1, con la diferencia que tendrán que cambiar a la velocidad con la que tienen configurado su Bluetooth (si es la primera vez que configuran, la velocidad por defecto es de 9600).
Ahora abrimos nuestro Monitor serial del IDE de Arduino, pero puedes usar cualquier monitor serial.
En la parte inferior debemos escoger “Ambos NL & CR” y la velocidad “38400 baud” (la velocidad para comunicarse en el MODO AT 2)
Configuración Monitor Serial
Echo esto Podemos empezar a enviar los comandos AT a nuestro Bluetooth
Test de comunicación
Lo primero es comprobar si nuestro bluetooth responde a los comandos AT
Enviar: AT
Recibe: OK
Si recibimos como respuesta un OK entonces podemos continuar, sino verificar las conexiones o los pasos anteriores.
Cambiar nombre de nuestro módulo HC-05
Por defecto nuestro bluetooth se llama “HC-05” esto se puede cambiar con el siguiente comando AT
Enviar: AT+NAME=<Nombre> Ejm: AT+NAME=Robot
Respuesta: OK
Cambiar Código de Vinculación
Por defecto viene con el código de vinculación (Pin) “1234”, para cambiarlo hay que enviar el siguiente comando AT
Enviar: AT+PSWD=<"Pin"> Ejm: AT+PSWD="2560"
Respuesta: OK
Se puede saber cuál es el pin actual de nuestro modulo, para eso hay que enviar el siguiente comando: AT+ PSWD?
Configurar la velocidad de comunicación:
La velocidad por defecto es de 9600 baudios, con Stop bit =0 (1 bit de parada), y sin Paridad, para cambiar estos parámetros, se hace uso del siguiente comando AT:
Enviar: AT+UART=<Baud> ,< StopBit>,< Parity>
Respuesta: OK
Donde :
< Baud > equivale a una velocidad, los valores pueden ser: 4800, 9600, 19200, 38400, 57600, 115200, 23400, 460800, 921600 o 1382400.
< StopBit> es el Bit de parada, puede ser 0 o 1, para 1 bit o 2 bits de parada respectivamente, Para aplicaciones comunes se trabaja con 1 bit por lo que este parámetro normalmente se lo deja en 0.
< Parity> Es la paridad, puede ser 0 (Sin Paridad), 1 (Paridad impar) o 2 (Paridad par). Para aplicaciones comunes no se usa paridad, por lo que se recomienda dejar este parámetro en 0.
Ejemplo:
Enviar: AT+UART=9600,0,0
Respuesta: OK
Se puede saber cuál es la configuración actual, para eso hay que enviar el siguiente comando: AT+UART?
Configurar el Role: para que trabaje como Maestro o Esclavo
Por defecto nuestro HC-05 viene como esclavo, el Siguiente comando nos permite cambiar esto:
Enviar: AT+ROLE=<Role> Ejm: AT+ROLE=0
Respuesta: OK
Donde:<Role>
0 -> Esclavo
1 -> Maestro
Para saber cuál es la configuración actual, enviar el siguiente comando: AT+ ROLE?
Configurar el modo de conexión (cuando se trabaja como maestro)
Esta configuración aplica para cuando el modulo está trabajando como maestro, el modulo necesita saber si se va a conectar con un dispositivo en particular o con cualquiera que esté disponible.
Enviar: AT+CMODE=<Mode> Ejm: AT+CMODE=1
Respuesta: OK
Donde: < Mode >
0 -> Conectarse a un dispositivo con la dirección especificada(Se utiliza otro comando AT para especificar esta dirección).
1 -> conectar el módulo a cualquier dirección disponible(aleatorio).
Enviar el siguiente comando para averiguar el modo actual de conexión: AT+ CMODE?
Especificar la dirección del dispositivo al cual nos vamos a conectar
Esta configuración aplica cunado nuestro modulo está configurado como maestro, y a la vez el modo de conexión está en 0 (CMODE=0) el cual indica que nos vamos a conectar al dispositivo esclavo en particular. Para especificar la dirección al cual nos vamos a conectar se usa el siguiente comando AT
Enviar: AT+BIND=<Address>
Respuesta: OK
Donde:
< Address > Es la dirección del dispositivo al cual nos vamos a conectar, la dirección se envía de la siguiente forma: 1234,56,ABCDEF la cual equivale a la dirección 12:34:56:AB:CD:EF
Ejemplo:
Enviar: AT+BIND=E668,46,9277F2
Respuesta: OK
Para ver la dirección actual en este parámetro hay que enviar el siguiente comando: AT+ BIND?
Otros comandos AT de utilidad:
Obtener la versión del firmware:
Enviar: AT+VERSION?
Respuesta: +VERSION<Versión> Resp Ej: +VERSION:2.0-20100601
Obtener la dirección de nuestro modulo bluetooth
Enviar: AT+ADDR?
Respuesta: +ADDR:<dirección> Resp Ej: +ADDR: 98d3:31:2052e6
Resetear nuestro Modulo, después de hacer esto salimos del MODO AT
Enviar: AT+RESET
Respuesta: OK
Restablecer valores por defecto.
Enviar: AT+ORGL
Respuesta: OK
*Al hacer esto todos los parámetros del módulo se restablecen, a los valores por defecto de fábrica. En algunas versiones la velocidad cambia a 38400 baudios y en otros a 9600.
Ahora veremos Dos ejemplos prácticos, con los pasos para configurar nuestro HC-05 como maestro y esclavo:
4.1. Configurando nuestro módulo HC-05 como esclavo:
Realizaremos un ejemplo para configurar nuestro modulo con las siguientes características:
- Modo o role: Esclavo
- Nombre: Robot
- Código de emparejamiento: 1212
- Velocidad o Baud rate: 9600 baudios
A continuación se muestra los pasos para realizar la configuración:
- Entrar en modo AT 1 o Modo AT 2
- Verificar si estamos en modo AT
Enviar: AT
Recibe: OK
- Establecer el Role como Esclavo
Enviar: AT+ROLE=0
Respuesta: OK
- Configurar el Nombre del modulo
Enviar: AT+NAME=Robot
Respuesta: OK
- Establecer el Pin de vinculación
Enviar: AT+PSWD="1212"
Respuesta: OK
- Configura la Velocidad
Enviar: AT+UART=9600,0,0
Respuesta: OK
- Verificar los parámetros cambiados
Enviar:
AT+ROLE?
AT+PSWD?
AT+UART?
Respuesta:
+ROLE:0
OK
+PSWD:1212
OK
+UART:9600,0,0
OK
- Resetear el modulo
Enviar: AT+RESET
Respuesta: OK
En la siguiente imagen podemos ver la secuencia de datos recibidos por el monitor serial en el mismo orden en que se realizaron los pasos anteriores.
Configuración HC-05 como Maestro
Después de hacer la configuración anterior, podemos usar el modulo como un dispositivo esclavo, el cual estará siempre en espera de una conexión por parte de una dispositivo bluetooth maestro.
4.2. Configurando nuestro módulo HC-05 como Maestro:
Ahora veremos un ejemplo para configurar nuestro modulo como maestro, con las siguientes características:
-Modo o role: Maestro
-Nombre: Naylamp
-Código de emparejamiento: 1465 (La misma que el dispositivo a conectarse)
-Velocidad o Baud rate: 57600 baudios
-Dirección del dispositivo esclavo con el que se desea conectar: 98:D3:31:20:3A:D0
A continuación se muestra los pasos para realizar la configuración:
- Entrar en modo AT 1 o Modo AT 2
- Verificar si estamos en modo AT
Enviar: AT
Recibe: OK
- Establecer el Role como Maestro
Enviar: AT+ROLE=1
Respuesta: OK
- Configurar el Nombre del modulo
Enviar: AT+NAME=Naylamp
Respuesta: OK
- Establecer el Pin de vinculación
Enviar: AT+PSWD="1465"
Respuesta: OK
- Configura la Velocidad
Enviar: AT+UART=57600,0,0
Respuesta: OK
- Configurar el modo de conexión
Enviar: AT+CMODE=0
Respuesta: OK
- Especificar la dirección del dispositivo a conectarse
Enviar: AT+BIND=98D3,31,203AD0
Respuesta: OK
- Verificar los parámetros cambiados
Enviar:
AT+ROLE?
AT+PSWD?
AT+UART?
AT+CMODE?
AT+BIND?
Respuesta:
+ROLE:1
OK
+PSWD:1465
OK
+UART:57600,0,0
OK
+CMOD:0
OK
+BIND:98d3:31:203ad0
OK
- Resetear el modulo
Enviar: AT+RESET
Respuesta: OK
En la siguiente imagen podemos ver la secuencia de datos recibidos por el monitor serial en el mismo orden en que se realizaron los pasos anteriores.
Configuración HC-05 como maestro
Después de haber hecho las configuraciones, nuestro modulo se comporta como un dispositivo maestro, el cual estará constantemente buscando el dispositivo especificado hasta encontrarlo y conectarse. Para que el Maestro pueda conectarse con el dispositivo esclavo, ambos deben tener el mismo código de vinculación.