Este proyecto es una aplicación sencilla y divertida hecha a partir de un PSoC4 Pioneer Kit, a través de un programa hecho en app inventor para android, enviamos instrucciones al PSoC por comunicación bluetooth y este a su vez acciona los motores haciendo mover el carrito. Cualquier persona que disponga de los materiales puede realizarlo, el nivel de dificultad para este proyecto es bajo.
MaterialesPrimero que todo tuve que conseguir el chasis para armar el carro, fue fácil conseguirlo, luce algo así:
Claro que todo desarmado, el armarlo es un proceso didáctico entretenido; Este chasis tiene incluido los 4 motores con sus respectivos engranajes y ruedas para poder hacer mover el carro.
A continuación una foto de todos los materiales usados en la construcción del robot y los explicaré uno a uno.
Y obviamente nuestro CY8CKIT-042 PSoC4 Pioneer KIT
Con los motores tuve que pensar en como haría moverlos y investigando encontré que los módulos L298N cumplen bien con esta tarea, cada uno tiene salida para dos motores, como son 4 motores utilicé dos módulos de estos. También pensando en comunicar mi teléfono celular con PSoC4 a través de bluetooth utilicé el módulo HC-05 que al ser una simple comunicación serial, resulta fácil implementarlo.
También pensando en la duración y en el tiempo de jugar con el carro busqué una batería que me diera buena corriente y a su vez un nivel de voltaje bueno para los motores; Utilicé esa batería de tipo LiPo con 1.5A y un voltaje de 11.1V. Pero como estaban pensando no puedo ponerle 11.1V al PSoC!, para disminuir el voltaje usé una fuente DC-DC Step Down para bajar de 11.1V a 5V y así poder alimentar al PSoC4.
También me ayude de una mini protoboard para tener todos los puntos de alimentación necesarios y la tierra para poder conectar todos los módulos.
Consideraciones para antes de armadoEs necesario que antes de armar todo el hardware primero verifiquen el nivel que entrega la fuente DC-DC, hay que estar seguros de que a la salida tenemos 5V, para no correr riesgos.
También es importante que tengan configurado el modulo bluetooth, algunas configuraciones como la velocidad de transmisión de datos y el modo esclavo, todo este proceso de configuración del modulo se explica al detalle en este video:
Armado
Ahora si podemos proceder con el amado, yo recomiendo primero mandar unos jumpers a la mini potoboard definiendo los dos voltajes y la tierra, para así saber a donde conectar los módulos.
El diagrama de conexiones es el siguiente :
Los 4 motores son los que están en el chasis, y una recomendación más es que le dejen un switch de encendido en el pin positivo de la batería.
Asegúrense de que todos los cables están bien puestos y de que no los hayan colocado mal, además yo creo que se puede organizar un poco para que estéticamente quede mejor. Pueden hacer una prueba de encendido, los dos puente H, el módulo bluetooth y el PSoC4 tienen Led de encendido, es una manera de saber si todo esta bien.
Una vez confirmamos que el armado está bien y de que todo enciende, pasamos ahora a programar.
El programa es básico, una vez sabemos cómo funciona un puente H lo que se hace es poner de a 2 pines por motor un total de 8 pines para hacer el control de avance, giro y retroceso; Sumado a esto incluimos el bloque UART para la comunicación serial con el bluetooth, la velocidad de transmisión de datos será a 115200 Baud previamente configurado:
También tenemos que añadir una interrupción al pin rx_interrup y configurarla en Rising Edge , con el fin de poder leer los datos que llegan por el puerto serial correspondientes a la comunicación bluetooth.
Hay que recordar que todos los pines de los motores son Digital Output configurados en Strong Drive.
Código#include <project.h>
void adelante();//Declaracion de el metodo para avanzar
void atras();//Declaracion de el metodo para retroceder
void derecha();//Declaracion de el metodo para girar
void izquierda();//Declaracion de el metodo para girar
void quieto();//Declaracion de el metodo para quedar en reposo
CY_ISR (interruptRx)
{
char dato;
dato=UART_GetChar();//obteniendo variable del puerto serial
if (dato == 't')// verificando si la variable corresponde a la instruccion
{
adelante();// ejecutar instrucción
}
if (dato == 'v')
{
atras();
}
if (dato == 'a')
{
izquierda();
}
if (dato == 'l')
{
derecha();
}
if (dato == 'm')
{
quieto();
}
}
int main()
{
CyGlobalIntEnable;
UART_Start();
isrRx_StartEx(interruptRx);// inicialización de la interrupcion
for(;;)
{
}
}
void adelante()// metodo para avanzar
{
Motor1_1_Write(1);// con el orde de bits "10" en ambas entradas del puente H se consigue que el motor avance
Motor1_2_Write(0);
Motor2_1_Write(1);//Motor 2 avance
Motor2_2_Write(0);
Motor3_1_Write(1);// Motor 3 avance
Motor3_2_Write(0);
Motor4_1_Write(1);// Motor 4 avance
Motor4_2_Write(0);
}
void atras()
{
Motor1_1_Write(0);
Motor1_2_Write(1);
Motor2_1_Write(0);
Motor2_2_Write(1);
Motor3_1_Write(0);
Motor3_2_Write(1);
Motor4_1_Write(0);
Motor4_2_Write(1);
}
void izquierda()
{
Motor1_1_Write(1);// el carro gira si se hace que las dos ruedas de un lado avancen y las otras retrocedan
Motor1_2_Write(0);// motor 1 avance
Motor2_1_Write(1);// motor 2 avance
Motor2_2_Write(0);
Motor3_1_Write(0);//motor 3 retroceso
Motor3_2_Write(1);
Motor4_1_Write(0);//motor 3 retroceso
Motor4_2_Write(1);
}
void derecha()
{
Motor1_1_Write(0);
Motor1_2_Write(1);
Motor2_1_Write(0);
Motor2_2_Write(1);
Motor3_1_Write(1);
Motor3_2_Write(0);
Motor4_1_Write(1);
Motor4_2_Write(0);
}
void quieto()
{
Motor1_1_Write(0);
Motor1_2_Write(0);
Motor2_1_Write(0);
Motor2_2_Write(0);
Motor3_1_Write(0);
Motor3_2_Write(0);
Motor4_1_Write(0);
Motor4_2_Write(0);
}
Este código se divide en varias partes, primero se declaran los métodos que nos ayudaran a darle las ordenes al PSoC, un método para avanzar, otro para retroceder, para girar a la derecha y para girar a la izquierda, y para dejar el carro en reposo, en cada método se hace la respectiva activación de los pines; hay que hacer varias pruebas para identificar el orden de los bits para hacer avanzar o retroceder a un motor, estas pruebas se hacen para poder definir los métodos.
Para conseguir el giro probé varias cosas pero la que mejor funciono fue que para girar hacia un lado lo que se hace es activar los dos motores de un lado para que avancen y los dos del otro lado para que retrocedan, de esa manera se consigue un giro en su propio eje.
Y la última parte del código es la interrupción de byte recibido previamente inicializado, aquí es donde voy a verificar el dato que recibí para así saber que método ejecutar, se pueden dar cuenta que cada acción la manejo verificando un char, letras al fin y al cabo que envio desde APP inventor.
Lo último es asignar los pines, tal cual hicieron el montaje del hardware. Y Programar.
App InventorLa segunda parte de este proyecto es hacer la aplicación para poder mover el carro; App inventor es muy fácil de usar y lo único que se hace ahí es definir algunos botones y que cuando se opriman y suelten se envíen los datos a través del bluetooth del teléfono al PSoC4
En la interfaz gráfica simplemente defino los 4 botones ,adelante, atrás, derecha, izquierda, además de unos botones que utilizo para buscar y emparejar al bluetooth.
Si quieres aprender al detalle como buscar y emparejar Bluetooth con App inventor, puedes revisar este vídeo:
Y en el software lo que se hace es enviar una letra mientras se oprime y mantiene oprimido el botón de esta manera se le indica al PSoC que tiene que haga una instrucción, ya sea avanzar, retroceder o girar; y en el momento de soltar el botón se tiene que enviar otra letra para indicarle al PSoC que se detenga, de esta manera logramos que el carro no se mantenga avanzando, girando o retrocediendo y que al momento de levantar el dedo del botón el carro se detenga, con esto buscamos un mejor control.
Lo único que queda es compilar el programa y pasarlo al teléfono.
Resultados
Comments