You are on page 1of 68

Universidad Nacional Mayor de San Marcos – Robots Perú

PROYECTO SUMO
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS
ROBOTS PERÚ

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Dedicatoria:
A toda la comunidad
Robotera del Perú.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

ÍNDICE

Página

1. Dominio de la aplicación 5
1.1. Identificación
1.2. Sistema en general (objetivo)
1.3. Generalidades del documento

2. Referencias del Documento


2.1. Especificaciones
6
2.2. Normas
2.3. Otros

3. Exigencia del sistema


3.1. Sistema
3.2. Características 7
3.2.1. Características de la performance (funciones)
3.2.2. Relación entre las funciones
3.2.3. Exigencia sobre el interfaz externo 8
3.2.4. Características físicas 10
3.2.5. Factor de calidad del sistema
3.2.5.1 Fiabilidad
3.2.5.2 Mantenimiento
3.2.5.3 Disponibilidad 11
3.2.6. Condición de ambiente
3.2.7. Movilidad
3.2.8. Componentes y materiales

4. Concepción y Realización 12
4.1. Planificación y ejecución
4.2. Documentación 13
 ELECTRÓNICA
o Alimentación 16
o Lógica
o Potencia 18
o Eagle 20
 MECÁNICA 21
o Forma
 Motores 22
o Estructura Final 23
 PROGRAMACIÓN 25
o Movimiento del Robot-SUMO
 Módulo PWM 26
 Función Motor 28
o Diagrama de Flujo 29
o Código en CCS 31

o Detección del Color Negro y Blanco 33


 Módulo ADC 34

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

 Diagramas del ADC 35


 Uso de los comandos 36
 Diagrama de flujo 37
 Código en CCS 38
o Detección de objetos usando
Sensor Ultrasónico 39
 Diagrama de flujo de detección
de objetos simple 42
 Diagrama de flujo de detección
de objetos con filtro 43
 Código en CCS 44
 Módulo TIMER 44
 Explicación 45
o Giro Inicial 47
o Persecución de Objetos 49
 Principio de Persecución 50
 Diagrama de Flujo de la función Perseguir 51
 Código en CCS 52
o Función BATALLA 53
4.3. Logística 60
4.3.1. Personal
4.3.2. Formación

4.4. Participación 61
 INTERCON 2010
 III KANTUROBOT 2010
 FOINTEC 2010 62
 VILLATRONICA 2010
 COINTEC 2010
 CER 2010
5. Costo 63
6. Agradecimientos 67

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Informe del proyecto: Sumo Thor


1. Dominio de la aplicación

1.1. Identificación

Robótica: Es la ciencia y la tecnología de los robots. Se ocupa del


diseño, manufactura y aplicaciones de los robots. La robótica combina
diversas disciplinas como son: la mecánica, la electrónica, la informática,
la inteligencia artificial y la ingeniería de control.

Automatización: Es un sistema donde se trasfieren tareas de


producción, realizadas habitualmente por operadores humanos a un
conjunto de elementos tecnológicos.

Control: Proceso para asegurar que las actividades reales se ajusten a


las actividades planificadas. Permite mantener a la organización sistema
en buen camino.

1.2. Sistema en general (objetivo)

Se busca tener un robot sumo con un sistema robusto que cumpla con el
reglamento de la categoría. Este sistema debe ser fiable y estable en las
condiciones y ambientes de batalla. Además debe fácil de manipular y
calibrar durante la competencia.

1.3. Generalidades del documento

 Diseño de la placa impresa


 Diseño de la estructura
 Variar la velocidad de los motores
 Reconocimiento de la línea del borde de la plataforma
 Detectar la proximidad de un objeto
 Hacer una interfaz

2. Referencias del Documento

2.1. Especificaciones

 Conocer los dispositivos y componentes electrónicos


 Uso de los datasheets

 Diseñar el layout
 Manejo del programa Eagle

 Diseñar la Mecánica
 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
Universidad Nacional Mayor de San Marcos – Robots Perú

 Saber si hay un objeto dentro de un rango de sensado


 Uso del sensor ultrasónico SRF05

 Comunicarse con la PC
 Uso de Visual Basic 2010

2.2. Normas

 Uso de los datasheets


 Saber la distribución de pines de los integrados
 Saber la configuración y polarización de los componentes
 Conocer los módulos del PIC

 Manejo del programa Eagle


 Conocer las conexiones de los componentes
 Hacer un esquemático del circuito
 Usar componentes superficiales
 Saber las condiciones de diseño
 Usar una sola placa para el control y potencia

Uso de Solidworks
 Tener una mecánica solida
 Tener estabilidad en el movimiento
 Respetar las dimensiones

Uso del PWM


 Programación del PIC
 Uso del timer

Uso del sensor infrarrojo CNY70


 Uso de ADC

Uso del sensor ultrasónico 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

Grabación del pic


 Uso del datasheet del PICkit 2
 Modo de grabación vía ICSP

3. Exigencia del sistema

3.1. Sistema

Diseño de una tarjeta electrónica con el fin de detectar a un oponente e ir


hacia él.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

3.2. Características

3.2.1. Características de la performance (funciones)

 Control del sentido de giro y de la velocidad de los motores


 Detección del color de la superficie
 Medición de distancia hasta 4m
 Medición de distancia hasta una distancia especifica
 Medición del rango dentro de 4m
 Detección de objetos dentro a un rango específico
 Persecución de un objeto
 Selector del sentido del giro inicial
 Selector de inicio de operación
 Lectura de la tensión de la batería
 Comunicación serial

3.2.2. Relación entre las funciones

 Modo Sumo-batalla
 Control del sentido de giro y de la velocidad de los motores
 Detección del color de la superficie
 Detección de objetos dentro a un rango específico con filtro
 Persecución de un objeto
 Selector del sentido del giro inicial
 Selector de inicio de operación

 Modo Rastreador
 Control del sentido de giro y de la velocidad de los motores
 Detección de objetos dentro a un rango específico
 Persecución de un objeto
 Selector de inicio de operación

 Modo seguidor de líneas


 Control del sentido de giro y de la velocidad de los motores
 Detección del color de la superficie
 Selector de inicio de operación

 Modo control desde la PC


 Control del sentido de giro y de la velocidad de los motores
 Detección del color de la superficie
 Medición de distancia hasta 4m
 Medición de distancia hasta una distancia especifica
 Medición del rango dentro de 4m
 Detección de objetos dentro a un rango específico
 Persecución de un objeto
 Selector del sentido del giro inicial
 Selector de inicio de operación
 Lectura de la tensión de la batería
 Comunicación serial

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

3.2.3. Exigencia sobre el interfaz externo

Para una mejor modo de testeo, se creó una interfaz en Visual


Basic 2010. Dicho programa se comunica vía serial (protocolo RS-
232) con el sumo usando un conversor Serial-USB.

Forma de conexión con la


PC.

Icono de programa una vez que se creó su


ejecutable

Esta es la ventana inicial donde se configura la comunicación.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Si el sumo no está conectado o encendido aparecerá una


ventana indicando hay un problema

Ventana para el testeo de los sensores

Ventana para el testeo del modo Sumo-Batalla

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Ventana para el testeo de los motores

3.2.4. Características físicas

 En la implementación de la placa se usaron componentes


superficiales SMD de talla 1206.
 Cuenta con dos pulsadores y un botón para la configurar el
modo Sumo-batalla.
 Tiene un botón de pánico tipo hongo para facilitar el encendido
y apagado del sistema.
 La mecánica 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. Factor de calidad del sistema

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 además de la correcta funcionalidad de los sensores.
Estos problemas son fácilmente encontrados gracias al testeo
mediante el interfaz gráfico.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

3.2.5.3 Disponibilidad

Este proyecto se encuentra disponible en el Instituto de


Investigación de la facultad de Ingeniería Electrónica de la
Universidad Nacional Mayor de San Marcos.

3.2.6. Condición de ambiente

 EL área de combate (dojo) es un círculo de 150cm de diámetro


de color negro con un borde de 5cm de color blanco.
 Que el público y el jurado se encuentre a más de 1m del área
de combate.

3.2.7. Movilidad
Para poder movilizar el robot se tiene que tener la aprobación de
director del instituto de investigación.

3.2.8. Componentes y materiales

 PIC 18F4550  RESISTENCIA de 7.5 KΩ


 L6203 – DRIVER  RESISTENCIA de 5.1 KΩ
 L5973D REGULADOR CMS  RESISTENCIA de 10 KΩ
 SENSOR SRF05  RESISTENCIA de 220 Ω
 SENSOR CNY70  RESISTENCIA de 10 Ω
 RESISTENCIA de 4.7KΩ  RESISTENCIA de 30 Ω
 RESISTENCIA de 2.5 KΩ  CONDENSADOR de 330uF
 CONDENSADOR de 10uF  CONECTORES DE 2 PARA
 CONDENSADOR de 22nF CNY70
 CONDENSADOR de 220pF  CABLE USB/SERIAL
 CONDENSADOR de 0.1uF  MOTOR DC
 CONDENSADOR de 15nF  LLANTAS DE CAUCHO
 CONDENSADOR de 15pF  BALL CASTER
 CONDENSADOR de 220nF  BATERÍA 12V 1.3AH
 DIODO RECTIFICADOR  BOTON DE PANICO
 DIODO LED ROJO  BOTONES
 DIODO LED VERDE  PULSADORES
 DIODO LED AMARILLO  CABLE BIPOLAR
 BOBINA de 15uH  ESTAÑO
 CRISTAL OSCILADOR de 20M  ARCO DE SIERRA MACHO
 MOLEX MACHO DE 2  CUCHILLA
 MOLEX MACHO DE 4  ACRILICO
 MOLEX MACHO DE 5  ALUMINIO TIPO L
 MOLEX HEMBRA DE 2  BISAGRA
 MOLEX HEMBRA DE 4  RAMPA DE FIERRO
 MOLEX HEMBRA DE 5  JUEGO DE TORNILLOS Y
 BASE MOLEX HEMBRA DE 5 TUERCAS
 BASE MOLEX MACHO DE 5  CINTA AISLANTE
 ALAMBRE PARA MOLEX  SILICONA

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

4. Concepción y Realización

4.1. Planificación y ejecución

May Jun Jul Ago Set Oct Nov Dic Ene Feb Mar Abri

Maqueta

Diseño de la
mecánica
Diseño de la
placa

Implementación

Programación

Interfaz

Planificado

Ejecutado

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

4.2. Documentación

ELECTRÓNICA
Para la parte de la electrónica en este proyecto usamos componentes
superficiales en una placa impresa que diseñamos en el Cad Soft Eagle Layout
Designer 5.6.

Una de las principales razones para usar este tipo de componentes fue el
ahorro de espacio (ya que son más pequeños) lo que nos permitiría tener más libertad
al momento de diseñar la mecánica. Además, al ser muchos de estos componentes
también de uso industrial existe una mayor confianza en su desempeño y menos
probabilidad de que fallen en condiciones extremas como el frio y la altura.

Dentro del diseño de la placa, la principal preocupación fue la configuración de


los 3 integrados utilizados; eso será explicado a continuación:

Alimentación
Para alimentar todo el módulo usamos una batería 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 demás integrados.

Lo que estábamos buscando era una forma de reducir el voltaje, sin que se
produjera una pérdida 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

El regulador consume 200mA y entrega los 100mA necesarios, habiendo reducido el


voltaje de 12 a 5 v. Hacemos los cálculos:

Sabemos que: 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 más
eficiente.

El regulador de voltaje, usado para la alimentación de los componentes lógicos de la


placa fue el integrado L5973D.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Algunas de sus principales características

 El regulador L5973D es capaz de entregar hasta 2.5 A con voltajes de salida que
varían entre 1.235 a 35v. Trabajando con voltajes de entrada entre los 4.4 y 35v.
 Cuenta con protección contra corto circuito.
 Presenta un sistema de retroalimentación que ayuda a alcanzar una eficiencia del
90%.

El L5973D se presenta como un integrado de 8 pines:

Encapsulado D
Función de los pines:

Nro. Nombre Descripción


1 OUT Salida del regulador
2 SYNC Es el pin de sincronización
Una señal lógica deshabilita el dispositivo. Con INH mas alto
que 2.2v el dispositivo está apagado y con INH más bajo que
3 INH
0.8v el dispositivo esta prendido.
Si INH no es usado, el pin debe ir a tierra
4 COMP Usado para compensar la frecuencia
Si conectamos el voltaje de salida directamente a este pin, el
5 FB voltaje de salida resultante es de 1.235V. Para voltajes de
salida más altos se requiere de un divisor externo resistivo
6 VREF Voltaje de referencia de 3.3V.
7 GND Tierra
8 VCC Voltaje DC de entrada

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

La función de los pines 1 y 8, como lo dice en la tabla, son de entrada y salida


respectivamente. La entrada es donde conectamos la batería de 12v.

El pin 2 sólo es utilizado cuando queremos sincronizar 2 o más dispositivos con el


regulador, en este caso no necesitamos usarlo, así que lo dejamos abierto.

Conectamos el pin 3 a tierra, ya que no tenemos razón para estar habilitando y


deshabilitando el regulador mientras lo utilizamos.

El pin 5 es muy importante, ya que nos ayuda a definir el valor del voltaje de salida.
Para esto usamos la siguiente fórmula:

Donde R1 es la resistencia entre el voltaje de salida y el pin 5 y R2 es la resistencia


entre el pin 5 y tierra. Si sabemos por la tabla que el valor de es 1.235V y que
nuestro voltaje de salida deseado es 5v, reemplazando en la fórmula:

→ →

Entonces obtenemos la relación entre R1 y R2:

Escogemos valores para R1 y R2 que se acerquen a los usados en los circuitos


modelos en la hoja de datos (que veremos más adelante) y que también cumplan la
condición ya establecida.

Finalmente elegimos los valores de 7.5KΩ para R1 y 2.5KΩ para R2.

El pin 6 lo dejamos abierto, el voltaje de referencia solo nos sirve como un indicador de
que el regulador está funcionando correctamente.

En la hoja de propiedades se plantean diferentes formas de usar el regulador, variando


tanto el voltaje de salida como el de entrada. Veamos algunos de estos posibles
circuitos:

Este es el circuito básico de demostración donde el voltaje de entrada puede variar de


4.4v a 25v y el de salida desde 1.235v hasta el valor de V CC.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Hay más ejemplos, pero este es el circuito que vamos a estudiar para realizar nuestro
propio diseño.

Ya hemos calculado los valores de R1 y R2. Es así que obtenemos una configuración
que trabaja de la forma deseada, que usa como voltaje de entrada 12v y nos entrega
5v de manera eficiente.

Configuración Final de Alimentación

Lógica
En lo correspondiente a la parte lógica, 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 analíticas como digitales, así como la opción de
usar los dos canales disponibles para el PWM.

Distribución de pines

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Las parejas de pines 6-7, 28-29 y 21-22 van conectados uno a tierra y el otro a fuente
(VSS= tierra y VDD=fuente) y entre ellos se coloca un condensador.

El pin 18, conocido como el Master Clear funciona como un interruptor, si se encuentra
a 0 el pic se resetea. La configuración de conexión es la siguiente:

El diodo ayuda a descargar rápidamente el condensador


cuando se apaga la fuente.

Se recomienda una R<40kΩ y una R1>1Kω

Entre los pines 30(OSC1) y 31(OSC2) se conecta el cristal oscilador. La configuración


de esta conexión está en la hoja de propiedades:

También se nos da una tabla donde se


exponen los valores definidos de los
condensadores para cada valor particular del
cristal oscilador.

Para nuestro caso, que usamos un cristal de


20M, los condensadores son de 15pF.

Usamos dos pines analógicos 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 comunicación serial y
ambos pines de PWM (35 y 36).

Teniendo en cuenta todos estos puntos, armamos la configuración final del PIC:

Configuración Final del Pic

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Potencia
Con respecto a la parte de potencia, usamos el puente H L6203 MULTIWATT para
controlar 2 motores DC que veremos después.

Algunas de sus principales características:

 La corriente máxima que bota es de 4A y la corriente de pico 5A debido a que el


motor que se va utilizar es el PGHM-01 de 12vdc-20:1-300rpm, dicho motor utiliza
una corriente máxima de 4A.
 Este puente H tiene un feedback (retroalimentación) de la corriente de control del
motor.
 Tiene la opción de colocar un disipador de temperatura.

Encapsulado Distribución de pines

Función de los pines:

Nro. Nombre Descripción


1 OUT2 Salida de la segunda mitad del puente
2 VS Fuente de voltaje
3 OUT1 Salida de la primera mitad del puente
Un capacitor boostrap conectado a este pin asegura un
4 BOOT1
funcionamiento eficiente del transistor DMOS superior
5 IN1 Entrada digital del controlador del motor
6 GND Tierra común
7 IN2 Entrada digital del controlador del motor
Un capacitor boostrap conectado a este pin asegura un
8 BOOT2
funcionamiento eficiente del transistor DMOS superior
Voltaje interno de referencia. Se recomienda usar un capacitor entre
9 Vref
este pin y tierra.
Una resistencia Rsense conectada a este pin proporciona
10 SENSE
retroalimentación que nos permite controlar la corriente del motor
Cuando se tiene una entrada lógica alta en este pin los transistores
11 ENABLE DMOS son habilitados para ser manejados selectivamente por IN1 e
IN2

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Conectamos los pines 5 y 7 a una salida del pic cada uno. Es por medio de estos
pines que el pic controla al puente h.

El pin 6 es conectado a tierra.

Se recomienda usar un capacitor entre el pin 9 y tierra. Un valor de 0.22nF es


suficiente para la mayoría de las aplicaciones

En la hoja de propiedades se plantean diferentes formas de usar el puente h.

En este circuito se usa el integrado para el control bidireccional de un motor DC, de


este modelo sacamos la configuración de los pines 1, 3, 4 y 8, es decir, los valores de
los condensadores y resistencias.

Teniendo en cuenta todo esto, planteamos una configuración final:

Configuración Final del Puente H

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Eagle
Eagle es un programa que nos permite diseñar placas. Para diseñar una nueva placa
primero creamos un esquema de la misma y luego diseñamos el circuito impreso.

Ya tenemos la configuración de cada uno de los integrados así que armamos el


esquema uniendo los componentes para formar el circuito final.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

MECÁNICA
La estructura del modulo sumo está compuesta en su mayoría por un armazón de
aluminio, que forma un esqueleto solido sin ser muy pesado

Forma
Cuando comenzamos con el diseño de este proyecto uno de los primeros temas de
discusión fue la forma que debería tener, queríamos una distribución adecuada del
peso que a la vez nos permitiera cumplir la función principal de un robot sumo que es
empujar a su contrincante fuera del dojo.

Concordamos que una forma básica sería lo mejor:

Una rampa adelante, lo más pegada al piso y con menos inclinación posible. Y el resto
de la estructura en forma de cubo.

Para que la estructura sea estable se construyo primero un esqueleto que luego sería
cubierto con placas de aluminio:

Esqueleto
1er prototipo de Thor

Los motores, las baterías y la placa se acomodan dentro del cuerpo formando pisos,
con la placa en el piso superior para tener acceso fácil a ella.

En la parte externa superior de la estructura fijamos un botón grande que nos permite
apagar el robot sin necesidad de abrirlo o desconectar la placa.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

En el primer prototipo del modulo los sensores ultrasonidos se encontraban en la parte


frontal, sobre las baterías, que a su vez estaban frente a los motores en la base de la
estructura.

También cambiamos la rampa que planeábamos usar en la parte de adelante por una
pala:

1er prototipo de Thor


completado

MOTORES

Usamos dos motores DC de 12v, 300rpm y una reducción de 20:1, como podemos
observar en la figura:

Como parte de la estructura del sumo, estos motores se encontraban en la parte


posterior y en un mismo eje

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Estructura Final
Después de nuestra primera participación en un concurso decidimos hacer una nueva
estructura, más estable y que contenga nuestra idea original de usar una rampa.

Agregamos dos ruedas de apoyo adelante y retrocedimos la posición de los motores


para que se encuentren lo mas pegados a la pared posterior posible.

4 puntos de
apoyo

SOLIDWORKS

Estructura final del módulo robot sumo: Thor

Solidworks es un programa de diseño para modelado mecánico. El programa permite


modelar piezas y conjuntos y extraer de ellos tanto planos como otro tipo de
información necesaria para la producción.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Empezamos el diseño creando las piezas y luego realizando el ensamblaje, es


importante tener en cuenta las medidas de cada pieza para que éstas encajen
correctamente al momento del ensamblaje.

Para realizar un ensamblaje primero debemos tener las piezas, así que empezamos
con eso y luego las ensamblamos:

Diseño Final de la estructura del Thor

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

PROGRAMACIÓN
La programación fue desarrollada en lenguaje C con el compilador CCS usando el
entorno de MPLAB. Para un mejor entendimiento del código se dividió en función a los
módulos usados dentro del PIC.

MOVIMIENTO DEL ROBOT-SUMO


Este robot utiliza dos motores DC (PGHM-01) de 300prm alimentado por 12v.
Estos motores se encargan de los movimientos del robot (avanzar, retroceder, girar
derecha y girar izquierda). Estos movimientos consisten en la conmutación de ambos
motores que son controlados por el pic a través del puente H de la siguiente forma:

Avanzar Retroceder Girar Derecha Girar Izquierda


IN1_MOTOR1 1 0 1 0
IN2_MOTOR2 0 1 0 1
IN1_MOTOR1 1 0 0 1
IN2_MOTOR2 0 1 1 0
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 más no la velocidad del mismo. Para poder controlar la velocidad de los motores
utilizaremos el módulo PWM.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Módulo PWM

La modulación por ancho de pulsos (también conocida como PWM, siglas en


inglés de Pulse-Width Modulation) de una fuente de energía es una técnica en la que
se modifica el ciclo de trabajo de una señal periódica, para controlar la cantidad de
energía que se envía a una carga. Este principio fue usado en el proyecto para poder
variar fácilmente 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 daría el mismo resultado que prender y apagar el puente H rápidamente,
reduciendo así la velocidad.

Para poder utilizar el modulo PWM del pic primero hay que configurarlo, para
trabajar de una manera más ordenada crearemos una función llamada initPWM() para
configurar el PWM.

void initPWM()
{
setup_ccp1(CCP_PWM); // Definimos la primera salida de PWM para el motor 1
setup_ccp2(CCP_PWM); // Definimos la primera salida de PWM para el motor 2

//******** configuración del periodo PR2 ***********


setup_timer_2(T2_DIV_BY_1 ,255, 1); // Se define por defecto así: (Prescaler, PR2, 1)

// El tiempo de cada ciclo, PERIODO (seg) = (1/clock)*4*T2div*(period+1)


// En este programa clock=20000000 y el periodo=255, ***PR2=255***
// Para diferentes cycle el tiempo es:
// (1/20000000)*4*1*256 = 51.2 us or 19.5 KHz
// (1/20000000)*4*4*256 = 204.8 us or 4.9 KHz
// (1/20000000)*4*16*256 = 819.2 us or 1.22 KHz

// Usaremos el comando set_pwm1_duty(valor de 0 a 255) para cambiar la velocidad


set_pwm1_duty(0); // inicializamos con velocidad 0 el motor 1
set_pwm2_duty(0); // inicializamos con velocidad 0 el motor 2
}

En la función initPWM utilizamos el módulo TIMER_2 ya que el PWM necesita


una frecuencia de trabajo. Además según el datasheet del pic 18F4550 se debe utilizar
el TIMER_2 cuando se usa la salida CPP como PWM.
La frecuencia es muy importante en un PWM ya que mientras la frecuencia es mayor
obtendremos mayor fuerza de los motores lo cual es favorable para nuestro propósito.
Por ese motivo escogimos esta configuración:

setup_timer_2(T2_DIV_BY_1, 255, 1)

Prescalar: El periodo
es dividido entre éste
número para obtener
diferentes periodos: PR2: Es el máximo Se asigna
i.e. ancho de pulso: por defecto
T2_DIV_BY_1 255  100% el numero 1
T2_DIV_BY_4
T2_DIV_BY_16

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Para poder asignar controlar el porcentaje de velocidad se usara el comando:

set_pwm1_duty(valor desde 0 a 255);

Este valor representa el ancho de


pulso del PR2 que estará en alto

set_pwm1_duty(127);

set_pwm1_duty(255);

TPR2 Teórico=
TPR2 simulado=

TDuty Cycle Teórico=


TDuty Cycle simulado=

TDuty Cycle Teórico=


TDuty Cycle ORC =

TPR2 Teórico=
TPR2 simulado=

TDuty Cycle Teórico=


TDuty Cycle simulado=

TDuty Cycle Teórico=


TDuty Cycle simulado=

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Según lo observado en las gráficas es posible variar la velocidad de los


motores enviando pulsos por el PWM. Dichos anchos de pulsos varían conforme al
valor ingresado en el comando set_pwm1_duty(valor).

Hasta el momento ya podemos controlar la dirección del movimiento como la


velocidad de los motores. Ahora veremos un algoritmo que une estos dos puntos para
poder controlar la dirección y la velocidad con un solo parámetro.

Función Motor

motor(velocidad)
Esta función se encarga de enviar el sentido y la velocidad a los motores
utilizando un solo número para representar ambos datos. La función motor(velocidad)
requiere que se le asigne un valor de -100 a 100, este número representa el
porcentaje de velocidad, además si el número 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 lógica observaremos la siguiente grafica:

Porcentaje de la Valor de Duty Sentido de giro


Velocidad del motor Cycle del PWM del motor

motor(velocidad*) velocidad%

motor(50) 50 %

motor(-50) 50 %

motor(100) 100 %

motor(0) 0%
stop
Tabla 2

Como podemos observar es muy sencillo controlar el sentido y la velocidad del motor
haciendo uso de esta función. Ahora veremos el algoritmo de esta función en un
diagrama de flujo y luego en código.

* velocidad es una variable que representa el porcentaje de velocidad del motor.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Diagrama de flujo INICIO

motor(velocidad)

valor = velocidad&0b10000000

SI NO
Si valor = 128

Girar en sentido anti horario


Girar en sentido horario
velocidad=-velocidad;

a=2.55*velocidad;
set_pwm1_duty(a);

FIN

Explicación:

Llamamos a la función motor(velocidad), donde velocidad es una


motor(velocidad)
variable que representa el porcentaje de velocidad del motor.

Según lo analizado, el sentido de giro del motor depende del signo del número
dentro de la función motor(velocidad). Para poder determinar el signo analizaremos el
número como binario. La variable velocidad es un int por lo tanto puede tomar valores
desde -127 hasta 127.

int =8 bits __ __ __ __ __ __ __ __

Este bit indica el signo: Estos bits generan los números:


0: Positivo
1: Negativo

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

i.e.
 -1 == 1111 1111
 1 == 0000 0000
 -2 == 1111 1110
 2 == 0000 0001
 -3 == 1111 110
 3 == 0000 0010

Para determinar si un número es positivo o negativo


valor = velocidad&0b10000000 tenemos que analizar el primer bit de izquierda a
derecha. Este bit lo obtenemos de la siguiente
manera:

valor = velocidad&0b10000000

Ejemplo:

Si velocidad = 50 = 0b00110010

0 0 1 1 0 0 1 0
&
1 0 0 0 0 0 0 0
___________________________
Valor = 0 0 0 0 0 0 0 0 =0

Si velocidad = -50 = 0b11001110

1 1 0 0 1 1 1 0
&
1 0 0 0 0 0 0 0
___________________________
Valor = 1 0 0 0 0 0 0 0 = 128

De esta forma podemos obtener el primer bit de un número positivo o negativo. Si


Valor es igual a 0 el número es positivo, si valor es igual a 128 el número será
negativo.

Si valor = 128 Preguntamos si la variable valor es igual a 128


(número negativo).

SI

Girar en sentido anti horario Si la variable valor es igual a 128 (negativo) entonces
giramos los motores en sentido anti horario.
velocidad= -1*velocidad; Ahora convertiremos la variable velocidad (número
negativo) a un número positivo multiplicándolo por -1.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Girar en sentido horario Si la variable valor es igual a 0 (positivo) entonces


giramos los motores en sentido horario.

Hasta este punto el signo de la variable velocidad sólo se usó para determinar el
sentido de giro del motor. Además esta variable ya es positiva para todos los casos ya
que se multiplicó por -1 cuando era negativa.
Ahora usaremos el módulo de la variable velocidad para asignar el valor del porcentaje
de la velocidad del motor en el PWM.

a=2.55*velocidad; Como la variable velocidad representa el porcentaje


set_pwm1_duty(a); de la velocidad es un número entre 0 y 100%. Pero
hemos configurado el PR2 con 255.
Entonces se debe hacer un regla de tres simple para asignar el valor en el comando:
set_pwm1_duty(valor entre 0 y 255);

% de velocidad Duty Cycle

100 255
velocidad a

Código en CCS
void motor(int velocidad ) // Definimos la función que tendrá la entrada de un parámetro
{
unsigned int valor,a; // Definimos la variable valor como un entero sin signo (0 a 255)

valor=velocidad&0b10000000; // Obtenemos el primer bit del número para saber si positivo o


// negativo
if(valor==128) // Si la variable valor es igual a 128 (significa que el número es
// negativo)
{
output_low(IN1_MOTOR1);
// Giramos el motor hacia atrás
output_high(IN2_MOTOR1);

velocidad=-velocidad; // Multiplicamos la variable velocidad por -1 para que sea positiva


}
else // Si la variable valor es diferente a 128 (significa que el número es
// positivo)
{
output_low(IN2_MOTOR1);
// Giramos el motor hacia adelante
output_high(IN1_MOTOR1);
}
a=2.55*velocidad; // Hacemos de conversión de % de velocidad a Duty Cycle

set_pwm1_duty(a); // Asignamos el valor de Duty Cycle al comando del PWM

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Esta función la extrapolaremos para dos motores

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);
}

Ahora crearemos una función motores para controlar dos motores usando la función
anterior.

void MOTORES(int velocidad1, int velocidad2) // definimos la función que tendrá la entrada de dos parámetros
{
motor1(velocidad1); // asignamos la variable velocidad1 al primer motor
motor2(velocidad2); // asignamos la variable velocidad2 al segundo motor
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

DETECCIÓN DEL COLOR NEGRO Y BLANCO


La detección del color negro y blanco es fundamental en la categoría robot sumo para
no salirse del dojo. Para este propósito usamos el sensor infrarrojo CNY70.

(a) (b) (c)

La figura (a) es el encapsulado del sensor CNY70.


Este sensor tiene un led infrarrojo y un fototransistor (figura b).
En la figura (c) observamos la polarización del led y fototransistor. Además de la
configuración de emisor común del fototransistor.
Este sensor funciona de la siguiente manera al estar sobre una superficie negra y
blanca en un caso ideal.

Superficie negra

En este caso la superficie es negra y


como sabemos el color negro
absorbe la luz, entonces el
fototransistor no es excitado.
De acuerdo a la figura (c) si la base
del fototransistor no es excitada la
salida es 1 lógico.

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 lógico.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Como ya habíamos señalado los casos anteriores son para casos ideales teniendo en
cuenta que:

 Los sensores nunca son iguales.


 La luminosidad es diferente en distintos lugares.
 El color negro tiene varios matices dependiendo del material del que está
hecho.
 Etc.

Por tanto la salida no será 1logico (5 volts) ni 0 lógico (0 volts). Esto significa que la
salida será analógica con tensiones entre 0 y 5 volts.

En nuestro caso usamos el módulo ADC del pic 18f4550 para leer la tensión
analógica que obtenemos del sensor CNY70 y convertirla en digital dentro del pic. Esto
lo hacemos con el propósito de hacer un comparador dentro del pic.

Módulo ADC
Este módulo ADC consiste en la representación de un voltaje analógico en un
valor digital. Quiere decir que podemos saber el valor de la tensión analógica 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 función de inicialización y configuración del
módulo ADC.

void initADC()
{ // Configuramos el ADC
SETUP_ADC(ADC_CLOCK_INTERNAL); // Usaremos el clock interno
setup_adc_ports(AN0_TO_AN9_ANALOG); // Habilitamos los pines que usaremos como entradas
// analógicas, en este caso del AN0 al AN9
}

Además tenemos que configurar la resolución del ADC en el .h . En nuestro caso


usaremos una resolución de 10 bits.

#device adc=10

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Una vez que el módulo ADC ha sido configurado está listo para ser usado teniendo en
cuenta lo siguiente:

 El módulo ADC solo puede ser usado por un pin analógico a la vez.
 El valor de la tensión analógica será representada de 0 a 1024 porque estamos
usando una resolución de 10 bits.
 Si un pin está siendo usado como analógico ya no será I/O digital y viceversa.
 El pic necesita tener un VREF+ y VREF- para poder tener una referencia de un
máximo y mínimo valor de voltaje, en nuestro caso consideramos lo siguiente:
VREF+ = 5 volts y VREF- = 0 volts.

Diagrama de bloques del ADC

Como se puede observar solo se puede hacer una lectura a la vez teniendo en
cuantas los voltajes de referencia y la resolución de 10 bits. Ahora veremos los dos
comandos usados para la lectura del módulo ADC.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Uso de los comandos

SET_ADC_CHANNEL(0);

Colocamos el número
del pin analógico en el
cual queremos hacer
la lectura.

Este comando sirve para establecer que pin analógico hará la lectura.
Ejemplo.

SET_ADC_CHANNEL(0); Estamos estableciendo el AN0 cono pin de lectura


SET_ADC_CHANNEL(4); Estamos estableciendo el AN4 cono pin de lectura
SET_ADC_CHANNEL(9); Estamos estableciendo el AN9 cono pin de lectura

READ_ADC()
Una vez que se ha establecido que pin analógico hará la lectura se usará este
comando para hacer la lectura propiamente dicha. Esta función es propia del
compilador y su característica 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 tensión


de entrada.

Ejemplo

Considerando VREF+ = 5 volts y VREF- = 0 volts.

 Si la tensión de entrada es 5 volts entonces la variable lectura será 1024


 Si la tensión de entrada es 0 volts entonces la variable lectura será 0
 Si la tensión de entrada es 2.5 volts entonces la variable lectura será 512
 Si la tensión de entrada es 1 volts entonces la variable lectura será 205

Estos son los valores obtenidos al hacer la lectura por ADC, pero aun no son los
valores de la tensión analógica leída. Para obtener ese valor tenemos que hacer una
transformación
Analizando estos valores podemos hallar una relación con una regla de 3 simple.

VREF+

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Ahora veremos el proceso de detección del color de la superficie

Diagrama de Flujo

INICIO

Establecemos que
pin analógico hará
la lectura

Hacemos la lectura analógica a digital

Transformamos el valor digital


(entre 0 y 1024) a tensión
VREF+

V F
Si voltaje <umbral

Color Negro Color Blanco

FIN

La variable umbral que encontramos en el condicional es la tensión umbral. Esta


tensión es la tensión límite entre las tensiones que representan el color blanco y negro.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Código en CCS
#define VREF 5
int I;

void infrarrojo(float umbral)


{
float voltaje; // Definimos la variable como real
long lectura; // Definimos la variable como entero largo
SET_ADC_CHANNEL(1); // Establecemos que el pin analógico AN1 hará la lectura
lectura=READ_ADC(); // Hacemos la lectura
voltaje=(VREF/1024.0)*(float)(lectura); // Hacemos la transformación
if(voltaje>=umbral) // Preguntamos si voltaje es mayor a la tensión umbral

{
I=1; // Representa que el color es negro
}
else
{
I=0; // Representa que el color es blanco
}
}

Para utilizar esta función lo haremos de la siguiente manera:

infrarrojo(4); // Significa que la tensión umbral es 4 volts

Podemos ingresar cualquier valor entre 0 y 5 volts.

Ahora podemos extrapolar esta función para dos sensores cny70.

void infrarrojos(float umbral)


{
float cny70_der,cny70_izq;
long lectura;

SET_ADC_CHANNEL(0); // seleccionamos canal 0 PARA EL CNY70(der)


lectura=READ_ADC();
cny70_der =(VREF/1024.0)*(float)(lectura);

SET_ADC_CHANNEL(1); // seleccionamos canal 1 PARA EL CNY70(izq)


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
Universidad Nacional Mayor de San Marcos – Robots Perú

DETECCIÓN DE OBJETOS USANDO SENSOR ULTRASÓNICO

En esta sección abordaremos al detalle el método usado para detectar objetivos a una
determinada distancia. Para este fin usaremos el sensor ultrasónico SRF05.

Este sensor tiene 4 pines para su conexión: 5V, GND, ECO y DISPARO. De estos
pines los más 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
Universidad Nacional Mayor de San Marcos – Robots Perú

Del DIAGRAMA DE TIEMPOS podemos observar que después que se envió el pulso
de inicio por el pin DISPARO el pin ECO se pondrá a 1 durante la espera. Si
detecta algún objeto en ese instante el pin ECO se colocará a 0.

Ese comportamiento del pin ECO se muestra en las siguientes graficas de ancho de
pulso tomadas con el osciloscopio para diferentes distancias.

Hasta este punto no hemos mencionado como calcular la distancia, pero para esta
aplicación 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
Universidad Nacional Mayor de San Marcos – Robots Perú

Para esta aplicación es lo mismo que el objeto se encuentre en cualquiera de los


puntos azules ya que nuestro objetivo es saber si hay o no un objeto dentro de esa
distancia.

Ahora veremos cómo saber si hay o no un objeto dentro del rango. Para esto
usaremos el tiempo de espera como referencia. Calcularemos cual es el tiempo que se
demoraría la onda en llegar al objeto y regresar.

Por cinemática:

La velocidad del sonido es 340 m/s.


Hacemos la conversión de unidades.
Obtenemos una relación entre el tiempo de
espera y la distancia.

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
Universidad Nacional Mayor de San Marcos – Robots Perú

Diagrama de flujo de detección de objetos simple

INICIO

Calculamos el tiempo de espera


Distancia =70 cm

Cada 30ms

Mandar pulso de
10μs por el pin
DISPARO

Esperamos hasta que el pin ECO se ponga en


1 para empezar la lectura

Hacemos un retardo de
segundos
En esta caso

V F
Si en pin ECO = 1

NO SE DETECTO OBJETO SE DETECTO OBJETO


DENTRO DEL RANGO DENTRO DEL RANGO
En este caso 70cm En este caso 70cm

FIN

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Diagrama de flujo de detección de objetos con filtro

INICIO

Calculamos el tiempo de espera


Distancia =70 cm

Cada 30ms

Mandar pulso de
10μs por el pin
DISPARO

Esperamos hasta que el pin ECO se ponga en


1 para empezar la lectura

Hacemos un retardo de
segundos
En esta caso

F V
Si en pin ECO = 0

No detectó contador=contador+1
contador=0
U=0
V F
Si contador=2

Detecto objeto
U=1
contador=0

FIN

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

En este diagrama de flujo lo que se hace es asegurarnos de que encontró un objeto.


Esto lo hacemos con el fin de evitar el ruido y otras variables. Para que podamos
asegurar que hay un objeto en ese rango cada vez que supuestamente encuentre un
objeto tendrá que validarlo con una segunda lectura.

Código en CCS

Primero crearemos una función para mandar el pulso de 10 s al pin DISPARO.

void PULSO()
{
output_high(disparo); // Ponemos a 1 el pin DISPARO
delay_us(10); // Hacemos un retardo de 10μs
output_low(disparo); // Ponemos a 0 el pin DISPARO
}

Ahora crearemos la función de detección de objetos con filtro a una determinada


distancia

void distancia_filtro()
{
if(!input(eco)) // Si el pin ECO esta en 0
{
contador++; // Aumentamos en uno la variable contador
if(contador==2) // Si contador es igual a 2
{
U=1; // Aseguramos que encontró un objeto
contador=0; // Inicializamos la variable contador
}
}
else // Si el pin ECO esta en 1
{
contador=0; // Inicializamos la variable contador
U=0; // Aseguramos que no encontró ningún objeto
}
}

Según el diagrama de flujo el proceso de lectura se hará cada 30ms. Para este
propósito usaremos el modulo TIMER0 del pic 18F4550.

Módulo TIMER
El TIMER es un contador interno del pic el cual se puede configurar para que cada
cierto tiempo realice una acción. Para esta aplicación haremos que cada 30ms haga la
lectura de los sensores ultrasonidos para detectar objetos.

Primero crearemos la función 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); // Habilitamos interrupciones
enable_interrupts(GLOBAL); // Habilitamos el interruptor global
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Además en el .h tenemos que establecer que usaremos 16 bits.

#define RTCC_16_BIT 0x00

Explicación

SETUP_TIMER_0(T0_INTERNAL | T0_DIV_256);

Escogemos que clock Prescalar: El periodo


queremos usar es dividido entre éste
número 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

Para establecer el tiempo de interrupción del TIMER0 se usa la siguiente fórmula.

Donde:

fosc=Frecuencia del oscilador, en este caso será el oscilador de 20MHz

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Ejemplo
Para establecer el periodo de 30ms del timer0

Despejando:

Entonces:

Por lo tanto seteamos el comando:

set_timer0(64950);

Finalmente crearemos la función interrupción para realizar la lectura cada 30ms. Cabe
resaltar que la variable tiempo_espera será asignada en una función posterior.

#int_timer0
void Interrupcion()
{
PULSO(); // Mandamos el pulso de 10μs para iniciar una nueva lectura
while(!input(eco)); // Esperamos que el pic eco esté en 1
delay_us(tiempo_espera); // Hacemos un retardo usando el tiempo de espera
distancia_filtro(); // Llamamos a la función de lectura explicada anteriormente
set_timer0(64950);
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Las funciones explicadas en esta sección se pueden extrapolar para el uso de dos
sensores.

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;
}
}

GIRO INICIAL
Según las reglas de la categoría 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 categoría. Entonces al comienzo hay que girar en el sentido que
veamos primero al oponente.

Por ejemplo si estamos esta posición:

Giraremos a la derecha
Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

POSICIONES DE INICIO
 Frente a frente

 De costado hacia la izquierda

 De costado hacia la derecha

 De espaldas

Debido a que son al menos 3 posiciones diferentes (cuando es de espaldas podemos


girar a la derecha o izquierda) hemos usado 2 pulsadores para establecer el giro
inicial.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Además de tener dos pulsadores para el giro inicial también se necesita tener un botón
para empezar a combatir.

Crearemos una función donde se escogerá el sentido del giro y si se empieza a


combatir.

void botones()
{
if(input(pulsador_derecha)) // Si presionamos el pulsador de la derecha (azul)
{
giro=1; // Esta variable representa el giro a la derecha
}

if(input(pulsador_izquierda)) // Si presionamos el pulsador de la izquierda (amarillo)


{
giro=2; // Esta variable representa el giro a la izquierda
}

if(input(boton_batalla)) // Si presionamos el botón del centro (negro)


{
batalla(70); // Esta función la explicaremos más adelante pero significa empezar a
// combatir
}

Si no presionamos ningún pulsador de giro el sumo empezará avanzando.

PERSECUCIÓN DE OBJETOS
La persecución del objetivo es uno de los puntos más resaltantes de este proyecto.
Para esto tendremos que usar los módulos expuestos en las secciones anteriores.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Principio de persecución

Si estamos sobre una superficie blanca


entonces la orden será retroceder.

Si estamos sobre una superficie negra y


ambos sensores de ultrasonido
detectan un objeto entonces la orden
será avanzar.

Si estamos sobre una superficie negra y


solo el sensor de
ultrasonido de la derecha detecta un
objeto entonces la orden será:
girar derecha. El objetivo es que
ambos sensores
detecten al objetivo para poder sacarlo.

Si estamos sobre una superficie negra y


solo el sensor de ultrasonido de la
izquierda detecta un objeto entonces la
orden será:
girar izquierda. El objetivo es que
ambos sensores detecten al objetivo para
poder sacarlo.

En el caso que ninguno de los dos sensores de ultrasonido detecte algún objeto
seguirá haciendo la rutina anterior.

Ahora plantearemos la lógica para la persecución del robot sumo tomando como base
el principio explicado.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Diagrama de Flujo de la función Perseguir

INICIO

V F
SI LOS CNY70s LEEN
BLANCO

Definimos estado=0b00000000
U_IZQ = 1 si detecta objeto el ultrasonido izq
RETROCEDER 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

Estado = 0b 0 0 0 0 0 0 U_IZQ U_DER


RETARDO DE 1,5 ms

STOP estado

V F
RETARDO DE 200 ms estado=0b00000001

V F
GIRAR A LA DERECHA estado=0b00000010

GIRAR A LA DERECHA V F
estado=0b00000011

GIRAR A LA IZQUIERDA

AVANZAR

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Código en CCS
void PERSEGUIR()
{
unsigned int estado=0; // Definimos la variable estado como entero sin signo

for(;;) // Creamos un bucle infinito


{
infrarrojos(4); // Llamamos a la función infrarrojos con umbral 4volt para la
// lectura de los CNY70

if(I_DER==0 && I_IZQ==0) // Si los dos CNY70 leen blanco


{
motores(-80,-80); // Retrocedemos con 80% de la velocidad
delay_ms(1500); // Hacemos un retardo de 1500 ms
motores(0,0); // Stop
delay_ms(200); // Retardo de 200ms para romper la inercia
motores(80,-80); // Girar a la derecha
}
else
{
estado = (U_IZQ<<1)+U_DER; // Colocamos las variables U_IZQ y U_DER
// en la variable estado

switch(estado) // Hacemos el selector con la variable estado


{
case 0b00000001 : // Si solo el ultrasonido der. detecta
motores(85,-85); // Giramos a la derecha al 85% de vel
break;

case 0b00000010 : // Si solo el ultrasonido izq. detecta


motores(-85,85); // Giramos a la izquierda al 85% de vel
break;

case 0b00000011 : // Si los dos ultrasonido detectan


motores(100,100); // Giramos a la izquierda al 85% de vel

break;

default : // Si ningún ultrasonido detecta


// No se hace una nueva acción se
// continua con la anterior
break;
}
}
}
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Ahora juntaremos todas las funciones explicadas para crear la función batalla.

FUNCIÓN BATALLA
Esta función lo que hace es inicializar al sumo para que comience a luchar. En esta
función se asignará el tiempo de espera para los ultrasonidos , además de efectuar el
giro inicial y llamar a la función PERSEGUIR donde se entrará en un bucle infinito.

void batalla(unsigned long rango) // Esta función necesita la entrada del parámetro distancia del rango
// de pelea
{
tiempo_espera=rango*58; // Calculamos el tiempo de espera que se utiliza para detectar objetos
motores(0,0); // Iniciamos sin movimiento
delay_ms(5000); // Esperamos 5 segundos de acuerdo a las reglas

//++++ giro inicial++++


if(giro==0) // Si no se presionó ningún pulsador
{
motores(100,100); // Avanzar con el 100% de velocidad
}
else
{
if(giro==1) // Si se presionó el pulsador de la derecha(azul)
{
motores(85,-85); // Giramos a la derecha con el 85% de la velocidad
}
else // Si se presionó el pulsador de la izquierda(amarillo)
{
motores(85,-85); // Giramos a la izquierda con el 85% de la velocidad
}

delay_ms(500); // Hacemos un retardo de medio segundo


set_timer0(64950); // Seteamos el contador Timer0
enable_interrupts(INT_TIMER0); // Habilitamos interrupciones
enable_interrupts(GLOBAL); // Habilitamos el interruptor global
// Ahora cada 30ms se hará una interrupción para la lectura de
// los sensores de ultrasonido
PERSEGUIR(); // Entramos en el bucle infinito de la función PERSEGUIR
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

Finalmente presentaremos el código completo

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(); // Mandamos el pulso de 10µs para iniciar una nueva lectura
while(!input(eco1)); // Esperamos que el pic eco esté en 1
delay_us(tiempo_espera); // Hacemos un retardo usando el tiempo de espera
distancia_filtro(); // Llamamos a la función de lectura explicada anteriormente
set_timer0(64950);
}

//++++++++++++++++++++++++++++++++++++++++++++++++
//PROGRAMA PRINCIPAL
//++++++++++++++++++++++++++++++++++++++++++++++++

void main()
{

initSYSTEM();

for(;;)
{
botones();
}
}

//++++++++++++++++++++++++++++++++++++++++++++++++
//DEFINICION DE FUNCIONES
//++++++++++++++++++++++++++++++++++++++++++++++++

void initPWM()
{
setup_ccp1(CCP_PWM); // Definimos la primera salida de PWM para el motor 1
setup_ccp2(CCP_PWM); // Definimos la primera salida de PWM para el motor 2

//******** configuración del periodo PR2 ***********


setup_timer_2(T2_DIV_BY_1 ,255, 1); // Se define por defecto así: (Prescaler, PR2, 1)

// El tiempo de cada ciclo, PERIODO (seg) = (1/clock)*4*T2div*(period+1)


// En este programa clock=20000000 y el periodo=255, ***PR2=255***
// Para diferentes cycle el tiempo es:
// (1/20000000)*4*1*256 = 51.2 us or 19.5 KHz
// (1/20000000)*4*4*256 = 204.8 us or 4.9 KHz
// (1/20000000)*4*16*256 = 819.2 us or 1.22 KHz

// Usaremos el comando set_pwm1_duty(valor de 0 a 255) para cambiar la velocidad


set_pwm1_duty(0); // inicializamos con velocidad 0 el motor 1
set_pwm2_duty(0); // inicializamos con velocidad 0 el motor 2
}

void initADC()
{ // Configuramos el ADC
SETUP_ADC(ADC_CLOCK_INTERNAL); // Usaremos el clock interno
setup_adc_ports(AN0_TO_AN9_ANALOG); // Habilitamos los pines que usaremos como entradas
// analógicas, en este caso del AN0 al AN9
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

void initTIMER0()
{
SETUP_TIMER_0(T0_INTERNAL| T0_DIV_256);
set_timer0(64950);
enable_interrupts(INT_timer0); // Habilitamos interrupciones
enable_interrupts(GLOBAL); // 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) // definimos la función que tendrá la entrada de dos parámetros
{
motor1(velocidad1); // asignamos la variable velocidad1 al primer motor
motor2(velocidad2); // asignamos la variable velocidad2 al segundo motor
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

void infrarrojos(float umbral)


{
float cny70_der,cny70_izq;
long lectura;

SET_ADC_CHANNEL(0); // seleccionamos canal 0 PARA EL CNY70(der)


lectura=READ_ADC();
cny70_der =(VREF/1024.0)*(float)(lectura);

SET_ADC_CHANNEL(1); // seleccionamos canal 1 PARA EL CNY70(izq)


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
Universidad Nacional Mayor de San Marcos – Robots Perú

void botones()
{
if(input(pulsador_derecha)) // Si presionamos el pulsador de la derecha (azul)
{
giro=1; // Esta variable representa el giro a la derecha
}

if(input(pulsador_izquierda)) // Si presionamos el pulsador de la izquierda (amarillo)


{
giro=2; // Esta variable representa el giro a la izquierda
}

if(input(boton_batalla)) // Si presionamos el botón del centro (negro)


{
batalla(70); // Esta función la explicaremos más adelante pero significa empezar
// a combatir
}

void PERSEGUIR()
{
unsigned int estado=0; // Definimos la variable estado como entero sin signo

for(;;) // Creamos un bucle infinito


{
infrarrojos(4); // Llamamos a la función infrarrojos con umbral 4volt para la
// lectura de los CNY70

if(I_DER==0 && I_IZQ==0) // Si los dos CNY70 leen blanco


{
motores(-80,-80); // Retrocedemos con 80% de la velocidad
delay_ms(1500); // Hacemos un retardo de 1500 ms
motores(0,0); // Stop
delay_ms(200); // Retardo de 200ms para romper la inercia
motores(80,-80); // Girar a la derecha
}
else
{
estado = (U_IZQ<<1)+U_DER; // Colocamos las variables U_IZQ y U_DER
// en la variable estado

switch(estado) // Hacemos el selector con la variable estado


{
case 0b00000001 : // Si solo el ultrasonido der. detecta
motores(85,-85); // Giramos a la derecha al 85% de vel
break;

case 0b00000010 : // Si solo el ultrasonido izq. detecta


motores(-85,85); // Giramos a la izquierda al 85% de vel
break;

case 0b00000011 : // Si los dos ultrasonido detectan


motores(100,100); // Giramos a la izquierda al 85% de vel
break;

default : // Si ningún ultrasonido detecta


// No se hace una nueva acción y se
// continua con la anterior
break;
}
}
}
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

void batalla(unsigned long rango) // Esta función necesita la entrada del parámetro distancia del rango
// de pelea
{
tiempo_espera=rango*58; // Calculamos el tiempo de espera que se utiliza para detectar objetos
motores(0,0); // Iniciamos sin movimiento
delay_ms(5000); // Esperamos 5 segundos de acuerdo a las reglas

//++++ giro inicial++++


if(giro==0) // Si no se presionó ningún pulsador
{
motores(100,100); // Avanzar con el 100% de velocidad
}
else
{
if(giro==1) // Si se presionó el pulsador de la derecha(azul)
{
motores(85,-85); // Giramos a la derecha con el 85% de la velocidad
}
else // Si se presionó el pulsador de la izquierda(amarillo)
{
motores(85,-85); // Giramos a la izquierda con el 85% de la velocidad
}

delay_ms(500); // Hacemos un retardo de medio segundo


set_timer0(64950); // Seteamos el contador Timer0
enable_interrupts(INT_TIMER0); // Habilitamos interrupciones
enable_interrupts(GLOBAL); // Habilitamos el interruptor global
// Ahora cada 30ms se hará una interrupción para la lectura de
// los sensores de ultrasonido
PERSEGUIR(); // Entramos en el bucle infinito de la función PERSEGUIR
}

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

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
Universidad Nacional Mayor de San Marcos – Robots Perú

4.3. Logística

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 Ingeniería Electrónica de
la Universidad Nacional Mayor de San Marcos . Desde el año 2009
hasta fecha viene desarrollando proyectos de investigación en el
área de Robótica y Telemetría. Ha obtenido el primer puesto en
diferentes concursos de Robotica a nivel nacional. Actualmente es
presidente del grupo de investigación en Robótica y Automatización
de la UNMSM. (luis.arellano09@gmail.com).

Sandra Mariana Paredes Rojas. Nació en Lima, Perú el 26 de


Noviembre de 1990. Estudiante del Quinto ciclo de la carrera de
Ingeniería Electrónica de la Universidad Nacional Mayor de San
Marcos. Ha desarrollado proyectos de investigación en el área de
Robótica en el año 2009 hasta el presente, con lo cual ha obtenido el
primer puesto en diversos concursos nacionales. Habla Inglés fluido
y Francés básico. (mariana.sandra@gmail.com).

Stephanie E. Tuesta Vizcarra, nacida en enero de 1991 en Lima,


Perú. Ingreso a la Universidad Nacional Mayor de San Marcos en el
2009 y actualmente cursa su quinto ciclo en la carrera de Ingeniería
Electrónica. Participante de múltiples concursos de robótica donde
obtuvo los primeros puestos. Miembro del grupo de robótica y
automatización de la UNMSM. (stf.tuesta@gmail.com).

Jorge Abraham Salgado Hervias, nació en mayo del 1985, Lima Perú.
Se diplomo de Ingeniero de electrónica e informática industrial, con
un año de especialización en Sistemas embebidos, en el École
Nationale Supérieure des Sciences Appliquées et de Technologie.
ENSSAT 2011-FRANCIA, egresado de la Universidad Nacional Mayor
de San Marcos, 2008-Peru. Participò en la Copa de robótica en
Francia, 2010. Organizó y expuso sobre robótica en el Perú en la
copa robótica de Tregor, Bretagne. Realizó dos videoconferencias de
robótica entre Perú y Francia. Organizó el primer concurso nacional de robótica en la
UNMSM.Ganador de diversos concursos de robótica a nivel Nacional y un
sudamericano en la categoría Sumo. Actualmente es administrador de RobotsPeru
y asesor principal del grupo de investigación de robótica y Automatización.
(j.salgado@robotsperu.org).

4.3.2. Formación

Facultad de Ingeniería Electrónica de la Universidad Nacional Mayor de


San Marcos.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

4.3.2. Participación

INTERCON 2010

El "XVII Congreso Internacional de Ingeniería Eléctrica, Electrónica 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
avión, unos días antes del inicio de las conferencias, pero nos
hospedamos en el mismo hotel. Contamos con el apoyo de la facultad para
el hospedaje, alimentación y transporte.

La primera dificultad que afrontamos fue al momento de la inscripción, ya


que no estábamos enterados de que para participar en el concurso de
robótica a realizarse los días 11 y 12, debíamos tener a por lo menos la
mitad de los miembros del grupo inscritos en el congreso. Después de
realizar los pagos apropiados para la inscripción al congreso se nos
permitió la inscripción al concurso de robótica.

No teníamos la programación en un estado óptimo para cuando viajamos,


así que pasamos los días antes del concurso programando, probando y
corrigiendo los errores. Pero el día antes de nuestra participación los
sensores infrarrojos dejaron de funcionar y nuestros ultrasonidos
empezaron a fallar. Los problemas tenían origen en las conexiones de los
cables, que no podíamos reparar en ese momento así que corregimos lo
que pudimos de los ultrasonidos con programación y no usamos
infrarrojos.

Fueron 9 los sumos participantes, enfrentándose en encuentros


eliminatorios. Ocupamos el 3er puesto.

III KANTUROBOT 2010

Se llevo a cabo el 24 de setiembre del 2010 en la Universidad Nacional de


Educación "Enrique guzmán y Valle" - La Cantuta.

Nuestra facultad nos proporciono con el transporte de ida y de vuelta a


todos los grupos participantes.

La categoría sumo conto con la participación de 2 concursantes


ecuatorianos. Se realizaron una serie de peleas eliminatorias hasta que
solo quedaron 3. Después de eso se llevo a cabo una ronda de “todos
contra todos” en la que todos empatamos así que se hizo de nuevo.
Ocupamos el 1er puesto.

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

FOINTEC 2010

El “VII Foro Internacional de Innovación Tecnológica - FOINTEC 2010" se


llevo a cabo en la Universidad Nacional San Luis Gonzaga-Ica del 15 al 17
de octubre.

Usando parte del premio ganado en el KANTUROBOT 2010 uno de


nosotros viajo a la ciudad de Ica la misma mañana del concurso y regreso
ese mismo día en la noche. Obtuvimos el 1er puesto.

VILLATRONICA 2010

El “III Concurso Nacional de Robots – Villatrónica 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 robótica a realizarse el 12 de noviembre en el marco del “II


Congreso Internacional de Tecnología – COINTEC 2010” se llevo a cabo
en la Universidad Privada Antenor Orrego en la ciudad de Trujillo.

Usando parte de los fondos que teníamos 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 día después del VILLATRONICA 2010 y eso
no nos daba mucho tiempo.

Partiendo el día anterior en la noche, solo horas después de la


participación en la Villareal se llegó el día del concurso en la mañana y se
volvió a partir ese mismo día en la noche de regreso a Lima.
Obtuvimos el 1er puesto.

CER 2010

EL Concurso Ecuatoriano de Robótica 2010 realizado en la ciudad de


Guayaquil, Ecuador. Para este concurso se formó parte de la delegación
ROBOTS PERÚ que representó al Perú esta competición.

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
Universidad Nacional Mayor de San Marcos – Robots Perú

5. Costo

Presupuesto invertido durante la realización del robot sumo

COMPONENTES
PRECIO POR
CANTIDAD PRECIO TOTAL
UNIDAD

PIC 18F4550 1 S/ 50.00 S/ 50.00

L6203 – DRIVER 2 S/ 44.20 S/ 88.40

L5973D
REGULADOR 2 S/ 11.24 S/ 22.48
CMS

SENSOR SRF05 2 S/ 100.00 S/ 200.00

SENSOR CNY70 2 S/ 15.00 S/ 30.00

RESISTENCIA
50 S/ 0.15 S/ 7.50
de 4.7KΩ

RESISTENCIA
50 S/ 0.10 S/ 5.00
de 2.5 KΩ

RESISTENCIA
50 S/ 0.08 S/ 4.00
de 7.5 KΩ

RESISTENCIA
50 S/ 0.16 S/ 8.00
de 5.1 KΩ

RESISTENCIA
50 S/ 0.15 S/ 7.50
de 10 KΩ

RESISTENCIA
50 S/ 0.15 S/ 7.50
de 220 Ω

RESISTENCIA
50 S/ 0.12 S/ 6.00
de 10 Ω

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

RESISTENCIA
50 S/ 0.16 S/ 8.00
de 30 Ω

CONDENSADOR
10 S/ 1.12 S/ 11.20
de 330uF

CONDENSADOR
10 S/ 0.42 S/ 4.20
de 10uF

CONDENSADOR
10 S/ 0.14 S/ 1.40
de 22nF

CONDENSADOR
10 S/ 1.68 S/ 16.80
de 220pF

CONDENSADOR
10 S/ 0.14 S/ 1.40
de 0.1uF

CONDENSADOR
10 S/ 0.55 S/ 5.50
de 15nF

CONDENSADOR
10 S/ 0.46 S/ 4.60
de 15pF

CONDENSADOR
10 S/ 0.23 S/ 2.30
de 220nF

DIODO
8 S/ 0.32 S/ 2.56
RECTIFICADOR

DIODO LED
10 S/ 0.46 S/ 4.60
ROJO

DIODO LED
10 S/ 0.66 S/ 6.60
VERDE

DIODO LED
10 S/ 0.36 S/ 3.60
AMARILLO

BOBINA de
2 S/ 4.04 S/ 8.08
15uH

CRISTAL
OSCILADOR de 1 S/ 1.00 S/ 1.00
20M

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

MOLEX MACHO
10 S/ 0.73 S/ 7.30
DE 2

MOLEX MACHO
10 S/ 0.70 S/ 7.00
DE 4

MOLEX MACHO
10 S/ 0.96 S/ 9.60
DE 5

MOLEX
10 S/ 0.62 S/ 6.20
HEMBRA DE 2

MOLEX
10 S/ 0.71 S/ 7.10
HEMBRA DE 4

MOLEX
10 S/ 0.96 S/ 9.60
HEMBRA DE 5

BASE MOLEX
1 S/ 8.40 S/ 8.40
HEMBRA DE 5

BASE MOLEX
1 S/ 3 S/ 3.00
MACHO DE 5

ALAMBRE
100 S/ 1.00 S/ 100.00
PARA MOLEX

CONECTORES
DE 2 PARA 20 S/ 0.20 S/ 4.00
CNY70

CABLE
1 S/ 45.00 S/ 45.00
USB/SERIAL

PLACA
2 S/ 15.00 S/ 30.00
IMPRESA

INVERSION
TOTAL EN LOS S/ 755.18
COMPONENTES

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

MATERIALES
PRECIO POR PRECIO
CANTIDAD
UNIDAD TOTAL

MOTOR DC 2 S/ 90.00 S/ 180.00

LLANTAS DE
2 S/ 5.00 S/ 10.00
CAUCHO

BALL CASTER 2 S/ 35.00 S/ 70.00

BATERÍA 12V
4 S/ 18.00 S/ 72.00
1.3AH

BOTON DE
2 S/ 15.00 S/ 30.00
PANICO

BOTONES 4 S/ 1.00 S/ 4.00

PULSADORES 8 S/ 1.00 S/ 8.00

CABLE
8m S/ 0.70 S/ 5.60
BIPOLAR

ESTAÑO 1 rollo S/ 40.00 S/ 40.00

ARCO DE
SIERRA 1 S/ 18.00 S/ 18.00
MACHO

CUCHILLA 1 S/ 8.00 S/ 8.00

ACRILICO 1m S/ 8.00 S/ 8.00

ALUMINIO
4m S/ 6.00 S/ 24.00
TIPO L

BISAGRA 5 S/ 1.00 S/ 5.00

Proyecto Robot-Sumo
Universidad Nacional Mayor de San Marcos – Robots Perú

RAMPA DE
1 S/ 5.00 S/ 5.00
FIERRO

JUEGO DE
TORNILLOS Y 1 S/ 5.00 S/ 5.00
TUERCAS

CINTA
4 S/ 1.00 S/ 4.00
AISLANTE

SILICONA 10 barras S/ 0.50 S/ 5.00

INVERSION
TOTAL EN S/ 501.6
MATERIALES

INVERSIÓN INVERSIÓN
TOTAL EN LOS TOTAL EN INVERSIÓN TOTAL
COMPONENTES MATERIALES

S/ 755.18 S/ 501.6 S/ 1256.78

6. Agradecimientos

 Al Mg. Bruno Vargas Tamani por la ayuda brindada incondicionalmente durante


el proceso de elaboración del proyecto.

 Al foro ROBOTS PERU http://www.robotsperu.org .

 A Flor de María Gaviria Barneto por el apoyo recibido dentro del Instituto de
Investigación.

 A la Ing. Lita Soto Nieto por facilitarnos el uso de los laboratorios.

 A Hugo Eduardo Manuel Flores por hacer la primera estructura del proyecto.

 A Guillermo David Evangelista Adrianzén por la ayuda brindada en la


elaboración del interfaz.

 A Romain Fontaine por el apoyo en la elaboración de la carta electrónica y el


uso de su interfaz.

 A la comunidad de Robótica Peruana.

Proyecto Robot-Sumo

You might also like