Sei sulla pagina 1di 6

Universidad Manuela Beltrán. , Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David.

RuniBot 007 mini-sumo


Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David.
Pao_infante27@hotmail.com, leonardsaxx@hotmail.com ,
Universidad Manuela Beltrán.


LM7805, que entrega el voltaje de alimentación para todo el
Resumen— circuito. El código de programa para el PIC18F4550
RuniBot 007 fue un proyecto que se desarrolló a lo largo del encargado de controlar las señales que entregan los sensores
semestre con el objetivo de participar en la competencia de seguidores de línea y el sensor Sharp y el integrado L293D
mini sumo bajo un reglamento de medidas y funcionamiento quien controla el movimiento de motores en ambos sentidos.
establecidos previamente, se dio inicio al diseño y la En la figura 1 se muestra el Top layer o cara superior del
construcción de la estructura y el circuito de funcionamiento. circuito implementado, en el que se visualiza la organización
A lo largo del documento se explica claramente la de cada uno de los componentes que componen el circuito.
construcción del robot, su funcionamiento tanto mecánico En la figura 2 se muestra el Bottom layer o cara inferior en
como eléctrico, con esquemas y resultado. el que se realizó el trazado de las conexiones de los
componentes.
I. INTRODUCCIÓN

En el siguiente documento se muestra la contextualización y el


desarrollo de un robot mini-sumo completamente autónomo
que tiene como objetivo competir en un círculo con unas
medidas de 77cm de diámetro con 5cm de circunferencia que
conforman el borde de color blanco y una altura de 5cm con
respecto al piso, El robot tiene una normatividad para un peso
máximo de 0.5kg (Runibot,2017), y unas dimensiones de
10x10cm, con altura libre. El robot está conformado por un
sensor infrarrojo Sharp, que tiene un alcance de detección de
0 a 15 cm que será usado para detectar el oponente, un sensor
seguidor de línea (qtr-1rc) que permite que el robot no se salga
del campo de batalla. Estos dos sensores irán conectados a los
motores que estarán controlados por el integrado L293D, el
cual brinda la facilidad de mover un motor en ambos sentidos.
Adicionalmente se implementó una entrada regulada de 5v,
por un regulador de voltaje LM7805 para alimentación Figura 1. Top layer
completa del circuito. Para el correcto manejo de los
mecanismos con los sensores se utilizó un PIC18F4550
encargado de detectar los pulsos de los sensores y de igual
manera controlar el integrado L293D y los motores. Se realizó
el diseño de un circuito impreso en base a las pruebas y los
esquemas eléctricos realizados anteriormente, el cual reduce el
uso de materiales y espacio.

I. MONTAJE Y PROCEDIMIENTO EXPERIMENTAL


Inicialmente se realizó un esquema con base a la idea de
funcionamiento del circuito que permitió realizar el montaje
y las pruebas correspondientes en protoboard para
comprobar el funcionamiento del circuito y realizar las
pertinentes correcciones, tras comprobar el funcionamiento
del esquema planteado inicialmente se procede dio a diseñar
el circuito integrado PCB en Altium 9, con base al esquema
eléctrico definido. El volteje inicial del sistema lo entrega
una pila de 9v y es regulado a 5v por medio de un regulador Figura 2. Bottom layer


Para el desarrollo del código de programa se diseñó el
Universidad Manuela Beltrán. , Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David. 2

diagrama de flujo que se observa a continuación y se definió El código se desarrolló por medio de interrupciones debido a
el puerto B como entrada y el puerto C como salida. que los sensores utilizados nos entregaban salidas digitales,
por este motivo se habilitaron las interrupciones externas
utilizando el registro GIE=1 y el orden de prioridad utilizando
el registro IPEN=1; y se configuraron las interrupciones para
los pines 33, 34 y 35 que corresponden a los bites RB0, RB1 y
RB2 como se muestra a continuación.
INT0IE=1; //habilita la interrupcion externa por RB0
INTEDG0=1; //interrupcion por flanco Ascendente
INT0IF=0; //pone en 0 la bandera int0

INT1IE=1; //habilita la interrupcion externa por RB1


INTEDG1=1; //interrupcion por flanco Ascendente
INT1IF=0;
INT1IP=0;

INT2IE=1; //habilita la interrupcion externa por RB2


INTEDG2=1; //interrupcion por flanco Ascendente
INT2IF=0;
INT2IP=0;

Para la estructura del robot mini sumo se utilizó el chasis de


minisumo de la empresa pololu debido a que es una
plataforma de robot pequeña, de menos de 10 cm a cada lado,
lo que le permite clasificarse para competiciones Mini Sumo.
El cuerpo principal se compone de ABS negro y cuenta con un
compartimento para pilas AA (cuatro) y zócalos para
dos motorreductores micro metal. Viene como dos correas de
silicona, dos discos y dos ruedas dentadas locas, una "placa de
montaje 1/16 acrílico y accesorios de montaje.

Los planos mecánicos junto con el código completo se


encuentran adjuntos

II. RESULTADOS Y ANÁLISIS


Tras obtener el código final con las pruebas en protoboard se
realizó el montaje del circuito sobre el impreso y se procedió a
observar el comportamiento del código junto con la estructura
del robot terminada, en las siguientes imágenes se muestra la
ubicación del circuito el interruptor de inicio y los sensores.
Se configuraron los fusibles y los pines de salida del
PIC18F4550 de la siguiente manera y se trabajó con la
frecuencia del oscilador interno de 8000000 Hz

#include <xc.h>
#pragma config FOSC = INTOSC_EC
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#pragma config MCLRE = ON
#pragma config WDT = OFF
#define _XTAL_FREQ 8000000
#define M1A LATCbits.LATC0
#define M1R LATCbits.LATC1
#define M2A LATCbits.LATC7
#define M2R LATCbits.LATC6
Figura 3.
Universidad Manuela Beltrán. , Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David. 3

Figura 6.

Figura 4.
Inicialmente el robot realiza un retardo de 5 segundos
después de ser encendido y si no ha detectado a su oponente
gira constantemente hasta que el sensor Sharp detecta al
contrincante, procede a avanzar y a expulsar al oponente fuera Figura 7.
del área de competición. En la etapa regulada de fuente se utilizaron dos
condensadores en paralelo con el fin de eliminar el voltaje rizo
en el circuito como se observa en la figura 8.

Figura 5.
Figura 8.

III. CONCLUSIONES
El uso de sensores con modulo conversor análogo digital
facilito el diseño del código de programa y nos permitió
manejar interrupciones para controlar las señal que entregaba
cada uno de los sensores.

El uso del integrado L293D permitió reducir espacio y


controlar el giro de los motores de forma sencilla,
bidireccional, con frenado rápido y con posibilidad de
implementar fácilmente el control de velocidad debido a su
capacidad de actuar como un puente H completo.

Al usar el regulador de voltaje LM7805 se garantiza una


fuente de alimentación constante para el pic de 5 V a 1 A
suficiente para su correcto funcionamiento y protegerlo de
Universidad Manuela Beltrán. , Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David. 4

posibles daños causados por la oscilación de los niveles de


tensión.

BIBLIOGRAFÍA
[1] geekfactory. (s.f.). Recuperado el 23 de Marzo de
2017, de
http://www.geekfactory.mx/tienda/component
es-electronicos/circuito-integrado-l293d/#

[2] Moviltronics. (s.f.). Recuperado el 15 de Marzo de


2017, de
http://www.moviltronics.com.co/sensores/112-
sensor-sharp-0-15-cm.html

[3] Robots Argentina. (2007). Recuperado el 30 de


Marzo de 2017, de http://robots-
argentina.com.ar/MotorCC_L293D.htm

[4] Guasch Serra, A. (2011). Robot de minisumo.

#include <xc.h>
Universidad Manuela Beltrán. , Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David. 5

#pragma config FOSC = INTOSC_EC


#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#pragma config MCLRE = ON
#pragma config WDT = OFF

#define _XTAL_FREQ 8000000 // frecuencia de trabajo

#define M1A LATCbits.LATC0 // giro a la adelante motor 1


#define M1R LATCbits.LATC1 //giro a la atras motor 1
#define M2A LATCbits.LATC7 // giro a la adelante motor 2
#define M2R LATCbits.LATC6 //giro a la atras motor 2

int i;
void Tiempo(int t)
{
for(i=0;i<t;i++)
{
__delay_ms(10);
}
}
void main(void)
{
TRISC=0; //se declara el PORTD como salida
TRISB=0XFF; //se declara el PORTB como entradas

M1A = 0;
M1R = 0;
M2A = 0;
M2R = 0;

IPEN=1;
GIE=1;

INT0IE=1; //habilita la interrupcion externa por RB0


INTEDG0=1; //interrupcion por flanco Ascendente
INT0IF=0; //pone en 0 la bandera int0

INT1IE=1; //habilita la interrupcion externa por RB1


INTEDG1=1; //interrupcion por flanco Ascendente
INT1IF=0;
INT1IP=0;

INT2IE=1; //habilita la interrupcion externa por RB2


INTEDG2=1; //interrupcion por flanco Ascendente
INT2IF=0;
INT2IP=0;

Tiempo(50);

while(1)
{
M1A = 1;
M2R = 1;
}
}
Universidad Manuela Beltrán. , Infante Laverde Mónica Paola, Vergara Arevalo Andrés Felipe, Caro Cortés Leonard David. 6

void interrupt sensor1()//objetivo detectado


{
if(INT0IF==1)
{
M1A=0;
M2R = 0;
for(i=0;i<10;i++)
{
__delay_ms(2);
}

while (INT0IF==1)
{
M1A = 1;
M1R = 0;
M2A = 1;
M2R = 0;

Tiempo (240);
INT0IF=0;

}
M2A = 0;
}
}
void interrupt low_priority sensores()
{
if(INT1IF||INT2IF )//se pregunta si se genero interrupcion por INT1 o INT2
{
M1R=0;
M2A = 0;
for(i=0;i<10;i++)
{
__delay_ms(2);
}
M1A = 0;
M1R = 1;
M2A = 0;
M2R = 1;
INT1IF=0;
INT2IF=0;
}
}

Potrebbero piacerti anche