Circuito de control y accionamiento de motores mediante bluetooth
Una vez se comprueba el correcto
funcionamiento de las etapas de control y de potencia por separado, se procede
a conectarlas entre sí. De esta forma se arma el circuito mostrado en la fig. 1.
En este circuito (fig. 1) se debe
de conectar una alimentación de entre 9 a 12 Voltios. Además, posee los pines
de conexión para el HC05. Se indica el orden de los pines, en que se debe de
conectar al HC05, al señalizar el que corresponde al pin Key de dicho módulo bluetooth.
Finalmente se tiene la conexión
para los motores, para los cuales, los pines 1 y2 del conector J2 van hacia el
motor trasero; mientras los pines 3 y 4 van para el motor delantero.
Fig. 1 Circuito para el control y
el accionamiento de dos motores a través de bluetooth.
A continuación se muestra un
video del funcionamiento del circuito:
Video 1:
Funcionamiento del circuito para el control y accionamiento de dos motores a
través de bluetooth.
Pd.:
Recuerda el código del PIC y explicaciones más detalladas sobre la etapa de
control y de potencia, respectivamente, las puedes encontrar en las entradas
anteriores de este blog.
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 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
Las comunicaciones seriales han cobrado
un gran auge con respecto a las comunicaciones paralelas. Al irse haciendo más
complejas las redes de comunicación una disminución del número de cables usados
resulto ser la mayor ventaja de lo serial sobre lo paralelo. Entre las
comunicaciones seriales se encuentran una gran cantidad de estándares y protocolos para poder llevar a cabo la
comunicación, y a su vez, se cuenta con módulos y chips para la implementación
de dichos protocolos.
Hay dos tipos de comunicación
serial:
*Síncrona: es gobernada por una
señal de reloj (un tren de pulsos lógicos). Que indica en qué momento se inicia
la transmisión de datos y en qué momentos se debe de leer cada bit que va
llegando a través de la línea de datos.
*Asíncrona: no es gobernada por
ninguna señal de reloj, cada uno de los bits que llegan por la línea de datos
se leen a una velocidad constante.
Para un tipo de comunicación serial
y asíncrona se usan los estándares RS232, RS485, entre otros, para poder
comunicar entre diferentes equipos. Por ejemplo, las computadoras que cuentan
con puerto serial (puerto COM) usan este estándar. Otro ejemplo de comunicación
serial y asíncrona es la comunicación Bluetooth que se hará en este proyecto.
Dentro de la comunicación serial y
asíncrona se tienen los siguientes conceptos que son de importancia:
*Estado inactivo: La línea de
datos se mantiene en un estado (ya sea uno lógico o cero lógico) para indicar
que no hay datos que están siendo transmitidos.
*Bit de inicio: hay un cambio en
el estado inactivo de la línea de datos. De esta forma se indica que está a
punto de ser transmitido un dato.
*Bit de parada: la línea de datos
vuelve al estado inactivo, una vez que los datos han terminado de ser
transmitidos.
*Baud-Rate: Velocidad a la cual se está transmitiendo los datos.
Además es un indicador de la velocidad a
la cual deben de ser leídos los bits.
*Bit de paridad: Es un bit que
indica si el dato ha sido transmitido de forma correcta. Este bit se antepone
al dato. El bit de paridad indica si el número de ceros o unos es par o impar.
Por ejemplo: si se desea enviar los siguientes bits: “0010111”, se cuenta el
número de unos que es par y se decide que el bit de paridad es “1” para este
caso, entonces finalmente se enviará a través de la línea de datos: “10010111”. Si por alguna razón se recibiese: “00010111”, esto indicaría que hay un error de
transmisión dado que el bit de paridad, que cuando es “1” indica que el número
de unos es par, ahora es “0”.
Fig.1 Ilustración de los conceptos básicos para una
comunicación serial.
Con estos conceptos ya es posible
tener una comunicación serial asíncrona, siempre y cuando ambos dispositivos
estén de acuerdo en cuanto al estado de línea inactiva, el bit de inicio, el
bit de parada, baud-rate y el bit de
paridad; es decir, que ambos dispositivos manejen el mismo lenguaje o dicho de
forma más sofisticada, el mismo protocolo. Un protocolo hecho con lo mencionado
anteriormente es de los más básicos y menos estructurados para la comunicación
serial y asíncrona.
En base a estos conceptos luego
surgieron estándares como el RS232 donde se especifican los voltajes, cable,
tipos de conectores, estado inactivo en la línea, bits de inicio, bit de
parada, baud-rate, entre otras
características.
Por lo tanto, en nuestro proyecto
usaremos un protocolo de comunicación serial-asíncrona básico donde se tendrán
las siguientes características (que son usadas normalmente):
*Estado de línea inactiva:”1”
*Bit de inicio:”0”
*Bit de parada: “1”
*Sin bit de paridad
*Baud-Rate: 9600 bps
Este tipo de comunicación
serial-asincróna tan básico es posible llevarlo a cabo mediante el uso de
módulos UART. Dicho módulo es incluido en el PIC y permite configurar las
características antes mencionadas y transmitir y leer los datos bit por bit a la velocidad prefijada por el baud-rate.
Fig.2
Módulo UART en el PIC18F4550. Normalmente los pines del módulo son llamados Rx
y Tx, además se resalta el pin de Vss dado que la “tierra” debe de ser común en
los dispositivos que se comunican.
Para el control de los motores se
usará un PIC18F4550, sin embargo, sería muy imprudente conectar sus salidas
directamente a los motores; por tal motivo se ha optado por emplear el circuito
integrado L293D, uno de los “puentes h-en-chip” más usados para el
accionamiento de motores pequeños. En la
fig. 1 se muestra el pin-out de un
L293D de 16 pines tal y como el que se usará en el proyecto.
Fig. 1
Pin-out de un L293D de 16 pines.
Siguiendo la propuesta hecha por
el fabricante en el datasheet (fig.
2) se ha armado el circuito mostrado en la fig. 3, el cual se explicará a
continuación.
Fig. 2
Circuito para el accionamiento de motores propuesto en el datasheet.
Fig. 3
Circuito armado para el accionamiento de los motores delantero y trasero del
carro de juguete.
Se espera que el circuito de la
fig. 3, este alimentado por un voltaje de entre 9 a 12 Voltios. Dicha
alimentación vendrá de baterías y será regulada por 7808. La razón del
regulador es la siguiente: Se espera que a los motores llegue un voltaje seguro
para que estos trabajen y, dado que, el integrado L293D tiene una caída de voltaje
para nada despreciable, se tiene que los motores finalmente reciben
aproximadamente 6 de los 8 Voltios a la salida del regulador.
Se nota que se conectan a las salidas del regular 7808 todos
los Vcc (Vss y Vs) y GND. Además los GND de este circuito con el GND de la
fuente que alimenta la etapa de control, donde está el microcontrolador deberán
de ser unidos. Esto se explicará más a detalle en las siguientes entradas.
Ahora, al centrar la atención al
L293D se tiene que las salidas OUT1 y OUT2 controlan el sentido de giro del
motor delantero, mientras que las salidas OUT3 y OUT4 controlan el sentido de
giro del motor trasero. El sentido de giro se controla siguiendo lo mostrado en
la fig. 4. Donde 1A equivale a IN1 (en la fig. 3) y 2A equivale a IN2 (en la
fig. 3), de igual forma se aplica para IN3 e IN4, respectivamente.
La tabla se puede leer de la
siguiente manera: Cuando la entrada EN1 y EN2 estén recibiendo un estado alto,
del microcontrolador, y las entradas IN1, IN2, IN3 e IN4 estén recibiendo un
estado bajo ambos motores se mantendrán detenidos. Ahora, al concentrar la
atención en el motor delantero, si IN1 recibe un alto mientras IN2 se mantiene
con un estado bajo entonces el motor girará en un sentido, en caso contrario si
IN1 recibe un bajo e IN2 un alto el motor comenzará a girar en el sentido
contrario, siempre y cuando EN1 siempre se mantenga en alto. Si ambas entradas
(IN1 e IN2) se ponen en alto entonces el motor se detendrá. Este comportamiento
es igual para el motor trasero (EN2, IN3 e IN4) y se puede observar su
funcionamiento en el Video 1.
Fig. 4
Tabla de verdad del control bidireccional de un motor mediante los pines EN,1A
y 2A (EN1, IN1 e IN2 en la fig. 3)
Video 1: Comportamiento del L293D accionando únicamente un motor.
Es posible también accionar ambos
motores simultáneamente como es mostrado en el Video 2. Sin embargo, se debe de
tener en cuenta que al accionar ambos motores habrá más caída de potencial en
el L293D y como resultado se puede notar como el motor se ralentiza un poco. Si
la caída de Voltaje es excesiva puede que los motores dejen de funcionar.
Video 2: Comportamiento del L293D accionando los dos motores simultáneamente.
En los videos la etapa de
potencia, con el puente h, y la etapa de control, con el microcontrolador, no
están unidas; así que, se simula el microcontrolador enviándole estados altos y
bajos a las entradas mediante cables y conectando los mismos a Vcc o GND de la
alimentación.
Ya con esta etapa en
funcionamiento, ahora solo resta la etapa de control y una fuente de
alimentación apropiada para el carro.
Se ha desarmado un carro de control remoto para usar
su chasis y controlar sus mecanismos a través de un celular Android con Bluetooth.
El carro a desarmar se muestra en la fig. 1.
Fig. 1 Carro de control remoto a desarmar. A la
izquierda aún con todo el chasís pero sin las llantas delanteras. A la derecha
con el chasís naranja removido.
Al remover el chasis naranja y el chasis negro, y
además de remover la circuitería antigua se obtiene lo mostrado en la fig. 2.
Fig. 2 Interior del carro de control remoto sin la
circuitería antigua.
Ahora se centrará
la atención a los mecanismos que permiten el movimiento de las llantas. En el
caso de las llantas traseras se tiene el mecanismo mostrado en la fig. 3. En la
fig. 3 se puede observar el motor que está conectado a una caja reductora de
velocidad que a su vez se conecta al eje que une ambas llantas. El objetivo de
la caja reductora es sencillo, le resta velocidad al motor para aumentar la
fuerza del mismo, de tal forma que la fuerza entregada del motor a las llantas
se ve aumentada mediante la caja reductora.
Fig. 3 Mecanismo y motor para el movimiento del carro
de control remoto en las llantas traseras.
No se debe de
perder de vista que la caja reductora de velocidad es un juego de engranes que
permitirán obtener la fuerza suficiente del motor para el movimiento adecuado
del carro. En la fig. 4 se muestra el interior de la caja reductora de este
carro de control remoto, en particular. Se cuenta con tres engranes: el engrane
2 aumenta la fuerza del motor en el doble y disminuye su velocidad en el mismo
factor. Esta fuerza aumentada se vuelve a incrementar al transmitirse al
engrane 3 y 4. Notar que el gran tamaño del engrane 4 hace que la fuerza del
motor se incremente notablemente mientras su velocidad, al contrario, disminuye
bastante.
Fig. 4 Interior de la caja reductora del carro a
control remoto: 1-Motor, 2,3,4-Engranes que reducen la velocidad del motor pero
aumentan su fuerza, 5- Eje que va a las llantas, 6-Llantas.
Mientras que con el
mecanismo de las llantas traseras se logra el desplazamiento del carro, con el
mecanismo de la parte delantera se logra que el carro vire a la izquierda o a
la derecha. El mecanismo se muestra en la fig. 5. Es un mecanismo sencillo, el
motor transmite su movimiento al engrane, el cual, cuenta con un eje que lo
mantiene siempre en contacto con el motor e intenta minimizar lo más posible
pedidas de potencia por no engranar bien el motor con dicho engrane.
Este último, a su
vez transmite el movimiento (con una fuerza aumentada y velocidad reducida) a
una pieza plástica que es una sección circular y está dentada. Dicha pieza al
moverse se encarga de girar las llantas delanteras, mediante el eje que las
une, lo suficiente para que el carro pueda virar.
Se debe señalar
que, el motor debe de estar energizado para que las llantas se mantengan en su
posición, ya sea para virar a la izquierda o a la derecha, esto dado que al
des-energizar el motor un resorte (justo debajo de la pieza de sección
circular) hará que las llantas vuelvan a posicionarse “derechas” y el carro
vuelva a desplazarse en línea recta.
Este es un
mecanismo que hace más fácil el control en los motores, ya no se requiere el
uso de sensores para determinar la posición en que las llantas se encuentran
“derechas” para un desplazamiento en línea recta, únicamente se requiere una
calibración manual de dicha posición a través del tornillo de la fig. 6.
Estos son todos los
mecanismos con los que cuenta el carro de juguete a usar para el proyecto.
Fig. 5 Mecanismo para el movimiento de las llantas
delanteras que permiten los giros hacia la derecha o izquierda del carro de
control remoto.
Fig. 6 Tornillo para calibrar la posición de las
llantas para un desplazamiento en línea recta.
A continuación se
procederá a trabajar el carro solo con el chasis negro así como se muestra en
la fig. 7
Fig. 7 Chasis del carro de juguete, así como se usará
en el proyecto.