Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informe Proyecto Sumo
Informe Proyecto Sumo
PROYECTO SUMO
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
ROBOTS PER
Proyecto Robot-Sumo
Dedicatoria:
A toda la comunidad
Robotera del Per.
Proyecto Robot-Sumo
8
10
11
12
13
16
18
20
21
22
23
25
26
28
29
31
33
34
Proyecto Robot-Sumo
35
36
37
38
39
42
43
44
44
45
47
49
50
51
52
53
60
61
62
63
67
Dominio de la aplicacin
1.1.
Identificacin
Robtica: Es la ciencia y la tecnologa de los robots. Se ocupa del
diseo, manufactura y aplicaciones de los robots. La robtica combina
diversas disciplinas como son: la mecnica, la electrnica, la informtica,
la inteligencia artificial y la ingeniera de control.
Automatizacin: Es un sistema donde se trasfieren tareas de
produccin, realizadas habitualmente por operadores humanos a un
conjunto de elementos tecnolgicos.
Control: Proceso para asegurar que las actividades reales se ajusten a
las actividades planificadas. Permite mantener a la organizacin sistema
en buen camino.
1.2.
1.3.
2.
Especificaciones
Conocer los dispositivos y componentes electrnicos
Uso de los datasheets
Disear el layout
Manejo del programa Eagle
Disear la Mecnica
Uso de Solidworks
Controlar la velocidad del motor
Uso del PWM
Saber el color de la superficie
Uso del sensor infrarrojo CNY70
Proyecto Robot-Sumo
2.2.
Normas
Uso de los datasheets
Saber la distribucin de pines de los integrados
Saber la configuracin y polarizacin de los componentes
Conocer los mdulos del PIC
Manejo del programa Eagle
Conocer las conexiones de los componentes
Hacer un esquemtico del circuito
Usar componentes superficiales
Saber las condiciones de diseo
Usar una sola placa para el control y potencia
Uso de Solidworks
Tener una mecnica solida
Tener estabilidad en el movimiento
Respetar las dimensiones
Uso del PWM
Programacin del PIC
Uso del timer
Uso del sensor infrarrojo CNY70
Uso de ADC
Uso del sensor ultrasnico SRF05
Uso del timer
Uso de Visual Basic 2010
Uso del Protocolo RS-232
Uso del UART
Estabilidad del interfaz
Uso del cable Serial-USB FTDI
2.3.
Otros
Grabacin del pic
Uso del datasheet del PICkit 2
Modo de grabacin va ICSP
3.
Sistema
Diseo de una tarjeta electrnica con el fin de detectar a un oponente e ir
hacia l.
Proyecto Robot-Sumo
Caractersticas
3.2.1.
3.2.2.
Modo Sumo-batalla
Control del sentido de giro y de la velocidad de los motores
Deteccin del color de la superficie
Deteccin de objetos dentro a un rango especfico con filtro
Persecucin de un objeto
Selector del sentido del giro inicial
Selector de inicio de operacin
Modo Rastreador
Control del sentido de giro y de la velocidad de los motores
Deteccin de objetos dentro a un rango especfico
Persecucin de un objeto
Selector de inicio de operacin
Modo seguidor de lneas
Control del sentido de giro y de la velocidad de los motores
Deteccin del color de la superficie
Selector de inicio de operacin
Modo control desde la PC
Control del sentido de giro y de la velocidad de los motores
Deteccin del color de la superficie
Medicin de distancia hasta 4m
Medicin de distancia hasta una distancia especifica
Medicin del rango dentro de 4m
Deteccin de objetos dentro a un rango especfico
Persecucin de un objeto
Selector del sentido del giro inicial
Selector de inicio de operacin
Lectura de la tensin de la batera
Comunicacin serial
Proyecto Robot-Sumo
Proyecto Robot-Sumo
Proyecto Robot-Sumo
3.2.4.
Caractersticas fsicas
En la implementacin de la placa se usaron componentes
superficiales SMD de talla 1206.
Cuenta con dos pulsadores y un botn para la configurar el
modo Sumo-batalla.
Tiene un botn de pnico tipo hongo para facilitar el encendido
y apagado del sistema.
La mecnica cuenta con 4 puntos de apoyo.
Toda la estructura fue hecha de aluminio en barras de 14cm.
Las dimensiones de robot sumo son 20x20x20cm.
Se tiene una rampa para facilitar la embestida.
3.2.5.
3.2.5.1 Fiabilidad
La probabilidad de correcto funcionamiento del sistema es muy
alta, en una prueba de testeo se hicieron 100 accionamientos en
los cuales se obtuvo un correcto funcionamiento en 97
oportunidades.
3.2.5.2 Mantenimiento
El mayor problema que afronta este proyecto es el cableado, por
tanto su mantenimiento debe ser constante, revisar continuidad en
los cables adems de la correcta funcionalidad de los sensores.
Estos problemas son fcilmente encontrados gracias al testeo
mediante el interfaz grfico.
Proyecto Robot-Sumo
Disponibilidad
3.2.6.
Condicin de ambiente
EL rea de combate (dojo) es un crculo de 150cm de dimetro
de color negro con un borde de 5cm de color blanco.
Que el pblico y el jurado se encuentre a ms de 1m del rea
de combate.
3.2.7.
Movilidad
Para poder movilizar el robot se tiene que tener la aprobacin de
director del instituto de investigacin.
3.2.8.
Componentes y materiales
PIC 18F4550
L6203 DRIVER
L5973D REGULADOR CMS
SENSOR SRF05
SENSOR CNY70
RESISTENCIA de 4.7K
RESISTENCIA de 2.5 K
CONDENSADOR de 10uF
CONDENSADOR de 22nF
CONDENSADOR de 220pF
CONDENSADOR de 0.1uF
CONDENSADOR de 15nF
CONDENSADOR de 15pF
CONDENSADOR de 220nF
DIODO RECTIFICADOR
DIODO LED ROJO
DIODO LED VERDE
DIODO LED AMARILLO
BOBINA de 15uH
CRISTAL OSCILADOR de 20M
MOLEX MACHO DE 2
MOLEX MACHO DE 4
MOLEX MACHO DE 5
MOLEX HEMBRA DE 2
MOLEX HEMBRA DE 4
MOLEX HEMBRA DE 5
BASE MOLEX HEMBRA DE 5
BASE MOLEX MACHO DE 5
ALAMBRE PARA MOLEX
Proyecto Robot-Sumo
RESISTENCIA de 7.5 K
RESISTENCIA de 5.1 K
RESISTENCIA de 10 K
RESISTENCIA de 220
RESISTENCIA de 10
RESISTENCIA de 30
CONDENSADOR de 330uF
CONECTORES DE 2 PARA
CNY70
CABLE USB/SERIAL
MOTOR DC
LLANTAS DE CAUCHO
BALL CASTER
BATERA 12V 1.3AH
BOTON DE PANICO
BOTONES
PULSADORES
CABLE BIPOLAR
ESTAO
ARCO DE SIERRA MACHO
CUCHILLA
ACRILICO
ALUMINIO TIPO L
BISAGRA
RAMPA DE FIERRO
JUEGO DE TORNILLOS Y
TUERCAS
CINTA AISLANTE
SILICONA
Concepcin y Realizacin
4.1.
Planificacin y ejecucin
May
Jun
Jul Ago
Set Oct
Nov Dic
Maqueta
Diseo de la
mecnica
Diseo de la
placa
Implementacin
Programacin
Interfaz
Planificado
Ejecutado
Proyecto Robot-Sumo
Abri
4.2.
Documentacin
ELECTRNICA
Alimentacin
Para alimentar todo el mdulo usamos una batera recargable de 12v con
1.3AH, lo cual nos present con la necesidad de tener que reducir ese voltaje a 5V
para el funcionamiento de los dems integrados.
Lo que estbamos buscando era una forma de reducir el voltaje, sin que se
produjera una prdida innecesaria de potencia.
Por ejemplo, supongamos que estamos trabajando con un regulador de voltaje
como el 7805 y que ste alimenta un integrado que trabaja con 5v y 100mA.
12v 200mA
5v 100mA
7805
Rendimiento
Entonces el regulador trabaja con el 20.8% de eficiencia, lo que significa que casi el
80% de la potencia de entrada se desperdicia.
Fueron estos resultados los que nos llevaron a buscar un regulador de voltaje ms
eficiente.
El regulador de voltaje, usado para la alimentacin de los componentes lgicos de la
placa fue el integrado L5973D.
Proyecto Robot-Sumo
El regulador L5973D es capaz de entregar hasta 2.5 A con voltajes de salida que
varan entre 1.235 a 35v. Trabajando con voltajes de entrada entre los 4.4 y 35v.
Cuenta con proteccin contra corto circuito.
Presenta un sistema de retroalimentacin que ayuda a alcanzar una eficiencia del
90%.
Encapsulado
Funcin de los pines:
Nro. Nombre
Descripcin
OUT
SYNC
INH
COMP
FB
VREF
Es el pin de sincronizacin
Una seal lgica deshabilita el dispositivo. Con INH mas alto
que 2.2v el dispositivo est apagado y con INH ms bajo que
0.8v el dispositivo esta prendido.
Si INH no es usado, el pin debe ir a tierra
Usado para compensar la frecuencia
Si conectamos el voltaje de salida directamente a este pin, el
voltaje de salida resultante es de 1.235V. Para voltajes de
salida ms altos se requiere de un divisor externo resistivo
Voltaje de referencia de 3.3V.
GND
Tierra
VCC
Voltaje DC de entrada
Proyecto Robot-Sumo
Lgica
En lo correspondiente a la parte lgica, usamos el pic 18f45550 TQFP. Al momento
de elegir, tomamos en cuenta la cantidad de pines que presenta y la versatilidad que
nos da su forma encapsulada.
Este modelo presenta entradas tanto analticas como digitales, as como la opcin de
usar los dos canales disponibles para el PWM.
Distribucin de pines
Proyecto Robot-Sumo
Usamos dos pines analgicos como entrada para los sensores cny70, cuatro pines de
salida para controlar los dos puentes h, cuatro pines (2 como entrada y 2 como salida)
para los sensores ultrasonidos, los pines 1(RX) y 44(TX) para la comunicacin serial y
ambos pines de PWM (35 y 36).
Teniendo en cuenta todos estos puntos, armamos la configuracin final del PIC:
Proyecto Robot-Sumo
Potencia
Con respecto a la parte de potencia, usamos el puente H L6203 MULTIWATT para
controlar 2 motores DC que veremos despus.
Algunas de sus principales caractersticas:
Encapsulado
Distribucin de pines
Nro.
1
2
3
4
5
6
7
8
9
10
11
Nombre
OUT2
VS
OUT1
Descripcin
Salida de la segunda mitad del puente
Fuente de voltaje
Salida de la primera mitad del puente
Un capacitor boostrap conectado a este pin asegura un
BOOT1
funcionamiento eficiente del transistor DMOS superior
IN1
Entrada digital del controlador del motor
GND
Tierra comn
IN2
Entrada digital del controlador del motor
Un capacitor boostrap conectado a este pin asegura un
BOOT2
funcionamiento eficiente del transistor DMOS superior
Voltaje interno de referencia. Se recomienda usar un capacitor entre
Vref
este pin y tierra.
Una resistencia Rsense conectada a este pin proporciona
SENSE
retroalimentacin que nos permite controlar la corriente del motor
Cuando se tiene una entrada lgica alta en este pin los transistores
ENABLE DMOS son habilitados para ser manejados selectivamente por IN1 e
IN2
Proyecto Robot-Sumo
Eagle
Eagle es un programa que nos permite disear placas. Para disear una nueva placa
primero creamos un esquema de la misma y luego diseamos el circuito impreso.
Ya tenemos la configuracin de cada uno de los integrados as que armamos el
esquema uniendo los componentes para formar el circuito final.
Proyecto Robot-Sumo
MECNICA
La estructura del modulo sumo est compuesta en su mayora por un armazn de
aluminio, que forma un esqueleto solido sin ser muy pesado
Forma
Cuando comenzamos con el diseo de este proyecto uno de los primeros temas de
discusin fue la forma que debera tener, queramos una distribucin adecuada del
peso que a la vez nos permitiera cumplir la funcin principal de un robot sumo que es
empujar a su contrincante fuera del dojo.
Concordamos que una forma bsica sera lo mejor:
Una rampa adelante, lo ms pegada al piso y con menos inclinacin posible. Y el resto
de la estructura en forma de cubo.
Para que la estructura sea estable se construyo primero un esqueleto que luego sera
cubierto con placas de aluminio:
Esqueleto
1er prototipo de Thor
Los motores, las bateras y la placa se acomodan dentro del cuerpo formando pisos,
con la placa en el piso superior para tener acceso fcil a ella.
En la parte externa superior de la estructura fijamos un botn grande que nos permite
apagar el robot sin necesidad de abrirlo o desconectar la placa.
Proyecto Robot-Sumo
MOTORES
Usamos dos motores DC de 12v, 300rpm y una reduccin de 20:1, como podemos
observar en la figura:
Proyecto Robot-Sumo
Estructura Final
Despus de nuestra primera participacin en un concurso decidimos hacer una nueva
estructura, ms estable y que contenga nuestra idea original de usar una rampa.
Agregamos dos ruedas de apoyo adelante y retrocedimos la posicin de los motores
para que se encuentren lo mas pegados a la pared posterior posible.
4 puntos de
apoyo
SOLIDWORKS
Proyecto Robot-Sumo
Proyecto Robot-Sumo
PROGRAMACIN
La programacin fue desarrollada en lenguaje C con el compilador CCS usando el
entorno de MPLAB. Para un mejor entendimiento del cdigo se dividi en funcin a los
mdulos usados dentro del PIC.
IN1_MOTOR1
IN2_MOTOR2
IN1_MOTOR1
IN2_MOTOR2
Tabla1
Este cuadro representa los bits que tiene que enviar el pic al puente H para
poder mover los motores. Hasta este punto solo podemos controlar el movimiento del
robot ms no la velocidad del mismo. Para poder controlar la velocidad de los motores
utilizaremos el mdulo PWM.
Proyecto Robot-Sumo
Mdulo PWM
La modulacin por ancho de pulsos (tambin conocida como PWM, siglas en
ingls de Pulse-Width Modulation) de una fuente de energa es una tcnica en la que
se modifica el ciclo de trabajo de una seal peridica, para controlar la cantidad de
energa que se enva a una carga. Este principio fue usado en el proyecto para poder
variar fcilmente la velocidad de los motores en tiempo real, conectando la salida de
PWM al pin enable del puente H. De esta manera al enviar este tren de pulsos del
PWM dara el mismo resultado que prender y apagar el puente H rpidamente,
reduciendo as la velocidad.
Para poder utilizar el modulo PWM del pic primero hay que configurarlo, para
trabajar de una manera ms ordenada crearemos una funcin llamada initPWM() para
configurar el PWM.
void initPWM()
{
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_1, 255, 1)
Prescalar: El periodo
es dividido entre ste
nmero para obtener
diferentes periodos:
i.e.
T2_DIV_BY_1
T2_DIV_BY_4
T2_DIV_BY_16
Proyecto Robot-Sumo
PR2: Es el mximo
ancho de pulso:
255 100%
Se asigna
por defecto
el numero 1
set_pwm1_duty(127);
set_pwm1_duty(255);
TPR2 Terico=
TPR2 simulado=
TDuty Cycle Terico=
TDuty Cycle simulado=
TPR2 Terico=
TPR2 simulado=
TDuty Cycle Terico=
TDuty Cycle simulado=
Proyecto Robot-Sumo
Funcin Motor
motor(velocidad)
Esta funcin se encarga de enviar el sentido y la velocidad a los motores
utilizando un solo nmero para representar ambos datos. La funcin motor(velocidad)
requiere que se le asigne un valor de -100 a 100, este nmero representa el
porcentaje de velocidad, adems si el nmero es positivo girar en un sentido y si es
negativo girar en el sentido contrario. Cabe resaltar que el valor de -100 a 100 es el
porcentaje del valor que ingresamos en la comando set_pwm1_duty(valor).
Para entender mejor esta lgica observaremos la siguiente grafica:
Porcentaje de la
Velocidad del motor
motor(velocidad*)
velocidad%
motor(50)
50 %
motor(-50)
50 %
motor(100)
100 %
motor(0)
0%
Valor de Duty
Cycle del PWM
Sentido de giro
del motor
stop
Tabla 2
Como podemos observar es muy sencillo controlar el sentido y la velocidad del motor
haciendo uso de esta funcin. Ahora veremos el algoritmo de esta funcin en un
diagrama de flujo y luego en cdigo.
* velocidad es una variable que representa el porcentaje de velocidad del motor.
Proyecto Robot-Sumo
Diagrama de flujo
INICIO
motor(velocidad)
valor = velocidad&0b10000000
SI
Si valor = 128
NO
a=2.55*velocidad;
set_pwm1_duty(a);
FIN
Explicacin:
motor(velocidad)
Segn lo analizado, el sentido de giro del motor depende del signo del nmero
dentro de la funcin motor(velocidad). Para poder determinar el signo analizaremos el
nmero como binario. La variable velocidad es un int por lo tanto puede tomar valores
desde -127 hasta 127.
int =8 bits
__ __ __ __ __ __ __ __
1 == 0000 0000
2 == 0000 0001
3 == 0000 0010
-1 == 1111 1111
-2 == 1111 1110
-3 == 1111 110
valor = velocidad&0b10000000
valor = velocidad&0b10000000
Ejemplo:
Si velocidad = 50 = 0b00110010
0
0
&
1 0 0 0 0 0 0 0
___________________________
Valor = 0 0 0 0 0 0 0 0
=0
0
&
1 0 0 0 0 0 0 0
___________________________
Valor = 1 0 0 0 0 0 0 0
= 128
Si valor = 128
SI
Girar en sentido anti horario
velocidad= -1*velocidad;
Proyecto Robot-Sumo
% de velocidad
Duty Cycle
100
255
velocidad
Cdigo en CCS
void motor(int velocidad )
{
unsigned int valor,a;
valor=velocidad&0b10000000;
if(valor==128)
{
output_low(IN1_MOTOR1);
// Giramos el motor hacia atrs
output_high(IN2_MOTOR1);
velocidad=-velocidad;
}
else
{
output_low(IN2_MOTOR1);
// Giramos el motor hacia adelante
output_high(IN1_MOTOR1);
}
a=2.55*velocidad;
set_pwm1_duty(a);
Proyecto Robot-Sumo
Ahora crearemos una funcin motores para controlar dos motores usando la funcin
anterior.
void MOTORES(int velocidad1, int velocidad2)
{
motor1(velocidad1);
motor2(velocidad2);
}
Proyecto Robot-Sumo
(a)
(b)
(c)
Superficie blanca
En este caso la superficie es blanca,
el color blanco no absorbe la luz,
entonces la luz es reflejada y el
fototransistor es excitado.
De acuerdo a la figura (c) si la base
del fototransistor es excitada la
salida es 0 lgico.
Proyecto Robot-Sumo
Por tanto la salida no ser 1logico (5 volts) ni 0 lgico (0 volts). Esto significa que la
salida ser analgica con tensiones entre 0 y 5 volts.
En nuestro caso usamos el mdulo ADC del pic 18f4550 para leer la tensin
analgica que obtenemos del sensor CNY70 y convertirla en digital dentro del pic. Esto
lo hacemos con el propsito de hacer un comparador dentro del pic.
Mdulo ADC
Este mdulo ADC consiste en la representacin de un voltaje analgico en un
valor digital. Quiere decir que podemos saber el valor de la tensin analgica dentro
del pic. Una vez que tengamos ese valor podremos analizar ese voltaje para
determinar si el color de la superficie es negro o blanco.
Lo que haremos primero es crear una funcin de inicializacin y configuracin del
mdulo ADC.
void initADC()
{
SETUP_ADC(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0_TO_AN9_ANALOG);
// Configuramos el ADC
// Usaremos el clock interno
// Habilitamos los pines que usaremos como entradas
// analgicas, en este caso del AN0 al AN9
Proyecto Robot-Sumo
El mdulo ADC solo puede ser usado por un pin analgico a la vez.
El valor de la tensin analgica ser representada de 0 a 1024 porque estamos
usando una resolucin de 10 bits.
Si un pin est siendo usado como analgico ya no ser I/O digital y viceversa.
El pic necesita tener un VREF+ y VREF- para poder tener una referencia de un
mximo y mnimo valor de voltaje, en nuestro caso consideramos lo siguiente:
VREF+ = 5 volts y VREF- = 0 volts.
Como se puede observar solo se puede hacer una lectura a la vez teniendo en
cuantas los voltajes de referencia y la resolucin de 10 bits. Ahora veremos los dos
comandos usados para la lectura del mdulo ADC.
Proyecto Robot-Sumo
SET_ADC_CHANNEL(0);
Colocamos el nmero
del pin analgico en el
cual queremos hacer
la lectura.
Este comando sirve para establecer que pin analgico har la lectura.
Ejemplo.
SET_ADC_CHANNEL(0);
SET_ADC_CHANNEL(4);
SET_ADC_CHANNEL(9);
READ_ADC()
Una vez que se ha establecido que pin analgico har la lectura se usar este
comando para hacer la lectura propiamente dicha. Esta funcin es propia del
compilador y su caracterstica es que devuelve un valor, quiere decir que tenemos que
usar una variable para asignarle el valor.
Ejemplo
lectura=READ_ADC();
El valor de la variable lectura est en el rango de 0 a 1024 dependiendo de la tensin
de entrada.
Ejemplo
Considerando VREF+ = 5 volts y VREF- = 0 volts.
Si
Si
Si
Si
Estos son los valores obtenidos al hacer la lectura por ADC, pero aun no son los
valores de la tensin analgica leda. Para obtener ese valor tenemos que hacer una
transformacin
Analizando estos valores podemos hallar una relacin con una regla de 3 simple.
VREF+
Proyecto Robot-Sumo
Diagrama de Flujo
INICIO
Establecemos que
pin analgico har
la lectura
Hacemos la lectura analgica a digital
Si voltaje <umbral
Color Negro
Color Blanco
FIN
Proyecto Robot-Sumo
Cdigo en CCS
#define VREF 5
int I;
void infrarrojo(float umbral)
{
float voltaje;
long lectura;
SET_ADC_CHANNEL(1);
lectura=READ_ADC();
voltaje=(VREF/1024.0)*(float)(lectura);
if(voltaje>=umbral)
{
I=1;
I=0;
}
else
{
}
}
SET_ADC_CHANNEL(1);
lectura=READ_ADC();
cny70_izq =(VREF/1024.0)*(float)(lectura);
if(cny70_der>=umbral)
{
I_DER=1;
}
else
{
I_DER=0;
}
if(cny70_izq>=umbral)
{
I_IZQ=1;
}
else
{
I_IZQ=0;
}
}
Proyecto Robot-Sumo
Este sensor tiene 4 pines para su conexin: 5V, GND, ECO y DISPARO. De estos
pines los ms importantes son los siguientes:
Para que el sensor SRF05 funcione primero debemos aplicar un pulso de 10us al pin
DISPARO, luego debemos leer el ancho de pulso del pin ECO para saber la distancia
a la que se encuentra el objeto.
Proyecto Robot-Sumo
Hasta este punto no hemos mencionado como calcular la distancia, pero para esta
aplicacin no es necesario saber la distancia a la que se encuentra el objeto sino
saber si esta dentro de ese rango de distancia.
Proyecto Robot-Sumo
Por ejemplo
Si queremos saber si un objeto se encuentra en el rango de 70cm:
El tiempo de espera ser 4060 s. Quiere decir que una vez que se haya
enviado el pulso de 10us al pin DISPARO se tendr que esperar 4060 s para
preguntar al pin ECO si se encuentra en 0 1.
Proyecto Robot-Sumo
INICIO
Cada 30ms
Mandar pulso de
10s por el pin
DISPARO
Hacemos un retardo de
segundos
En esta caso
Si en pin ECO = 1
NO SE DETECTO OBJETO
DENTRO DEL RANGO
En este caso 70cm
SE DETECTO OBJETO
DENTRO DEL RANGO
En este caso 70cm
FIN
Proyecto Robot-Sumo
Cada 30ms
Mandar pulso de
10s por el pin
DISPARO
Hacemos un retardo de
segundos
En esta caso
V
F
Si en pin ECO = 0
contador=contador+1
No detect
contador=0
U=0
V
Detecto objeto
U=1
contador=0
FIN
Proyecto Robot-Sumo
Si contador=2
Cdigo en CCS
Primero crearemos una funcin para mandar el pulso de 10 s al pin DISPARO.
void PULSO()
{
output_high(disparo);
delay_us(10);
output_low(disparo);
}
Segn el diagrama de flujo el proceso de lectura se har cada 30ms. Para este
propsito usaremos el modulo TIMER0 del pic 18F4550.
Mdulo TIMER
El TIMER es un contador interno del pic el cual se puede configurar para que cada
cierto tiempo realice una accin. Para esta aplicacin haremos que cada 30ms haga la
lectura de los sensores ultrasonidos para detectar objetos.
Primero crearemos la funcin initTIMER0 para configurar e inicializar el modulo Timer0
void initTIMER0()
{
SETUP_TIMER_0(T0_INTERNAL| T0_DIV_256);
set_timer0(64950);
enable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);
}
Proyecto Robot-Sumo
// Habilitamos interrupciones
// Habilitamos el interruptor global
0x00
Explicacin
SETUP_TIMER_0(T0_INTERNAL | T0_DIV_256);
Prescalar: El periodo
es dividido entre ste
nmero para obtener
diferentes periodos:
i.e.
T0_DIV_BY_4
T0_DIV_BY_16
T0_DIV_BY_256
set_timer0(valor);
Estable un valor de
cuenteo del timer0
Donde:
Proyecto Robot-Sumo
Ejemplo
Para establecer el periodo de 30ms del timer0
Despejando:
Entonces:
Finalmente crearemos la funcin interrupcin para realizar la lectura cada 30ms. Cabe
resaltar que la variable tiempo_espera ser asignada en una funcin posterior.
#int_timer0
void Interrupcion()
{
PULSO();
while(!input(eco));
delay_us(tiempo_espera);
distancia_filtro();
set_timer0(64950);
}
Proyecto Robot-Sumo
void distancia_filtro()
{
if(!input(eco1))
{
contador1++;
if(contador1==2)
{
U_DER=1;
contador1=0;
}
}
else
{
contador1=0;
U_DER=0;
}
if(!input(eco2))
{
contador2++;
if(contador2==2)
{
U_IZQ=1;
contador2=0;
}
}
else
{
contador2=0;
U_IZQ=0;
}
}
GIRO INICIAL
Segn las reglas de la categora sumo en el Per hay 4 formas de colocar al sumo al
inicio de la pelea.
El giro inicial es muy importante porque define quien atacar primero, y eso es una
gran ventaja en esta categora. Entonces al comienzo hay que girar en el sentido que
veamos primero al oponente.
Por ejemplo si estamos esta posicin:
Giraremos a la derecha
Proyecto Robot-Sumo
De espaldas
Proyecto Robot-Sumo
if(input(pulsador_izquierda))
{
giro=2;
}
if(input(boton_batalla))
{
batalla(70);
}
}
PERSECUCIN DE OBJETOS
La persecucin del objetivo es uno de los puntos ms resaltantes de este proyecto.
Para esto tendremos que usar los mdulos expuestos en las secciones anteriores.
Proyecto Robot-Sumo
En el caso que ninguno de los dos sensores de ultrasonido detecte algn objeto
seguir haciendo la rutina anterior.
Ahora plantearemos la lgica para la persecucin del robot sumo tomando como base
el principio explicado.
Proyecto Robot-Sumo
Definimos estado=0b00000000
U_IZQ = 1 si detecta objeto el ultrasonido izq
U_IZQ = 0 si no detecta objeto el ultrasonido izq
U_DER = 1 si detecta objeto el ultrasonido der
U_DER = 0 si no detecta objeto el ultrasonido der
RETROCEDER
RETARDO DE 1,5 ms
estado
STOP
RETARDO DE 200 ms
V
estado=0b00000001
GIRAR A LA DERECHA
F
estado=0b00000010
GIRAR A LA DERECHA
V
estado=0b00000011
GIRAR A LA IZQUIERDA
AVANZAR
Proyecto Robot-Sumo
Cdigo en CCS
void PERSEGUIR()
{
unsigned int estado=0;
for(;;)
{
motores(85,-85);
break;
case 0b00000010 :
motores(-85,85);
break;
case 0b00000011 :
default
break;
}
}
}
}
Proyecto Robot-Sumo
FUNCIN BATALLA
Esta funcin lo que hace es inicializar al sumo para que comience a luchar. En esta
funcin se asignar el tiempo de espera para los ultrasonidos , adems de efectuar el
giro inicial y llamar a la funcin PERSEGUIR donde se entrar en un bucle infinito.
void batalla(unsigned long rango)
{
tiempo_espera=rango*58;
motores(0,0);
delay_ms(5000);
//++++ giro inicial++++
if(giro==0)
{
motores(100,100);
}
else
{
if(giro==1)
{
motores(85,-85);
}
else
{
motores(85,-85);
}
}
delay_ms(500);
set_timer0(64950);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
PERSEGUIR();
}
Proyecto Robot-Sumo
sumo.c
#include <sumo.h>
//++++++++++++++++++++++++++++++++++++++++++++++++
// declaracion de variables globales
//++++++++++++++++++++++++++++++++++++++++++++++++
unsigned int a;
int tiempo_espera;
int giro;
int U_DER,U_IZQ,I_DER,I_IZQ;
unsigned int contador1=0,contador2=0;
#int_timer0
void Interrupcion()
{
PULSO();
while(!input(eco1));
delay_us(tiempo_espera);
distancia_filtro();
set_timer0(64950);
}
//++++++++++++++++++++++++++++++++++++++++++++++++
//PROGRAMA PRINCIPAL
//++++++++++++++++++++++++++++++++++++++++++++++++
void main()
{
initSYSTEM();
for(;;)
{
botones();
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++
//DEFINICION DE FUNCIONES
//++++++++++++++++++++++++++++++++++++++++++++++++
void initPWM()
{
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
Proyecto Robot-Sumo
// Configuramos el ADC
// Usaremos el clock interno
// Habilitamos los pines que usaremos como entradas
// analgicas, en este caso del AN0 al AN9
// Habilitamos interrupciones
// Habilitamos el interruptor global
void initULTRASONIDOS()
{
U_DER=0;
U_IZQ=0;
}
void initSYSTEM()
{
initPWM();
initTIMER0();
initULTRASONIDOS();
initADC();
giro=0;
}
void motor1(int velocidad1)
{
unsigned int valor1,a;
valor1=velocidad1&0b10000000;
if(valor1==128)
{
output_low(IN1_MOTOR1);
output_high(IN2_MOTOR1);
velocidad1=-velocidad1;
}
else
{
output_low(IN2_MOTOR1);
output_high(IN1_MOTOR1);
}
a=2.55*velocidad1;
set_pwm1_duty(a);
}
void motor2(int velocidad2)
{
unsigned int valor2,a;
valor2=velocidad2&0b10000000;
if(valor2==128)
{
output_low(IN1_MOTOR2);
output_high(IN2_MOTOR2);
velocidad2=-velocidad2;
}
else
{
output_low(IN2_MOTOR2);
output_high(IN1_MOTOR2);
}
a=2.55*velocidad2;
set_pwm2_duty(a);
}
void MOTORES(int velocidad1, int velocidad2)
{
motor1(velocidad1);
motor2(velocidad2);
}
Proyecto Robot-Sumo
SET_ADC_CHANNEL(1);
lectura=READ_ADC();
cny70_izq =(VREF/1024.0)*(float)(lectura);
if(cny70_der>=umbral)
{
I_DER=1;
}
else
{
I_DER=0;
}
if(cny70_izq>=umbral)
{
I_IZQ=1;
}
else
{
I_IZQ=0;
}
}
void PULSO()
{
output_high(disparo1);
output_high(disparo2);
delay_us(10);
output_low(disparo1);
output_low(disparo2);
}
void distancia_filtro()
{
if(!input(eco1))
{
contador1++;
if(contador1==2)
{
U_DER=1;
contador1=0;
}
}
else
{
contador1=0;
U_DER=0;
}
if(!input(eco2))
{
contador2++;
if(contador2==2)
{
U_IZQ=1;
contador2=0;
}
}
else
{
contador2=0;
U_IZQ=0;
}
}
Proyecto Robot-Sumo
if(input(pulsador_izquierda))
{
giro=2;
}
if(input(boton_batalla))
{
batalla(70);
}
}
void PERSEGUIR()
{
unsigned int estado=0;
for(;;)
{
motores(85,-85);
break;
case 0b00000010 :
motores(-85,85);
break;
}
}
}
Proyecto Robot-Sumo
case 0b00000011 :
default
break;
}
{
tiempo_espera=rango*58;
motores(0,0);
delay_ms(5000);
//++++ giro inicial++++
if(giro==0)
{
motores(100,100);
}
else
{
if(giro==1)
{
motores(85,-85);
}
else
{
motores(85,-85);
}
}
delay_ms(500);
set_timer0(64950);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
PERSEGUIR();
}
Proyecto Robot-Sumo
sumo.h
#include <18F4550.h>
#define VREF 5
#device adc=10
#FUSES NOWDT, WDT128, HS, NOPROTECT, BROWNOUT, BORV20, NOPUT, NOCPD, NOSTVREN
#FUSES NODEBUG, NOLVP, NOWRT, NOWRTD, NOIESO, NOFCMEN, NOPBADEN, NOWRTC
#FUSES NOWRTB, NOEBTR, NOEBTRB, NOCPB, MCLR, LPT1OSC, NOXINST, PLL1
#FUSES CPUDIV1, NOUSBDIV, VREGEN, NOICPRT
#use delay(clock=20000000)
#define RTCC_16_BIT
0x00
//Declaracion de pines
#define disparo1 PIN_B5
#define eco1 PIN_B4
#define disparo2 PIN_B7
#define eco2 PIN_B6
#define boton_batalla PIN_A4
#define pulsador_derecha PIN_A5
#define pulsador_izquierda PIN_E0
#define IN1_MOTOR1 PIN_D3
#define IN2_MOTOR1 PIN_D2
#define IN1_MOTOR2 PIN_D1
#define IN2_MOTOR2 PIN_D0
//Declaracion de funciones
void initPWM(void);
void initTIMER0(void);
void initULTRASONIDOS(void);
void initADC(void);
void initSYSTEM(void);
void motor1(int PWM1);
void motor2(int PWM2);
void MOTORES(int PWM1, int PWM2);
void PULSO(void);
void distancia_filtro(void);
void infrarrojos(float umbral);
void botones(void);
void PERSEGUIR(void);
void batalla(unsigned long rango);
Proyecto Robot-Sumo
Logstica
4.3.1.
Personal
Luis A. Arellano Zea, naci en la ciudad de Lima, Per, en 1991.
Estudiante del quinto ciclo de la carrera de Ingeniera Electrnica de
la Universidad Nacional Mayor de San Marcos . Desde el ao 2009
hasta fecha viene desarrollando proyectos de investigacin en el
rea de Robtica y Telemetra. Ha obtenido el primer puesto en
diferentes concursos de Robotica a nivel nacional. Actualmente es
presidente del grupo de investigacin en Robtica y Automatizacin
de la UNMSM. (luis.arellano09@gmail.com).
Jorge Abraham Salgado Hervias, naci en mayo del 1985, Lima Per.
Se diplomo de Ingeniero de electrnica e informtica industrial, con
un ao de especializacin en Sistemas embebidos, en el cole
Nationale Suprieure des Sciences Appliques et de Technologie.
ENSSAT 2011-FRANCIA, egresado de la Universidad Nacional Mayor
de San Marcos, 2008-Peru. Particip en la Copa de robtica en
Francia, 2010. Organiz y expuso sobre robtica en el Per en la
copa robtica de Tregor, Bretagne. Realiz dos videoconferencias de
robtica entre Per y Francia. Organiz el primer concurso nacional de robtica en la
UNMSM.Ganador de diversos concursos de robtica a nivel Nacional y un
sudamericano en la categora Sumo. Actualmente es administrador de RobotsPeru
y asesor principal del grupo de investigacin de robtica y Automatizacin.
(j.salgado@robotsperu.org).
4.3.2.
Formacin
Proyecto Robot-Sumo
Participacin
INTERCON 2010
El "XVII Congreso Internacional de Ingeniera Elctrica, Electrnica y
Sistemas - INTERCON 2010" se llev a cabo en la ciudad de Puno del 9 al
13 de Agosto del 2010.
Este fue el primer evento en el que participamos con el modulo robot sumo
Thor. Todos los miembros del grupo viajamos en diferentes fechas, por
avin, unos das antes del inicio de las conferencias, pero nos
hospedamos en el mismo hotel. Contamos con el apoyo de la facultad para
el hospedaje, alimentacin y transporte.
La primera dificultad que afrontamos fue al momento de la inscripcin, ya
que no estbamos enterados de que para participar en el concurso de
robtica a realizarse los das 11 y 12, debamos tener a por lo menos la
mitad de los miembros del grupo inscritos en el congreso. Despus de
realizar los pagos apropiados para la inscripcin al congreso se nos
permiti la inscripcin al concurso de robtica.
No tenamos la programacin en un estado ptimo para cuando viajamos,
as que pasamos los das antes del concurso programando, probando y
corrigiendo los errores. Pero el da antes de nuestra participacin los
sensores infrarrojos dejaron de funcionar y nuestros ultrasonidos
empezaron a fallar. Los problemas tenan origen en las conexiones de los
cables, que no podamos reparar en ese momento as que corregimos lo
que pudimos de los ultrasonidos con programacin y no usamos
infrarrojos.
Fueron 9 los sumos participantes, enfrentndose
eliminatorios. Ocupamos el 3er puesto.
en
encuentros
Proyecto Robot-Sumo
VILLATRONICA 2010
El III Concurso Nacional de Robots Villatrnica 2010 se llevo a cabo el
11 de Noviembre en la Universidad Nacional Federico Villareal.
Contamos con el apoyo de la facultad en lo correspondiente al transporte
de ida. Obtuvimos el 1er puesto.
COINTEC 2010
El concurso de robtica a realizarse el 12 de noviembre en el marco del II
Congreso Internacional de Tecnologa COINTEC 2010 se llevo a cabo
en la Universidad Privada Antenor Orrego en la ciudad de Trujillo.
Usando parte de los fondos que tenamos acumulados uno de nosotros
viajo a Trujillo. El principal problema para este viaje fue la fecha en la que
se realizo ya que fue solo un da despus del VILLATRONICA 2010 y eso
no nos daba mucho tiempo.
Partiendo el da anterior en la noche, solo horas despus de la
participacin en la Villareal se lleg el da del concurso en la maana y se
volvi a partir ese mismo da en la noche de regreso a Lima.
Obtuvimos el 1er puesto.
CER 2010
EL Concurso Ecuatoriano de Robtica 2010 realizado en la ciudad de
Guayaquil, Ecuador. Para este concurso se form parte de la delegacin
ROBOTS PER que represent al Per esta competicin.
Lamentablemente no se pudo ganar este concurso debido a que las
dimensiones estipuladas en las bases eran de 30x30 cm y nuestro robot
era de 20x20 cm. Pero se aprendi mucho y se obtuvo bastante
experiencia.
Proyecto Robot-Sumo
Costo
COMPONENTES
CANTIDAD
PRECIO POR
UNIDAD
PRECIO TOTAL
PIC 18F4550
S/ 50.00
S/ 50.00
L6203 DRIVER
S/ 44.20
S/ 88.40
L5973D
REGULADOR
CMS
S/ 11.24
S/ 22.48
SENSOR SRF05
S/ 100.00
S/ 200.00
SENSOR CNY70
S/ 15.00
S/ 30.00
RESISTENCIA
de 4.7K
50
S/ 0.15
S/ 7.50
RESISTENCIA
de 2.5 K
50
S/ 0.10
S/ 5.00
RESISTENCIA
de 7.5 K
50
S/ 0.08
S/ 4.00
RESISTENCIA
de 5.1 K
50
S/ 0.16
S/ 8.00
RESISTENCIA
de 10 K
50
S/ 0.15
S/ 7.50
RESISTENCIA
de 220
50
S/ 0.15
S/ 7.50
RESISTENCIA
de 10
50
S/ 0.12
S/ 6.00
Proyecto Robot-Sumo
RESISTENCIA
de 30
50
S/ 0.16
S/ 8.00
CONDENSADOR
de 330uF
10
S/ 1.12
S/ 11.20
CONDENSADOR
de 10uF
10
S/ 0.42
S/ 4.20
CONDENSADOR
de 22nF
10
S/ 0.14
S/ 1.40
CONDENSADOR
de 220pF
10
S/ 1.68
S/ 16.80
CONDENSADOR
de 0.1uF
10
S/ 0.14
S/ 1.40
CONDENSADOR
de 15nF
10
S/ 0.55
S/ 5.50
CONDENSADOR
de 15pF
10
S/ 0.46
S/ 4.60
CONDENSADOR
de 220nF
10
S/ 0.23
S/ 2.30
DIODO
RECTIFICADOR
S/ 0.32
S/ 2.56
DIODO LED
ROJO
10
S/ 0.46
S/ 4.60
DIODO LED
VERDE
10
S/ 0.66
S/ 6.60
DIODO LED
AMARILLO
10
S/ 0.36
S/ 3.60
BOBINA de
15uH
S/ 4.04
S/ 8.08
CRISTAL
OSCILADOR de
20M
S/ 1.00
S/ 1.00
Proyecto Robot-Sumo
MOLEX MACHO
DE 2
10
S/ 0.73
S/ 7.30
MOLEX MACHO
DE 4
10
S/ 0.70
S/ 7.00
MOLEX MACHO
DE 5
10
S/ 0.96
S/ 9.60
MOLEX
HEMBRA DE 2
10
S/ 0.62
S/ 6.20
MOLEX
HEMBRA DE 4
10
S/ 0.71
S/ 7.10
MOLEX
HEMBRA DE 5
10
S/ 0.96
S/ 9.60
BASE MOLEX
HEMBRA DE 5
S/ 8.40
S/ 8.40
BASE MOLEX
MACHO DE 5
S/ 3
S/ 3.00
ALAMBRE
PARA MOLEX
100
S/ 1.00
S/ 100.00
CONECTORES
DE 2 PARA
CNY70
20
S/ 0.20
S/ 4.00
CABLE
USB/SERIAL
S/ 45.00
S/ 45.00
PLACA
IMPRESA
S/ 15.00
S/ 30.00
INVERSION
TOTAL EN LOS
COMPONENTES
S/ 755.18
Proyecto Robot-Sumo
MATERIALES
CANTIDAD
PRECIO POR
UNIDAD
PRECIO
TOTAL
MOTOR DC
S/ 90.00
S/ 180.00
LLANTAS DE
CAUCHO
S/ 5.00
S/ 10.00
BALL CASTER
S/ 35.00
S/ 70.00
BATERA 12V
1.3AH
S/ 18.00
S/ 72.00
BOTON DE
PANICO
S/ 15.00
S/ 30.00
BOTONES
S/ 1.00
S/ 4.00
PULSADORES
S/ 1.00
S/ 8.00
CABLE
BIPOLAR
8m
S/ 0.70
S/ 5.60
ESTAO
1 rollo
S/ 40.00
S/ 40.00
ARCO DE
SIERRA
MACHO
S/ 18.00
S/ 18.00
CUCHILLA
S/ 8.00
S/ 8.00
ACRILICO
1m
S/ 8.00
S/ 8.00
ALUMINIO
TIPO L
4m
S/ 6.00
S/ 24.00
BISAGRA
S/ 1.00
S/ 5.00
Proyecto Robot-Sumo
6.
RAMPA DE
FIERRO
S/ 5.00
S/ 5.00
JUEGO DE
TORNILLOS Y
TUERCAS
S/ 5.00
S/ 5.00
CINTA
AISLANTE
S/ 1.00
S/ 4.00
SILICONA
10 barras
S/ 0.50
S/ 5.00
INVERSION
TOTAL EN
MATERIALES
S/ 501.6
INVERSIN
TOTAL EN LOS
COMPONENTES
INVERSIN
TOTAL EN
MATERIALES
INVERSIN TOTAL
S/ 755.18
S/ 501.6
S/ 1256.78
Agradecimientos
A Flor de Mara Gaviria Barneto por el apoyo recibido dentro del Instituto de
Investigacin.
A Hugo Eduardo Manuel Flores por hacer la primera estructura del proyecto.
Proyecto Robot-Sumo
en la