Post on 10-May-2018
Proyecto Final Robot Sumo Autónomo
2013
Federico Ruiz & Luca Andrés Bastida
Escuela Politécnica N 703
01/12/2013
2
Tabla de contenido Introducción ..................................................................................................................................................... 3
Parametros de diseño ..................................................................................................................................... 4
Objetivos de un robot sumo .......................................................................................................................... 4
Diagrama de bloques principal ................................................................................................................ 4
Sensores ............................................................................................................................................................ 5
Introducción ................................................................................................................................................ 5
Sensores de ubicación .............................................................................................................................. 5
Circuito esquematico ........................................................................................................................... 6
PCB del circuito ..................................................................................................................................... 6
Ubicación ............................................................................................................................................... 7
Sensores de detección ............................................................................................................................. 8
Ubicación ............................................................................................................................................. 10
Control ............................................................................................................................................................. 11
Introducción ................................................................................................................................................... 11
Circuito esquematico ................................................................................................................................... 12
PCB del circuito ............................................................................................................................................. 12
Diagrama de flujo general ......................................................................................................................... 13
Ayuda .............................................................................................................................................................. 14
Programa ........................................................................................................................................................ 11
Actuadores ..................................................................................................................................................... 29
Introducción ................................................................................................................................................... 29
Circuito esquematico ................................................................................................................................... 29
PCB del circuito ............................................................................................................................................. 30
Ubicación ....................................................................................................................................................... 30
Alimentaciones .............................................................................................................................................. 31
Diagrama de bloque de conecciones ...................................................................................................... 31
Comentarios a los próximos integrantes .................................................................................................. 32
3
Introducción
El hombre como ser racional ha estado buscando las herramientas para facilitar la
realización de sus labores diarias las cuales contribuyen desarrollo de sí mismo, desde la
época de los griegos con Herón de Alejandría (85 d.c.) y sus maquinas animadas ,
hechas con poleas y elementos hidráulicos, hasta la actualidad, con la automatización
industrial , se han ido buscando los principio físicos y las herramientas matemáticos que
puedan desarrollar sistemas dinámicos para que pueda cumplir con las labores que el
hombre tiene que realizar, y ese es el objetivo principal de la robótica, es por ello que ha
sido necesario implementar un robot automatizado que pueda cumplir con funciones
básicas, que nosotros queremos generar y establecer en el prototipo con el fin de
obtener conocimientos teóricos y prácticos con el área en relación.
La robótica es la rama de la inteligencia artificial que estudia los sistemas automáticos
capaces de establecer una interacción directa con el mundo físico.
Existen dos grupos de robots los robots fijos y los robos móviles:
Los robots fijos se utilizan en la industria para llevar al cabo tareas peligrosas (soldadura
de chasis o pintura de las carrocerías en una fábrica de coches). Los robots móviles se
emplean para transportar cargas desde cadenas de fabricación hasta los almacenes) o
incluso para transportar el correo dentro de las oficinas.
La tarea fundamental de los robots móviles es el desplazamiento en un entorno
conocido o desconocido. Por tanto, es necesario conocer la posición del robot en su
universo de manera precisa o relativa según sea el caso.
4
Parámetros de diseño
Los parámetros de diseño para la construcción, del robot sumo, son dados por el
reglamento del concurso, entre las características de mayor relevancia se destacan:
Los Sumo robots son autónomos en cuanto a propulsión y control
Un peso de 3 kilogramos o menos
Los robots sumos no debe exceder una determinada anchura y profundidad, 20
cm por 20 cm.
El sumo debe empezar a actuar pasado 5 segundos de el inicio
Objetivos de un robot sumo
Debido a que el sumo debe ser autónomo en cuanto a propulsión y control, el robot
tendrá como objetivos.
General
Mantenerse en una plataforma circular elevada, la cual está compuesta por una
superficie negra bordeada por un borde blanco.
Detectar y atacar al oponente para sacarlo del anillo de juego.
Específicos
Tener la fuerza suficiente como para mover 15 Kg
Detectar al enemigo en un ángulo de 360º y a una d istancia mínima de 1 metro
Diagrama de bloques
Para el complimiento de los objetivos generales, el robot sumo deberá estar compuesto,
por tres bloques principales, tal como se ve denotado en la figura
A su vez cada sub sistema está compuesto por otros sub sistemas.
Sensores Control Actuadores
Alimentaciones
5
Sensores
Introducción
La sensoria implementada para el robot sumo, básicamente consta de dos elementos,
por un lado el sensor de ubicación, el cual indica en que región de la pista se encuentra
ubicado el sumo, el por otra parte el sensor de detección.
Sensores de ubicación.
Los sensores de ubicación son lo que me darán la información sobre la posición del robot
en el anillo de juego, debido a que el anillo de juego está compuesto por una superficie
negra, bordeada por una línea blanca, se puede analizar que el sensor necesario para
la ubicación es un sensor que tenga la capacidad de distinguir entre el blanco y el
negro, y uno de los sensores más comunes y económicos del mercado es el CNY70.
Sensor óptico CNY70
El CNY70 es un sensor óptico reflexivo con salida a transistor, fabricado por Vishay
Telefunken Semiconductors. Tiene una construcción compacta donde el emisor de luz y
el receptor se colocan en la misma dirección para detectar la presencia de un objeto
por medio del empleo de la reflexión del haz de luz infrarroja IR (Infrared) sobre el objeto.
La longitud de onda de trabajo es de 950nm. El emisor es un diodo led infrarrojo y el
detector consiste en un fototransistor. La distancia del objeto reflectante debe estar
entre los 5 y 10mm de distancia. La corriente directa del diodo IF=50mA y la intensidad
del colector es de IC=50 mA
Detección Ubicación
Sensores
6
Para conectar estos sensores hay que polarizarlos, y para su correspondiente
acondicionamiento de la señal depende de las correspondientes resistencias del
circuito, en donde se muestran las dos posibles formas de conexión, según se quiera la
salida alta para color blanco o negra.
Circuito esquematico
Tipo A
Detecta Blanco Transistor saturado Salida 0 (O Volts)
Detecta Negro Transistor en corte Salida 1 (1 Volts)
Tipo B
Detecta Negro Transistor saturado Salida 0 (O Volts)
Detecta blanco Transistor en corte Salida en (1 Volts)
El circuito implementado fue el tipo B.
PCB del circuito
7
Ubicacion
Fueron ubicados con la siguiente distribución
Además, fue necesaria la utilización de un smich trigger, y en nuestro caso utilizamos los
HEF40106, este componente se encarga de recibir una señal analógica (variable) en su
entrada, dependiendo de su nivel de tensión, la considera un 1 o un 0 lo cual es la
tensión que lleva a su salida, además cabe destacar que nuestros smich trigger son
inversores, por lo que tuvimos que cambiar los casos en el programa.
8
¿Por qué fue necesaria su utilización?
Nuestro micro controlador, necesita detectar la entrada de señal por el CNY70 por lo
que si no colocaríamos el smich trigger podría entrar señales no deseadas, o al ser
variable, el micro controlador no podría detectarla eficazmente, por estas razones un
smich trigger como medio de adaptación entre la señal de salida de los CNY70 a la
entrada del PIC.
En la imagen, se puede observar una señal analógica en la entrada y su repuesta
(invertida) en la salida del smich trigger
Sensores de detección
Este sensor es el que nos podrá dar la información de la ubicación del robot
contrincante, existen distintos sensores capaces de desarrollar esta función entre las
principales clases encontramos.
Sensor Capacitivo
Sensor Inductivo
Sensor Fin de carrera
Sensor Infrarrojo
Sensor Ultrasónico
Todas estas clases de sensores funcionan bajo principios físicos distintos, y por este mismo
presenta ventajas y desventajas para esta aplicación.
En el cuadro 1 se puede observar la comparación de dichas clases de sensores, con sus
correspondientes ventajas y desventajas, que se lograron identificar.
9
Sensor de proximidad Ventajas Desventajas
Capacitivo Puede detectar
estructuras, metálicas
y no metálicas
Poco rango de
detección (Entre 50
um y 6mm
Inductivo Funciona con
elementos férricos y
no férricos.
Poco rango, inestable,
afectado por
perturbaciones
electromagnéticas.
Finales de carrera Fácil de usar,
económico.
Es necesario el
contacto físico.
Infrarrojo Económico, común en
el mercado
Sensible a la luz de
ambiente
Ultrasónico Común en el
mercado, mayor
precisión.
Más costoso, el
acondicionamiento
del sensor es un
proceso complejo.
Con lo referente a la tabla anterior se observo que la clase de sensores más óptima a
utilizar era el infrarrojo y el ultrasónico.
Al introducirnos en sus características decidimos utilizar sensores
ultrasónicos,específicamente el HC-SRF04.
El cual es un sensor de distancias por ultrasonido capaz de detectar objetos
y calcular la distancia a la que se encuentra en un rango de 2cm a 450cm
Funciona por ultrasonido y contiene toda la electrónica encargada de hacer
la medición.Su uso es tan sencillo como enviar el pulso de arranque y medir la
anchura del pulso de retorno.
De muy pequeño tamaño el HC-SRF04 se destaca por su bajo consumo, gran
precisión por lo que es muy utilizado en los robots de la actualidad.
11
Control
Introducción
Esta etapa es de suma importancia dado que será el “Cerebro” de nuestro robot.
El cual dependiendo de nuestras entradas (Sensores) accionara nuestras salidas
(Drivers/Motores) para ejecutar los movimientos deseados.
Para realizar la etapa de control, serán utilizados los microcontroladores PIC -
Peripheral Interface Controller (controlador de interfaz periférico)-.
Los PIC son unos microcontroladores fabricados por Microchip que en un solo circuito
integrado incorporan una CPU RISC, memoria ROM, memoria RAM y diferentes
periféricos. Los mismos son esenciales para su programación para la automatización de
procesos eléctricos y mecánicos, como el simple encendido de un bombillo, el
encendido de un motor trifásico, el muestreo de una señal de datos, controlar LCD's,
display matriciales y un sin fin de cosas que tienen aplicaciones hoy en día que los
puedes encontrar desde tu mouse, tu celular, tu horno de microondas, tu televisión,
videocasetera, ordenador, reproductor de música, etc…
Dentro de la gran diversidad que nos ofrece microchip decidimos utilizar el PIC 16F877,
dado que principalmente:
Pose la cantidad de salidas (pines o patas) necesarias para controlar los motores
PAP que seleccionamos, las cuales son muchas.
Es posible aumentar su velocidad con mediante un oscilador.
Es muy común en el mercado por lo que ya poseíamos uno de ellos.
13
Diagrama de Flujo general
INICIO
CASO=0
Girar Derecha // buscarPin_A0_low
CASO=1PIN_A0_high
CASO=0PIN_A0_low
SI
NO
SI
NO
SI
NO
SI
NO
SI
while(TRUE)
DISTANCIA = MIDE_ DISTANCIAS1
CASO=2PIN_A0_high
CASO=3PIN_A0_high
DISTANCIA<10(cm)
DISTANCIA1>100(cm)
DISTANCIA>100(cm)
DISTANCIA1<50(cm)
DISTANCIA1<30(cm)
INT DISTANCIA1INT DISTANCIA2
INT CASO
14
CASO=1
CASO=2
CASO=3
CASO=0
VELOCIDAD=5 (mS)AVANZAR
VELOCIDAD=5 (mS)AVANZAR
Girar a la Derecha//buscar
SI
NO
SI
NO
SI
NO
SI
NO
SI
Default
VELOCIDAD=5 (mS)AVANZAR
Ayuda:
Configuración de bits: 3B39.
Disposición de los pines:
Puerto A: Configuracion Ra0 & Ra1 como salida – OutPut [Led Rojo y verde]
Ra2 como salida – OutPut [Trigger N°1]
Ra3 como entrada – InPut [Echo N°1]
Ra4 como entrada – InPut [Echo N°2]
Ra5 como salida – OutPut [Trigger N°2]
Puerto B: Configuracion, Todos como entrada - InPut [Infrarrojos]
Puerto C: Configuración, Todos como salida – OutPut [Motores]
15
Programa
#include <16F877.h>
#device adc=8
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay(clock=4000000)
//#int_RTCC // Interrupción por desbordamiento
#use standard_io(a)
#use standard_io(b)
#use standard_io(c)
#define enciende output_high
#define apaga output_low
#define parpadea output_toggle
#define entrada input
#define PORTA input_a
#define PORTB input_b
#define PORTC input_c
#define A0 PIN_A0
#define A1 PIN_A1
#define A2 PIN_A2
#define A3 PIN_A3
#define A4 PIN_A4
#define A5 PIN_A5
#define A6 PIN_A6
#define A7 PIN_A7
#define B0 PIN_B0
#define B1 PIN_B1
#define B2 PIN_B2
#define B3 PIN_B3
#define B4 PIN_B4
#define B5 PIN_B5
#define B6 PIN_B6
#define B7 PIN_B7
#define C0 PIN_C0
#define C1 PIN_C1
#define C2 PIN_C2
#define C3 PIN_C3
#define C4 PIN_C4
#define C5 PIN_C5
#define C6 PIN_C6
#define C7 PIN_C7
#define trig pin_a2 // ultrasonico 1
#define echo input(pin_a3)
#define trig2 pin_a5 // ultrasonico 2
#define echo2 input(pin_a4)
//int RegSensores;
int velocidad;
16
int i;
int CASO;
//int sensores_ULTRA;
int16 distancia; //ultrasonico 1
//int16 distancia2; // ultrasonico 2
int16 mide_distanciaS1(void)
int16 centimetros=0;
//pulso de disparo:
output_high(trig);
delay_us(50);
output_low(trig);
//espera flanco de subida por el pin echo
while(echo==0);
//comienza a contar centimetros hasta que pin echo sea cero
while(echo==1)
centimetros++;
delay_us(58);
//demora de seguridad y retorna con el valor de centimetros contados
return(centimetros);
//********************************************************************
void avanzar()
do
for(i=0;i<15;i++) /* para que el mov. sea fluido, y la rueda se mueva 30grados hacia adelante, asi con
las demas_
_funciones de movimiento, la unica que cambia es la de los giros G_D y G_I , bajamos la cant. de
grados_
_para que pueda detectar al oponente sin pasarlo por alto.
*/
output_C(17); // H 0001 H 0001 =17
delay_ms(velocidad);
output_C(85);// H 0101 H 0101 =85
delay_ms(velocidad);
output_C(68);// H 0100 H 0100 =68
delay_ms(velocidad);
output_C(102);// H 0110 H 0110 =102
delay_ms(velocidad);
output_C(34);// H 0010 H 0010 =34
delay_ms(velocidad);
output_C(170);// H 1010 H 1010 =170
delay_ms(velocidad);
output_C(136);// H 1000 H 1000 =136
delay_ms(velocidad);
output_C(153);// H 1001 H 1001 =153
delay_ms(velocidad);
17
distancia=mide_distanciaS1();
while(distancia>120);//revisamos si seguimos teniendo al oponenete delante
//********************************************************************
void avanzar_G_D()
for(i=0;i<15;i++)
//primero giro a la derecha
output_C(145); // A 1001 H 0001 =145
delay_ms(velocidad);
output_C(133);// A 1000 H 0101 =133
delay_ms(velocidad);
output_C(164);// A 1010 H 0100 =164
delay_ms(velocidad);
output_C(38);// A 0010 H 0110 =38
delay_ms(velocidad);
output_C(98);// A 0110 H 0010 =98
delay_ms(velocidad);
output_C(74);// A 0100 H 1010 =74
delay_ms(velocidad);
output_C(88);// A 0101 H 1000 =88
delay_ms(velocidad);
output_C(25);// A 0001 H 1001 =25
delay_ms(velocidad);
for(i=0;i<15;i++)
//segundo avanza
output_C(17); // H 0001 H 0001 =17
delay_ms(velocidad);
output_C(85);// H 0101 H 0101 =85
delay_ms(velocidad);
output_C(68);// H 0100 H 0100 =68
delay_ms(velocidad);
output_C(102);// H 0110 H 0110 =102
delay_ms(velocidad);
output_C(34);// H 0010 H 0010 =34
delay_ms(velocidad);
output_C(170);// H 1010 H 1010 =170
delay_ms(velocidad);
output_C(136);// H 1000 H 1000 =136
delay_ms(velocidad);
18
output_C(153);// H 1001 H 1001 =153
delay_ms(velocidad);
//********************************************************************
void avanzar_G_I()
//primero giro a la izquierda
for(i=0;i<15;i++)
output_C(25); // H 0001 A 1001 25
delay_ms(velocidad);
output_C(88);// H 0101 A 1000 88
delay_ms(velocidad);
output_C(74);// H 0100 A 1010 74
delay_ms(velocidad);
output_C(98);// H 0110 A 0010 98
delay_ms(velocidad);
output_C(38);// H 0010 A 0110 38
delay_ms(velocidad);
output_C(164);// H 1010 A 0100 164
delay_ms(velocidad);
output_C(133);// H 1000 A 0101 133
delay_ms(velocidad);
output_C(145);// H 1001 A 0001 145
delay_ms(velocidad);
//segundo avanza
for(i=0;i<15;i++)
output_C(17); // H 0001 H 0001 =17
delay_ms(velocidad);
output_C(85);// H 0101 H 0101 =85
delay_ms(velocidad);
output_C(68);// H 0100 H 0100 =68
delay_ms(velocidad);
output_C(102);// H 0110 H 0110 =102
delay_ms(velocidad);
output_C(34);// H 0010 H 0010 =34
delay_ms(velocidad);
output_C(170);// H 1010 H 1010 =170
delay_ms(velocidad);
19
output_C(136);// H 1000 H 1000 =136
delay_ms(velocidad);
output_C(153);// H 1001 H 1001 =153
delay_ms(velocidad);
//********************************************************************
void retroceder()
for(i=0;i<15;i++)
output_C(153); // A 1001 A 1001 =153
delay_ms(velocidad);
output_C(136);// A 1000 A 1000 =136
delay_ms(velocidad);
output_C(170);// A 1010 A 1010 =170
delay_ms(velocidad);
output_C(34);// A 0010 A 0010 =34
delay_ms(velocidad);
output_C(102);// A 0110 A 0110 =102
delay_ms(velocidad);
output_C(68);// A 0100 A 0100 =68
delay_ms(velocidad);
output_C(85);// A 0101 A 0101 =85
delay_ms(velocidad);
output_C(17);// A 0001 A 0001 =17
delay_ms(velocidad);
//********************************************************************
void retroceder_G_D()
//primero gira a la derecha
for(i=0;i<15;i++) //15 veces = a 27°(grados)
output_C(145); // A 1001 H 0001 =145
delay_ms(velocidad);
output_C(133);// A 1000 H 0101 =133
delay_ms(velocidad);
output_C(164);// A 1010 H 0100 =164
delay_ms(velocidad);
output_C(38);// A 0010 H 0110 =38
delay_ms(velocidad);
output_C(98);// A 0110 H 0010 =98
delay_ms(velocidad);
output_C(74);// A 0100 H 1010 =74
delay_ms(velocidad);
20
output_C(88);// A 0101 H 1000 =88
delay_ms(velocidad);
output_C(25);// A 0001 H 1001 =25
delay_ms(velocidad);
//segundo Retrocede
for(i=0;i<15;i++)
output_C(153); // A 1001 A 1001 =153
delay_ms(velocidad);
output_C(136);// A 1000 A 1000 =136
delay_ms(velocidad);
output_C(170);// A 1010 A 1010 =170
delay_ms(velocidad);
output_C(34);// A 0010 A 0010 =34
delay_ms(velocidad);
output_C(102);// A 0110 A 0110 =102
delay_ms(velocidad);
output_C(68);// A 0100 A 0100 =68
delay_ms(velocidad);
output_C(85);// A 0101 A 0101 =85
delay_ms(velocidad);
output_C(17);// A 0001 A 0001 =17
delay_ms(velocidad);
//********************************************************************
void retroceder_G_I()
for(i=0;i<15;i++)
output_C(25); // H 0001 A 1001 25
delay_ms(velocidad);
output_C(88);// H 0101 A 1000 88
delay_ms(velocidad);
output_C(74);// H 0100 A 1010 74
delay_ms(velocidad);
output_C(98);// H 0110 A 0010 98
delay_ms(velocidad);
output_C(38);// H 0010 A 0110 38
delay_ms(velocidad);
output_C(164);// H 1010 A 0100 164
delay_ms(velocidad);
output_C(133);// H 1000 A 0101 133
delay_ms(velocidad);
21
output_C(145);// H 1001 A 0001 145
delay_ms(velocidad);
//segundo retroceder
for(i=0;i<15;i++)
output_C(153); // A 1001 A 1001 =153
delay_ms(velocidad);
output_C(136);// A 1000 A 1000 =136
delay_ms(velocidad);
output_C(170);// A 1010 A 1010 =170
delay_ms(velocidad);
output_C(34);// A 0010 A 0010 =34
delay_ms(velocidad);
output_C(102);// A 0110 A 0110 =102
delay_ms(velocidad);
output_C(68);// A 0100 A 0100 =68
delay_ms(velocidad);
output_C(85);// A 0101 A 0101 =85
delay_ms(velocidad);
output_C(17);// A 0001 A 0001 =17
delay_ms(velocidad);
//********************************************************************
void G_D()
for(i=0;i<5;i++) //15 veces = a 27°(grados)
output_C(145); // A 1001 H 0001 =145
delay_ms(velocidad);
output_C(133);// A 1000 H 0101 =133
delay_ms(velocidad);
output_C(164);// A 1010 H 0100 =164
delay_ms(velocidad);
output_C(38);// A 0010 H 0110 =38
delay_ms(velocidad);
output_C(98);// A 0110 H 0010 =98
delay_ms(velocidad);
output_C(74);// A 0100 H 1010 =74
delay_ms(velocidad);
output_C(88);// A 0101 H 1000 =88
delay_ms(velocidad);
output_C(25);// A 0001 H 1001 =25
delay_ms(velocidad);
22
//********************************************************************
void G_I()
for(i=0;i<5;i++)
output_C(25); // H 0001 A 1001 25
delay_ms(velocidad);
output_C(88);// H 0101 A 1000 88
delay_ms(velocidad);
output_C(74);// H 0100 A 1010 74
delay_ms(velocidad);
output_C(98);// H 0110 A 0010 98
delay_ms(velocidad);
output_C(38);// H 0010 A 0110 38
delay_ms(velocidad);
output_C(164);// H 1010 A 0100 164
delay_ms(velocidad);
output_C(133);// H 1000 A 0101 133
delay_ms(velocidad);
output_C(145);// H 1001 A 0001 145
delay_ms(velocidad);
//********************************************************************
/*
RTCC_isr() // del TIMER0 RTCC
enciende(A1);// como prueba de haber entrado a la interrupcion
RegSensores=PORTB();
switch(RegSensores) //casos invertidos para la entrada del smich trigger
case 256 :
enciende(A1);
break;
case 254 :
Retroceder_G_D();
break;
case 252 :
Retroceder_G_D();
break;
case 251 :
Retroceder_G_I();
break;
23
case 249 :
Retroceder_G_I();
break;
case 248 :
Retroceder();
break;
case 246:
Retroceder();
break;
case 245:
Retroceder_G_I();
break;
case 244 :
Retroceder_G_I();
break;
case 243 :
Retroceder_G_I();
break;
case 241 :
Retroceder_G_I();
break;
case 238 :
Retroceder_G_D();
break;
case 237 :
Retroceder_G_D();
break;
case 236 :
Retroceder_G_D();
break;
case 235 :
Retroceder();
break;
case 233:
Retroceder_G_D();
break;
case 232:
Retroceder_G_D();
break;
case 231:
G_D();
break;
case 230:
Avanzar();
break;
24
case 227:
Avanzar();
break;
case 223:
Avanzar_G_D();
break;
case 221:
Avanzar_G_I();
break;
case 219:
Avanzar_G_I();
break;
case 214:
Avanzar_G_I();
break;
case 213:
Avanzar_G_I();
break;
case 207:
Avanzar();
break;
case 203:
Avanzar();
break;
case 190:
Avanzar();
break;
case 189:
Avanzar();
break;
case 187:
Avanzar();
break;
case 183:
Retroceder();
break;
case 182:
Retroceder_G_D();
break;
case 175:
Avanzar();
break;
case 171:
Avanzar();
break;
case 159:
25
Avanzar();
break;
case 157:
Avanzar_G_I();
break;
case 155:
Avanzar();
break;
case 151:
Avanzar();
break;
case 150:
Avanzar_G_D();
break;
case 143:
Avanzar();
break;
case 139:
Avanzar_G_D();
break;
case 127:
Avanzar_G_I();
break;
case 126:
Avanzar();
break;
case 125:
Avanzar_G_D();
break;
case 119:
Avanzar();
break;
case 118:
Avanzar();
break;
case 111:
Avanzar();
break;
case 107:
Avanzar_G_I();
break;
case 105:
Retroceder();
break;
case 95:
Avanzar();
26
break;
case 63:
Avanzar_G_I();
break;
case 55:
Avanzar_G_D();
break;
case 54:
Avanzar_G_D();
break;
case 47:
Avanzar_G_I();
break;
case 43:
Avanzar_G_I();
break;
case 31:
Avanzar();
break;
case 23:
Avanzar_G_D();
break;
case 22:
Avanzar_G_D();
break;
case 15:
Avanzar_G_I();
break;
case 7:
Avanzar();
default:
enciende(A1);
break;
*/
void main()
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
//setup_counters(RTCC_INTERNAL,RTCC_DIV_128);// TIMER0: Clock Interno, Presescaler 128
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
// setup_timer_1(T1_DISABLED); // para una RTCC cada 33.3 milisegundos
27
// setup_timer_2(T2_DISABLED,0,1); // -> 1 Segundo = 30 RTCC
//setup_vref(FALSE);
// enable_interrupts(INT_RTCC); // Habilito Interrupción RTCC
// enable_interrupts(global); // Habilito Interrupciones
// TODO: USER CODE!!
do
enciende(A1);//encendido
delay_ms(4850); //5seg. reglamentarios
apaga(A1); //listo
while (true) // lazo infinito
CASO=0; //reinicio caso
// usamos la funcion para de mide distancia para sacar la cant de cm que esta el objeto enfrente
distancia=mide_distanciaS1(); // ultrasonico 1
if(distancia<120) // si lectura > 120cm entonces no es valida, osea no hay objeto
apaga(A0);
//buscar();
G_D();
//------------------------------------------------------------------------------
else //primero
if(distancia>30)//pregunta si es menor a 20
enciende(A0);
CASO=1;
else //segundo
if(distancia>60)//pregunta si es menor a 50
enciende(A0);
CASO=2;
else //tercero
if(distancia>120)//pregunta si es menor a 170
enciende(A0);
CASO=3;
else //cuarto
if(distancia<120)//pregunta si es mayor a 170
apaga(A0);
CASO=0;
//caso0 del 4to else
//caso3 del 3er else
//caso2 del 2do else
//caso1 del 1er else
//-------------------------------------------------------------------------------
switch(CASO)
case 1: // ATACAR;
velocidad=2;
Avanzar();
break;
case 2: // RAPIDO;
velocidad=2;
28
Avanzar();
break;
case 3: // AVANZAR;
velocidad=2;
Avanzar();
break;
case 0: // BUSCAR;
//buscar();
velocidad=2;
G_D();
break;
default:
//buscar();// BUSCAR;
velocidad=2;
G_D();
break;
// cierra lazo infinito
while(true);
29
Actuadores
Introducción
Esta etapa fue una de las que con más complicaciones tuvimos principalmente con la
elección de los motores.
Existen tres tipos de motores utilizados en los robots sumos:
Motores Paso a Paso
Motores de Corriente Continua
Servo Motores
Al analizar los distintos robot sumo, observamos que la gran mayoría utilizaba servo
motores o motores de continua, sin embargo por las disposiciones de nuestro laboratorio,
selecciónanos los motores paso a paso dado que podríamos obtenerlos de las
impresoras obsoletas.
Al decidirnos por estos motores, empezamos a buscar una etapa de potencia para
poder accionarlos, y gracias a la colaboración de un profesor obtuvimos Drivers de
potencia (SLA7026) para controlar los mismos.
Circuito esquematico
El mismo fue utilizado con el circuito recomendado por el fabricante
30
PCB del circuto
Ubicación
La ubicación de los motores en el base estaría dada de la siguiente forma:
31
Alimentaciones
Por ultimo las alimentaciones con las cuales alimentaremos todo el robot.
Al informarnos sobre los motores y el ruido que introducían al circuito en su arranque,
deducimos que podría ocasionar problemas en el PIC por lo tanto dividimos la
alimentación en dos partes:
Alimentación sensores , PIC y Smich trigger (Baja potencia)
Alimentación Motores (Alta potencia)
La alimentación de baja potencia decidimos utilizar baterías de 9V pero al conectarlo
vimos que la corriente de solo una no era suficiente por lo que utilizamos tres de ellas en
paralelo. Las cuales luego pasarían por un regulador de tensión ( 5 Volt.) para luego
alimentar tanto el micro controlador como los sensores y los smich trigger.
La alimentación de alta potencia fue algo más compleja dado que no debía ser muy
pesada dado por la limitaciones de peso, debían manejar 12 V o mas y entregar altas
corrientes ( 3 A)
Por lo que decidimos utilizar: Dos baterías de 12V 1,2 Amper, una en paralelo a la otra
Diagrama de bloques de conecciones
Baterías 12V
Alta potencia
Baterías 9V
Baja Potencia
Sensores
detectores
de objetos
Sensores de
Ubicación
Placa de control
Motores PAP
Regulador
de tensión
Drivers
In
Out
32
Comentarios a los próximos integrantes
Esta demostrado y comprobado que los motores paso a paso no son una
buena elección para realizar este proyecto dado que fuerza y velocidad no
son acordes a su consumo. Lo ideal es utilizar motores de continua con
reductores, los cuales consumen poco, llegan a manejar velocidades
razonables y gracias a los reductores se logra mayor torque.
El problema de los sensores CNY70 es muy posible que venga por las
resistencias de PULL DOWN que le hacen referencia al SMITHTRIGGER , su
valor es muy pequeño, deverian ser de 4,7 KΩ o 10KΩ
Dejamos todo el puerto D para que pudieran experimentar cualquier tipo
de invención como por ejemplo el uso de fines de carrera (Para detectar el
contacto con el oponente) O el uso de un dip switch (Llave piano) con la
cual se podría señalar de antemano donde se localiza el objetivo.
Ante cualquier consulta nos encontramos a su disposición:
Federico Ruiz: fede1609@hotmail.com
Luca Andres Bastida: luca_a.b@hotmail.es