Click here to load reader
Upload
huber-giron
View
14
Download
0
Embed Size (px)
DESCRIPTION
Brazo robot y Comunicación UART
Citation preview
Huber Girón Nieto
Practica 3 y 4
“Comunicación UART y uso de servomotores”
Arquitectura avanzada de sistemas de cómputo
Ing. Electrónica y de Comunicaciones
Profesor: Nicolás Quiroz Hernández
Universidad Iberoamericana Puebla
15 de Mayo de 2012
“Comunicación UART y uso de servomotores”
1. INTRODUCCIÓN
En la actualidad la mayoría de dispositivos utilizan microcontroladores, ya que este tipo de dispositivos
permite obtener un manejo de recursos y control en cualquier dispositivo electrónico. Los microcontroladores
permiten ahorrar varias etapas de hardware por software, de los cuales este último solo es programación y
por lo tanto permite disminuir costos al realizar un proyecto.
2. OBJETIVOS
I. General
Realizar un programa en C que controle vario servomotores y utilice comunicación UART.
II. Específicos
-Selección de compilador a utilizar en práctica.
-Realizar un programa en C para realizar comunicación UART.
-Realizar un programa en C para controlar varios servomotores.
-Unir ambos códigos y manejar los servomotores mediante la comunicación UART.
3. MARCO TEÓRICO
I. UART (Zator Systems, 2012)
Puerto serie: La UART- El corazón del sistema de comunicaciones serie es la UART, acrónimo de Universal
Asynchronous Receiver-Transmitter. Es un chip cuya misión principal es convertir los datos recibidos del bus
en formato paralelo, a un formato serie que será utilizado en la transmisión hacia el exterior. También realiza
el proceso contrario: transformar los datos serie recibidos del exterior en un formato paralelo entendible por
el bus. La UART es un dispositivo programable en el que pueden establecerse las condiciones que se utilizarán
para la transmisión (velocidad, paridad, longitud y bits de parada). Cuyo protocolo es el siguiente:
Figura 1.- Comunicación UART
II. Modulo Bluetooth (NEOTEO, 2011)
El módulo de desarrollo Bluetooth de Micro ingenia S.L. que se utilizara, el RN41 de Roving Networks, es un
perfecto aliado para eliminar los cables en proyectos o para conectarse a ordenadores y/o teléfonos móviles.
Con un alcance de hasta 100 metros (Clase I), posee antena integrada, es compatible con el estándar
Bluetooth 2.1, permite velocidades de transferencia de hasta 921Kbps, y lo puedes conectar de forma sencilla
mediante la UART (RX/TX) de cualquier microcontrolador, desde donde puedes controlarlo haciendo uso de
sencillos comandos AT. El módulo, además, puede ser alimentado tanto a 5Volts como a 3,3Volts, y para ello
dispone de un puente (jumper) de selección de la tensión de alimentación. El RN41 funciona a 3,3Volts y sus
líneas NO son 5Volts compatibles. De todos modos, posee entradas auxiliares que te permitirán trabajar en
forma directa con el RN41 y un bus Rx/Tx de 3,3Volts.
Figura 2.- Modulo Bluetooth
III. Servomotor (TODOROBOT, 2010)
Un Servo es un dispositivo pequeño que tiene un eje de rendimiento controlado. Este puede ser llevado a posiciones angulares específicas al enviar una señal codificada. Con tal de que una señal codificada exista en la
línea de entrada, el servo mantendrá la posición angular del engranaje. Cuando la señala codificada cambia, la posición angular de los piñones cambia. En la práctica, se usan servos para posicionar superficies de control como el movimiento de palancas, pequeños ascensores y timones. Ellos también se usan en radio control, títeres, y por supuesto, en robots. Los Servos son sumamente útiles en robótica. Los motores son pequeños, cuando usted observa la foto de arriba, tiene internamente una circuitería de control interna y es sumamente poderoso para su tamaño. Un servo normal o Standard como el HS-300 de Hitec tiene 42 onzas por pulgada o mejor 3kg por cm. De torque que es bastante fuerte para su tamaño. También potencia proporcional para cargas mecánicas. Un servo, por consiguiente, no consume mucha energía. Se muestra la composición interna de un servo motor en el cuadro de abajo. Podrá observar la circuitería de control, el motor, un juego de piñones, y la caja. Uno es para alimentación Vcc (+5volts), conexión a tierra GND y el alambre blanco es el alambre de control.
Figura 3.- Servomotor desmontado
4. DESARROLLO
I. Metodología
1) Selección de compilador a utilizar en práctica.
En la primera parte de la práctica se seleccionara el compilador de C para utilizar, ya que los diferentes
compiladores poseen diferentes librerías y por lo tanto una menor o mayor facilidad al momento de realizar el
código. Los dos posibles compiladores a utilizar son MIKROC y PICC.
2) Realizar un programa en C para realizar comunicación UART.
En la segunda parte se utilizara el compilador seleccionado para crear u programa que ermita la comunicación
UART con otro dispositivo, con la intención de no usar otro microcontrolador, se realizara esta comunicación
con un módulo Bluetooth al cual la información se le enviara vía celular.
3) Realizar un programa en C para controlar varios servomotores.
Posteriormente utilizando un brazo robótico de 4 servos (Foto 1) proporcionado por la universidad se
realizaran funciones y rutinas suficientes para mantener a los servos fijos en su posición, además de medir os
tiempos mínimos y máximos para mover las partes del robot desde un punto a otro.
Foto1. Brazo robótico de 4 servomotores
4) Unir ambos códigos y manejar los servomotores mediante la comunicación UART.
Por último se unirán ambos códigos y utilizando la comunicación Bluetooth del celular se enviaran datos al
módulo Bluetooth quien a su vez le enviara los datos por UART al microcontrolador y entonces moverá el
brazo a la posición adecuada.
II. Gráficas, Dibujos y Tablas
1) Selección de compilador a utilizar en práctica.
El compilador a utilizar será el MIKROC ya que este posee una gran cantidad de librerías y funciones
adecuadas a la práctica, además de poseer ejemplos necesarios para el uso de la UART (Foto 2).
Foto2. Ejemplos MIKROC
2) Realizar un programa en C para realizar comunicación UART.
Se realizó un programa básico de UART donde físicamente solo hay que conectar el TX y RX del
microcontrolador (RC6 y RC7 en el PIC18F4550), y para realizar una comunicación UART con el modulo
Bluetooth el cual solo envía datos al micro a una velocidad de 9600 baudios es el siguiente:
void main() { UART1_Init(9600); // Initialize UART module at 9600 bps Delay_ms(100); // Wait for UART module to stabilize while(1) { if (UART1_Data_Ready()) { // If data is received, dato = UART1_Read(); // read the received data, }
Donde el anterior código únicamente inicia la comunicación UART a 9600 baudios, seguido de un retraso para
esperar que se configure correctamente, posteriormente en el bucle infinito cada que llega un nuevo dato se
activa una bandera y entonces ese nuevo dato se guarda en la variable dato.
3) Realizar un programa en C para controlar varios servomotores.
Utilizando el brazo robótico y sus cuatro servos se crearon rutinas y unciones para controlarlos, una para dar
los pulsos correctos y otra para mandar esos pulsos a 4 servomotores ubicados en los puertos RB0-RB3.
void retraso(int x) { int i; for(i=0; i<=x; i++) {delay_us(100);} }
La función anterior se encarga de crear un retraso de us dependiente de una variable donde al utilizarla por
ejemplo: retraso (10) se generara un retraso de 1000 us.
void servos(void) { PORTB.RB0=1; retraso(servo3); PORTB.RB0=0; PORTB.RB1=1; retraso(servo0); PORTB.RB1=0; PORTB.RB2=1; retraso(servo1); PORTB.RB2=0; PORTB.RB3=1; retraso(servo2); PORTB.RB3=0; delay_ms(20); }
A diferencia esta función se encarga de mandar los 4 pulsos necesarios al servomotor para determinar sus
posiciones, esta función utiliza el contenido de las variables servo0, servo1, servo2, servo3 para determinar la
posición estos estarán determinados por la posición necesaria del servo.
III. Mediciones y resultados
1) Tabla de tiempos para mover el brazo robótico.
En la siguiente tabla (Tabla1) se realizó el ancho de pulso necesario para mover al servomotor de cada una de
las partes del brazo robótico para ponerlo desde su menor posición a su mayor posición:
Parte del Brazo robótico Tiempos
Pinza
Abierta 1100 us Cerrada 1800 us
Unión 1
Arriba 1400 us Abajo 2200 us
Unión 2
Arriba 1100 us Abajo 2200 us
Base
0º 600 us 180º 2400 us
Tabla1. Tiempos brazo robot
2) Unir ambos códigos y manejar los servomotores mediante la comunicación UART.
Por último se realizó el código final para controlar mediante el celular el brazo robótico, de antemano se
contaba con el programa para celular que manda datos al módulo Bluetooth, este se encarga de mandar
0,1,2,3,4,5, etc. al microcontrolador y mediante estos comandos se puede disminuir o aumentar la posición
del brazo, el código principal utilizando las rutinas ya mencionadas anteriormente es:
int servo0, servo1, servo2, servo3, dato, flag; void retraso(int x); void servos(void); void chekeo(void); void main() { TRISB=0x00; OSCCON|=0x20; servo0=15;servo1=14;servo2=15;servo3=22; dato=1; flag=0; UART1_Init(9600); // Initialize UART module at 9600 bps Delay_ms(100); // Wait for UART module to stabilize while(1) { if (UART1_Data_Ready()) { // If data is received, dato = UART1_Read(); // read the received data, flag=1; } chekeo(); //Dependiendo el valor de dato aumenta o disminuye las variables a mandar a
//la rutina de servos servos(); }
Foto3. Modulo Bluetooth
Foto4. Prueba física Práctica
5. CONCLUSIONES
En conclusión se puede decir que utilizar más de un elemento del microcontrolador en ensamblador se
complica sin embargo en C utilizar varios elementos no es tan difícil además de contar con varias librerías
proporcionadas por el compilador que permiten agilizar el proceso de creación de código. Al crear un código
es muy importante tomar en cuenta la facilidad, optimización y aplicación, algo que los microcontrolador PIC
poseen al tener todas las herramientas e información necesaria.
6. REFERENCIAS
NEOTEO. 2011. Modulos Bluetooth. [En línea] 2011. [Citado el: 15 de Mayo de 2012.] http://www.neoteo.com/modulo-
bluetooth-hc-06-android.
TODOROBOT. 2010. Servomotor. [En línea] 2010. [Citado el: 15 de Mayo de 2012.]
http://www.todorobot.com.ar/documentos/servomotor.pdf.
Zator Systems. 2012. Puerto serie: UART. [En línea] 2012. [Citado el: 15 de Mayo de 2012.]
http://www.zator.com/Hardware/H2_5_1_1.htm.