INDUSTRIALES Y DE TELECOMUNICACIÓN
Titulación :
INGENIERO INDUSTRIAL
2. Sumo Robótico 12
2.1. Categorı́as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4. Reglamento 14
4.1. Dohyo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.2. Peso y Tamaño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.3. Restricciones al diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4. Combate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.5. Elección: Minisumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3
ÍNDICE GENERAL 4
II Elección de Componentes 25
8. Motores 26
8.1. Tipos de motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.1.1. Servo modificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.1.2. Motores de corriente continua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.1.3. Motores paso a paso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.2. Funcionamiento de un motor de corriente continua . . . . . . . . . . . . . . . . . . . . . 26
8.2.1. Parámetros del motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.2.2. Especificaciones del motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
8.2.3. Punto de funcionamiento del motor . . . . . . . . . . . . . . . . . . . . . . . . . . 27
8.3. Criterios para la elección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8.3.1. Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8.3.2. Fuerza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8.3.2.1. Tracción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8.3.2.2. Torque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.3.3. Elección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.4. Especificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
8.5. Motores disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
8.6. Motores que cumplen con las especificaciones . . . . . . . . . . . . . . . . . . . . . . . . 33
9. Ruedas 35
9.1. Ruedas comerciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9.2. Ruedas de alta tracción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.3. Ruedas de alta tracción customizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
11.Microcontrolador 42
11.1. Arduino Duemilanove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
11.2. Otras placas Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
11.2.1. Arduino Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
11.2.2. Arduino Mini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
11.2.3. Arduino Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
11.2.4. Arduino Mega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
12.Pantalla LCD 45
ÍNDICE GENERAL 5
13.Sensores de Borde 46
13.1. Sensores Mecánicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
13.2. Sensores Ópticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
13.3. Elección: Sensor Infrarrojo CNY70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
13.4. Sabotear los Sensores Infrarrojos de Suelo . . . . . . . . . . . . . . . . . . . . . . . . . . 48
13.4.1. Simular el borde de la pista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
13.4.2. Emisor de Infrarrojos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
14.Sensores de Proximidad 50
14.1. Sensores Infrarrojos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
14.1.1. Sensores binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
14.1.2. Sensores Analógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
14.2. Sensores de Ultrasonidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
14.3. Elección: Sensores de Infrarrojos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
14.4. Sabotear los sensores de proximidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
14.4.1. Robot Antiradar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
14.4.2. Materiales Absorbentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
15.Sensores de Contacto 56
15.1. Bumper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
15.2. Soluciones comerciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
15.3. Sabotear los Sensores de Contacto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
18.Teorı́a de Rampas 66
18.1. Fuerza horizontal y elevación del morro . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
18.2. Pendiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
18.3. Pegada al suelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
18.4. Peso sobre la rampa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
18.5. Centro de gravedad del robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
18.5.1. Centro de gravedad regulable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
18.6. Perfil de la rampa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
18.7. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
19.Métodos Constructivos 71
19.1. Plástico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
19.1.1. Doblado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
19.1.2. Pegado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
19.1.3. Cortado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
19.1.4. Agujereado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
19.1.5. Material Necesario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
19.2. Aluminio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
19.2.1. Doblado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
19.2.2. Pegado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
19.2.3. Cortado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
19.2.4. Agujereado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
19.2.5. Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
19.3. Comparación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
19.4. Elección: Aluminio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
20.Robot Antiradar 76
20.1. Geometrı́a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
20.2. Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
20.3. Avión Antiradar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
21.Cableado 79
21.1. Esquema Eléctrico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
21.2. Conectores Sensores Sharp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
21.3. Conectores genéricos. Para placa de prototipado y Arduino. . . . . . . . . . . . . . . . . 82
21.4. Resistencias para los sensores CNY70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
21.5. Interruptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
21.6. Cables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
21.7. Tubo Termoretráctil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
21.8. Placa Prototipado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
22.Condensadores 86
22.1. Sensores Sharp GP2Dxxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
22.2. Driver Motores L293D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
22.3. Baterı́a y Regulador de Tensión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
22.4. Condensadores necesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
25.Presupuesto 97
27.Electrónica 106
27.1. Placa base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
32.Aplicaciones 120
32.1. Aplicaciones de Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
32.2. Aplicaciones de Configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
32.3. Aplicaciones de Prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
32.4. Aplicaciones Extra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
VI Programación 125
34.Estrategia Fluida 126
34.1. Funcionamiento básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
34.2. Sensores de Suelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
34.3. Maniobra Evasiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
34.3.1. Sensores Laterales Activados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
34.3.2. Sensores Delanteros Activados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
34.3.3. Sensores Traseros Activados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
34.4. Determinar Dirección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
34.4.1. Enemigo Delante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
34.4.2. Enemigo en un Lateral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
34.4.3. Enemigo Detrás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
45.Conclusión 147
10
Capı́tulo 1
1. Estado del arte. Estudiar el reglamento de la competición, analizar los mejores robots construidos
hasta la fecha, ver cuales son los puntos importantes a la hora de construir un robot ganador...
2. Elección de componentes. Rastrear el mercado para comprobar cuales son las opciones disponibles
para cada elemento del robot. Comparar las especificaciones de los componentes, ver los requer-
imientos necesarios...
3. Diseño del robot. Una vez hemos elegido los componentes diseñar la estructura del robot (chasis,
carrocerı́a y rampa). Estudiar los materiales disponibles y sus técnicas constructivas. Diseñar el
circuito eléctrico del robot.
4. Montaje del robot. Llevar a cabo todo lo planeado y documentarlo adecuadamente para que
pueda ser utilizado en proyectos venideros.
5. Puesta a punto. Diseñar una serie de programas para comprobar el correcto funcionamiento de
cada componente del robot.
6. Programación. Crear el software que integre todos los elementos del robot y le confiera un com-
portamiento inteligente
7. Mejoras. Participar en campeonatos de sumo y con la experiencia ver lo que se podrı́a mejorar.
11
Capı́tulo 2
Sumo Robótico
El sumo de robots es una competición en la cual dos robots luchan por echar al otro y evitar ser
echados de un circulo de juego llamado dohyo.
2.1. Categorı́as
Hay dos criterios principales de clasificación: el tipo de robots y su modo de funcionamiento.
Atendiendo al tipo de robot se pueden clasificar en:
12
Capı́tulo 3
La modalidad de Sumo Robótico fue inventada en Japón a finales de los años ochenta por Hiroshi
Nozawa, presidente de Fuji Software. Su objetivo era que los estudiantes se interesasen en la robótica.
El primer torneo de exhibición se realizó en 1989 y participaron 33 robots. El primer campeonato
oficial fue en 1990 y lucharon 147 robots en él.
Desde entonces el crecimiento del sumo robótico en Japón ha sido imparable. Más de 4000 robots
participaron en la Liga de 2001.
A comienzos de los años noventa el sumo robótico fue introducido en Estados Unidos por Mato
Hattori. Hattori grabó una cinta con los mejores momentos de la tercera Liga de sumo. Esta cinta
llegó a manos de Bill Harrison que se involucró para difundirlo en su paı́s. Harrison posteriormente
fue el que inventó la clase de Minisumo. Esta clase es la que se ha hecho más popular ya que existen
al menos el doble de robots de minisumo que de sumo estándar ya que su reducido tamaño facilita la
construcción y ahorra costes.
Desde principios de los años noventa los torneos de sumo se han expandido por todo el mundo y el
número de robots ha crecido exponencialmente.
13
Capı́tulo 4
Reglamento
En este capı́tulo se resumen las reglas más importantes del reglamento de Sumo y MiniSumo.
4.1. Dohyo
El tamaño del dohyo es distinto para sumo y minisumo. No obstante comparten que el borde debe
ser de 5cm de blanco brillante y el interior debe ser de negro mate. Debe estar situado a una altura
de 5cm sobre el suelo.
Categorı́a Diámetro del dohyo (cm)
Sumo 154
MiniSumo 77
Durante el combate no puede haber nada a menos de un metro de distancia del dohyo. Esto se
hace para evitar que los robots detecten objetos fuera del ring y se confundan.
14
CAPÍTULO 4. REGLAMENTO 15
Se pueden desplegar estructuras siempre que el robot pueda recogerlas autónomamente de modo
que este dentro del área máxima una vez finalizado el combate.
4.4. Combate
El combate consiste en 3 asaltos de una duración máxima de 3 minutos.
El asalto comienza 5 segundos después de que se de la señal. El robot que se mueva antes de 5
segundos pierde el combate.
Gana el combate el robot que consiga echar a su adversario del dohyo sin caerse él.
El asalto se repetirá si los robots quedan trabados indefinidamente o si los dos robots tocan el
suelo a la vez
La lista de competiciones de sumo crece cada año. En este capı́tulos vamos a tratar de nombrar a
las más importantes tanto del panorama nacional como del internacional.
5.1.2. Deustobot
En Deustobot2 tienen la categorı́a de Sumo y MiniSumo. Se realizó el 31 de Marzo de 2011 en el
Auditorio de la Universidad de Deusto (Bilbao). Los premios son 250 euros para el primero y 150 para
el segundo.
5.1.3. Alcabot
Alcabot3 tiene solo categorı́a de Sumo. Se realizó del 4-8 de Abril de 2011 en la Universidad de
Alcalá (Madrid). Los premios fueron 400 euros para el primero y 100 para el segundo.
5.1.4. Robolid
Robolid4 2012 ya está anunciado y tendrá lugar 26-27 de Abril. Tiene categorı́as de sumo y minisumo
y se realiza en Valladolid. Los premios son 300 euros para el primero y 100 para el tercero.
1 http://www.roboticspot.com/cosmobot/index.php
2 http://www.roboticspot.com/cosmobot/index.php
3 http://asimov.depeca.uah.es/robotica/course/view.php?id=18
4 http://www.robolid.net/
16
CAPÍTULO 5. PRINCIPALES COMPETICIONES DE SUMO ROBÓTICO 17
5.1.5. Malakabot
Malakabot5 se celebró en Málaga el 5 de Mayo de 2011. Parece que no hay premios o al menos no
aparecen en la página web.
5.1.6. Robotus
Robotus se celebró en Sevilla el 15-16 de Mayo de 2011. La página web ya no está operativa pero
parece que solo hay competición de sumo.
5.1.7. Cruo
6
Cruo se realiza en la Universidad de Oviedo. En 2011 tuvo lugar el 29-30 de Julio. Tienen solo
categorı́a de sumo y los premios son 400 euros para el primero y 100 para el cuarto.
5.1.8. CrJet
CrJet7 se realizó en la Universidad Politécnica de Cataluña (Barcelona) el 8 de Octubre de 2011.
Tiene categorı́as de sumo y minisumo y los premios son de 500 euros para el primer clasificado y 100
para el cuarto.
5.1.9. Robolot
Robolot8 se realizó el 15-16 de Octubre en Cataluña. Hay categorı́a de Minisumo y el premio es de
300 euros. La página web tiene material didáctico.
5.1.10. AESSBot
AESSBot9 tuvo lugar el 18-19 de Noviembre de 2011 en el Museo Marı́timo de Barcelona. Tiene
categorı́as de sumo y minisumo. Los premios 600 euros para el primero y 150 para el tercer clasificado.
Vemos que hay más competiciones de Sumo y que los premios son mayores. Esto está en consonancia
con el hecho de que construir el robot de sumo es mas costoso que el de minisumo.
5 http://www.malakabot.com
6 http://cruo.es/
7 http://www.concursroboticajet.etseiat.upc.edu/
8 www.robolot.org/
9 http://aess.upc.es/aessbot/
CAPÍTULO 5. PRINCIPALES COMPETICIONES DE SUMO ROBÓTICO 18
En este capı́tulo vamos a analizar los vı́deos de campeonatos de minisumo que podemos encontrar
en Internet. El objetivo es fijarse en los los mejores robots y en los más originales.
Mini-JMV.
Este es probablemente uno de los mejores robots de minisumo como lo acreditan los campeonatos
que ha ganado.
Tiene dos sensores de distancia en la parte frontal, uno en cada lateral y no parece que tenga
ninguno en la parte trasera. Es un robot que encuentra al adversario rápido y se mueve hacia él
más rápidamente aún. Sus ruedas son pequeñas y están recubiertas por una especie de goma marrón.
Aparentemente solo tiene dos ruedas. Su diseño es muy compacto y bajo. La carcasa cubre únicamente
el techo y la parte trasera y frontal, dejando los laterales al aire. En la parte delantera la carcasa
tiene forma de rampa con una curvatura que cambia cerca del suelo, y además tiene dos aberturas
para que los sensores de distancia puedan escanear lo que tiene delante. En las fotos se puede ver la
versión final (arriba) y una versión más preliminar (abajo). Vemos que ha evolucionado la carcasa y
los recubrimientos de las ruedas. La carcasa es de plástico y la rampa es de metal.
1 http://www.youtube.com/watch?v=hlax5Qm OMI
19
CAPÍTULO 6. ANÁLISIS DE VÍDEOS DE CAMPEONATOS DE SUMO 20
Sansón
Este robot quedó segundo por detrás de Mini-JMV. Su diseño es completamente distinto pero
alcanza también un rendimiento muy bueno. Esto nos indica que no hay un solo camino para diseñar
un robot campeón.
Este robot tiene dos grandes ruedas que también están recubiertas por la misma goma o resina que
tenı́a el Mini-JMV. Es más lento que el anterior. Repite la rampa frontal agujereada para los sensores
de distancia pero parece que no tiene ninguno en los laterales ni en la parte de atrás. Parece que en
la parte delantera tiene unos bumpers para detectar el contacto con otro robot. Es un diseño mucho
más alto que el robot anterior.
Chuck Norris
Las reglas de minisumo nos dicen que el robot debe ocupar un área máxima de 10x10cm. Sin
embargo una vez comenzado el combate el robot puede desplegarse y ocupar más área siempre que
sea capaz de volver a la situación inicial una vez acabado el combate. No obstante en ninguno de los
vı́deos online hemos podido observar como los robots se repliegan. Lo más común es que tengan una
plancha en la parte delantera que se deja caer como una especie de puente levadizo y que sirve para
que el robot adversario se suba encima y pueda ser expulsado más fácilmente del ring.
Pero el robot que presentamos ahora se expandı́a al comenzar el combate. Fue eliminado en la
primera ronda pero eso no resta nada a su originalidad. En las fotos se puede ver como se transforma.
Robot Torero
Este robot utiliza la regla de poder expandirse de una forma distinta. Despliega en un lateral
una pequeña plancha que hace las veces de la capa de toreo. El robot adversario detectará la capa y
pensará que es el robot. Esto puede darnos alguna ventaja en el combate.
Robot Piramidal
Este robot era muy compacto y tenı́a la forma de una pirámide. Le quedaba aún tiempo de desarrollo
ya que fallaba el contacto de las ruedas con el suelo y se movı́a muy lento.
Figura 6.4: Fotografı́as de los robots del Canadian National Robot Games
Robot Placa
Este robot utilizaba la placa donde iban montados los sensores y controladores como chasis. Tenı́a
cuatro ruedas y era muy rápido.
Figura 6.5: Fotografı́as de los robots del Canadian National Robot Games
5 http://www.youtube.com/watch?v=TyHmevF1GBI
CAPÍTULO 6. ANÁLISIS DE VÍDEOS DE CAMPEONATOS DE SUMO 23
6.5. Conclusiones
La primera conclusión que se puede extraer es que hoy por hoy no hay un diseño que sea superior
al resto y que se haya impuesto.
Podemos ver que la mayorı́a usa dos ruedas de gran diámetro, sin embargo el mejor robot que
hemos visto utiliza ruedas pequeñas.
Algo que parece claro es que con dos ruedas es suficiente y que muy pocos utilizan cuatro ruedas.
No parece que se deriven ventajas importantes por utilizar cuatro ruedas.
La velocidad se ha revelado como un factor muy importante. Cuanto más rápido sea el robot
mayores serán sus opciones de ganar el combate siempre que este bien controlado y no se salga
del tablero.
La fuerza que puede ejercer hacia delante también es un factor muy importante. Cuando dos
robots chocan frontalmente si uno es capaz de ejercer más fuerza que el otro ganará el combate
sin duda. Los principales factores que determinan la fuerza ejercida son: la potencia de los
motores, la adherencia de las ruedas con el suelo y la geometrı́a (No es lo mismo empujar una
pared vertical que empujar una pared inclinada. Al empujar la pared inclinada parte de la fuerza
se pierde en la componente vertical)
No se ha visto ningún robot ganador que tenga una plancha delantera desplegable. Parece que son
más efectivos los diseños compactos en los que la rampa está integrada. Además el hecho de tener
que utilizar un mecanismo para recogerla complica el diseño. En todo caso se utilizará alguna
estructura similar a la del robot “torero”.
Finalmente concluimos que no va a ser nada fácil construir un robot ganador porque vamos a
partir completamente de cero y existen estructuras como el D.P.E.Bots que son realmente muy
potentes. Sin embargo vamos a intentar disputarles la supremacı́a.
Capı́tulo 7
7.1. Rampa
La rampa es el punto de contacto con el adversario. El robot que consigue deslizar su rampa bajo
el contrario consigue reducir la fuerza de empuje del contrario. La mayorı́a de las veces el que consiga
deslizarse por debajo ganará el combate.
7.2. Fuerza
Si ningún robot consigue deslizarse bajo el otro el robot que tenga más fuerza podrá expulsar al
otro y ganará el combate.
7.3. Detección
Ser capaz de detectar al contrario es indispensable para echarle del tatami. De la misma forma es
vital poder detectar los bordes del tatami para no salirse de él. Los sensores tienen una importancia
muy grande en un robot de sumo.
7.4. Velocidad
Tanto la velocidad de movimiento como la de detectar al contrario son parámetros que pueden dar
una ventaja competitiva suficiente para ganar el combate.
7.5. Adaptable
Si un robot de sumo tiene distintos modos de comportamiento podrá adaptarse a su enemigo. Esto
es una gran ventaja.
24
Parte II
Elección de Componentes
25
Capı́tulo 8
Motores
26
CAPÍTULO 8. MOTORES 27
Aunque realmente no es ası́, se considera que el motor tiene un funcionamiento lineal y esto se
aproxima bastante a la realidad.
Como se ve en la gráfica la velocidad de giro del motor depende linealmente del torque. Si el motor
no tiene que ejercer fuerza alguna y gira libremente su velocidad será máxima. Conforme vayamos
pidiéndole que ejerza una fuerza mayor la velocidad irá bajando hasta que deje de girar. Ese punto en
el que el motor no gira se le llama de stall.
Cuando el motor gira libremente el consumo de corriente es mı́nimo, pero no nulo como parece
en la gráfica. Conforme requerimos más fuerza del motor este requerirá a su vez más corriente hasta
alcanzar el máximo en el punto de stall.
Queda un cuarto parámetro del motor: el voltaje. Se suele hacer la aproximación de que todas las
caracterı́sticas anteriores son proporcionales al voltaje. Si usamos el doble de voltaje el motor girará a
doble velocidad, necesitará el doble de corriente y podrá ejercer el doble de fuerza. Naturalmente el
voltaje que se suministra al motor debe estar dentro de unos lı́mites para evitar que resulte dañado.
8.3.1. Velocidad
Para determinar la velocidad a la que se desplazará el robot es necesario saber la velocidad de giro
del motor y el radio de la rueda.
V = 2πRN (8.4)
Siendo V la velocidad del robot, R el radio de la rueda y N la velocidad de giro de la rueda.
8.3.2. Fuerza
La fuerza que puede ejercer nuestro robot depende del torque del motor y de la tracción de las
ruedas. La tracción determina la fuerza máxima que puede ejercer el robot. Si el robot intenta ejercer
una fuerza mayor que la tracción las ruedas patinarán. La fuerza de torque debe poder ser mayor que
la de tracción o el motor quedará trabado y muy posiblemente se dañará.
En resumen: la tracción determina la fuerza máxima que podemos ejercer y el torque determina si
la ejercemos o no.
8.3.2.1. Tracción
La tracción es equivalente a la fuerza de rozamiento del robot con el suelo. La fuerza de rozamiento
se modeliza ası́:
FR = µ · P (8.5)
Siendo FR la fuerza de rozamiento, µ el coeficiente de rozamiento y P el peso.
Como vemos cuanto mayor sea el peso mayor será la fuerza que podamos ejercer. Por ello el
robot deberá estar en el lı́mite de peso permitido. Por otra parte se puede ver lo beneficioso que es
conseguir que nuestro robot se cuele por debajo del contrario absorbiendo parte de su peso. De esa
forma conseguimos aumentar nuestra tracción y disminuir la suya.
El coeficiente de rozamiento en la fı́sica clásica siempre está entre cero y uno y no depende del área
de contacto. Esto es cierto cuando se consideran materiales inelásticos en superficies inelásticas como
acero en acero.
Pero deja de ser cierto con materiales elásticos como la goma, donde se pueden alcanzar coeficientes
de rozamiento de hasta 3.
CAPÍTULO 8. MOTORES 29
Materiales µe µd
Acero // Hielo 0.028 0.09
Acero // Acero 0.15 0.09
Caucho // Cemento seco 1 0.8
Caucho // Cemento húmedo 0.3 0.25
Caucho // Madera 0.7 0.6
Estos valores son más bien teóricos ya que el fabricante no da el coeficiente de rozamiento de su
rueda. Para los cálculos consideraremos que el coeficiente entre nuestras ruedas y el dohyo es de 1.
Aunque probablemente sea menor como muestra la tabla no hay ningún problema si nos pasamos, lo
habrı́a si nos quedásemos cortos.
8.3.2.2. Torque
La fuerza de torque que puede ejercer cada motor se calcula utilizando el momento o torque del
motor y el radio de la rueda.
T
F = (8.6)
R
Siendo F la fuerza ejercida, T el torque del motor y R el radio de la rueda.
8.3.3. Elección
Como hemos visto el radio de la rueda y las caracterı́sticas del motor se interrelacionan a la hora
de calcular las prestaciones del conjunto. Vamos a ver cual es el punto de funcionamiento del conjunto
motor-rueda suponiendo que sabemos las caracterı́sticas del motor y la fuerza que va a tener que
ejercer.
Conocidos: motor Nl y Ts , fuerza de trabajo F . Desconocidos: radio de la rueda R .
T =F ·R (8.7)
V = 2π · R · N (8.8)
T
N = Nl · (1 − ) (8.9)
Ts
Las tres ecuaciones anteriores ya las conocı́amos, las vamos a combinar para hallar la velocidad en
función del radio de la rueda. Luego lo derivaremos para ver cual es el radio apropiado para trabajar
a velocidad máxima dada una fuerza de trabajo determinada
F ·R
V = 2π · R · Nl · (1 − ) (8.10)
Ts
dV F ·R F ·R 2·F ·R
= 2π · Nl · (1 − ) − 2π · Nl · ) = 2π · Nl · (1 − ) (8.11)
dR Ts Ts Ts
dV 2·F ·R Ts
= 0 ⇐⇒ 2π · Nl · (1 − ) = 0 ⇐⇒ F · R = (8.12)
dR Ts 2
Como vemos si queremos la máxima velocidad de un motor dado una fuerza de trabajo y una rueda
tendremos que hacerlo trabajar en un torque que sea la mitad del de stall.
Por lo tanto elegida la rueda, velocidad de trabajo y fuerza de trabajo deberemos buscar un motor
que tenga:
CAPÍTULO 8. MOTORES 30
Esto supone que la fuerza de trabajo debe estar perfectamente calculada ya que el motor no podrá hacer
más del doble de esa fuerza. Si el motor va a trabajar en dos puntos de trabajo con fuerzas distintas
habrá que optimizarlo para la fuerza mayor.
Ası́ vemos que no podemos optimizar el funcionamiento del motor para dos puntos de trabajo muy
diferentes. Para nuestro proyecto esto supone que no podemos optimizar nuestro robot para competir
en sumo y minisumo. Aunque un minisumo puede vencer a un sumo como muestra el siguiente vı́deo1
deberemos centrarnos y optimizar nuestro robot para el combate de minisumo.
Figura 8.2: Simulación en Excel de la velocidad lineal frente al cambio de rueda para una fuerza de
trabajo fijada en un motor 50:1 FingerTech “Gold Spark”
8.4. Especificaciones
Nuestro robot va a tener dos puntos de funcionamiento:
1. Cuando se mueva en solitario por el dohyo buscando a su presa. Tendrá que hacer una fuerza
igual o menor a su peso: 500g
2. Cuando este empujando al otro robot. Tendrá que hacer una fuerza máxima igual al peso de los
dos robots: 1kg
Tendremos que optimizar el funcionamiento para cuando este empujando al otro robot, para una fuerza
de 1kg. Pero no nos interesa la velocidad a la que empuje sino la velocidad a la que se mueve solo.
Como la velocidad del motor es linealmente dependiente de la fuerza:
V500 V1000
= (8.13)
2 − 0,5 2−1
V500
V1000 = (8.14)
1,5
Tenemos ya un método para calcular el motor necesario.
1 http://www.youtube.com/watch?v=XvGka8oue Y
CAPÍTULO 8. MOTORES 31
Vamos a establecer las especificaciones que queremos que cumpla nuestro robot.
El tablero mide 75cm de diámetro. Vamos a buscar que pueda ir de un extremo a otro en un
segundo lo que hace una velocidad de 75cm/s. Esta será una de las ventajas de nuestro robot ya que
los robots que utilizan servos como por ejemplo el kit Sumobot de Parallax se mueve mucho más lento,
del orden de 15cm/s. Si luego resulta que es demasiado rápido para ser controlado adecuadamente
podremos hacer funcionar el motor con un voltaje menor.
Por lo tanto no parece que una velocidad de 75cm/s sea una locura.
La fuerza requerida será la suma de dos robots de minisumo que son 1kg. Hay que tener en cuenta
que al tener dos motores la fuerza se reparte por igual entre los motores.
Ts = 1kg · R (8.19)
Como vemos las caracterı́sticas del motor dependen de la rueda utilizada. En la siguiente tabla se
dan valores para distintas ruedas.
2 http://www.fingertechrobotics.com/proddetail.php?prod=ft-kit-cobra-4wd-chassis
3 http://www.youtube.com/watch?v=0sPd4nHu2wY
4 http://letsmakerobots.com/node/26219
5 http://www.youtube.com/watch?v=421NEFVahlA
CAPÍTULO 8. MOTORES 32
Como vemos tendremos dos criterios a la hora de elegir el motor. Si coinciden será perfecto, sino
habrá que llegar a una solución de compromiso. No podemos perder fuerza de empuje ası́ que habrá que
sacrificar velocidad. Como curiosidad el radio es igual en número al torque (aunque no en unidades).
Ruedas
35
CAPÍTULO 9. RUEDAS 36
Están realizadas con poliuretano de dureza Shore A20, lo que les confiere el mejor compromiso entre
dureza y tracción. Un material con dureza Shore A5-10 tendrá más tracción pero será más blando y
no resistirá el uso continuo. Por el contrario un material con dureza Shore A40-80 será más resistente
pero proporcionará menos tracción.
Se recomienda limpiar las ruedas con alcohol antes de cada combate para tener la máxima tracción.
Como son muy adherentes con gran facilidad cogen la suciedad del suelo y su rendimiento disminuye.
Hemos encontrado una única solución alternativa para conseguir ruedas de alta tracción. Se trata
de las tiras de Pololu de alta tracción. Tienen un diámetro de 66m y una anchura de 7mm. Su precio
es de 4✩ la tira por lo que las dos ruedas nos saldrı́an por un precio parecido al de las Cobra Wheels.
CAPÍTULO 9. RUEDAS 37
Como vemos la oferta de ruedas de alta tracción es muy reducida. Por ello como las ruedas son
una parte vital del robot la amplı́a mayorı́a de los robots avanzados customizan sus propias ruedas. A
continuación vamos a ver como conseguir ruedas de gran tracción de cualquier tamaño.
Material. Necesitamos Poliuretano para moldeo que normalmente se vende en dos botes A y
B. Para utilizarlo es necesario mezclarlo a partes iguales. También se necesita un spray de cera
antiadherente. Sirve para rociar el molde y evitar que el poliuretano se quede pegado.
Realizar el molde. Se puede emplear cualquier material con tal de que no sea poroso para que no
se produzcan burbujas en el poliuretano.
1 http://www.davehylands.com/Robotics/Marauder/Making-Tires/index.html
CAPÍTULO 9. RUEDAS 38
Moldear la pieza
Capı́tulo 10
10.1. Puente en H
Si queremos que el robot pueda moverse hacia adelante y hacia atrás debemos ser capaces de
cambiar la polaridad del voltaje que entregamos al motor. Esto se consigue mediante un puente en H.
Como se puede ver en la figura el puente en H consiste básicamente de cuatro interruptores los
cuales se abren o se cierran adecuadamente para entregar al motor un voltaje positivo o negativo.
10.1.1. L293D
Existe un circuito integrado llamado L293D que tiene en su interior 2 puentes en H y que es
perfecto para nuestro robot. Existen otros integrados con puentes de H pero es necesario montarlos en
un circuito con diodos rectificadores, el L293D los lleva dentro. Puede proporcionar una corriente de
pico de 1,2A por cada canal y 600mA continuamente. Si esto no es suficiente se pueden soldar dos en
paralelo para duplicar las prestaciones.
El tiempo que tarda en abrir y cerrar la salida es menor de 2 microsegundos, lo que nos permite
operar a frecuencias de hasta 500kHz. Para evitar problemas lo mejor seria utilizar frecuencias al menos
un orden menor, 50kHz.
El L293D tiene un pin de entrada en el que tenemos que proporcionar el voltaje de salida.
Cada canal tiene dos pines de control Input, un pin de Enable y dos pines de salida. Ası́ es como
fácilmente controlamos dos motores.
39
CAPÍTULO 10. CONTROLADOR DEL MOTOR 40
Cuando Enable está desactivado no se suministra ninguna tensión y en la salida tenemos una
alta impedancia. Este modo no nos interesa en el combate porque no frena al motor sino que lo
deja moverse libremente. Podrı́a interesarnos cuando estemos en el menú de configuración del robot y
queramos moverlo libremente con la mano.
Cuando el Enable está activado podemos elegir mediante los Input si en los pines de salida tenemos
la máxima tensión o tierra. Si en uno tenemos tensión y en el otro tierra el motor girará. Si ponemos
la misma tensión en ambos, ya sea tierra o la tensión de alimentación, el motor se frenará.
10.1.2. L293
El L293 es otra versión que no incorpora los diodos rectificadores pero que puede manejar una
corriente mayor. Puede proporcionar una corriente de pico de 2A por cada canal y 1A continuamente.
Es importante señalar que tanto el L293 como el L293D tienen una cierta caı́da de voltaje de-
bido a que su tecnologı́a esta basada en transistores bipolares. Se pueden perder hasta 1.7V en los
drivers basados en tecnologı́a de transistores bipolares. Existen alternativas como los drivers basados
en tecnologı́as FET que tienen perdidas de entre 0.2 y 0.4V pero son más caros.
10.1.3. MC33886VW
El MC33886VW es un circuito integrado que tiene un único puente en H. Puede suministrar
corrientes de hasta 5A y está hecho con tecnologı́a FET por lo que la caı́da de tensión en el driver es
mucho menor. La resistencia aparente es de 120mΩ y por eso retiene tan poco voltaje.
Puede controlarse mediante PWM de frecuencia de hasta 10kHz.
La desventaja es que su encapsulado tiene una distancia entre pines de 1.27mm en lugar de los
2.54mm estándar. Por lo tanto habrı́a que buscar algún zócalo especial para poder ensamblarlo en la
placa de prototipado.
Por lo tanto habrá que ver los requerimientos de corriente que tenga el motor y la rueda escogida. Si
podemos usaremos preferentemente el L293D ya que evita tener que montar los diodos rectificadores.
CAPÍTULO 10. CONTROLADOR DEL MOTOR 41
A la hora de comprarlos encontramos que ambos están descatalogados. Sin embargo se pueden
encontrar modelos equivalentes más modernos cuyos nombres son los mismos pero se han añadido
algunas letras más como L293DNEE4 o L293NE. Las especificaciones son prácticamente las mismas.
Cuanto mayor sea el ancho del pulso mayor será el voltaje medio.
τ
V = V0 (10.1)
T
Siendo τ el ancho de pulso, T el periodo y V0 la tensión de la baterı́a.
Microcontrolador
Como microcontrolador vamos a utilizar una placa de Arduino, concretamente una Duemilanove1
ya que estaba disponible en el laboratorio.
Arduino es una plataforma de hardware libre, basado en un placa con un microcontrolador y un
entorno de desarrollo. Las principales ventajas de Arduino son:
Es una plataforma realmente potente, se pueden hacer muchı́simas cosas con Arduino.
42
CAPÍTULO 11. MICROCONTROLADOR 43
La placa tiene 14 pines digitales que pueden funcionar como entrada o salida. De ellos 6 pueden
utilizarse como salidas PWM.
Arduino Duemilanove opera a 5V pero el voltaje de entrada recomendado está entre 7-12V,
pudiendo llegar a 20V. La Duemilanove usa el MC33269 como regulador de tensión para conseguir
los 5V necesarios para su funcionamiento. Este regulador tiene un ”DropOut” de 1V, esto es,
que para conseguir los 5V necesita estar alimentado con 6V, como mı́nimo
4 http://arduino.cc/en/Guide/ArduinoPro
5 http://arduino.cc/en/Main/ArduinoBoardMega
Capı́tulo 12
Pantalla LCD
Hemos decidido utilizar una pantalla LCD para poder interactuar con el microcontrolador. La idea
es que mediante la pantalla y unos botones podamos escoger estrategias de combate, ver los valores de
los sensores, emitir mensajes para ver lo que está haciendo el microcontrolador durante el combate y
poder depurar el software...
Utilizar una pantalla LCD dotará a nuestro robot de una mayor versatilidad y potencia.
Los únicos requisitos que pedimos a la pantalla es que su tamaño no exceda el del reglamento de
minisumo, es decir, que no sea más larga que 10cm. Por eso vamos a utilizar una pantalla LCD de 16
caracteres y 2 lı́neas que habı́a en el laboratorio. Además tenemos un módulo SerLCD de SparkFun
que facilita enormemente su utilización. Tan solo tenemos que conectar dos cables de alimentación y
otro al pin 1 de la placa Arduino para enviar el texto.
45
Capı́tulo 13
Sensores de Borde
Un robot de sumo que no pueda detectar el borde del tatami no tendrá ninguna posibilidad ante
un robot competitivo. Conseguir que el robot se mueva por el tatami sin salirse sólo es lo mı́nimo que
le podemos pedir al robot. Existen dos aproximaciones al problema de detectar el borde.
Detectar el desnivel. El reglamento marca que el dohyo tiene que estar 5cm elevado sobre el suelo.
Por lo tanto es posible utilizar sensores mecánicos que detecten este desnivel.
Detectar el cambio de color. El reglamento marca que el dohyo tiene que ser negro salvo un anillo
blanco de 5cm en el borde. Este cambio de color puede ser detectado y utilizado para evitar que
el robot abandone el ring.
46
CAPÍTULO 13. SENSORES DE BORDE 47
1. Fotorresistencia. Existen resistencias que varı́an su valor en función de la luz recibida. Uti-
lizarı́amos un LED para iluminar el suelo y una resistencia para medir la luz reflejada. Este
método tiene el inconveniente de que el cambio de valor de la resistencia no es rápido y un robot
veloz no podrá detectar el borde a tiempo.
2. Fototransistor. En este caso la corriente que atraviesa el fototransistor depende de la luz recibida.
La ventaja que tiene es que es mucho más rápido que la fotorresistencia.
3. Infrarrojos. Con las fotorresistencias y los fototransistores podemos usar luz visible e infrarroja.
Esto tiene el inconveniente de que la medida del sensor puede verse alterada por la luz de la
sala. Esto lo solucionan los sensores de infrarrojos ya que no son sensibles a la luz visible. La
desventaja es que no podemos apreciar a simple vista si el sensor está funcionando en caso de
problema. Sin embargo tenemos una solución muy a mano: las cámaras digitales son sensibles a
la luz infrarroja.
El CNY70 tiene unas dimensiones realmente reducidas de 7x7x6mm. Debe estar a una distancia
del suelo inferior a 5mm para funcionar con normalidad, además tiene un filtro de luz visible.
Cuando el fototransistor no recibe la luz se encuentra en corte y no permite el paso de la corriente.
Por el contrario cuando recibe la luz reflejada se satura y permite el paso de corriente. Podemos utilizar
un circuito como el siguiente para obtener el estado del fototransistor.
CAPÍTULO 13. SENSORES DE BORDE 48
Con este sencillo circuito si el sensor esta sobre la zona negra el fototransistor se encontrará en corte
y la tensión en la salida será nula. Por el contrario al llegar al borde el color blanco reflejará la luz contra
el transistor que comenzará a conducir y a tendremos una tensión alta en la salida. Podrı́amos haber
hecho que respondiera al revés pero teniendo en cuenta que la mayor parte del tiempo los sensores
estarán sobre el negro ası́ ahorramos corriente.
Con esta configuración únicamente tendremos que llevar al sensor 3 cables ya que la alimentación
será común a dos de sus cuatro patillas.
En la hoja de caracterı́sticas del CNY70 vemos que la máxima corriente permitida por el LED es
de 50mA y que la corriente que circule por el transistor depende de la que circule por el LED. Un
valor adecuado de corriente serı́a 20mA, por eso se suele usar una resistencia de 220Ω con una fuente
de 5V. La resistencia del transistor basta con que sea lo suficientemente elevada para que cuando entre
en conducción absorba la mayorı́a de la tensión por lo que 10-47kΩ será suficiente.
consideramos que la mejor opción será crear una estrategia que haga esta corrección y activarla solo
si nos enfrentamos a un robot de estas caracterı́sticas.
Sensores de Proximidad
Los sensores de proximidad son utilizados para localizar a nuestro adversario en el ring. Hay dos
tipos de sensores de proximidad: los sensores de infrarrojos y los de ultrasonidos. Los dos basan su
funcionamiento en el mismo método: un emisor de ondas y un receptor.
50
CAPÍTULO 14. SENSORES DE PROXIMIDAD 51
hacia la parte trasera o los laterales para que sepamos hacia donde tiene que girar nuestro robot. A
continuación en una tabla se muestran los dos principales sensores binarios.
En nuestro caso nos interesa más el GP2Y0D340K dado que el diámetro del dohyo es de 80cm.
Los sensores binarios presentan la ventaja de ser más pequeños que sus hermanos analógicos.
Prácticamente son la mitad de largos.
El sensor GP2Y0A21Y serı́a perfecto para nuestro minisumo dado su rango 10 − 80cm. El único
fallo que tiene es que para distancias menores de 8cm disminuye el voltaje de salida como puede verse
en la gráfica siguiente.
CAPÍTULO 14. SENSORES DE PROXIMIDAD 52
Habrı́a que tenerlo en cuenta en el diseño para que nunca estuviese el robot enemigo completamente
pegado al sensor. También podrı́a usarse un sensor GP2Y0A41S de refuerzo pero vemos que adolece
del mismo defecto.
En caso de elegir estos sensores habrá que realizar pruebas para ver que tensiones obtenemos al
colocar el robot enemigo justo delante.
Para leer el valor de los sensores utilizarı́amos el conversor analógico-digital del microprocesador.
Finalmente en la siguiente figura se puede ver el tamaño de estos sensores. Todos tienen un enca-
puchado parecido.
CAPÍTULO 14. SENSORES DE PROXIMIDAD 53
Otra desventaja es que el rango de medida es mucho mayor. Esto en otras aplicaciones puede ser
positivo pero en nuestro caso no es útil ya que las medidas podrı́an ser perturbadas por elementos
ajenos al tatami.
CAPÍTULO 14. SENSORES DE PROXIMIDAD 54
Únicamente necesitamos tres cables para cada sensor. Dos para la alimentación y uno para la
salida.
Por otro lado vemos que los materiales porosos absorben más sonido a medida que aumenta la
frecuencia. Esto nos vendrı́a bien ya que los ultrasonidos tienen frecuencias altas. Encontramos un
material llamado Espuma acústica que absorbe el sonido.
Como vemos no podemos usar ambos tratamientos a la vez. Es preferible utilizar el de los sensores
infrarrojos ya que son más utilizados.
Este tema se trata más adelante en profundidad en la parte de Diseño en el capı́tulo de Robot
Antiradar.
Capı́tulo 15
Sensores de Contacto
Podemos utilizar sensores mecánicos conocidos como Bumpers para detectar cuando estamos en
contacto con el robot adversario.
15.1. Bumper
El bumper es un conmutador de 2 posiciones con muelle de retorno a la posición de reposo y con
una palanca de accionamiento.
Funcionamiento: En estado de reposo la pata común (C) y la de reposo (R) están en contacto
permanente hasta que la presión aplicada a la palanca del bumper hace saltar la pequeña pletina
acerada interior y entonces el contacto pasa de la posición de reposo a la de activo (A), se puede
escuchar cuando el bumper cambia de estado, porque se oye un pequeño clic, esto sucede casi al final
del recorrido de la palanca.
56
CAPÍTULO 15. SENSORES DE CONTACTO 57
Lo ideal es alimentar los motores con una tensión entre 6-9V. Alimentarlos con tensiones superiores
disminuirı́a su tiempo de vida y no queremos que se nos estropeen durante el campeonato de sumo.
El problema que tenemos haciendo esto es que todos los sensores suelen funcionar con una ali-
mentación de 5V. Podemos solucionar esto gracias a que la placa Arduino tiene un regulador de tensión
para conseguir los 5V necesarios. Por lo tanto utilizaremos la baterı́a para alimentar los motores y la
placa Arduino y usaremos la placa Arduino para alimentar a los sensores.
16.1.1. Voltaje
El voltaje necesario para alimentar la placa Arduino debı́a estar entre 7-12V y el de los motores
entre 3-9V. Cuanto mayor sea el voltaje del motor mayores serán sus prestaciones como hemos visto
en el capı́tulo de motores. Pero alimentar el motor con un voltaje excesivamente superior a su voltaje
nominal afecta negativamente a la vida del motor y a la fiabilidad. La fiabilidad en un robot de
campeonato es algo primordial por eso no alimentaremos los motores con un voltaje superior a 9V (el
voltaje nominal de los motores examinados suele ser de 6V).
Por lo tanto buscaremos una baterı́a que nos proporciones entre 7-9V. De no ser posible es preferible
tener un voltaje mayor de 9V que uno menor de 7V ya que con un voltaje menor la placa Arduino
podrá presentar problemas de funcionamiento.
16.1.2. Capacidad
El reglamento de minisumo establece que los combates son a tres asaltos de 3 minutos cada uno.
Sin embargo ningún asalto dura tanto tiempo. Para llegar a una duración más acorde con la realidad
vamos a tomar los tiempos del IX Campeonato de Euskadi de Microbots a través de un vı́deo de
Youtube1 . Mediremos solo el tiempo que están moviéndose, obviando los 5 segundos iniciales.
Asalto 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Media
Duración (s) 4 14 4 4 3 7 4 5 7 8 8 3 4 12 6 3 7 3 3 5,1
Como podemos ver la media de duración de un asalto es de unos 5 segundos. Para tener en cuenta
que luego se tarda un rato en parar el robot vamos a doblar el valor para los cálculos: supondremos
que en cada asalto el robot está moviéndose 10 segundos de media.
1 http://www.youtube.com/watch?v=TFhFqj2Y51c
58
CAPÍTULO 16. ALIMENTACIÓN DEL ROBOT 59
Consideraremos también para los cálculos que el robot está encendido entre combate y combate
aunque los motores no estén funcionando. Supondremos que se realiza un asalto cada minuto. Por lo
tanto estará 10 segundos moviéndose y 50 segundos parado cada minuto.
Los requerimientos de corriente son los siguientes:
Componente Consumo (mA) Número Consumo total (mA) Coeficiente tiempo Consumo Real (mA)
CNY70 25 4 100 1 100
GP2Y0A21YK0F 30 5 150 1 150
Pantalla LCD 160 1 160 1 160
Arduino 20 1 20 1 20
Motor 750 2 1500 0,16 240
Total 1930 Total 670
Vemos que el consumo en un campeonato será de unos 700 mA. Por lo tanto usando una baterı́a
de 2000 mAh deberı́amos tener una autonomı́a en torno a las 3 horas.
Sin embargo si tenemos los motores moviéndose todo el rato el consumo de corriente aumenta
mucho. Con la misma baterı́a de 2000 mAh la autonomı́a se quedarı́a en poco más de 1 hora. Esto
tendremos que tenerlo en cuenta cuando estemos programando y probando el robot.
16.1.3. Dimensiones
Las dimensiones de la baterı́a son primordiales a la hora de diseñar un robot de minisumo. Su
tamaño determinará en buena medida la estructura del robot y la posición de los demás componentes.
Buscaremos por lo tanto baterı́as con alta densidad energética.
Tipo de baterı́a Voltaje (V) Densidad Energı́a (Wh/kg) Densidad Energı́a (Wh/l) Ciclos
Niquel-Cadmio 1.2 40-60 50-150 1500
Niquel-Hidruro de Metal 1.2 30-80 140-300 500-1000
Ion Litio 3.6 150-250 250-360 1200
Polı́mero de Ion Litio 3.7 130-200 300 500-1000
Elegiremos las baterı́as de Polı́mero Ion Litio por mayor densidad energética. Para colocarnos en
el rango de de los 7-9V utilizaremos dos celdas en serie que nos proporcionaran 7.4V.
62
Capı́tulo 17
Locomoción
La elección del método que usará el robot de sumo para moverse por el tatami determinará com-
pletamente el diseño del robot. A continuación se enumeran las distintas posibilidades.
17.1. Ruedas
Es la opción más utilizada para los robots de sumo. Esto es ası́ porque es el método más simple y
eficiente para mover un vehı́culo sobre una superficie. Se puede establecer una clasificación en cuanto
al número de ruedas.
Figura 17.1: Diagrama explicativo de como se eleva la parte delantera del robot al bloquear el avance
La otra ventaja consiste en que siempre tendremos el frontal del robot a ras de suelo. Como veremos
esto es muy importante cuando dos robots chocan frontalmente.
63
CAPÍTULO 17. LOCOMOCIÓN 64
Sin embargo al usar cuatro ruedas tendremos menos sitio para los otros elementos del motor.
También será más difı́cil conseguir que la cuña delantera quede a nivel de suelo. Por último y también
muy importante es que el robot de cuatro ruedas será lógicamente más caro de construir que el de dos.
17.2. Orugas
Es posible utilizar orugas como las que utilizan los tanques para mover nuestro robot. Es un método
visualmente muy atractivo y que proporciona una gran tracción. Sin embargo es complicado encontrar
unas orugas buenas y además el giro del robot es más lento y consume más energı́a. Si el terreno fuese
irregular serı́a una opción estupenda pero al ser completamente plano la sencillez de las ruedas hace
que sean más elegidas.
17.3. Patas
Se han construido algunos robots que se mueven caminando pero la tecnologı́a está lejos de llegar
a ser competitiva.
Teorı́a de Rampas
El objetivo del robot de minisumo es empujar a su adversario fuera del terreno de juego. La rampa
delantera será la que contacte con el robot contrario. Como vamos a ver a continuación el éxito del
robot depende en gran medida de realizar un buen diseño con la rampa.
La rampa puede diseñarse con dos enfoques distintos:
1. Intentar que nuestro adversario suba por la rampa haciendo que todo el peso posible de su robot
recaiga sobre el nuestro. De esta forma restamos tracción al contrario y la ganamos para nosotros.
2. Hacer una rampa muy reflectante para que cuando el robot adversario suba sobre ella sus sensores
de suelo se activen como si estuviera en el borde. Entonces el robot adversario retrocederá y
usaremos su propia fuerza para empujarle fuera del ring. Una debilidad de este enfoque es que
se puede programar el robot para que no caiga en esta trampa, de hecho nosotros lo vamos a
hacer. Simplemente hay que hacer que ignore los sensores de borde delanteros si tiene delante a
su adversario. La segunda debilidad es que si al retroceder se baja de la rampa nada nos asegura
que en el siguiente encontronazo vayamos a conseguir que el robot adversario suba sobre nuestra
rampa. Podrı́a pasar que nosotros subiésemos sobre la suya y perdiéramos el combate.
Vamos a usar el primer enfoque en el que diseñaremos la rampa para conseguir que el robot adversario
suba sobre el nuestro de tal manera que le robemos tracción.
Como vemos la cuña ejerce su peso contra el suelo y una fuerza horizontal hacia adelante. La fuerza
horizontal será proporcional al peso porque como sabemos:
66
CAPÍTULO 18. TEORÍA DE RAMPAS 67
F =µ·P (18.1)
Siendo µ el coeficiente de rozamiento.
En primer lugar podemos observar que si la parte delantera de la cuña se eleva la fuerza horizontal
que realiza el robot disminuye por dos razones.
La primera es que parte del peso del robot recae sobre el objeto que lo está elevando, por lo que
las ruedas perderán tracción al recibir menos peso y la fuerza que pueden realizar disminuirá.
La segunda es que al cambiar la dirección de la fuerza la componente horizontal inevitablemente
disminuirá.
H = F · cos(α) (18.2)
Por lo que cuanto mayor sea el ángulo de inclinación menor será la fuerza horizontal que pueda
ejercer el robot.
Por lo tanto vemos que si dos robots tiene igual fuerza pero uno consigue colar su rampa por debajo
del otro podrá vencerle con facilidad. Hay que añadir que al elevar el robot adversario parte de su peso
recae sobre el nuestro aumentando nuestra tracción. Por lo tanto vemos que conseguir colarnos debajo
del contrario o evitar que se cuelen debajo de nosotros es vital para poder ganar el combate.
Veamos cuales son los parámetros que determinan quien eleva y quien es elevado. Fácilmente
podemos observar que la pendiente es determinante.
18.2. Pendiente
Como se aprecia en el dibujo cuanto menor sea la pendiente hará que sea más fácil que una cuña
suba sobre otra.
Llevado al extremo la pendiente es nula con lo que tendrı́amos una lámina horizontal muy fina.
Es importante señalar que las consideraciones sobre la pendiente se aplican solo a la punta de la
rampa. Después la pendiente podrá y deberá aumentar.
Según parece la federación de sumo ha definido como cortante todo aquello que tenga un espesor
menor de 0.005 pulgadas o lo que es lo mismo 0.127mm. Habrá que buscar una placa metálica de
espesor un poco mayor para realizar la rampa.
Esto hace que los robots de dos ruedas tengan una cierta ventaja sobre los de cuatro o más a la
hora de introducir su rampa por debajo del adversario. Si un robot tiene dos ruedas necesariamente
parte de su peso recaerá sobre la rampa. En cambio un robot de cuatro ruedas tendrá la mayor parte
de su peso sobre las ruedas y muy poco o nada recaerá sobre la rampa. Sin embargo debido a esto el
robot de cuatro ruedas puede proporcionar una mayor tracción que uno de dos.
Vemos que ninguna configuración es superior a la otra ya que las dos tienen ventajas y debilidades.
Por ello nos hemos decantado por la opción de dos ruedas ya que es más económica y obliga a agudizar
el ingenio para diseñar una buena rampa delantera.
La variación de energı́a potencial resultante de elevar un ángulo pequeño la parte delantera es:
△ E = P · x · sen(α) (18.3)
Por lo tanto cuanto más cercano a la rampa este el centro de gravedad más difı́cil será que otro
robot levante al nuestro.
Evitar que el robot contrario pueda subir por completo encima del nuestro. La ventaja se consigue
haciendo que el robot contrario tenga un punto de apoyo sobre el suelo y otro sobre nuestro robot,
se pierde si deja de estar en contacto con el suelo.
18.7. Conclusión
Por lo tanto las caracterı́sticas que debe cumplir la rampa son:
La pendiente debe ser lo menor posible en la punta de la rampa. lo mejor es una lámina horizontal.
Cuanto más peso recaiga sobre la rampa mejor, pero no olvidemos que es a costa de perder
tracción.
Cuanto más cercano a la rampa este el centro de gravedad mejor
El perfil debe ganar altura y profundidad e impedir que el robot contrario pueda subirse encima
del nuestro
Capı́tulo 19
Métodos Constructivos
19.1. Plástico
Hoy en dı́a hay cientos de plásticos de uso común. Para la construcción de robots los plásticos más
usados son: plástico acrı́lico, PVC y policarbonato. A continuación vamos a explicar como se realizan
las principales operaciones de mecanizado con el plástico.
19.1.1. Doblado
Para doblar el plástico se calienta la zona a doblar y luego se dobla simplemente empujando con
la mano. Para conseguir ángulos se dobla sobre un trozo de madera.
Se pueden ver ejemplos en los siguientes vı́deos.
http://www.youtube.com/watch?v=iUTNcQlHiho
http://www.youtube.com/watch?v=ydpQdQXN0D4
19.1.2. Pegado
Se pueden pegar piezas de plástico fácilmente utilizando cemento acrı́lico. Es un pegamento que se
parece más al proceso de soldadura porque lo que hace es fusionar las piezas de plástico a unir.
En el siguiente vı́deo se puede ver como se realiza el proceso de pegado.
http://www.youtube.com/watch?v=hT6Ow cBTps
71
CAPÍTULO 19. MÉTODOS CONSTRUCTIVOS 72
19.1.3. Cortado
El cortado del plástico es muy sencillo ya que puede hacerse simplemente con un cúter. Primero
se marca el corte con la ayuda de una regla y luego se profundiza usando solamente el cúter. Cuando
la profundidad es suficiente se dobla la pieza hasta cortarla. El cúter usado en el vı́deo es un cúter de
garfio.
El siguiente vı́deo ilustra la facilidad con la que se corta el plástico.
http://www.youtube.com/watch?v=jCeHx-vvJ7k
19.1.4. Agujereado
El agujereado también es muy simple ya que el plástico no es un material duro. Se puede hacer con
cualquier taladro.
http://www.youtube.com/watch?v=eKXhq04ipPU
CAPÍTULO 19. MÉTODOS CONSTRUCTIVOS 73
Hoja de acrı́lico2 . La máxima finura es 1.54mm. Una hoja de 20x20 cuesta 10 dolares
Cúter
Taladro. Uno manual serı́a lo más práctico ya que el espesor va a ser pequeño.
Lija
19.2. Aluminio
De todos los metales disponibles el aluminio es el mejor para la construcción de robots. Es muy
resistente y es el más ligero de los metales comúnmente disponibles. Además es relativamente barato.
19.2.1. Doblado
Si la pieza es delgada se puede doblar sujetándola a un tornillo de banco y doblándola con la mano.
Si es más gruesa es necesario emplear una máquina especial para doblado.
http://www.youtube.com/watch?v=9DNHNY9BCRQ
http://www.youtube.com/watch?v=yAlqX3gFUuE
1 http://www.tapplastics.com/shop/product.php?pid=130&
2 http://www.tapplastics.com/shop/product.php?pid=334&
CAPÍTULO 19. MÉTODOS CONSTRUCTIVOS 74
19.2.2. Pegado
Para el pegado la opción más sencilla es utilizar pegamentos tipo Nural 21. Se consigue una sol-
dadura metálica en frı́o de gran resistencia.
19.2.3. Cortado
Para cortar el metal es necesario una sierra o una máquina de mecanizado.
http://www.youtube.com/watch?v=c4DT0Iv24RE
http://www.youtube.com/watch?v=Ytczt75-tqw
19.2.4. Agujereado
Se puede agujerear el metal con un taladro si se usa la broca adecuada. Si no es necesario utilizar
maquinaria tipo CNC.
http://www.youtube.com/watch?v=D4q8UhbpaG0
http://www.youtube.com/watch?v=bhqPUGzXNRE
19.2.5. Material
Placa de aluminio. Puede ser de 1mm de espesor.
Pegamento Nural 21
Dobladora
Sierra
Taladro eléctrico
19.3. Comparación
Plástico Aluminio
Doblado A mano con calor Máquina o tornillo de banco
Pegado Cemento acrı́lico Nural 21
Cortado Cúter Sierra o CNC
Agujereado Taladro manual Taladro o CNC
Grosor mı́nimo 1.5 mm 0.4 mm
Robot Antiradar
Para fabricar un robot antiradar podemos influir principalmente sobre dos aspectos del robot: la
geometrı́a y el material utilizado.
Aunque finalmente no se aplicaron estos principios en nuestro robot incluimos la información para
robots futuros.
20.1. Geometrı́a
La geometrı́a determinará de que manera se refleja la luz infrarroja que emiten los sensores de
los robots adversarios. Dependiendo de la forma del robot reflejará más o menos la luz infrarroja que
emita el contrario.
Imaginemos que tenemos una linterna y delante nuestra un espejo en posición vertical. Si apuntamos
al espejo la luz rebotará y nos iluminará a nosotros por completo. Ahora imaginemos que seguimos
apuntando al espejo pero que este empieza a inclinarse hacia atrás. Conforme se vaya inclinando la
luz que rebota y nos llega a nosotros irá disminuyendo, y será nula cuando el espejo este en posición
horizontal.
De la misma forma sucederá con nuestro robot. Si tenemos un robot que es un cubo reflejará per-
fectamente la radiación del contrario. Pero si tenemos un robot con forma de pirámide reflejará menos
cuanto más plana sea la pirámide. Lo mismo sucede si tenemos un robot muy alto frente a uno muy
bajo, el robot más alto tendrá una superficie mayor y por lo tanto podrá reflejar más que el robot
bajo.
Habrı́a que hacer pruebas inclinando un plano frente a los sensores para poder cuantificar la reduc-
ción de la radiación.
Otra prueba que habrı́a que hacer es como responden los sensores ante superficies de distinto
acabado. Es muy probable que los sensores respondan peor ante superficies irregulares, agujereadas
o con un perfil de montañas como el cartón que frente a una superficie totalmente lisa. Habrı́a que
comprobarlo y cuantificarlo.
20.2. Material
En óptica la reflectividad es la fracción de la radiación incidente que es reflejada por una superficie.
La reflectividad depende del ángulo de incidencia, del material y de la longitud de onda.
Teniendo en cuenta únicamente la dirección la mayorı́a de las superficies se pueden clasificar en
reflexión especular y reflexión difusa.
Para las superficies de reflexión especular la reflectividad será cercana a cero excepto en los
apropiados ángulos de reflexión. Esto podrı́amos utilizarlo para colocar una superficie especular
inclinada de forma que no refleje nada contra el contrario.
76
CAPÍTULO 20. ROBOT ANTIRADAR 77
Para las superficies de reflexión difusa la reflectividad es uniforme, la radiación se refleja igual
en todos los ángulos.
Por otra parte si tenemos en cuenta únicamente el material podrı́amos buscar tablas de reflectividad
pero no las encontrarı́amos. Podemos encontrar en cambio tablas de emisividad1 , que es la magnitud
inversa a la reflectividad. Un material muy oscuro tendrá una emisividad de 1 y uno muy reflectante
tendrá una emisividad cercana a 0.
Material Emisividad
Aluminio 0.02
Latón 0.03
Plata 0.01
Acero 0.08
Papel 0.93
Pintura negra 0.96
Madera 0.8
Goma 0.86
Habrá que hacer pruebas para ver cual de los dos es mejor. Es importante señalar que podemos
transformar una superficie de baja emisividad como el aluminio a una de baja emisividad simplemente
pintándola, pero no podemos hacer lo contrario tan fácilmente.
Ambos aviones, a pesar de su extraña apariencia y de sus diferencias, están basados en un concepto
primordial: evitar que las ondas de radar regresen a la base que las emitió. ¿Cómo hacen esto? De
1 http://www.monarchserver.com/TableofEmissivity.pdf
CAPÍTULO 20. ROBOT ANTIRADAR 78
manera muy simple. Como primer paso, están recubiertos de un material llamado RAM (”Radar
Absorving Material”, o Material absorbente de radar), que los unifica con un color oscuro.
El segundo paso es lograr que la figura del avión no resulte llamativa a las ondas radar. Esto se logra
diseñando especialmente el fuselaje del aparato para que el eco sea el mı́nimo posible. Los dos aparatos
”furtivos”, el F-117A y el B-2, no tienen superficies completamente verticales. Esto es, justamente,
porque en las áreas verticales como las presentes en la cola de los aviones es donde se producen los ecos
más fuertes, al igual que en los ángulos más agudos. Por eso las lı́neas de estos aviones, sean curvas o
rectas, nunca dejan ver ángulos cerrados.
Como vemos los aviones antiradar siguen los mismos principios que deben usarse en un robot.
Puede encontrarse más información sobre los aviones espı́a en el siguiente enlace2 .
2 http://cssbl.com/aire/stealth.htm
Capı́tulo 21
Cableado
En este capı́tulo se muestra el esquema de conexiones y los distintos componentes eléctricos que se
van a utilizar para realizarlo.
79
CAPÍTULO 21. CABLEADO 80
Cada sensor CNY70 va a tener su propia placa en la que estarán las dos resistencias del circuito
de acondicionamiento. De esa placa saldrán 3 cables que llegan a una placa donde se juntan los cables
de todos los sensores: los Sharp y los CNY70.
Recordamos que tenemos 5 sensores Sharp y 4 CNY70.
Toda la alimentación confluye en una placa en la que también está el interruptor del robot. De esta
forma no tenemos que colocar una placa sobre la placa Arduino ahorrando espacio.
En esta placa tenemos también el divisor de resistencias que nos permite medir el voltaje de la
baterı́a desde la placa Arduino.
Usaremos una última placa para sostener los botones de control del robot.
No. of Rows: 1
Gender: Header para macho, receptable para hembra
Contact Termination: Through hole Vertical
Esta pareja podrı́a servir. Visto lo visto es la mejor, buen precio y buena calidad.
http://es.farnell.com/fischer-elektronik/sl1-025-36z/macho-pin-2-54-mm-36vias/dp/9729038?Ntt=9729038
http://es.farnell.com/fischer-elektronik/bl1-36z/macho-hembra-2-54-mm-36vias/dp/9728856?Ntt=9728856
En Farnell tenemos por ejemplo las siguientes resistencias3 de 220Ωque soportan una potencia de
330mW lo que permitirı́a una corriente de hasta 66mA, muy superior a los 20mA que van a circular
realmente.
La resistencia de 10k disipará menos potencia ya que como sabemos la potencia disipada por una
2
resistencia es P = VR . Esto nos da una potencia máxima de 2.5mW. En Farnell la más barata4 es de
125mW ası́ que nos viene de sobra.
21.5. Interruptor
Para evitar que se gaste la baterı́a lo mejor serı́a poner un interruptor entre la baterı́a y la placa
Arduino y los motores. Lo más importante al elegir el interruptor es ver la corriente que puede soportar.
Recordamos que en condiciones muy adversas los motores pedirán 800mA cada uno. Por lo tanto
teniendo un interruptor que pueda suministrar 2A será suficiente.
En las hojas de caracterı́sticas vemos que aguantan mucha más corriente a alterna que a continua.
Hay interruptores de varios tipos.
3 http://es.farnell.com/koa/sg73p2bttd2200f/resistor-surge-220-ohm-1-1206/dp/1400167
4 http://es.farnell.com/multicomp/mc1206s4f1002t5e/resistor-thick-film-10kohm-125mw/dp/1632523
CAPÍTULO 21. CABLEADO 84
Farnell
Modelo Tipo Corriente (A) Largo (mm) Ancho (mm) Precio (E)
MULTICOMP - R13-608C1-02-BB-5A Slide 16A 37.2 22.4 0.93
C & K COMPONENTS - 1101M2S3CQE2 Slide 6A 12.7 6.6 4.35
KNITTER-SWITCH - MFP106D Slide 4A 13 7 2.69
MARQUARDT - 1811.1102-01 Toogle 10A 21 15 2.49
MULTICOMP - MC36328-001-01 Rocker 6A 22.7 15 0.56
CHERRY - PRK22J5DBBNN Rocker 3A 15 10 1.26
TE CONNECTIVITY / ALCOSWITCH Bat 5A 12.7 6.8 3.08
Como se puede ver en la tabla la opción que mejor conjuga tamaño y precio es KNITTER-SWITCH
- MFP106D5 . Puede verse una fotografı́a del interruptor a continuación.
21.6. Cables
Los cables van a ir conectados a las placas por medio de conectores. Por lo tanto no necesitamos
cable rı́gido, necesitamos cable formado por hilos. Para evitar confusiones en el conexionado lo mejor
es utilizar un código de colores.
5 http://es.farnell.com/knitter-switch/mfp106d/slide-switch-spdt/dp/807527
CAPÍTULO 21. CABLEADO 85
Rojo. 5V
Verde. 7,4V
Negro. Tierra
La opción más barata en Farnell es comprar bobinas de 7m. Cada bobina cuesta 3,68E. Por suerte en
el laboratorio hay cable suficiente y no necesitamos comprar.
Para otra ocasión abajo están los enlaces.
http://es.farnell.com/nte-electronics/wh26-00-25/hook-up-wire-25ft-26awg-cu-black/dp/1662108
http://es.farnell.com/nte-electronics/wh26-02-25/hook-up-wire-25ft-26awg-cu-red/dp/1662110
http://es.farnell.com/nte-electronics/wh26-05-25/hook-up-wire-25ft-26awg-cu-green/dp/1662115
http://es.farnell.com/nte-electronics/wh26-04-25/hook-up-wire-25ft-26awg-cu-yellow/dp/1662113
6 http://es.farnell.com/pro-power/hs510-1-22m/heatshrink-3-1-1-5mm-blk-1-22m/dp/1259194
7 http://es.farnell.com/roth-elektronik/re526-hp/buch-mikrosystemtechnik/dp/1172120
Capı́tulo 22
Condensadores
A la hora de diseñar un circuito eléctrico se realizan muchas simplificaciones. Una de ellas es suponer
que las fuentes de tensión proporcionan un voltaje constante, sin variaciones y sin ruido.
Sin embargo cuando nos trasladamos a la realidad vemos que eso no es ası́. La tensión proporciona-
da por la baterı́a tiene ruido eléctrico como todos los componentes reales. La tensión sufre variaciones
debidas por ejemplo a que la intensidad requerida en cada momento es distinta. Hay muchos compo-
nentes conectados a la baterı́a y la intensidad que necesitan varı́a con el tiempo, por ejemplo el motor
necesitará más corriente conforme mayor sea el par que tenga que efectuar. Por último la baterı́a no
es ideal y perfecta y las imperfecciones generarán variaciones en el voltaje.
Vemos que por distintas razones no vamos a tener una tensión constante para alimentar nuestros
componentes. Los componentes han sido diseñados para trabajar con una tensión constante por lo que
las variaciones van a afectar a su rendimiento y por extensión al del robot. El robot presentará com-
portamientos indeseados debido a las variaciones de voltaje.
Por suerte para mitigar estos cambios podemos recurrir a los condensadores. Un condensador se
puede idealizar como una resistencia que varia con la frecuencia de la tensión. Si la tensión es continua el
condensador tendrá una impedancia infinita, si la tensión tiene una frecuencia muy alta la impedancia
del condensador será muy baja.
De esta forma colocando un condensador entre la tensión de alimentación y la tierra podemos
atenuar las variaciones de tensión. El condensador mantendrá la componente continua de la tensión y
absorberá la componente variable.
Cuanto mayor sea la capacidad del condensador mayor será su poder para mantener la tensión
continua.
86
CAPÍTULO 22. CONDENSADORES 87
Los condensadores de 100µF sirven para estabilizar la tensión, tanto la de la baterı́a como la del
regulador de voltaje de 5V. Los condensadores de 0,1µF absorben los picos de corriente en los bornes
del motor.
Los condensadores grandes ayudan al regulador cuando hay variaciones grandes de la intensidad
como al encenderlo. Los condensadores pequeños eliminan el ruido y los picos.
En este capı́tulo vamos a contabilizar el peso de los elementos fijos para calcular cuanto peso
disponemos para elaborar la estructura.
Por lo tanto nos quedan 290 gramos para realizar la estructura. Lo más seguro es que nos sobre y
debamos utilizar unos lastres.
89
Capı́tulo 24
En este capı́tulo vamos a ir analizando los distintos diseños. Vamos a señalar las debilidades y
fortalezas de cada uno para ir marcando la dirección a seguir en el siguiente prototipo. De esta forma
mediante un proceso iterativo podremos llegar a un diseño correcto.
Vamos a empezar el análisis por el Mark II ya que el primero era muy preliminar y faltaban algunos
componentes como las baterı́as. En primer lugar comentaremos las debilidades porque nos mostrarán
que es lo que debemos reforzar de cara al siguiente diseño. Después ya comentaremos las fortalezas
que queremos conservar en el siguiente modelo.
Los criterios que se han seguido a la hora de diseñar son los siguientes:
Rápido
Flexible
Inteligente
Estético
24.1. Mark II
90
CAPÍTULO 24. ANÁLISIS DE LOS PROTOTIPOS 91
24.1.1. Debilidades
La altura es mayor de lo que me gustarı́a. El punto más alto del robot se sitúa a 54.8mm sobre
el suelo. Si tenemos en cuenta que el diámetro de las ruedas es de 28.6mm vemos que hay 26mm
de altura que podrı́an ser eliminados. Eliminando la pantalla LCD podrı́amos reducir la altura
en 11mm, pero no es una opción admisible.
La distancia teórica entre las baterı́a y las ruedas es de 1.44mm. Habrá que asegurar la rigidez del
montaje para evitar que se toquen. Una solución podrı́a ser utilizar unas ruedas menos anchas.
Otra podrı́a ser utilizar baterı́as más pequeñas.
La carcasa exterior es demasiado cuadriculada, habrı́a que buscar un diseño más atractivo. Tratar
de redondear las formas, estilizar el robot.
El espacio no está bien aprovechado. Hay mucho hueco en el interior de la carcasa
24.1.2. Fortalezas
Se reservan 23mm para la rampa frontal, lo que está bastante bien. El diseño de la rampa
podrá ser más agresivo cuanto más espacio tenga.
La baterı́a puede extraerse fácilmente, tiene el puerto Usb para programar la placa Arduino
también perfectamente accesible.
No parece que vaya a haber problemas con el cableado, hay espacio suficiente para que pasen los
cables.
Hay un hueco en el interior en el que meter lastre y poner el puente en H para los motores.
La pantalla podrı́a atornillarse al techo y utilizar cableado largo
Los sensores de distancia delanteros podrı́an retrasarse si no detectasen al robot contrario cuando
está muy cerca.
El montaje una vez construido el chasis no serı́a complicado
Podrı́a hacerse que la rampa delantera fuera intercambiable
CAPÍTULO 24. ANÁLISIS DE LOS PROTOTIPOS 92
24.2.1. Debilidades
La altura sigue siendo mayor de lo que me gustarı́a. El punto más alto del robot se sitúa a
54.9mm sobre el suelo.
La distancia teórica entre las baterı́a y las ruedas sigue siendo de 1.44mm. Habrá que asegurar
la rigidez del montaje para evitar que se toquen. Una solución podrı́a ser utilizar unas ruedas
menos anchas. Otra podrı́a ser utilizar baterı́as más pequeñas.
24.2.2. Fortalezas
El espacio interior está mejor aprovechado, todo está más comprimido y el espacio vacı́o es menor.
CAPÍTULO 24. ANÁLISIS DE LOS PROTOTIPOS 93
Las formas del robot se han estilizado, se ha perdido la forma cúbica del anterior prototipo.
El acceso a la baterı́a y al USB es inmediato
Se consigue reservar 27mm para la rampa frontal, 4 más que el diseño anterior.
24.3. Mark IV
En este prototipo se cambia el concepto. Se va a diseñar un robot que comience en posición vertical
y se mueva hacia atrás para que caiga y se coloque horizontal. De esta forma como no hay restricciones
de altura podemos hacer un robot más largo de lo normal.
24.3.1. Debilidades
El espacio interior no está aprovechado al máximo. Para poder poner la placa Arduino debajo de
los motores es necesario desplazarla hacia la parte delantera del robot, dejando un espacio vacı́o
atrás. También hay un espacio vacı́o entre los motores y la parte trasera.
La pantalla LCD no cabe extendida entre las dos ruedas, hay que girarla y se pierde la simetrı́a.
Podrı́a buscarse una pantalla más pequeña.
La posición de la baterı́a no está clara, no esta seguro que sea fácil extraerla.
Al comenzar el combate tiene que ponerse en posición horizontal perdiendo un poco de tiempo
Las ruedas no son muy gruesas y eso hace que proporcionen una tracción menor que los prototipos
anteriores
CAPÍTULO 24. ANÁLISIS DE LOS PROTOTIPOS 94
24.3.2. Fortalezas
El cableado va a ser sencillo, las conexiones encajan de una manera natural y no hay que hacer
vueltas extrañas ni agujeros para poder conectar los sensores.
Al comenzar en posición vertical no hay restricciones al espacio que puede ocupar la rampa
delantera. Se podrá experimentar con total libertad hasta encontrar la mejor solución.
24.4. Mark V
Este prototipo sigue el mismo concepto que el anterior: un robot que se gire al comienzo de del
combate. Sin embargo el diseño fue mucho más fluido y todo parecı́a encajar naturalmente.
24.4.1. Debilidades
Quizá sea excesivamente largo
CAPÍTULO 24. ANÁLISIS DE LOS PROTOTIPOS 95
Al comenzar el combate tiene que ponerse en posición horizontal perdiendo un poco de tiempo
Las ruedas no son muy gruesas y eso hace que la tracción proporcionada sea menor que prototipos
anteriores
24.4.2. Fortalezas
El cableado va a ser sencillo, las conexiones encajan de una manera natural y no hay que hacer
vueltas extrañas ni agujeros para poder conectar los sensores.
Al comenzar en posición vertical no hay restricciones al espacio que puede ocupar la rampa
delantera. Se podrá experimentar con total libertad hasta encontrar la mejor solución.
Hay un hueco habilitado en los bajos para poder colocar los lastres fácilmente
El alerón trasero que sirve para apoyar el robot cuando está en posición vertical también
servirá para coger el robot si se sale del ring.
La nueva posición de la pantalla permite reubicar la placa Arduino en una mejor posición
La carcasa tiene unas bisagras para poder operar fácilmente el interior del robot.
24.5. Mark VI
Este prototipo es una evolución directa del anterior. El principal cambio es la utilización de dos
ruedas en cada lado para solucionar el mayor problema de los dos prototipos anteriores, la falta de
tracción. Para ello se ha tenido que adelgazar el chasis entre las ruedas.
CAPÍTULO 24. ANÁLISIS DE LOS PROTOTIPOS 96
24.5.1. Debilidades
Quizá sea excesivamente largo
Al comenzar el combate tiene que ponerse en posición horizontal perdiendo un poco de tiempo
La capacidad de la baterı́a se ha reducido a la mitad debido al estrechamiento del chasis. No
obstante la autonomı́a sigue siendo elevada y el cambio de baterı́a es muy rápido y sencillo. Sin
embargo quizá sea posible colocar una segunda baterı́a en los bajos del robot.
24.5.2. Fortalezas
Todas las fortalezas del modelo anterior las comparte este
En los bajos del robot se ha habilitado un mecanismo para colocar lastre o una segunda baterı́a.
Este mecanismo es móvil y permite modificar la posición del centro de gravedad del robot.
Capı́tulo 25
Presupuesto
97
CAPÍTULO 25. PRESUPUESTO 98
Total 229,63
99
Capı́tulo 26
Chasis y carcasa
Para elaborar el primer prototipo se decidió utilizar chapa de aluminio de 0.4mm de espesor. Se
utilizó porque se podı́a doblar y cortar con facilidad, sin necesidad de maquinaria. De esta forma al
tratarse de un prototipo se podı́an introducir cambios sencillamente gracias a su facilidad de mecan-
izado. Las chapas se compraron en Pinturas Iturrama y tienen un tamaño aproximado de 25x50cm y
un precio de 3.9 euros.
Una vez las piezas han sido diseñadas hay que pensar como construirlas. Para ello hay que tener
en cuenta que como estamos trabajando con metal podemos realizar las siguientes operaciones:
cortado, doblado, agujereado y pegado. Probablemente habrá que dividir la pieza en otras más
sencillas que luego pegaremos. Es importante fijarse si podremos realizar todos los dobles que
deseamos o si por el contrario la pieza tiene demasiados dobles y es necesario dividir la pieza en
partes. Como resultado de este proceso obtendremos los planos a partir de los que fabricaremos
las piezas.
Ahora imprimimos los planos con el ordenador y los pegamos a la chapa de aluminio utilizando
pegamento de tubo, el pegamento que se utiliza en el colegio. La ventaja de usar este pegamento
es que es instantáneo, no tenemos que esperar, proporciona una buena fijación y sobretodo es
fácil de retirar una vez la pieza ha sido terminada. Un consejo es que si hemos pegado el plano el
dı́a anterior y aún no hemos mecanizado la pieza volvamos a pegarlo porque la unión se debilita
pasadas unas horas. También es importante imprimir los planos a escala 1:1 si no queremos
tener disgustos cuando tengamos el robot montado y no mida lo deseado. En el pegado tratar de
aprovechar el espacio al máximo.
100
CAPÍTULO 26. CHASIS Y CARCASA 101
Ahora vamos a cortar las piezas. Como ya se ha dicho anteriormente la chapa de aluminio escogida
es muy sencilla de mecanizar. Para ello nos ayudamos de un cúter y de una regla. Con ellos vamos
marcando los perfiles de las piezas. Realizamos varias pasadas para que la cuchilla penetre bien
en el aluminio. Para evitar equivocaciones es buena idea pintar los interiores de las piezas para
diferenciarlas del material que hay que retirar.
Figura 26.2: Marcamos con el cúter los perfiles de las piezas en la chapa
Una vez hayamos marcado el perfil de la pieza el corte se realiza doblando la chapa por la
zona marcada. Si la profundidad de la marca es adecuada la chapa se doblará sin problemas
y finalmente se partirá por la zona marcada. Si el corte es en el interior de la pieza, p.e. en
la carcasa el agujero que hay para el cable USB, no podremos ayudarnos del doblado. En este
caso tendremos que completar el corte utilizando el cúter y un punzón o taladro manual. Lo
primero que haremos será agujerear las esquinas del corte. Después colocaremos la chapa sobre
dos tablones de madera dejando un hueco pequeño entre ellos. Colocaremos la chapa para que la
zona a cortar este encima del hueco. Luego con el cúter ayudándonos de los agujeros realizados
y del marcado anterior recortaremos la pieza.
CAPÍTULO 26. CHASIS Y CARCASA 102
Agujereado. Ayudándonos de un punzón con el diámetro deseado realizaremos los agujeros in-
dicados en los planos. Cuando se realizan los agujeros es frecuente que en el lado contrario de
la chapa se acumule parte del material retirado. Es aconsejable retirarlo utilizando una lija, el
cúter o simplemente colocando la chapa entre dos tablones y ejerciendo presión con un tornillo
de banco o dándole un golpe con un martillo.
Doblado. El doblado se realiza con la ayuda de un tornillo de banco y varios tablones de madera.
En primer lugar se coloca la chapa entre dos tablones dejando asomar la zona a doblar y se fija
la posición con el tornillo de banco. Seguidamente con la ayuda de otro tablón se dobla la chapa.
Es un proceso sencillo y que no requiere apenas fuerza. Ángulos mayores de 90➸ son difı́ciles de
conseguir, es mejor invertir el diseño para tener un ángulo de menos de 90➸.
CAPÍTULO 26. CHASIS Y CARCASA 103
Pegado. Finalmente pegamos las distintas piezas para formar la pieza diseñada inicialmente. Para
ello utilizamos el pegamento Nural 21 que está especialmente diseñado para uniones metálicas y
se conoce como “soldadura en frı́o”. Las claves para obtener un buen resultado es conseguir que
las piezas queden bien sujetas mientras el pegamento se va secando. Para ello lo mejor es utilizar
pinzas. El tiempo de endurecimiento está en torno a las 12 horas. Por lo tanto es conveniente
realizar un pegado temprano a la mañana y otro a la noche. Hay que añadir que el pegamento
Nural 21 no solo sirve para pegar sino que también puede reparar grietas o cortes indeseados y
también llenar huecos.
Aislamiento. Es una buena idea recubrir con cinta aislante el interior de las partes que puedan
ser susceptibles de estar en contacto con la electrónica. De esta forma nos evitamos posibles
cortocircuitos que hagan que nuestro robot no funcione correctamente o que aumenten el consumo
de la baterı́a.
blanco, negro y rojo. También dado que el sumo es un deporte japonés hemos colocado en el
frontal una mascara de samurai. También hemos incluido el nombre del robot y el logotipo de la
Upna.
Figura 26.7: A la izquierda el diseño de Autocad y a la derecha los detalles añadidos en Photoshop
Imprimamos la cubierta con un spray de barniz brillante para conseguir un acabado realmente
profesional. Realizamos varias capas delgadas en vez de una gorda. Este paso es fundamental
porque al utilizar el barniz ya no da la impresión de ser papel, sino que parece plástico.
A continuación se puede ver como mejora el aspecto del robot al añadirle la cubierta. Sin duda es
mucho más profesional.
CAPÍTULO 26. CHASIS Y CARCASA 105
Electrónica
En primer lugar hay que diseñar la placa: elegir la ubicación de los componentes, conexiones entre
ellos... Para ello lo más sencillo es utilizar algún software de diseño de PCB. En nuestro caso
hemos utilizado Fritzing1 ya que es libre y además tiene varios modos de visionado en los que se
incluye una vista esquemática y una vista real muy útil para diseñar la placa. Este programa es
muy recomendable si vamos a trabajar con Arduino.
Una vez hayamos diseñado la placa lo primero que tenemos que hacer es recortar la placa de
prototipado para conseguir el tamaño deseado. Para ello utilizaremos una sierra de mano. No se
necesita una sierra de dientes grandes ya que se corta con mucha facilidad.
Ahora tenemos que cortar las calles de la placa donde no queramos que exista conexión. Una
buena forma es usar un lápiz para marcar aquellas pistas que hay que separar y luego utilizar
un cúter para cortar la unión metálica. Es obligatorio comprobar luego que realmente se ha
conseguido la separación. Para ello utilizamos un polı́metro con la función de continuidad que
realiza un pitido cuando dos puntos están conectados.
1 http://fritzing.org/
106
CAPÍTULO 27. ELECTRÓNICA 107
Soldar. Ahora vamos colocando los componentes en la placa según su tamaño de menor a mayor
y los vamos soldando. Soldamos también las pistas que queremos que estén conectadas. Es buena
idea sacar una foto a la placa y colorearla para que nos sirva de guı́a.
Comprobación de las conexiones. Comprobamos que todo ha sido realizado según el diseño uti-
lizando nuevamente el polı́metro. Comprobamos que no hay uniones indeseadas y que las deseadas
se han realizado de forma correcta. Reparar todos los fallos.
Finalmente proteger la soldadura pegando cinta aislante por encima. Además como luego se
colocará la placa en el chasis metálico con la cinta aislante evitamos que se creen contactos
indeseados.
Figura 27.5: Vista final de la placa con la parte inferior protegida por la cinta aislante
Capı́tulo 28
En este capı́tulo se comentan las variaciones que hubo que introducir en el prototipo para asegurar
su correcto funcionamiento.
Figura 28.1: Fotografı́a de la rueda loca colocada en los bajos del robot
109
CAPÍTULO 28. VARIACIONES SOBRE EL DISEÑO INICIAL 110
28.3. Plomos
Tras completar la construcción del robot el peso era de 400g. Pero las reglas de minisumo permiten
un peso de hasta 500g y como se ha visto anteriormente para que el robot sea competitivo tiene que
pesar lo máximo posible.
Por ello se procedió a lastrar el robot hasta alcanzar los 500g. La opción elegida fue utilizar plomos
de pesca y distribuirlos en el interior del robot pegándolos con pegamento termofusible. El plomo es
uno de los elementos más densos siendo su densidad más de 11 veces superior a la del agua.
Figura 28.3: A la izquierda el diseño inicial y a la derecha el diseño simplificado para agilizar la
construcción
28.5. Altavoz
Se añadió un pequeño altavoz en la la base para marcar los 5 segundos antes de que comience el
combate. También puede ser utilizado para la depuración del programa haciendo que emita un ruido
distinto según cada situación.
Puesta a Punto
112
Capı́tulo 29
Sistema Operativo
Para poder controlar el robot, cambiar su modo de comportamiento, ejecutar distintos progra-
mas... se va a crear una especie de sistema operativo sobre el que construiremos todo el resto de la
programación.
Todo el código fuente del programa puede encontrarse en la parte final del trabajo en el Anexo.
29.1. Arduino
Al programar la placa de Arduino tenemos dos partes bien diferenciadas: una secuencia de inicio y
un bucle que se repite indefinidamente.
29.1.2. Bucle
El funcionamiento de Arduino consiste en repetir una y otra vez el mismo programa. No se queda
esperando a que pulsemos un botón sino que está constantemente comprobando si el botón está pulsado
o no. Tendremos que tener en cuenta esto a la hora de diseñar el sistema operativo. En la programación
esta parte va en loop.
Estrategia: esta variable determina de que forma se va a comportar el robot en el modo combate.
Algunas de las estrategias son por ejemplo: Fluida, Suicida, Cobarde, Vueltas...
113
CAPÍTULO 29. SISTEMA OPERATIVO 114
Menú: esta variable determina nuestra posición en el menú. El menú tiene bastantes programas
para ejecutar como: ver el voltaje de la baterı́a, comprobar los valores de los sensores, cambiar
la velocidad del robot...
Mediante las variables anteriores podemos conseguir que el sistema operativo funcione como muestra
el siguiente esquema:
De esta forma podemos añadir nuevas estrategias y nuevas aplicaciones fácilmente. Tan solo tenemos
que añadir un nuevo valor a las variables de estado correspondientes. Por lo tanto el sistema operativo
es la base sobre la que edificamos todo lo demás.
Por poner un ejemplo si tuviésemos seleccionado el modo de combate y la estrategia suicida tan
solo se ejecutarı́an las partes del programa coloreadas de verde.
CAPÍTULO 29. SISTEMA OPERATIVO 115
Figura 29.2: Ejemplo para modo de combate y estrategia suicida. Las partes coloreadas en verde son
las que se ejecutan.
Sensores de Distancia
Los sensores de distancia empleados en el robot han sido los GP2Y0A21YK0F como ya se ha
comentado anteriormente. Estos sensores son analógicos, se basan en luz infrarroja y tienen un rango
de medida de 10-80 cm lo que es ideal para nuestro robot.
A la hora de diseñar el robot no disponı́amos de estos sensores en el laboratorio por lo que la única
información fiable que tenı́amos era la hoja de caracterı́sticas. Por eso cuando los montamos en el robot
nos encontramos con algunas sorpresas que ahora vamos a relatar para ayudar a resolver problemas
futuros.
30.1. Asimetrı́a
Uno de los mayores inconvenientes de estos sensores es que no son simétricos. Las lecturas de un
objeto situado a la derecha son distintas de las de un objeto situado a la izquierda. En la siguiente
gráfica se puede ver una representación aproximada de los valores que proporciona el sensor.
Esta asimetrı́a ha hecho que programar al robot para que rastree a su enemigo con los dos sensores
116
CAPÍTULO 30. SENSORES DE DISTANCIA 117
delanteros sea bastante complicada. Pero tiene una solución muy sencilla: colocar un sensor boca
abajo. De esta forma las lecturas de los sensores delanteros si serán simétricas y la programación se
simplificará mucho. En la siguientes gráficas se puede ver como hay que colocar los sensores para
obtener un resultado simétrico en su conjunto, podrı́amos obtener otra configuración simétrica girando
los dos sensores a la vez. En nuestro robot no se pudo hacer este cambio pero en futuros deberá hacerse
ası́.
Figura 30.2: A la izquierda una mala colocación de los sensores de distancia y a la derecha la colocación
correcta
30.2. Ruido
Los sensores de distancia utilizados han sido diseñados para funcionar en inodoros automáticos. Por
lo tanto las condiciones en las que los estamos utilizando difieren mucho de aquellas para las que fueron
diseñados. Esto hace que el ruido que obtenemos en la medida del sensor sea considerable y es necesario
hacer un tratamiento por software para evitar que nuestro robot se comporte inadecuadamente al recibir
información incorrecta de los sensores.
La primera medida es la de colocar un umbral de detección. Toda lectura por debajo de ese umbral
será ignorada. Para determinar el umbral hay que examinar cuidadosamente las lecturas del sensor.
En nuestro caso situábamos el umbral en 200, en una escala en la que 1023 son 5V, lo que serı́a
aproximadamente 1V.
La segunda medida es no considerar que el sensor ha detectado algo hasta que tenemos varias
lecturas seguidas por encima del umbral. De esta forma eliminamos casi completamente el ruido porque
la frecuencia del ruido suele ser alta y por lo tanto el tiempo en el que superará el umbral será corto.
El siguiente esquema resume el tratamiento que se le ha dado al ruido de los sensores GP2Y0A21YK0F.
CAPÍTULO 30. SENSORES DE DISTANCIA 118
A la hora de probar las diferentes estrategias se vio que habı́a momentos en los que el robot se
encabritaba levantando la parte delantera. Esto lo dejaba en una posición muy vulnerable ya que si
en ese momento nos atacaba el contrario se coları́a fácilmente por debajo y nos empujarı́a sin esfuerzo
hacia el exterior del dohyo. Por eso se realizó un estudio que desembocó en la estrategia Fluida, llamada
ası́ porque las transiciones entre los movimientos se realizan fluidamente y sin que se levante apenas
la rampa delantera.
El tiempo mı́nimo de transición que se mostró exitoso fue de 300ms, dedicando 100ms a cada una
de las tres partes de la transición. Cuando se mira al robot no se aprecia que que vaya más lento y que
frene.
119
Capı́tulo 32
Aplicaciones
En este capı́tulo se describen las aplicaciones que pueden ser accedidas desde el menú. Puede verse
una demostración de las aplicaciones en el siguiente vı́deo1 .
Estrategia Está aplicación nos permite seleccionar entre las distintas estrategias que tiene almace-
nadas el robot como: Fluida, Suicida...
Velocidad Está aplicación nos permite cambiar la velocidad entre unos valores fijados: 128, 160,
192, 224, 255. Cuanto mayor es el número mayor es la velocidad.
Sensor Trasero Con esta aplicación podemos activar o desactivar el uso del sensor trasero. Cuando
el sensor trasero está activo y detecta algo lo que el robot piensa es que el enemigo está detrás y se
gira para enfrentarlo. Pero puede suceder que el sensor trasero se active porque el robot enemigo eleve
1 http://www.youtube.com/watch?v=Rer1351Ze9A
120
CAPÍTULO 32. APLICACIONES 121
nuestra parte frontal haciendo que el sensor trasero detecte el suelo. En esa situación tratarı́a de girar
y esto harı́a que fuese muy fácil empujarle hacia atrás. Por eso es útil tener la opción de desactivarlo
frente a ciertos oponentes.
Luz Esta aplicación permite activar o desactivar la luz de la pantalla LCD. De esta forma se puede
ahorrar baterı́a.
Reset A veces puede ser útil resetear la placa de Arduino y eso es lo que hace está aplicación.
Leer Sharp Está aplicación nos muestra por la pantalla las lecturas de los sensores de distancias.
Nos permite comprobar que todo va bien antes del combate.
Radar Está aplicación utiliza los dos sensores delanteros para mostrar en la pantalla donde está el
objeto que tiene delante.
CNY70 Está aplicación nos muestra por la pantalla las lecturas de los sensores de borde. Muestran
un 0 si la superficie debajo es negra y un 1 si es blanca.
CAPÍTULO 32. APLICACIONES 122
Baterı́a Nos muestra el voltaje de la baterı́a y de esta forma podemos inferir cuanto tiempo más
disponemos para usar el robot. Cuando la baterı́a está completamente cargada puede llegar a 8.3V y
es necesario recargarla cuando llega a unos 7.3V.
Prueba Motor Esta aplicación realiza una secuencia con los motores que nos permite comprobar
si hay fallos. Fue especialmente útil cuando se empezaron a desgastar los agujeros para el eje de las
ruedas de plástico.
Prueba Huir Esta aplicación sirve para ver el comportamiento del robot cuando llega al borde del
dohyo.
Caı́da Forzada Esta aplicación sirve para comprobar que el paso de posición vertical a horizontal
funciona correctamente.
Banco de pruebas Esta aplicación sirve para meter código nuevo y ver como funciona. Si es útil
después se saca del banco de pruebas y se crea una nueva aplicación.
Duración de la baterı́a
Anteriormente en la parte de Elección de Componentes se habı́a estimado que el consumo del robot
en parado seria de unos 450 mA y con los motores funcionando al máximo podria llegar casi a los 2000
mA.
Teniendo en cuenta que nuestras baterı́as tienen una capacidad de 1000 mAh fácilmente se calcula
que la duración de la baterı́a en parado serı́a de unas 2 horas y con el robot funcionando a máxima
potencia durarı́a media hora.
Pero es aconsejable hacer una prueba real para no encontrarnos con sorpresas. Por eso realizamos
una prueba de descarga de la baterı́a con el robot parado y mostramos los resultados a continuación.
Como se ve la duración fue aproximadamente de dos horas tal y como se habı́a calculado.
No se realizó una prueba de funcionamiento continuo del robot porque ese no es su modo de
funcionamiento normal. En un campeonato hay tiempo de parada entre cada asalto y cada combate.
Por eso para evitar posibles averı́as por sobrecalentamiento en los motores o en la electrónica por
123
CAPÍTULO 33. DURACIÓN DE LA BATERÍA 124
Programación
125
Capı́tulo 34
Estrategia Fluida
Esta es la estrategia estándar que utiliza Adsumoto. Su nombre viene de que es una evolución de
una estrategia anterior en la que se incorporan las transiciones de movimientos para que los cambios
sean fluidos. Puede verse una demostración en el siguiente vı́deo1 .
Como se ve en primer lugar comprobamos que no estamos en el borde del dohyo y si es ası́ procede-
mos a detectar donde está el adversario y movernos hacia él. Esto hace que prioricemos el mantener el
robot en el área de juego sobre encontrar al contrario. Lo primero es sobrevivir y después ya buscaremos
al contrario.
1 http://www.youtube.com/watch?v=ClTWrSS48wY
126
CAPÍTULO 34. ESTRATEGIA FLUIDA 127
Estrategia Suicida
Esta es una estrategia hermana de la anterior Fluida. La única variación que presenta es como
reacciona cuando detecta que el borde del dohyo está delante.
Existen robots de sumo que despliegan estructuras planas blancas a ras de suelo. De esta forma
cuando el robot adversario se sitúa encima de esas estructuras piensa que está en el borde y retrocede.
Cuando esto ocurre el robot que ha desplegado las estructuras tiene todas las de ganar ya que ni
siquiera tiene que empujar al enemigo, este se mueve solo hacia atrás.
Para evitar que nos suceda esto hemos creado la estrategia Suicida. Cuando el robot detecta que el
borde del dohyo está delante no se moverá hacia atrás automáticamente. Primero leerá los sensores de
distancia delanteros. Si estos no detectan nada significará que realmente estamos en el borde del dohyo
y deberemos dar marcha atrás. Pero si detectan algo delante será el robot que trata de engañarnos y
seguiremos hacia delante para empujarle.
Esta estrategia se utilizará solo ante robots adversarios que puedan llegar a engañarnos ya que al
tener que leer los sensores de distancia necesitamos un mayor tiempo de procesamiento y por lo tanto
la frecuencia a la que se ejecuta el programa es menor.
Figura 35.1: Comparativa entre las dos estrategias y robot con rampa horizontal brillante
131
Capı́tulo 36
Estrategia Vueltas
Esta estrategia consiste en utilizar el robot como un siguelı́neas. La lı́nea que debe seguir es la
separación entre la zona negra y blanca del dohyo.
Por lo tanto lo que hace el robot es buscar el borde del dohyo y después dar vueltas alrededor
del terreno de juego. Si nuestro robot es más rápido que el contrario no podrán alcanzarnos mientras
estemos girando. Lógicamente no podemos estar todo el combate rehuyendo el cuerpo a cuerpo, llegado
un momento deberı́amos cambiar a una estrategia que busque chocar al contrario.
Lo mejor serı́a comenzar dando vueltas al ring y cuando detectásemos al contrario dejar de dar
vueltas y tratar de movernos para atacarle por un lateral o por la retaguardia.
Puede verse la estrategia Vueltas en el siguiente vı́deo1 .
1 http://www.youtube.com/watch?v=4mYK0H5tTQM
132
Capı́tulo 37
Estrategia Cobarde
Esta no es una estrategia de combate propiamente dicha sino un modo de funcionamiento para
demostrar las posibilidades del robot.
En este modo el robot utiliza los sensores de distancia para escanear sus alrededores en busca de
amenazas. Si detecta algo en las proximidades huirá pero siempre tratando de no perder de vista a su
enemigo. Retrocederá como un animal asustado pero plantando cara por si tuviese que atacar.
Este modo de funcionamiento podrı́a evolucionar en una estrategia de combate si además usáramos
los sensores de suelo para evitar salirnos del dohyo. En ese caso serı́a una estrategia que consistirı́a en
evitar al contrario a toda costa buscando que se le gaste la baterı́a o bien que se salga del dohyo.
Puede verse la estrategia en el siguiente vı́deo1 .
1 http://www.youtube.com/watch?v=x7Dk51UHPv8
133
Capı́tulo 38
Estrategia WallRace
Esta no es una estrategia de combate propiamente dicha sino un modo de funcionamiento para
demostrar las posibilidades del robot.
Esta modo de combate consiste en que el robot avance hacia adelante manteniéndose cerca de
la pared. Si estamos en una habitación cerrada el robot se dedicará a dar vueltas a la habitación
manteniendo la distancia con la pared más o menos constante.
1 http://letsmakerobots.com/node/928
2 http://www.youtube.com/watch?v=YqaCvLFgOtg
134
Capı́tulo 39
Memoria en Arduino
Para programar el robot hemos utilizado una placa de Arduino Duemilanove, que según sus especi-
ficaciones tiene una memoria de 32 KB de los cuales 2 KB son utilizados por el gestor de arranque
(bootloader). Por lo tanto teóricamente nos quedarı́an 30 KB para poder programar el robot.
Sin embargo en la práctica hemos hallado problemas de funcionamiento cada vez que superábamos
la barrera de los 25 KB. Esta cota deberá ser tenida en cuenta en futuros proyectos con Arduino ya
que puede ser escasa para determinadas aplicaciones.
Esto ha hecho que hayamos tenido que optimizar el código para poder almacenar todos los modos de
funcionamiento que deseábamos. Una de las cosas que más memoria ocupa es el texto que enviamos a la
pantalla LCD. También es muy recomendable repasar cada cierto tiempo el código para ver que cosas
ya no estamos utilizando, que funciones se pueden mejorar... Por ejemplo la versión 26 del programa
ocupaba 24338 bytes y ya estaba cerca del lı́mite por lo que la versión 27 se limitó a mantener las
mismas funcionalidades pero optimizando el uso de la memoria, se consiguió que ocupase 19602 bytes
por lo que se ahorró unos 5 KB de memoria.
135
Parte VII
Campeonatos, Mejoras y
Conclusión
136
Capı́tulo 40
Participación en Robolid
Para poner a prueba el robot y conocer de primera mano a otros aficionados a la robótica se
decidió acudir a la competición de Robolid.
Robolid es un concurso de robótica organizado por la Asociación de Microbótica de la Universidad
de Valladolid (AMUVA). Hay distintas categorı́as como siguelı́neas, velocistas y sumo. Se han celebrado
ya diez ediciones del concurso por lo que es uno de los más importantes a nivel nacional.
137
CAPÍTULO 40. PARTICIPACIÓN EN ROBOLID 138
Habı́a mucha profesionalidad en la construcción de los robots. Por ejemplo un robot de la categorı́a
de sumo grande tenı́a un chasis construido con corte láser que habı́a costado 300 euros. Habı́a también
un robot que tenı́a un inhibidor de señal de infrarrojos que cegaba los sensores de distancia de sus
enemigos. Habı́a también un participante que activaba y desactivaba sus robots mediante un mando a
distancia.
40.2. Adsumoto
Adsumoto era uno de los robots más llamativos que participaron. Era el único que comenzaba el
combate en posición vertical, el único que tenı́a una pantalla LCD, altavoz... Además tenı́a el aspecto
exterior más cuidado y profesional de todos. Habı́a algunos robots que tenı́an los cables completamente
al aire frente a la carcasa decorada de Adsumoto.
40.4. Ruedas
Uno de los pocos aspectos que era llevado con secretismo era el de las ruedas. Al contrario que
nuestro robot que utilizaba unas ruedas comerciales estándar los demás utilizaban ruedas fabricadas por
ellos mismos. El proceso de fabricación y el material utilizado eran secretos que guardaban celosamente
cada aficionado o cada escuderı́a.
CAPÍTULO 40. PARTICIPACIÓN EN ROBOLID 139
Esta ha sido una de las causas principales de la derrota de Adsumoto. Las ruedas que utilizaban los
contrarios tenı́an mucha más tracción y pese a que el peso lo tenı́an peor distribuido eran capaces de
ejercer una fuerza mayor y ganaban el combate. Además las ruedas de Adsumoto tenı́an dibujo frente
a las ruedas lisas que utilizaban el resto de participantes.
Para la futura construcción de un robot de sumo debe ponerse especial énfasis en conseguir unas
ruedas muy adherentes.
Por ello serı́a buena idea implementar esa opción en nuestro robot ya que de esa forma a la vez que
se pone horizontal girarı́a para orientarse hacia el contrario y no perderı́a tiempo.
40.6. Conclusión
La participación en Robolid fue una gran experiencia que sirvió para resaltar las debilidades y
fortalezas de Adsumoto y poder marcar la dirección de su futura evolución. Además el intercambio de
conocimiento con los participantes fue muy enriquecedor.
Capı́tulo 41
Fortalezas de Adsumoto
En este capı́tulo se describen las principales fortalezas de Adsumoto para orientar la construcción
de robots futuros.
140
Capı́tulo 42
Mejorando a Adsumoto
En este capı́tulo se enumeraran las posibles mejoras que harı́an de Adsumoto un robot campeón.
42.1. Ruedas
La mejora de las ruedas serı́a probablemente la que elevarı́a más el rendimiento de Adsumoto.
En primer lugar es necesario comprar ruedas de alta tracción como las Cobra Wheels de Fingertech
comentadas en la parte de Elección de Componentes o moldear nuestras propias ruedas utilizando
siliconas. Es absolutamente primordial para construir un robot que pueda luchar por la victoria.
En segundo lugar se recomienda evitar las ruedas que tengan los bujes de plástico. Las ruedas de
Adsumoto tenı́an los bujes de plástico y se han desgastado mucho con el contacto con el eje metálico
del motor hasta el punto de que giraba el motor y la rueda no lo hacı́a. Esto supuso un gran problema
y hubo que utilizar pegamento como solución temporal para resolverlo.
Una buena idea serı́a utilizar un dinamómetro para poder medir la fuerza que ejerce el robot y
comparar distintas ruedas.
Como esta mejora suponı́a un fuerte desembolso económico y no aportaba nada nuevo al proyecto
se desestimó llevarla a cabo.
141
CAPÍTULO 42. MEJORANDO A ADSUMOTO 142
42.3. Acelerómetro
La utilización de un acelorómetro similar al que utilizan los móviles para saber si están en posición
vertical u horizontal serı́a muy interesante en un robot como Adsumoto. Ayudarı́a a corregir de manera
natural la posición del robot cuando se encabrita, servirı́a para controlar fácilmente la caı́da del robot
cuando pasa de la posición vertical a la horizontal.
A raı́z de la participación en Robolid se nos ocurrieron nuevos conceptos de robot de sumo que
mostramos a continuación. Algunos son un poco fantasiosos pero los presentamos porque podrı́an
conducir a otras ideas nuevas.
43.1. Roscobot
El roscobot serı́a un robot con forma de cilindro que girarı́a sobre si mismo a gran velocidad. Ası́ el
contrario no podrı́a empujarle sino que se deslizarı́a sobre la carcasa y se verı́a empujado por el giro.
De esta forma el roscobot podrı́a rodear al contrario y situarse en la retaguardia, cuando aprovecharı́a
la ventaja para empujarle fuera del terreno de juego.
143
CAPÍTULO 43. IDEAS PARA NUEVOS ROBOTS 144
Adsumoto en Internet
Desde el principio Internet ha sido la principal fuente de información a la hora de diseñar y construir
a Adsumoto. Si se ha podido construir un robot competitivo partiendo desde cero ha sido en gran
medida gracias al trabajo de otros aficionados que han compartido generosamente sus conocimientos
en la red.
Es necesario resaltar la página de LetsMakeRobots en la que los mienbros suben los robots que han
construido. Hasta el momento hay más de 2000 robots subidos lo que da una idea de la cantidad de
información disponible.
Para agradecer la ayuda se decidió subir a Adsumoto a LetsMakeRobots1 una vez estuviese termi-
nado.
A la hora de mostrar el robot lo mejor son los vı́deos, por ello se creo un canal de Youtube en el que
ir subiendo los videos de la evolución de Adsumoto. La repercusión ha sido realmente sorprendente.
Por ejemplo el vı́deo más visto tiene 405 reproducciones y ha sido visto en paı́ses como Estados Unidos,
India, Canadá, Alemania... A dı́a 16 de Agosto entre todos los vı́deos de Adsumoto sumaban más de
1200 reproducciones.
1 http://letsmakerobots.com/node/32435
146
Capı́tulo 45
Conclusión
Electrónica. Se ha tenido que seleccionar los componentes a utilizar, diseñar los circuitos para
que todo funcionase, buscar y comprar los componentes en la página de un proveedor, construir
y soldar los circuitos, analizar los circuitos para encontrar los fallos...
Diseño y Mecánica. Se ha trabajado con programas de diseño en 3d para crear el chasis del
robot y comprobar que todas las piezas encajaban en el modelo antes de construirlo. Se han
contemplado distintos métodos para construir el robot y se ha utilizado el más sencillo y eficaz
para construir un robot robusto.
Programación. Se ha creado un sistema operativo desde cero para el robot y se han creado
multitud de aplicaciones para aprovechar su potencial
Documentación. Se ha realizado una gran labor de búsqueda de información sobre los robots de
sumo. Motores, ruedas, sensores, baterı́as disponibles en el mercado han sido analizados y se han
seleccionado los que mejor cumplı́an con nuestros objetivos.
Al finalizar el proyecto creo que he aprendido a diseñar un aparato desde cero y a construirlo exitosa-
mente.
147
Parte VIII
Anexos
148
Capı́tulo 46
Recursos Utilizados
Miles, Pete y Carrol, Tom (2002). Build your own Combat Robot. McGraw-Hill Prof
Med/Tech Este esta más orientado a construir robots más grandes y mortı́feros pero si no se dispone
del primero sirve muy bien de apoyo.
http://letsmakerobots.com/ Imprescindible para cualquiera que quiera hacer robots. Hay robots
a montones y dan explicaciones de como se hizo, material utilizado... En la categorı́a de minisumo hay
un fabricante muy bueno “thesaxmachine”. Además permite registrarte y ver si hay usuarios cerca de
ti.
149
CAPÍTULO 46. RECURSOS UTILIZADOS 150
http://www.balticrobotsumo.org/default.asp?itemID=247&itemTitle=Cast
http://www.davehylands.com/Robotics/Marauder/Making-Tires/index.html
46.3. Tiendas
Pololu
Fingertech
Solarbotics
Parallax
Tamiya
Farnell
Superrobotica
HobbyKing. Para baterı́as
CAPÍTULO 46. RECURSOS UTILIZADOS 151
DealExtreme
TapPlastics. Acrı́lico y poliuretano.
Shoptronica
46.4. Arduino
http://www.arduino.cc/ Toda la información sobre Arduino. Instrucciones, ejemplos, foros...
http://fritzing.org/ Fritzing es un software libre que permite hacer esquemáticos de las conexiones
con Arduino de manera muy fácil y vistosa
Margolis, Michael (2010). Arduino CookBook. O’Reilly Media Un libro que tiene casi todo
lo que hay que saber sobre Arduino. Muy buenos ejemplos y muy bien explicados.
Capı́tulo 47
47.1. Encendido
El robot se enciende con el interruptor situado en la base.
Pero a veces hay problemas con la sincronización de la pantalla LCD. Por eso se ha puesto un
segundo interruptor que abre o cierra el pin de comunicación de la pantalla.
152
CAPÍTULO 47. INSTRUCCIONES DE USO DEL ROBOT 153
Si encendemos el robot y la pantalla no se ha sincronizado hay que seguir los siguientes pasos.
1. Apagar el robot
2. Desconectar la pantalla
3. Encender el robot
5. Conectar la pantalla
Código Fuente
2. Tipos
3. Menú
4. Pulsación de botón
5. Transiciones
7. Control Motores
8. Estrategia Fluida
9. Estrategia Suicida
13. Bonus
156
/*
ESTRUCTURA DEL PROGRAMA
*/
//********************************************************************************
// LIBRERÍAS UTILIZADAS
//********************************************************************************
#include <serLCD.h>
#include <SoftwareSerial.h>
#include "types.h"
//********************************************************************************
// PINES DE ARDUINO
//********************************************************************************
//Botones
#define btnSiguiente 2
#define btnIntro 1
#define btnAtras 0
//Pantalla
#define pantallaLCD 3
//Sensores Sharp
#define sharpI 3//Izquierda
#define sharpDI 2//Delantero izquierda
#define sharpDD 1
#define sharpD 0
#define sharpT 4
//Batería
#define bateria 5
//Sensores CNY70
#define CNY70DI 4
#define CNY70DD 6
#define CNY70TD 7
#define CNY70TI 5
//Pines para control del motor
#define motorI1 9
#define motorI2 8
#define motorD1 11
#define motorD2 12
#define altavoz 10
//********************************************************************************
// VARIABLES
//********************************************************************************
int velocidadMaxima=128;
//De 0-255 Me voy a mover en 128-160-192-224-255
byte velocidadAuxiliar=velocidadMaxima;
byte velocidadMinima=80;
//Variables motores
unsigned int motorI;
unsigned int motorD;
//Variable para activar 0/ desactivar 1 el sensor trasero.
boolean sensorTrasero=0;//Lo pongo activado de serie
case MENU:
switch (nivel) {
case FUERA: mostrarMenu();break;
case DENTRO: ejecutarAplicacion();break;
default: borrarEscribirLCD(" FALLO EN "," NIVEL"); delay(500);
}
comprobarBateria();
pulsacionBoton();
break;
//Esta funcioin ejecuta la aplicacion del menu que este seleccionada en ese momento.
void ejecutarAplicacion() {
switch (menu) {
case ESTRATEGIA: elegirEstrategia();break;
case SHARP: menuSharp();break;
case SHARP2: menuSharp2();break;
case CNY70: menuCNY70();break;
case BATERIA: menuBateria();break;
case LUZ: menuLuz();break;
case FANTASTICO: menuFantastico();break;
case RESET: softwareReset();break;
case RADAR: menuRadar();break;
case PRUEBAMOTOR: menuPruebaMotor();break;
case PRUEBAHUIR: menuPruebaHuir();break;
case PRUEBAESTRATEGIA: menuPruebaEstrategia();break;
case VERTICAL: menuVertical();break;
case HORIZONTAL2: menuHorizontal2();break;
case VELOCIDAD: menuVelocidad();break;
case BANCOPRUEBAS: menuBancoPruebas();break;
case SONIDO: menuSonido();break;
case SENSORTRASERO: menuSensorTrasero();break;
default: borrarEscribirLCD(" FALLO EN "," MENU");
}
}
}
// Esta función lee el valor de los sensores Sharp y lo muestra por pantalla.
// Esta optimizada para que los valores salgan siempre en la misma posición
void menuSharp () {
lcd.clear();
int lecturaDI=analogRead(sharpDI);
goTo(25);
if (lecturaDI>99) lcd.print("DI"+String(lecturaDI));
else
if (lecturaDI>9) lcd.print("DI "+String(lecturaDI));
else lcd.print("DI "+String(lecturaDI));
int lecturaDD=analogRead(sharpDD);
goTo(18);
if (lecturaDD>99) lcd.print("DD"+String(lecturaDD));
else
if (lecturaDD>9) lcd.print("DD "+String(lecturaDD));
else lcd.print("DD "+String(lecturaDD));
int lecturaI=analogRead(sharpI);
goTo(11);
if (lecturaI>99) lcd.print("I"+String(lecturaI));
else
if (lecturaI>9) lcd.print("I "+String(lecturaI));
else lcd.print("I "+String(lecturaI));
int lecturaT=analogRead(sharpT);
goTo(6);
if (lecturaT>99) lcd.print("T"+String(lecturaT));
else
if (lecturaT>9) lcd.print("T "+String(lecturaT));
else lcd.print("T "+String(lecturaT));
int lecturaD=analogRead(sharpD);
goTo(1);
if (lecturaD>99) lcd.print("D"+String(lecturaD));
else
if (lecturaD>9) lcd.print("D "+String(lecturaD));
else lcd.print("D "+String(lecturaD));
delay(100);
}
void menuSharp2 () {
int lecturaDI=analogRead(sharpDI);
goTo(26);
if (lecturaDI>200) lcd.print("XXX"); else lcd.print(" ");
int lecturaDD=analogRead(sharpDD);
goTo(18);
if (lecturaDD>200) lcd.print("XXX"); else lcd.print(" ");
int lecturaI=analogRead(sharpI);
goTo(12);
if (lecturaI>200) lcd.print("XXX"); else lcd.print(" ");
int lecturaT=analogRead(sharpT);
goTo(6);
if (lecturaT>200) lcd.print("XXX"); else lcd.print(" ");
int lecturaD=analogRead(sharpD);
goTo(1);
if (lecturaD>200) lcd.print("XXX"); else lcd.print(" ");
//delay(25);
}
//La funcion lee el valor de los sensores CNY70 y lo muestra por pantalla.
void menuCNY70 () {
lcd.clear();
byte lecturaDI=digitalRead(CNY70DI);
goTo(25);
lcd.print("DI="+String(lecturaDI));
byte lecturaDD=digitalRead(CNY70DD);
goTo(18);
lcd.print("DD="+String(lecturaDD));
byte lecturaTI=digitalRead(CNY70TI);
goTo(9);
lcd.print("TI="+String(lecturaTI));
byte lecturaTD=digitalRead(CNY70TD);
goTo(2);
lcd.print("TD="+String(lecturaTD));
delay(50);
}
if (lecturaDI>99) {
goTo(9);
lcd.print("DI:"+String(lecturaDI));
}
else {
if (lecturaDD>9) {
goTo(9);
lcd.print("DI: "+String(lecturaDI));
}
else {
goTo(9);
lcd.print("DI: "+String(lecturaDI));
}
}
goTo(posicion+16);
lcd.print("##");
delay(50);
}
nivel=FUERA;
lcd.clear();
}
void menuPruebaHuir() {
//Primero activo motores y eso y muestro los valores de los sensores
moverFrenar();
menuCNY70();
delay(2000);
//Ahora activo el mecanismo de huida
eCNY70 estado=sensoresSuelo();
switch (estado) {
case Z:break;
default: maniobraEvasivaFluido(estado);
}
//Lo repito por si estaba todo un lado en lo blanco
estado=sensoresSuelo();
switch (estado) {
case Z:break;
default: maniobraEvasivaFluido(estado);
}
moverFrenar();
nivel=FUERA;
lcd.clear();
}
void menuPruebaEstrategia() {
menuSharp();
delay(2000);
int herzios=0;
movimientoAnterior=QUIETO;
contadorDD=0;
contadorDI=0;
contadorD=0;
contadorI=0;
contadorT=0;
tiempoLento=millis();
unsigned long tiempoEstrategia=millis();
while (millis()-tiempoEstrategia<2000) {
switch (estrategia) {
//case AGRESIVA: estrategiaAgresiva() ; break;
case VUELTAS: estrategiaVueltas();break;
case FLUIDO: estrategiaFluido();break;
case SUICIDA: estrategiaSuicida();break;
case WALLRACE: estrategiaWallRace();break;
case COBARDE: estrategiaCobarde();break;
default: borrarEscribirLCD(" FALLO EN "," ESTRATEGIA");
delay(500); lcd.clear(); break;
}
herzios++;
}
nivel=FUERA;
menu=ESTRATEGIA;
moverFrenar();
delay(1000);
borrarEscribirLCD(" HERZIOS: "," "+String(herzios/2));
delay(2000);
lcd.clear();
}
moverAtrasPWM(255);
delay(75);
moverAdelantePWM(255);
delay(500);
//Ahora está levantado y lo que hay que hacer es frenarlo
//sin que se caiga. Primero frenamos el motor izquierdo
for (byte i=0;i<128;i++) {
motorIAdelantePWM(255-2*i);
delay(1);
}
moverFrenar();
nivel=FUERA;
lcd.clear();
}
//Modo de caída forzada. Tratamos de que llegue al suelo lo más rápido posible.
void menuHorizontal2() {
borrarEscribirLCD("CAMBIO A MODO"," HORIZONTAL");
delay(2000);
caidaForzada();
moverFrenar();
nivel=FUERA;
lcd.clear();
}
//Selección de velocidad
void menuVelocidad() {
switch (velocidadMaxima) {
case 128: borrarEscribirLCD("CAMBIANDO A","VELOCIDAD: 160");
cambiarVelocidad(160);break;
case 160: borrarEscribirLCD("CAMBIANDO A","VELOCIDAD: 192");
cambiarVelocidad(192);break;
case 192: borrarEscribirLCD("CAMBIANDO A","VELOCIDAD: 224");
cambiarVelocidad(224);break;
case 224: borrarEscribirLCD("CAMBIANDO A","VELOCIDAD: 255");
cambiarVelocidad(255);break;
case 255:
default: borrarEscribirLCD("CAMBIANDO A","VELOCIDAD: 128");
cambiarVelocidad(128);break;
}
delay(1000);
nivel=FUERA;
lcd.clear();
}
switch (velocidadMaxima) {
case 128: delayGiroLocoI=130; delayGiroLocoD=160;
limiteGiro=170-velocidadMaxima*2/5; randomGiro=limiteGiro; tiempoSalvacion=100;
break;
case 160: delayGiroLocoI=140; delayGiroLocoD=170;
limiteGiro=170-velocidadMaxima*2/5; randomGiro=limiteGiro; tiempoSalvacion=100;
break;
case 192: delayGiroLocoI=150; delayGiroLocoD=180;
limiteGiro=170-velocidadMaxima*2/5; randomGiro=limiteGiro; tiempoSalvacion=125;
break;
case 224: delayGiroLocoI=152; delayGiroLocoD=180;
limiteGiro=170-velocidadMaxima*2/5; randomGiro=limiteGiro; tiempoSalvacion=200;
break;
case 255: delayGiroLocoI=155; delayGiroLocoD=180;
limiteGiro=170-velocidadMaxima*2/5; randomGiro=limiteGiro; tiempoSalvacion=275;
break;
}
}
borrarEscribirLCD("EMPUJANDO A 255","");
moverAdelantePWM(80);delay (120);
moverAdelantePWM(255);delay(400);
moverFrenar();
delay(1000);
moverFrenar();
nivel=FUERA;
lcd.clear();
}
//Boton siguiente
if (digitalRead(btnSiguiente)==LOW) {
switch (modo) {
case COMBATE:
//Para no salir del modo combate accidentalmente comprobamos
//que de verdad se ha pulsado el boton
delay(delayCombate);
if (digitalRead(btnSiguiente)==LOW) transicionMenu();
break;
case MENU:
//El boton siguiente solo actua si no estamos dentro de una aplicacion
if (nivel==FUERA) {
//enum eMenu {ESTRATEGIA, SHARP, CNY70, BATERIA};
switch (menu) {
case ESTRATEGIA: menu=VELOCIDAD;break;
case VELOCIDAD: menu=PRUEBAESTRATEGIA;break;
case PRUEBAESTRATEGIA: menu=SENSORTRASERO;break;
case SENSORTRASERO: menu=SHARP;break;
case SHARP: menu=SHARP2;break;
case SHARP2: menu=RADAR;break;
case RADAR: menu=CNY70;break;
case CNY70: menu=BATERIA;break;
case BATERIA: menu=PRUEBAMOTOR;break;
case PRUEBAMOTOR: menu=PRUEBAHUIR;break;
case PRUEBAHUIR: menu=VERTICAL;break;
case VERTICAL: menu=HORIZONTAL2;break;
case HORIZONTAL2: menu=BANCOPRUEBAS;break;
case BANCOPRUEBAS: menu=LUZ;break;
case LUZ: menu=FANTASTICO;break;
case FANTASTICO: menu=SONIDO;break;
case SONIDO: menu=RESET;break;
case RESET: menu=ESTRATEGIA;break;
}
delay(delayBoton);
}
break;
}
}
//Boton Intro
if (digitalRead(btnIntro)==LOW) {
switch (modo) {
case COMBATE:
//Para no salir del modo combate accidentalmente comprobamos
//que de verdad se ha pulsado el boton
delay(delayCombate);
if (digitalRead(btnIntro)==LOW) transicionMenu();
break;
case MENU:
//El boton Intro solo actua si no estamos dentro de una aplicacion
if (nivel==FUERA) {
nivel=DENTRO;
lcd.clear();
delay(delayBoton);
}
break;
}
}
//Boton Atras
if (digitalRead(btnAtras)==LOW) {
switch (modo) {
case COMBATE:
//Para no salir del modo combate accidentalmente comprobamos
//que de verdad se ha pulsado el boton
delay(delayCombate);
if (digitalRead(btnAtras)==LOW) transicionMenu();
break;
case MENU:
switch (nivel) {
case DENTRO:
nivel=FUERA;
lcd.clear();
delay(delayBoton);
break;
case FUERA:
modo=COMBATE;
transicionCombate();
break;
}
break;
}
}
}
/*
TRANSICIONES
En esta pestaña desarrollamos las transiciones
del modo menu al combate y viceversa
Tambien los mensajes de inicio de programa
*/
void secuenciaInicio2() {
// unsigned long time=millis();
tone(altavoz,1200,100);
unsigned long pitido=millis();
lcd.clear();
for (int i=0;i<=15;i++) {
for (int j=0;j<58;j++) {
delay(5);
if ((millis()-pitido)>1000) {
pitido=millis();
tone(altavoz,1200,100);
}
}
goTo(i); lcd.print(">");
goTo(16+i); lcd.print(">");
delay(4);
}
movimientoAnterior=ADELANTE;
lcd.clear();
tiempoLento=millis();
delay(12);
tone(altavoz,400,400);
caidaForzada();
}
void mensajeInicio4() {
lcd.clear();
delay(500);
borrarEscribirLCD(" SUMO SOFTWARE "," VERSION V42");
delay(500);
lcd.clear();
}
void caidaForzada() {
//Movemos hacia atras para hacer caer
moverAdelantePWM(255);delay(5);
moverAtrasPWM(255);
delay(143);
moverAdelantePWM(255);
delay(75);
}
/*
FUNCIONES ESCRIBIR LCD
Estas funciones se utilizan para trabajar con las serLCD,
No hay que usar lcd.println porque surgen simbolos raros en pantalla
Me dice que en Arduino 1.0 no se puede hacer lcd.print(0xFE, BYTE );
se hace simplemente Serial.write(0xFE);
No se pueden escribir más de 16 caracteres por línea
*/
moverAdelantePWM(byte duty)
moverAtrasPWM(byte duty)
girarDerechaPWM(byte duty,int radio)
girarIzquierdaPWM(byte duty,int radio)
girarDerechaAtrasPWM(byte duty,int radio)
girarIzquierdaAtrasPWM(byte duty,int radio)
girarDerechaFluido(byte duty)
girarIzquierdaFluido(byte duty)
girarDerechaAtrasFluido(byte duty)
girarIzquierdaAtrasFluido(byte duty)
motorIAtrasPWM(duty);
motorDAtrasPWM(duty);
motorIAdelantePWM(duty);
motorDAdelantePWM(duty);
*/
//********************************************************************************
//Las siguientes funciones mueven el robot a máxima velocidad
//********************************************************************************
void moverAdelante() {
motorIAdelante();
motorDAdelante();
}
void moverAtras() {
motorIAtras();
motorDAtras();
}
void moverFrenar() {
motorIFrenar();
motorDFrenar();
}
void girarDerecha(){
motorIAdelante();
motorDAtras();
}
void girarIzquierda(){
motorIAtras();
motorDAdelante();
}
//********************************************************************************
//Las siguientes funciones mueven el robot a la velocidad deseada
//********************************************************************************
void moverAdelantePWM(byte duty) {
motorIAdelantePWM(duty);
motorDAdelantePWM(duty);
}
void moverAtrasPWM(byte duty) {
motorIAtrasPWM(duty);
motorDAtrasPWM(duty);
}
//Gira a la derecha a una velocidad determinada por el duty
//con el radio de giro deseado
void girarDerechaPWM(byte duty,int radio) {//el radio se da en cm
//duty determian la velocidad de giro de la rueda izquierda,
// tenemos que calcular la derecha
int N2=duty*(2*radio-8)/(2*radio+8);
//8 son los 8 cm que hay entre rueda y rueda.
byte duty2;
motorIAdelantePWM(duty);
if (N2>=0){
duty2=N2;
motorDAdelantePWM(duty2);
}
else {
duty2=-N2;
motorDAtrasPWM(duty2);
}
//********************************************************************************
//Las siguientes funciones mueven los motores a máxima velocidad
//(Son usadas por las anteriores funciones)
//********************************************************************************
//Hace girar el motor izquierdo a toda velocidad hacia delante
void motorIAdelante() {
digitalWrite(motorI1,HIGH);
digitalWrite(motorI2,LOW);
}
//Hace girar el motor derecho a toda velocidad hacia delante
void motorDAdelante() {
digitalWrite(motorD1,HIGH);
digitalWrite(motorD2,LOW);
}
//Hace girar el motor izquierdo a máxima velocidad hacia atras
void motorIAtras() {
digitalWrite(motorI1,LOW);
digitalWrite(motorI2,HIGH);
}
//Hace girar el motor derecho a máxima velocidad hacia atras
void motorDAtras() {
digitalWrite(motorD1,LOW);
digitalWrite(motorD2,HIGH);
}
//Frena el motor izquierdo
void motorIFrenar() {
digitalWrite(motorI1,LOW);
digitalWrite(motorI2,LOW);
}
//Frena el motor izquierdo
void motorDFrenar() {
digitalWrite(motorD1,LOW);
digitalWrite(motorD2,LOW);
}
//********************************************************************************
//Las siguientes funciones mueven los motores utilizando PWM
//(Son usadas por las anteriores funciones)
//********************************************************************************
//Hace girar el motor izquierdo hacia adelante a una velocidad proporcional al duty.
//Si duty=0 esta parado, si es 255 va a tope.
void motorIAdelantePWM(byte duty) {
analogWrite(motorI1,duty);
digitalWrite(motorI2,LOW);
}
//Hace girar el motor derecho hacia adelante a una velocidad proporcional al duty.
//Si duty=0 esta parado, si es 255 va a tope.
void motorDAdelantePWM(byte duty) {
analogWrite(motorD1,duty);
digitalWrite(motorD2,LOW);
}
//Hace girar el motor izquierdo hacia atras a una velocidad proporcional al duty.
//Si duty=0 esta quieto, si 255 va a tope.
void motorIAtrasPWM(byte duty) {
duty=255-duty;//Restamos para que cuando duty de entrada sea 255, este el I1 a 0.
analogWrite(motorI1,duty);
digitalWrite(motorI2,HIGH);
}
//Hace girar el motor derecho a máxima velocidad hacia atras
void motorDAtrasPWM(byte duty) {
duty=255-duty;
analogWrite(motorD1,duty);
digitalWrite(motorD2,HIGH);
}
//********************************************************************************
//Las siguientes funciones sirven para suavizar el cambio de velocidad de los motores
//y evitar que se levante el morro
//********************************************************************************
void arrancadoMotor1(byte n) {
byte paso=velocidadMaxima/n;
for (byte i=1;i<=n;i++) {
moverAdelantePWM(paso*n);
delay(1);
}
}
void arrancadoMotor2(byte n) {
byte velocidadUmbral=80;
byte paso=(velocidadMaxima-velocidadUmbral)/n;
for (byte i=1;i<=n;i++) {
moverAdelantePWM(velocidadUmbral+paso*n);
delay(1);
}
}
//********************************************************************************
//Las siguientes funciones mueven el robot con movimientos fluidos
//********************************************************************************
*/
void estrategiaFluido() {
eCNY70 estado=sensoresSuelo();
switch (estado) {
case Z: determinarDireccionFluido();break;
default: maniobraEvasivaFluido(estado);
}
}
//Funcion sensoresSuelo
eCNY70 sensoresSuelo() {
//Primero leemos todos los sensores y guardamos sus valores
boolean cny70DD=digitalRead(CNY70DD);
boolean cny70TD=digitalRead(CNY70TD);
boolean cny70DI=digitalRead(CNY70DI);
boolean cny70TI=digitalRead(CNY70TI);
//Ahora comprobamos que no esté todo el lado, porque si es así
//y vamos para atras nos caemos
if (cny70DD&&cny70TD)return D;
if (cny70DI&&cny70TI)return I;
//Ahora que no haya sensores delanteros activados
if (cny70DD)return DD;
if (cny70DI)return DI;
//Luego los traseros. Se podría hacer que no siempre se leyesen
//con un random por ejemplo
if (cny70TD)return TD;//Los quito porque creo que dan problemas
if (cny70TI)return TI;
//Si no hay que devolver Z
return Z;
}
void determinarDireccionFluido() {
int umbral=200;//Normalmente vale 200
unsigned long tiempo;
velocidadMaxima=velocidadAuxiliar;
//Primero comprobamos si hay algo delante
int lecturaDD=analogRead(sharpDD);
int lecturaDI=analogRead(sharpDI);
if (lecturaDD>umbral) contadorDD++;else contadorDD=0;
if (lecturaDI>umbral) contadorDI++;else contadorDI=0;
if ((contadorDD>4)||contadorDI>4) {
//Es igual que la otra solo que añadiendo la contabilizción de tiempo atras
void maniobraEvasivaFluido(eCNY70 sensorActivado) {
switch (sensorActivado) {
//Primero los sensores delanteros
case DD:case DI:
moverAtrasPWM(255);
delay(tiempoSalvacion); //Esto es porque se estaba saliendo un poco
while (digitalRead(CNY70DD)||digitalRead(CNY70DI)) {
moverAtrasPWM(255);
}
//moverFrenar(); //Esto es para evitar las sacudidas
if (sensorActivado==DD) {
movimientoAnterior=ATRASDERECHA;
//borrarEscribirLCD(" ATRAS "," DERECHA");
tiempoGirando=millis();
tiempoExtra=115;
}
else {
movimientoAnterior=ATRASIZQUIERDA;
//borrarEscribirLCD(" ATRAS "," IZQUIERDA");
tiempoGirando=millis();
tiempoExtra=115;
}
tiempoAtras=millis(); //Hacemos esto para que no se levante al girar
break;
//Ahora los casos en los que tenemos todo un lado en lo blanco
//Lo que hago es sacar la parte delantera para que pueda ir luego para adelante.
//Volvería a entrar solo con el sensor trasero activado.
case D:
while (digitalRead(CNY70DD)) {
girarIzquierdaFluido(velocidadAuxiliar);
}
movimientoAnterior=ADELANTE;
break;
case I:
while (digitalRead(CNY70DI)) {
girarDerechaFluido(velocidadAuxiliar);
}
movimientoAnterior=ADELANTE;
break;
//Funcion sensoresSuelo
eCNY70 sensoresSueloSuicida() {
//Primero leemos todos los sensores y guardamos sus valores
boolean cny70DD=digitalRead(CNY70DD);
boolean cny70TD=digitalRead(CNY70TD);
boolean cny70DI=digitalRead(CNY70DI);
boolean cny70TI=digitalRead(CNY70TI);
//Ahora comprobamos que no esté todo el lado,
//porque si es así y vamos para atras nos caemos
if (cny70DD&&cny70TD)return D;
if (cny70DI&&cny70TI)return I;
//Ahora que no haya sensores delanteros activados
if (cny70DD) {
int lecturaDD=analogRead(sharpDD);
int lecturaDI=analogRead(sharpDI);
if ((lecturaDD>300)||(lecturaDI>300))return Z;
else return DD;
}
if (cny70DI) {
int lecturaDD=analogRead(sharpDD);
int lecturaDI=analogRead(sharpDI);
if ((lecturaDD>300)||(lecturaDI>300))return Z;
else return DI;
}
//Luego los traseros. Se podría hacer que no siempre
//se leyesen con un random por ejemplo
if (cny70TD)return TD;//Los quito porque creo que dan problemas
if (cny70TI)return TI;
//Si no hay que devolver Z
return Z;
}
/*
ESTRATEGIA COBARDE
Aqui se encuentra la estrategia cobarde que huye de todo lo que
tenga cerca, se basa en otras estrategias anteriores
*/
void estrategiaCobarde() {
cocheFantastico2(contadorFantastico);
if (contadorFantastico==0) direccionFantastico=1;
if (contadorFantastico==15) direccionFantastico=0;
if (direccionFantastico) contadorFantastico++;
else contadorFantastico--;
determinarDireccionCobarde();
}
void determinarDireccionCobarde() {
int umbral=200;//Normalmente vale 200
unsigned long tiempo;
velocidadMaxima=velocidadAuxiliar;
//Enemigo delante
if (bA&&!bT) {
movimientoAnterior=ATRAS;
tiempoAtras=millis(); tiempoLento=0;
moverAtrasPWM(velocidadMaxima);
return;
}
//Enemigo a los lados
if (bD&&bI) {
movimientoAnterior=ATRAS;
moverAtrasPWM(velocidadMaxima);
return;
}
//Enemigo en un lado
if (bI) {
movimientoAnterior=ATRASDERECHA;
girarDerechaAtrasFluido(velocidadMaxima);
}
else {
//if (bD) {
movimientoAnterior=ATRASIZQUIERDA;
girarIzquierdaAtrasFluido(velocidadMaxima);
}
}
void movimientoAleatorio() {
int i=random(4);
if (i==0) numeroAleatorio=random(8);
switch(numeroAleatorio) {
case 0: girarDerechaAtrasFluido(50);break;
case 1: girarIzquierdaAtrasFluido(50);break;
case 2: girarDerechaFluido(50);break;
case 3: girarIzquierdaFluido(50);break;
default: moverFrenar();
}
}
/*
VUELTAS AL RING
Aquí voy a definir la estrategia que me permita dar vueltas al ring
entre la parte blanca y la negra
Me voy a apoyar sobre la base de la estrategia agresiva
*/
void estrategiaVueltas() {
//Primero vemos como están los sensores del suelo
eCNY70 estado=sensoresSuelo();
//Luego actuamos en consecuencia
vueltasRing(estado);
}
*/
void estrategiaWallRace() {
cocheFantastico2(contadorFantastico);
if (contadorFantastico==0) direccionFantastico=1;
if (contadorFantastico==15) direccionFantastico=0;
if (direccionFantastico) contadorFantastico++;
else contadorFantastico--;
determinarDireccionWallRace();
}
void determinarDireccionWallRace() {
//Variables que determinan el funcionamiento del programa
int umbral=200;//Normalmente vale 200
int distanciaPared=300;
int radioMaximo=40;
velocidadMaxima=velocidadAuxiliar;
//Primero comprobamos si hay algo delante
int lecturaDD=analogRead(sharpDD);
int lecturaD=analogRead(sharpD);
if (lecturaDD>umbral) contadorDD++;else contadorDD=0;
//Si tenemos un obstaculo delante giramos a la izquierda y salimos
if ((contadorDD>4)) {
girarIzquierdaFluido(velocidadMaxima);
return;
}
//Si no hay nada delante tratamos de mantenernos junto a la pared
int diferencia=lecturaD-distanciaPared;//Esto estará entre -300 y 300 aproximadamente
diferencia=diferencia/10;//Ahora entre 30 y -30
//Caso de que estamos en el rango querido
if ((diferencia<5)&&(diferencia>-5)) {
moverAdelantePWM(velocidadMaxima);
return;
}
if (diferencia>0) {
girarIzquierdaPWM(velocidadMaxima,radioMaximo-diferencia);
}
else {
girarDerechaPWM(velocidadMaxima,radioMaximo+diferencia);
}
}
/*
BONUS
En esta pestaña voy a poner cosas extra como por ejemplo el efecto coche fantástico
*/
// Restarts program from beginning but does not reset the peripherals and registers
void softwareReset()
{
asm volatile (" jmp 0");
}
Capı́tulo 49
Esquema eléctrico
A continuación se muestra el esquema eléctrico del robot. Ha sido elaborado utilizando el software
de Fritzing.
197
Capı́tulo 50
A continuación se pueden ver los distintos prototipos diseñados y por último los planos para con-
struir el chasis y la carrocerı́a de la versión final del robot.
199
9(5,)
$352%
)$%5
0DUN,,
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN,,
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN,,,
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN,,,
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN,9
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN,9
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN9
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN9
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN9,
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
0DUN9,
&$/,' 0$7(5,$/
1'(',%8-2
$
5
9(5,)
$352%
)$%5
&DUURFHUtD
&$/,' 0$7(5,$/
1'(',%8-2
$
9(5,)
$352%
)$%5
&KDVLV
&$/,' 0$7(5,$/
1'(',%8-2
$