Etapa de control y comunicación bluetooth
La comunicación Bluetooth que se
usará es serial y asíncrona, gracias a que el modulo Bluetooth que se usará en
el proyecto hace esto posible, ver la fig.1. En nuestro caso tenemos que el PIC
se comunica a través de un módulo UART con el módulo Bluetooth; esta pareja a
su vez se comunicará con el celular o
incluso con alguna computadora con adaptador Bluetooth (Bluetooth dongle).
Fig. 1 Módulo bluetooth HC05 y su pin-out
El módulo UART del PIC,
anteriormente mencionado, es un módulo que permite que la comunicación serie
sea posible. En la programación del PIC se establece el Byte a comunicar y el módulo se encarga de mandar el Byte de forma serial, es decir, bit por bit a una velocidad determinada por el Baud-Rate. Dicha velocidad debe de ser la misma entre ambos
dispositivo, por lo que se debe de configurar el Baud-Rate del módulo Bluetooth.
Para nuestro proyecto se usa el
módulo HC-05 (fig. 1) y para poderlo configurar se siguieron los pasos
sugeridos por [1]. Se configuro para tener 9600 baudios. En caso de no contar
con un Arduino se puede realizar la configuración a través de una tarjeta de
interfaz serial (que puede ser construida con un PIC, un MAX232 y un cable
USB/Serial) y cualquier monitor serial donde se ingresarán los comandos AT
especificados en el datasheet del
HC05 o en [1].
Una vez configurado el HC05, se
debe de configurar el PIC18F4550 para que se pueda comunicar con el módulo
bluetooth. Por lo que, al PIC, se le programa el siguiente código:
//Programa
desarrollado por Guillermo Lebron, Roberto Campos y Fernando Godoy
//Proyecto#1
Programa: Control del puente H para
accionar los motores de un carro de juguete
// al
recibir datos mediante comunicación serial de un módulo bluetooth
// HC05
a 9600 baudios.
//Cabecera
de Núcleo*
#include <p18f4550.h>
#include <xc.h>
#include <delays.h>
//Directivas para activar los
bits de configuración*
#pragma config FOSC = INTOSCIO_EC
//Oscilador Interno, PuertoA RA6 activo*
#pragma config WDT = OFF //Watchdog
timer apagado*
#pragma config PBADEN = OFF //Parte
baja del puerto B digitales
#pragma config MCLRE = OFF //MCLRE
no Disponible
#pragma config DEBUG = OFF //Modo de
depuración no disponible*
#pragma config LVP = OFF //Fuente de
ISCP apagada*
//Definición de pines como
variables
#define adelante RD0
#define atras RD1
#define derecha RD2
#define izquierda RD3
//Programa
principal
void
main()
{
//Configuración de los pines digitales como
salida
TRISD=0;
//Configuración del reloj
interno
IRCF2=1;
IRCF1=1;
IRCF0=1;
//Configuración del módulo
EUSART del PIC18F4550.
//Referencia: Datasheet del
PIC18F4550
PORTC=0;
TRISC=0xB0;
SPBRGH=0;
SPBRG=0x33;
TXSTA=0x2C;
RCSTA=0x90;
BAUDCON=0;
//Declaración de variables locales
char variable;
//Bucle infinito para el
programa principal
while(1)
{
//Condición para
asegurar que se ha recibido un dato en el pin Rx
if (RCIF=1)
{
//Si se recibió una
"a" mueva el carro hacia adelante activando el pin RD0
if
(variable=='a')
{
adelante = 1;
atras = 0;
}
else
{
//Si
se recibió una "b" mueva el carro hacia atras activando el pin RD1
if
(variable=='b')
{
adelante = 0;
atras = 1;
}
else
{
//Si
se recibió una "c" que detenga el motor trasero
if
(variable=='c')
{
adelante
= 0;
atras
= 0;
}
}
}
//Si
se recibió una "d" que vire a la derecha
if
(variable=='d')
{
derecha = 1;
izquierda = 0;
}
else
{
//Si
se recibió una "e" que vire a la izquierda
if
(variable=='e')
{
derecha = 0;
izquierda = 1;
}
else
{
//Si
se recibió una "f" que detenga el motor delantero
if
(variable=='f')
{
derecha
= 0;
izquierda
= 0;
}
}
}
}
}
}
Con ello tanto el PIC como el
HC05 se estarán comunicando a 9600 Baudios y sin bit de paridad. A partir de
esto se hizo el circuito de la fig. 2. En él se indica el orden en que se debe de
conectar el módulo HC05.
Dado que la alimentación de las baterías será de entre
9 a 12 Voltios se emplea un regulador de voltaje 7805 a fin de garantizar un
voltaje cercano a 5V y poder alimentar de forma segura al PIC y al módulo
Bluetooth. Además el circuito cuenta con LEDs para poder verificar que las
señales son mandadas de forma correcta hacia el puente H para poder accionar
los motores.
Es importante señalar que el
código aún no incluye la parte de control de velocidad por PWM, solo permite
controlar el sentido de giro y el paro de los motores. Por tal motivo, el pin
de control PWM no debe de ser conectado a la etapa de potencia, y el pin
correspondiente de la etapa de potencia (EN2) se deberá de conectar a 5V.
Fig. 2 Circuito de la etapa de control con el PIC18F4550 y el
HC05.
Finalmente, es muy importante mencionar el hecho de que se deben de emparejar los dispositivos que se estarán
comunicando. Así, en nuestro caso, el celular o computadora se debe de emparejar
con el módulo Bluetooth que se usará; de tal forma que, dicho celular o
computadora actúa como maestro en la comunicación (decide con quién
comunicarse), mientras el módulo Bluetooth actúa como esclavo.
El emparejamiento se lleva a cabo de forma similar a cuando dos celulares se preparan para transferir archivos. El celular que enviará la información (maestro) debe de tener una aplicación donde se buscará el dispositivo que recibirá los datos (esclavo). Por defecto, el módulo Bluetooth tiene el nombre: HC05 y el password: 1234 para poderse emparejar.
Una aplicación que se puede usar, desde celulares Android, para poder establecer comunicación con el HC05 es blueterminal, la cual funciona similar a los monitores seriales tales como Tera terminal. Otra forma de hacerlo es a partir de una laptop con adaptador de Bluetooth. El adaptador, que estamos usando, trae un programa llamado blue manager, el cual permite emparejar a la computadora con el módulo HC05. Este programa, además, permite que el adaptador Bluetooth, conectado a la computadora, pueda emular un puerto COM. De esta forma se posibilita el uso de Tera Terminal para poder interactuar con el módulo HC05.
A continuación se muestra un
vídeo del funcionamiento de la etapa de control,
Video 1: Prueba del
funcionamiento correcto de la etapa de control
Fuentes citadas:
disculpa con que programa haces el codigo para el pic 18f4550
ResponderEliminarHola! perdón la demora, el código se hizo en mplab x. Saludos!
Eliminarhola, disculpa se puede utilizar el pic 16f877a??'
ResponderEliminarSin ningun problema, puesto que cuenta con módulo de comunicación serial
Eliminarentonces solo tendira que declarar el pic y quitar el otro???
EliminarNo, también hay que revisar los registros porque estos cambian de nombre.
EliminarOla,
ResponderEliminarLo que hace la entrada RC2?
RC2 es una salida!
EliminarHola, yo creo que hay un error en el problema, no llegas a igualar RCREG al caracter variable.
ResponderEliminarCon RCREG te refieres al registro de salidas "C"?
Eliminarhola donde te puedo mandar mensaje?
ResponderEliminarme urge :(
Buenas tardes!
EliminarMi correo es rob23654@gmail.com, y estoy dispuesto a apoyarle!
Saludos!
Disculpen, donde se le asigna el valor a variable?. solo veo que la comparas con caracteres pero desde que se declara no obtiene un valor
ResponderEliminarque tal, de primera mano te comento que me intereso tu proyecto, como punto numero dos te hago una pregunta, bueno varias, ¿el codigo quepro gramaste actua como esclavo? si bien, ahora, yo quisiera enviar datos por bluetooth a otro pic que los reciba mediante bluetooth ¿como seria el codigo?, por ejemplo al pulsar un switch en el maestro envie el dato por bluetooth al segundo pic(slave) y que este al recibir el dato encienda un led, si me ayudas te lo agradeceria infinitamente, gracias!
ResponderEliminar