Proyecto Final · circuito, en donde se muestran las dos posibles formas de conexión, según se...

32
Proyecto Final Robot Sumo Autónomo 2013 Federico Ruiz & Luca Andrés Bastida Escuela Politécnica N 703 01/12/2013

Transcript of Proyecto Final · circuito, en donde se muestran las dos posibles formas de conexión, según se...

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.

10

Ubicación

Fueron ubicados con la siguiente distribución

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.

12

Circuito esquematico

PCB del circuito

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: [email protected]

Luca Andres Bastida: [email protected]