You are on page 1of 253

Ingeniera Tcnica Industrial: Especialidad Electrnica Industrial

PROYECTO MIHRO
(MOBILE INTELLIGENT HEXAPOD ROBOT)
VOLUMEN I

IGNACIO PEDROSA LOJO


JULIN HORRILLO TELLO

OTOO 2008

VOLUMEN I
MEMORIA DESCRIPTIVA

IGNACIO PEDROSA LOJO


JULIN HORRILLO TELLO

Resumen
Este proyecto trata sobre el proceso de diseo y construccin de un robot hexpodo de
tres grados de libertad por pata. Su desarrollo engloba las tareas de estudio previo y anlisis
de otros proyectos similares, diseo CAD de toda su estructura mecnica, su construccin
a partir de chapa de aluminio, el diseo electrnico del hardware y su programacin en
lenguaje ensamblador. La caracterstica ms destacable de su diseo mecnico es que otorga
a sus seis patas la capacidad de detectar tanto el suelo como los posibles obstculos que
puedan interrumpir la trayectoria de cada paso. Su control est distribuido entre siete placas
electrnicas: un cerebro, o master, y seis esclavos encargados de controlar a cada una de
las patas, todas ellas basadas en el microcontrolador PIC16F88. El software desarrollado
permite controlar dinmicamente la posicin de cada articulacin con una precisin de
072 mediante la generacin de una seal PWM para cada servomotor estndar Futaba
S3003. La comunicacin entre los sistemas electrnicos se realiza a travs de un bus I2C,
por lo que se ha programado el soporte hardware que ofrece el PIC16F88 para los
dispositivos en modo slave y se ha implementado el modo master enteramente por
software. Adems del mdulo SSP (comunicacin I2C), el programa hace uso del mdulo
Timer1 y de las interrupciones externa y por cambio de estado de los pines RB4:RB7 del
microcontrolador. El robot se opera manualmente desde un teclado o mando conectado a
su placa master.

Resum
El projecte tracta sobre el procs de disseny i construcci dun robot hexpode de tres
graus de llibertat per pota. El seu desenvolupament engloba les tasques destudi previ i
anlisi daltres projectes similars, disseny CAD de tota la seva estructura mecnica, la seva
construcci a partir de xapa dalumini, el disseny electrnic del hardware i la seva
programaci en llenguatge assemblador. La caracterstica ms destacable del seu disseny
mecnic s que atorga a les seves sis potes la capacitat de detectar tant el terra com els
possibles obstacles que puguin interrompre la trajectria de cada passa. El seu control est
distribut entre sis plaques electrniques: un cervell, o master, i sis esclaus encarregats de
controlar cadascuna de les potes, totes elles basades en el microcontrolador PIC16F88. El
software desenvolupat permet controlar dinmicament la posici de cada articulaci amb
una precisi de 072 mitjanant la generaci dun senyal PWM per a cada servomotor
estndard Futaba S3003. La comunicaci entre els sistemes electrnics es realitza a travs
dun bus I2C, pel que sha programat el suport hardware que ofereix el PIC16F88 pels
dispositius en mode slave i sha implementat el mode master completament per
software. A ms del mdul SSP (comunicaci I2C), el programa fa s del mdul Timer1 i
de les interrupcions externa i per canvi destat dels pins RB4:RB7 del microcontrolador. El
robot sopera manualment des dun teclat o comandament connectat a la seva placa
master.

Abstract
This project is about the designing and construction of an hexapod robot with three
degrees of freedom each leg. Its development includes tasks such as previous study and
analysis of other similar projects, CAD designing of all its mechanical structure, its
construction using aluminium plating, the hardwares electronic designing and its
programming in assembler language. The most remarkable feature of its mechanical
designing is that it gives each one of its six legs the capacity of detecting not only the floor
but also the possible obstacles that may interrupt the trajectory of every step. Its control is
distributed in seven electronic plates: a brain, or master, and six slaves in charge of
controlling each one of the legs, all of them based on the PIC16F88 microcontroller. The
developed software allows dynamic control of the position of every articulation with a
072 precision by generating a PWM signal for each standard Futaba S3003 servomotor.
The communication among the electronic systems is carried out through an I2C bus, so it
has been programmed its hardware support on PIC16F88 for devices in "slave" mode, and
the "master" mode has been entirely implemented by software. Aside from the SSP module
(I2C communication), the program uses the Timer1 module and the external interruptions
as well as the interrupt by change on the microcontrollers RB4:RB7 pins. The robot
operates manually from a keyboard or a pad connected to its master board.

ndice
[Pgina en blanco]

ndice II

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

ndice de Contenidos
1

Prefacio __________________________________________________________ 1

Introduccin al Proyecto ____________________________________________2


2.1 Motivacin _____________________________________________________2
2.2 Antecedentes____________________________________________________3
2.2.1

Proyectos EUPMT _________________________________________3

2.2.2

Otros proyectos ____________________________________________4

2.3 Proyecto MIHRO ________________________________________________9


2.4 Contenido del proyecto actual ______________________________________ 12

2.4.1

Objetivos ________________________________________________ 12

2.4.2

Esquema general de MIHRO _________________________________ 14

2.4.3

Factores limitantes _________________________________________ 15

2.4.4

Contenido de la memoria ____________________________________ 16

2.4.5

Contenido del CD _________________________________________ 16

Diseo mecnico __________________________________________________ 17


3.1 Premisas ______________________________________________________ 17
3.2 Evolucin del diseo mecnico _____________________________________ 18

3.2.1

Metodologa y herramientas __________________________________ 18

3.2.2

Prototipos _______________________________________________ 19

3.2.3

Ensayos (maqueta de pruebas) ________________________________ 23

3.2.4

Caractersticas mecnicas finales ______________________________ 27

Fabricacin y montaje del esqueleto __________________________________ 30


4.1 Proceso de modificacin de los servos _______________________________ 32
4.2 Procedimientos de fabricacin del esqueleto. __________________________ 37
4.3 Proceso de montaje ______________________________________________ 57
4.3.1

Modificacin de los Servos __________________________________ 57

4.3.2

Construccin del Cuello _____________________________________ 57


P10 Cuello ___________________________________________ 57
Montaje del Cuello ______________________________________ 58

ndice III

ndice

4.3.3

Construccin del Trax _____________________________________ 58


P00 Trax Base _______________________________________ 59
P01 Tapa Superior _____________________________________ 60
P02 Tapa Inferior ______________________________________ 61
P11 Hombro Izquierdo _________________________________ 61
P12 Hombro Derecho __________________________________ 62
Montaje del Trax: ______________________________________ 63
Recuento de piezas de Trax + Cuello _______________________ 70

4.3.4

Construccin 1 de las patas (Cadera y Fmur) ____________________ 70


P03 Conector Cadera - Trax_____________________________ 71
P04 Conector Cadera Fmur ____________________________ 71
P05 Fmur ___________________________________________ 72
Montaje 1 de las patas ____________________________________ 74
Montaje de ____________________________________________ 77
Recuento de piezas de los 6 mdulos Cadera + Fmur ___________ 80

4.3.4

Construccin 2 de las patas (Tibias) ____________________________ 81


P06 Parte Fija de la Tibia ________________________________ 81
P07 Soporte Superior del Pi _____________________________ 84
P08 Parte Mvil de la Tibia ______________________________ 85
P09 Pi______________________________________________ 89
Montaje de las Tibias_____________________________________ 91
Montaje de las Tibias + Patas + Trax _______________________ 97
Recuento de piezas de las 6 Tibias __________________________ 102

Diseo electrnico _______________________________________________ 103


5.1 PIC16f88 ____________________________________________________ 103
5.2 Placa Patas grupo A ___________________________________________ 104
5.2.1

Caractersticas ___________________________________________ 104

5.2.2

Lista de componentes _____________________________________ 105

5.2.3

Serigrafas TOP y BOTTOM ________________________________ 106

5.2.4

Operacin ______________________________________________ 107

5.3 Placa Patas grupo B ___________________________________________ 110


5.3.1

Caractersticas ___________________________________________ 110

ndice IV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5.4 Placa Entrenadora ______________________________________________ 112


5.4.1

Caractersticas ___________________________________________ 112

5.4.2

Lista de componentes _____________________________________ 113

5.4.3

Serigrafas TOP y BOTTOM ________________________________ 113

5.4.4

Operacin ______________________________________________ 115

5.5 Otros elementos de hardware _____________________________________ 117

5.5.1

Programadora PIPO2 _____________________________________ 117

5.5.2

Otros mdulos ayudantes __________________________________ 118

5.5.3

Diseo previo de la placa de alimentacin ______________________ 118

Programacin ___________________________________________________ 119


6.1 Herramientas de programacin ____________________________________ 119
6.2 Programas ____________________________________________________ 122
6.2.1

Programa pata_iglu_R3.asm ______________________________ 122

6.2.2

Programa master_teclado.asm _____________________________ 125

Resultado _______________________________________________________ 127

Conclusin ______________________________________________________ 128

Bibliografa _____________________________________________________ 130


9.1 Proyectos de Final de Carrera EUPMT ______________________________ 130
9.2 Libros _______________________________________________________ 130
9.3 Data Sheets y Notas de Aplicacin _________________________________ 131
9.4 Artculos y otras publicaciones ____________________________________ 132
9.5 Pginas web __________________________________________________ 132

ndice V

ndice

ndice de Figuras
Figura F. 1: Robots de Carlos Vivancos y Marc Rivas. ____________________________4
Figura F. 2: IC-Hexapod _________________________________________________ 18
Figura F. 3: BF Hexapod V5 (inacabado) ______________________________________5
Figura F. 4: CH3-R ______________________________________________________5
Figura F. 5: Asterisk ______________________________________________________6
Figura F. 6: AMOS-WD06 _________________________________________________6
Figura F. 7: Mike Smyths Hexapod __________________________________________7
Figura F. 8: Bill-Ant ______________________________________________________7
Figura F. 9: Ejemplar de Lauron III del IRI __________________________________ 21
Figura F. 10: Lauron IVc __________________________________________________8
Figura F. 11: Melanie III __________________________________________________8
Figura F. 12: Diagrama de bloques general ____________________________________ 14
Figura F. 13: Diagrama de bloques de la comunicacin I2C _______________________ 15
Figura F. 15: Segundo prototipo de pata _____________________________________ 19
Figura F. 14 Primer prototipo de pata _______________________________________ 19
Figura F. 16: Detector de obstculo abierto ___________________________________ 33
Figura F. 17: Detector de obstculo cerrado __________________________________ 20
Figura F. 18: Tercer prototipo de pata _______________________________________ 20
Figura F. 19: Aspecto final del tercer prototipo ________________________________ 21
Figura F. 20: Primera etapa del diseo final de la pata ___________________________ 21
Figura F. 22: Modelo de cadera fija _________________________________________ 22
Figura F. 21: Modelo de cadera mvil _______________________________________ 22
Figura F. 23: Diseo final de las patas _______________________________________ 23
Figura F. 25: Caractersticas de la seal PWM _________________________________ 24
Figura F. 24: Control de posicin del servo ___________________________________ 24
Figura F. 27: Imgen panormica de la seal PWM obtenida _____________________ 38
Figura F. 28: Imgen 1 de detalle de la seal PWM obtenida ______________________ 38
Figura F. 29: Imgen 2 de detalle de la seal PWM obtenida ______________________ 25
Figura F. 26: Primera controladora _________________________________________ 25
Figura F. 30: Placa entrenadora ____________________________________________ 26
Figura F. 31: Collage con distintas vistas del diseo y el resultado finales _____________ 28
ndice VI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Figura F. 32: Patillaje del PIC16F88 ________________________________________ 103
Figura F. 33: Vista exterior de dos placas simtricas ____________________________ 118
Figura F. 34: Vista interior de dos placas simtricas ____________________________ 105
Figura F. 35: Serigrafa Top a escala real de la Placa Patas grupo A ______________ 119
Figura F. 36: Serigrafa Bottom a escala real de la Placa Patas grupo A ___________ 119
Figura F. 37: Serigrafa SST a escala real de la Placa Patas grupo A _______________ 106
Figura F. 38: Elementos 1 de la placa Patas ________________________________ 107
Figura F. 39: Elementos 2 de la placa Patas ________________________________ 107
Figura F. 40: Diagrama de pines del Conector Principal del grupo A _______________ 108
Figura F. 42 : Extraccin del conector _____________________________________ 122
Figura F. 43: Conexin de la programadora. _________________________________ 109
Figura F. 41: Acceso a los Conectores Principales _____________________________ 109
Figura F. 44: Serigrafa Top a escala real de la Placa Patas grupo B _______________ 123
Figura F. 45: Serigrafa Bottom a escala real de la Placa Patas grupo B ____________ 123
Figura F. 46: Serigrafa SST a escala real de la Placa Patas grupo B _______________ 110
Figura F. 47: Diagrama de pines del Conector Principal del grupo A _______________ 111
Figura F. 48: LEDs de estado ____________________________________________ 111
Figura F. 49: Serigrafa Top de la placa Master ________________________________ 114
Figura F. 50: Serigrafa Bottom de la placa Master _____________________________ 114
Figura F. 51: Elementos de la placa Entrenadora ______________________________ 115
Figura F. 52: Mando y teclado ____________________________________________ 116
Figura F. 53: Programadora PIPO2 ________________________________________ 117
Figura F. 54: Interfaz del editor EditPlus2 ___________________________________ 119
Figura F. 55: Interfaz del compilador MPASM________________________________ 120
Figura F. 56: Resultado de la compilacin ___________________________________ 120
Figura F. 57: Interfaz de WinPic800________________________________________ 121
Figura F. 58: Configuracin de WinPic800 para programar con PIPO2 _____________ 121
Figura F. 59: Aspecto final de MIHRO _____________________________________ 127

ndice VII

ndice

ndice de Tablas
Tabla T. 1: Etapas de desarrollo del robot MIHRO (1) __________________________ 10
Tabla T. 2: Etapas de desarrollo del robot MIHRO (2) __________________________ 11
Tabla T. 3: Propiedades mecnicas del robot MIHRO ___________________________ 27
Tabla T. 4: Consumo elctrico del robot _____________________________________ 29
Tabla T. 5: rdenes manuales mediante teclado o mando _______________________ 116

ndice VIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


[Pgina en blanco]

ndice IX

ndice
[Pgina en blanco]

ndice X

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

1 Prefacio
Mediante el presente documento tengo el enorme placer de presentarles a MIHRO, un
robot hexpodo de 18 grados de libertad que supone la consecuencia de cientos de horas
de trabajo, diseo y tambin, debo reconocerlo, de mi propia ensoacin. Quienes me
conocen les dirn de m que tengo cierta tendencia a la megalomana, aunque quizs esto
slo sea el reflejo de mi propio afn de superacin. No obstante, cuando empec esta
carrera, y aunque senta cierta curiosidad por la robtica, en mi foro interno jams pude
verme a m mismo dedicado en un futuro no muy lejano a disear y construir robots, una
tarea que por aqul entonces me pareca harto compleja, hasta el punto de considerarla
inaccesible. Un ao como miembro del CRA (Club de Robtica Autnoma) de la EUPMT,
y dos aos ms como presidente electo cambiaron en cierto modo esa visin temerosa de la
robtica y la sustituyeron gradualmente por otra mucho ms cercana, aunque respetuosa.
El CRA me brind la posibilidad de acceder a tcnicas y recursos bsicos pero eficaces que
me permitieron comenzar a desarrollar mis primeros prototipos, la mayora de ellos robots
relativamente sencillos pensados para competir en concursos de robtica como el que el
mismo CRA organizaba anualmente, evento en el cual tuve oportunidad de participar en
ms de una ocasin, e incluso de colaborar en su organizacin. Y durante todo ese tiempo
se fue fraguando en mi cabeza la posibilidad de enfrentarse a un reto tan enorme como
construir y gobernar un robot hexpodo completo, un tipo de robot con un sistema de
locomocin tan complejo por la gran cantidad de dispositivos que integra, que a menudo se
ha descartado como opcin de locomocin en cientos de proyectos similares.
Es ms, durante casi tres aos la seductora idea de realizar este trabajo como proyecto de
final de carrera mantuvo mi inquietud ocupada indagando en todo lo referente a este tipo
de robots, e incluso tuve oportunidad de realizar mis primeros diseos y experimentos en la
construccin y el control de dos maquetas en forma de pata robtica articulada. Al ver que
mis primeros experimentos concluan de forma satisfactoria mi concepcin del robot en su
estado final fue creciendo hasta convertirse en un proyecto tan extenso y ambicioso que de
ningn modo poda abarcarse en el tiempo correspondiente a la asignatura de Proyecto de
Final de Carrera. No obstante, esta circunstancia encajaba bastante bien con mis planes
futuros de perpetuar mis estudios en un ciclo superior de Electrnica, pues la idea de
realizar una parte del proyecto ahora y el resto como proyecto de final de carrera de este
segundo ciclo me permiti finalmente englobar todos mis objetivos.
Es por eso que esta memoria es el testigo de la primera etapa de un trabajo que no
terminar, al menos, hasta dentro de dos aos; una primera etapa que adems pone de
manifiesto la complejidad intrnseca a estos robots, la cual, adems las funciones aadidas
para las que se ha diseado el robot MIHRO en concreto, hacen que este proyecto no slo
pretenda ser el encumbramiento ms clebre que puedo darle a los conocimientos que he
adquirido durante la carrera, sino tambin la victoria sobre un profundo reto personal.
Que lo disfruten.
Pgina 1

Introduccin al proyecto

2 Introduccin al Proyecto
2.1 Motivacin
Tal y como deja entrever el prefacio, mi pasin por la robtica, infundida en gran medida
por mi contacto con el Club de Robtica Autnoma durante los aos que llevo en la
EUPMT, ha sido la principal motivacin que me ha llevado a embarcarme en este
proyecto. No obstante, hay que matizar que el gusto por la robtica no es ms que una
motivacin precursora de mi afn de aprendizaje en esta rea para la posterior aplicacin de
los conocimientos adquiridos en mi futuro profesional. As pues, el objeto final de este
proyecto no es la diversin, la autocomplacencia o el cumplimiento de los crditos
requeridos para terminar la carrera, sino el mayor aprendizaje posible para alcanzar un buen
futuro profesional en este campo.
De hecho, esta primera premisa se hace patente a lo largo de todo el proyecto, pues no se
ha llevado a cabo prcticamente ningn procedimiento que intente resolver de forma
simplificada un proceso cuya naturaleza es ms compleja. As pues, para empezar, el
lenguaje de programacin escogido ha sido el ensamblador, mucho ms crptico y complejo
que los lenguajes de alto nivel, como C o Basic, con que se pueden programar tambin los
microcontroladores escogidos, pero que a su vez aporta un mayor entendimiento del
funcionamiento interno real de la mquina. Por otro lado, tampoco se han usado libreras
pre-programadas, como las que habitualmente proporcionan los fabricantes para simplificar
el desarrollo de aplicaciones, o mquinas diseadas para resolver automticamente procesos
complejos. De este modo, no se usan libreras para gobernar la comunicacin I2C, sino que
se resuelve enteramente por software, y no se usan generadores automticos de seales
PWM o microcontroladores con soporte hardware para controlar un alto nmero de
servomotores. Tampoco se pretende hallar algoritmos lineales simples para resolver
procesos que deberan tomar soluciones dinmicas ms complejas, como es el caso de los
motores, que pueden controlarse de forma dinmica con una precisin de 07, en vez de
basar su control en la repeticin secuencial de unas pocas posiciones pre-programadas.
De la misma manera, y quiz en este caso se hace ms patente la filosofa general que rige el
proyecto, no se han usado piezas prefabricadas especficamente diseadas para construir el
esqueleto de robots hexpodos, como las que distribuye la empresa Lynxmotion, sino que se
ha diseado y fabricado un esqueleto mecnico a partir de chapa de aluminio sin mecanizar.
Es ms, el diseo mecnico, aunque estticamente inspirado en algunos de los robots ms
conocidos dentro del mundo de los hexpodos, es completamente indito, y si se analiza su
estructura con atencin se puede comprobar que no slo muestra diferencias
fundamentales con estos famosos robots, sino que aporta nuevas estructuras mecnicas,
como las tibias, que no se asemejan, por lo menos, a ningn otro de los ms de 60
proyectos de este tipo que he tenido oportunidad de analizar.

Pgina 2

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2.2 Antecedentes
Entre los proyectos que de algn modo han inspirado el diseo tanto esttico como
funcional de MIHRO destacan:

2.2.1 Proyectos EUPMT


Robot Insecte Intelligent, Carlos Vivancos Gmez, ao 2000.
Este es un conocido robot de la EUPMT, pues est desde hace aos expuesto en la vitrina
de la entrada. Usa patas de dos grados de libertad, uno para el movimiento horizontal de la
pata y otro para el movimiento vertical de una estructura de aluminio parecida a un pistn.
Utiliza cuatro microcontroladores de forma jerrquica: un master o cerebro gobierna
otros tres integrados esclavos que a su vez gobiernan cuatro servomotores cada uno.
Plante una comunicacin I2C que no logr implementar, por lo que dise un bus propio.

Disseny i creaci dun microbot insecte autnom, Marc Rivas Capafons, ao


2005.
Este robot, de nombre Biljana, se dise como continuacin del proyecto de Carlos
Vivancos, aportando varias mejoras al proyecto inicial: inclua sensores de contacto en las
patas que le permitan detectar el suelo, aunque finalmente no implement un sistema de
locomocin adaptativo, e inclua tambin sensores de contacto frontales a modo de
antenas. Aunque el proyecto incluye varias propuestas de estructura mecnica basada en
patas de tres grados de libertad, finalmente no logra implementar satisfactoriamente
ninguna de ellas y recure a la estructura mecnica de dos grados de libertad basada en
pistones del robot de Carlos Vivancos. Cada una de las seis parejas de motores es
controlada por un microcontrolador esclavo, que a su vez es controlado por un sptimo
microcontrolador master mediante una comunicacin I2C.

Diseo y Construccin de un Hexpodo Autnomo, Jordi Estrella Domene,


ao 2007
Curioso proyecto de un robot hexpodo de slo tres grados de libertad totales, que basa su
movimiento en un sistema basculante de las patas centrales del robot.
Robot hexpode Mordor, Keila Belando Baca, ao 2005
Proyecto de robot hexpodo basado tambin en una estructura de slo tres grados de
libertad totales. Incorpora un sistema de visin artificial basado en infrarrojos. El control se
realiza de forma centralizada desde un controlador BasicStamp2, por lo que est
programado en un lenguaje parecido al Basic.

Pgina 3

Introduccin al proyecto

Construcci dun Robot Quadrped, Isaac Hernndez Izquierdo, ao 2002


Robot cuadrpedo de tres grados de libertad por pata, sensores de contacto y sistema de
deteccin de obstculos por infrarrojos. Utiliza potencimetros para realimentar la posicin
de los servomotores, que se gobiernan desde dos microcontroladores comunicados por un
bus propio.

Figura F. 1: Robots de Carlos Vivancos y Marc Rivas.


(Fuente: Galera de imgenes del CRA)

2.2.2 Otros proyectos


Cuando se habla de robots hexpodos es frecuente que salgan a relucir los nombres de
ciertos robots que, por su trascendencia en los albores del desarrollo de esta tecnologa, se
han ganado una merecida fama. Es el caso de los conocidos Ghengis, Attila o Hannibal, los
robots hexpodos del MIT, pero tambin de otros robots ms modernos, aunque
igualmente trascendentes, como los Tarry y Tarry II, desarrollados en la Universidad de
Duisburg, o el Hamlet, de la Universidad de Canterbury, entre muchos otros. De algn
modo todos estos proyectos han inspirado en parte el diseo de MIHRO, sin embargo sus
referentes ms directos estn en robots mucho ms modernos y a menudo desarrollados
por responsables de instituciones docentes o por aficionados. Estos ltimos son los de
mayor repercusin para este proyecto, pues a menudo permiten analizar las estrategias que
otros han adoptado para solucionar los mismos problemas con que se ha topado el
desarrollo de MIHRO. Entre ellos destacan:

Pgina 4

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Micromagic Systems
Esta empresa se dedica desde hace algunos aos al desarrollo de animatronics para la
industria del cine. Matt Denton, su principal responsable, ha desarrollado una serie de
robots hexpodos cuyo sistema locomotor roza la perfeccin. Aunque la mayora de sus
creaciones son mucho ms simples que otros robots de esta categora, su xito reside en la
fluidez con la que se mueven sus patas, producto tanto de un diseo mecnico acertado
como de un control electrnico eficiente e inteligente. Sus robots se mueven de un modo
tan realista que crean la ilusin de ser artrpodos vivos, y no mquinas inanimadas.
Adems, los rasgos mecnicos y la esttica que identifican a sus robots han sido copiados
en el diseo de tantos otros hexpodos que actualmente casi resulta difcil encontrar
proyectos nuevos de este tipo que no recuerden a los robots de Matt Denton. En cuanto a
MIHRO, en ciertos aspectos se aprecia una similitud esttica con los robots de Micromagic
Systems, pero es slo en apariencia, pues su estructura mecnica sigue un patrn muy
diferente, e incluso va ms all en algunos aspectos, como en la sensrica de las patas.

Figura F. 2: IC-Hexapod
(Fuente: www.micromagicsystems.com)

Figura F. 3: BF Hexapod V5 (inacabado)


(Fuente: www.micromagicsystems.com)

Lynxmotion
Esta empresa desarrolla, entre muchos
otros tipos de robots, varios modelos de
robots hexpodos ensamblados o por
piezas. De entre estos, merecen ser
mencionados los hexpodos de tipo
estrella, un tipo de hexpodos que
ofrece una distribucin en crculo de sus
patas, en vez de disponerlas en paralelo a
lado y lado de su cuerpo, y que por ende
Figura F. 4: CH3-R
se controlan de forma vectorial,
(Fuente: www.lynxmotion.com)
avanzando en cualquier direccin sin
necesidad de rotar el cuerpo. Su producto estrella, no obstante, es un hexpodo normal,
con distribucin de las patas en paralelo, llamado Phoenix, cuyo diseo mecnico no
trata de ocultar su evidente similitud con los robots de Matt Denton.
Pgina 5

Introduccin al proyecto
Asterisk
Este es un asombroso robot de tipo estrella
desarrollado en el Arai Lab, de la Universidad
de Osaka. Fue presentado al mundo en la
World Expo 2005 de Aichi, aunque tuvo su
primera gran actuacin en la Osaka Robot Fair
de 2006, en la que se le pudo ver haciendo
cosas tan inslitas como caminar boca abajo
colgado de un soporte en forma de reja, recoger
y transportar objetos con sus patas, escalar
obstculos altos o atravesar huecos en forma de
Figura F. 5: Asterisk
arco agachndose y arrastrndose para pasar
(Fuente: www-arailab.sys.es.osaka-u.ac.jp)
bajo ellos. Constructivamente, su caracterstica
ms remarcable es que sus patas ofrecen cuatro grados de libertad, y que tienen un sensor
de contacto que les permite adaptarse dinmicamente al terreno.
Projekt Marvin
Este es un fabuloso proyecto completamente desarrollado por un solo aficionado a la
robtica. Las caractersticas de este robot son tantas que cuesta enumerarlas todas, pero
entre ellas destacan: cuerpo con seis patas de tres grados de libertad cada una, ms una
cabeza con dos grados de libertad ms, en total veinte servos. Visin estereoscpica,
medicin de reas de distancia 2D mediante lser y ultrasonido, control distribuido entre
catorce procesadores Atmel, control del movimiento mediante cinemtica inversa,
reproductor WAV, sistema de equilibrio basado en giroscopios, control adaptativo al
terreno, GPS, sistema de gestin de la energa, uso de una tarjeta MicroSD como memoria
de masa, y muchas otras. El valor del contenido de este proyecto es incalculable, pero
desgraciadamente su creador slo trabaja por amor al arte, por lo que no publica
documentacin tcnica, y su pgina web slo est disponible en alemn.
AMOS-WD06

Figura F. 6: AMOS-WD06
(Fuente: www.chaos.gwdg.de)

Proyecto realizado por el Max-Planck-Institute for


Dynamics and Self-Organization de Gttingen.
Este proyecto pretende dotar de capacidad reactiva
a un robot hexpodo programado en forma de red
neural. El robot, de tres grados de libertad por
pata, posee un sensor infrarrojo en cada una de sus
extremidades, que advierte al procesador central,
un mini-ordenador integrado en una PDA, de la
cercana de un cuerpo desde cualquier direccin. El
robot, como lo hara un animal, huye y se esconde
cuando detecta una presencia extraa a su
alrededor que identifica como hostil.

Pgina 6

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Mike Smyth's Hexapod
Sencillo hexpodo de doce grados de
libertad que, adems de adaptarse al terreno
con sensores de contacto en el piso de sus
patas, incorpora la interesante caracterstica
de poder detectar los obstculos que
interrumpen la trayectoria de cada paso,
para poder superarlos corrigiendo la altura
de los mismos. Para lograrlo, utiliza unos
sensores en forma de lengeta que
presionan un interruptor al chocar la pata
contra un obstculo; un sistema que,
Figura F. 7: Mike Smyths Hexapod
aunque sencillo, le confiere al robot unas
(Fuente: home.ctlnet.com/~robotguy67/hexapod)
posibilidades de adaptacin al terreno
excelentes. El robot MIHRO se dise tomando esta habilidad como requisito
indispensable, pero se descart la solucin mecnica que usa Mike Smyth en este robot,
pues resulta frgil y permite detectar slo obstculos que interfieren con el extremo inferior
de sus patas. MIHRO, por el contrario, utiliza un sistema mecnico mucho ms complejo y
robusto, que adems le permite detectar obstculos en ms del 70% de la superficie de sus
tibias.

Bill-ant
Robot desarrollado por William
Lewinger,
del
Center
for
Biologically Inspired Robotics
Research de la Unicersidad Case
Western Reserve. Este hexpodo
incorpora un total de 22 grados de
libertad reales (William Lewinger
considera otros seis grados
pasivos en los detectores del piso
de sus patas), distribuidos en tres
grados de libertad por pata, tres
Figura F. 8: Bill-Ant
grados de libertad ms en el cuello
(Fuente: biorobots.cwru.edu/projects/billant)
de su cabeza y otro ms para
articular una mandbula mecnica. El robot, claramente inspirado en la anatoma de las
hormigas, lleva incorporados sensores de fuerza en el extremo de sus patas y mandbulas
que le permiten cuantificar el peso que carga cada pata o la fuerza que deben realizar las
mandbulas para sujetar objetos. Adems, el robot, de casi 3 Kg de peso, puede andar
mientras lleva una carga de casi otros 3 Kg ms.

Pgina 7

Introduccin al proyecto
Lauron
Este es uno de los robots hexpodos ms impresionantes que pueden verse hoy da. Su
fabricacin viene de la mano de la alemana FZI (Forschungszentrum Informatik), y los
pocos ejemplares que se producen se venden mayoritariamente a instituciones relacionadas
con la investigacin y el desarrollo de aplicaciones en el campo de la robtica. Se trata de
un enorme robot de aluminio mecanizado de gran calidad, con tres grados de libertad por
pata y dos grados de libertad ms en una cabeza articulada. Dispone de caractersticas muy
avanzadas en su sistema locomotor, diseadas para potenciar su capacidad de adaptacin al
terreno, de navegacin y de orientacin. Entre estas caractersticas destacan la deteccin en
los tres ejes de la presin que cada pata ejerce contra el suelo, la capacidad de visin
artificial omnidireccional, y un avanzado sistema de visin estereoscpica que le permite
orientarse en mapas tridimensionales que crea mientras recorre su entorno. El IRI, Institut
de Robtica i Informtica Industrial de la Universitat Politcnica de Catalunya, dispone de
un ejemplar de la tercera versin de este robot (la ltima versin fabricada es la 4c), con el
que desarrollan investigaciones sobre locomocin, orientacin y visin artificial.

Figura F. 9: Ejemplar de Lauron III del IRI


(Fuente: www-iri.upc.es)

Figura F. 10: Lauron IVc


(Fuente: www.mca2.org)

Melanie III

Figura F. 11 Melanie III


(Fuente: mundobot.com/projects/melanie/spmelanie)

Esta es la ltima versin del robot Melanie,


desarrollado por el ingeniero espaol
Alejandro Alonso Puig. Dispone de tres
grados de libertad por pata y de un sistema
de ms de treinta sensores que le permiten
adaptarse al terreno con suficiente fluidez
como para que el robot pueda andar por
suelo abrupto a una velocidad lineal de
desplazamiento constante. A parte de esto,
su caracterstica ms remarcable es el
diseo de sus patas, que le permiten andar
cargando ms de 4 Kg de peso con un
consumo energtico mnimo.

Pgina 8

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2.3 Proyecto MIHRO


El proyecto MIHRO pretende construir un robot hexpodo de tres grados de libertad por
pata, ms tres grados de libertad en cuello y cabeza, 21 motores en total. Adems, el robot
debe disponer de la capacidad de adaptarse al terreno dinmicamente, por lo que debe
incorporar sensores de contacto en las patas que permitan al robot detectar tanto el suelo
como los posibles obstculos que puedan interrumpir la trayectoria de las patas cuando
stas discurren por terreno irregular. En cuanto a sus caractersticas motrices, el robot ha
de tener la capacidad de superar obstculos altos, como escalones o rocas, de andar a buena
velocidad, de mantener el equilibrio y la horizontalidad usando un inclinmetro o
giroscopio, de recoger, cargar y transportar objetos ligeros con sus patas delanteras, y de
moverse con suavidad, precisin y verosimilitud biolgica.
En cuanto a sus caractersticas funcionales, el robot debe incorporar un sistema de
medicin de distancias bsico, basado en un transceptor de ultrasonidos, y otro basado en
luz lser que le permita rastrear espacios tridimensionales, enviarlos a un ordenador y
recrearlos en un entorno virtual. Este sistema de medicin de distancias se basa en la
interaccin entre un puntero de luz lser difractado en una lente y una cmara digital
(sensor CCD, CMOS u otros) controlada desde un software bsico de reconocimiento de
imagen, de forma que, mientras el robot no est llevando a cabo la tarea de rastreo de
entornos, la cmara deber proporcionar vdeo en tiempo real que se transmitir a un
ordenador o a un dispositivo porttil de fabricacin propia, y que podr reproducir la
imagen en una pantalla de tipo GLCD o en un sistema de visualizacin de realidad virtual.
Adems, el robot deber incorporar un sistema de comunicacin inalmbrico con un PC,
localizador GPS, conectividad USB de tipo master(que puede gobernar otros dispositivos
USB), almacenamiento de contenido multimedia en una tarjeta de memoria SD, y un
mdulo de audio que, adems de poder triangular la procedencia de un estmulo acstico,
deber ser un grabador y reproductor de sonido que permita recoger datos sonoros del
entorno o reproducir los sonidos que enve su controlador.
Adems el robot deber ser capaz de gestionar y rentabilizar su propia energa,
consiguiendo minimizar su consumo de forma dinmica. El mdulo de alimentacin del
robot debe permitirle, en un entorno domstico, cargar su batera desde una toma de
corriente adaptada y situada en una posicin conocida por el robot, y en un entorno al aire
libre, cargarla usando una clula fotovoltaica incorporada, y encontrando mediante sensores
de intensidad luminosa la mejor posicin de carga posible.
Por ltimo, en la etapa final del desarrollo del robot, ste deber servir como plataforma de
desarrollo en el estudio y aplicacin de sistemas emuladores de conducta basados en redes
neuronales. No obstante, hasta ese momento el robot ha de pasar por mltiples etapas de
desarrollo y su estructura tanto electrnica como mecnica probablemente ser modificada
en ms de una ocasin. El proyecto actual recoge las tres primeras etapas de dicho
desarrollo, las que se refieren al nivel ms bajo de construccin y control del sistema
locomotor del robot.
Pgina 9

Introduccin al proyecto
La siguiente tabla revela una previsin de las principales etapas por las que habr de
transcurrir el desarrollo de MIHRO.

Etapa

Contenido

1- Primeros
experimentos

2- Diseo y
construccin

3- Nivel fsico del


sistema locomotor

4- Gestin de la
energa

5- Nivel superior del


sistema locomotor

6- Sistema de
navegacin

7- Conectividad
8- Comunicacin

Diseo CAD de los cuatro primeros prototipos de pata


Fabricacin y montaje de dos de los cuatro prototipos
Montaje de una maqueta de pruebas para el ltimo de los
prototipos
Diseo de una placa bsica de control para la maqueta
Diseo de una placa avanzada de control para la maqueta
Experimentos varios sobre el control dinmico de la
maqueta
Diseo CAD de la estructura mecnica definitiva del robot
Fabricacin de las 48 piezas del esqueleto
Montaje del esqueleto, la motorizacin y los elementos
sensoriales del cuerpo mecnico
Diseo electrnico de las placas controladoras de cada pata.
Pruebas de locomocin mediante la programacin de cada
placa
Programacin de la coordinacin del movimiento de las
patas desde una placa cerebro
Implementacin de la comunicacin interna mediante un
bus I2C
Control manual del robot desde un mando/teclado
Instalacin de los servomotores definitivos
Modificacin del software de control para los servos
definitivos
Diseo y construccin de la placa de alimentacin, carga y
gestin de la energa
Incorporacin de dos bateras que proporcionen al robot
autonoma energtica
Aplicacin de un sistema de cinemtica inversa como
estrategia para el control del movimiento
Diseo de un sistema de equilibrio basado en un giroscopio
o inclinmetro
Programacin del control adaptativo al terreno
Programacin de las funciones locomotrices avanzadas
Construccin de la cabeza
Inclusin de la sensrica de navegacin
Desarrollo de los sistemas medidores de distancia
Desarrollo de la estrategia de navegacin autnoma
Desarrollo del sistema de tratamiento de imagen y visin
artificial
Desarrollo de la conectividad master USB
Desarrollo de un canal de comunicacin inalmbrico para el
control del robot
Desarrollo de un canal de comunicacin inalmbrico para el
envo / recepcin de contenido multimedia

Tabla T. 1: Etapas de desarrollo del robot MIHRO (1)


(Fuente: Proyecto MIHRO)

Pgina 10

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Etapa

Contenido

9- Sistema de visin
artificial

10- Mdulo de audio

11- Memoria de masa

12- Clula
fotovoltaica

13- Red neuronal

Desarrollo del sistema de captacin, tratamiento y envo de


imagen
Desarrollo del sistema de visualizacin porttil basado en un
pequeo display LCD
Desarrollo de un sistema de captacin del movimiento de la
cabeza humana que interacte con el cuello del robot
Integracin del sistema de visin artificial y del sistema de
captacin del movimiento da la cabeza en un sistema de
visin remota basado en unas gafas de realidad virtual
Desarrollo de un sistema de captacin, digitalizacin y
compresin de audio procedente de un micrfono
Desarrollo de un sistema de triangulacin de la procedencia
espacial de un estmulo acstico mediante varios micrfonos
Implementacin de un reproductor de audio normal y
comprimido.
Implementacin de la comunicacin con un dispositivo de
almacenamiento masivo de memoria, como una memoria
flaix USB o una tarjeta SD
Integracin de dicha memoria como sistema de
almacenamiento de los contenidos multimedia del robot
Modificacin de la placa de alimentacin para poder usar
una placa fotovoltaica como fuente de energa
Desarrollo de un sistema de bsqueda de las condiciones
ptimas de carga solar
Desarrollo sistema cognitivo basado en el arquetipo de las
redes neuronales
Adaptacin del sistema para nutrirse de todos los recursos
desarrollados anteriormente

Tabla T. 2 Etapas de desarrollo del robot MIHRO (2)


(Fuente: Proyecto MIHRO)

La tabla deja entrever, por un lado, la complejidad final para la que se disea el robot desde
un principio, y por otro lado, las posibilidades futuras de desarrollo tan enormes que ofrece
este proyecto, lo que lo convierte en una plataforma excelente para el aprendizaje de las
tcnicas y los recursos relacionados con todas sus caractersticas.
Cabe decir tambin que la inclusin de todos estos sistemas en el robot no slo es fruto de
la inquietud o la curiosidad por sus respectivos campos de aplicacin, sino que responden
conjuntamente al objetivo final del robot, que no es otro que el de ser un robot explorador.
As pues, las caractersticas para las que se disea no estn en absoluto carentes de un
objetivo comn, sino que se enfocan a perfeccionar el modo en que este robot discurre de
forma autnoma o teleoperada por un territorio desconocido, inaccesible u hostil,
potenciando su capacidad de adaptacin a un terreno irregular e imprevisible y la
accesibilidad de su interfaz con un usuario controlador humano (de ah que una de las
etapas de desarrollo del robot incluya la implementacin de sistemas de realidad virtual que,
aparentemente, pudieran estar fuera de lugar en un proyecto completamente centrado en el
campo de la robtica).
Pgina 11

Introduccin al proyecto
Adems, esta capacidad exploradora de MIHRO no slo tiene fines acadmicos, sino que
tambin tiene su aplicabilidad en el mercado y la sociedad actuales, pues cada da se invierte
mayor capital en el desarrollo de aplicaciones robticas para tareas de salvamento,
exploracin espacial, y manejo de sustancias peligrosas. As pues, finalmente MIHRO
puede ser adaptado para su uso como robot de rescate, entrando en zonas de difcil acceso
como edificios derrumbados, incendios, cuevas, etc. Tambin puede recibir uso como
herramienta de maniobra en ambientes qumicos o radiolgicos hostiles, como reas
selladas por fugas de gas o de material radiactivo, o como herramienta de deteccin de
sustancias y aparatos peligrosos, como minas anti-persona. Del mismo modo, las
capacidades de captacin de entornos y desenvoltura por terrenos irregulares permitiran a
MIHRO realizar tareas de exploracin espacial o trabajos de campo en exploracin militar.
Incluso podra recibir uso como avanzadilla en misiones antiterroristas. Por ltimo, el robot
tambin podra recibir uso en espeleologa, minera o arqueologa, mediante la exploracin
de cmaras y recovecos concurridos en cuevas, minas y yacimientos arqueolgicos, como
antiguas tumbas faranicas y catacumbas. Como curiosidad, merece la pena mencionar que
ciertas cmaras de gran relevancia arqueolgica del famoso monumento funerario egipcio
del Valle de los Reyes no fueron descubiertas hasta que se fabricaron robots exploradores
especficamente diseados para recorrer sus estrechas cavidades.
Por ltimo, hay que decir que la eleccin de MIHRO como nombre del robot no slo se
fundamenta en su significado como siglas de Mobile Intelligent Hexapod Robot, sino en
la propiedad de este nombre de aludir a la capacidad de ver y a la accin de mirar, que
inexorablemente relaciona al robot con su funcin de explorador.

2.4 Contenido del proyecto actual


Como se ha mencionado antes, el trabajo realizado para este Proyecto de Final de Carrera
corresponde a las etapas 1, 2 y 3 de entre las explicadas en el apartado anterior. Los
siguientes puntos introducen los contenidos que recoge el presente trabajo.

2.4.1 Objetivos
Por ahora, el desarrollo de este proyecto comprende:
El estudio de las posibilidades de control, adquisicin y tratamiento de datos de
microcontroladores bsicos, as como su programacin e implementacin.
El estudio de las posibilidades de sensorizacin y adecuacin de seales de sistemas
robticos tpicos.
Estudio y planificacin de un sistema de locomocin que permita a un robot de seis
patas y tres grados de libertad por pata interactuar con obstculos u objetos de su
Pgina 12

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


entorno, otorgndole capacidad para moverse, trazar una trayectoria, sobrepasar
obstculos y mantener el equilibrio.
Previsin y planificacin de la integracin de mdulos electrnicos y
funcionalidades futuras en el robot.
Dominar tcnicas bsicas de diseo de sistemas mecnicos mediante programas de
tipo CAD.
Disear una estructura mecnica que cumpla todos los requisitos de funcionalidad,
robustez y esttica del robot.
Fabricar y montar la estructura mecnica del robot a partir de chapa de aluminio sin
mecanizar, completamente a mano y de forma artesanal.
Cuantificar las caractersticas de la motorizacin del robot.
Estudio del control de servomotores pequeos mediante seales PWM, y de su
implementacin mediante software.
Diseo de un sistema electrnico distribuido en mdulos funcionales que satisfaga
las necesidades de control, coordinacin, comunicacin e interfaz del nivel ms
bajo del sistema locomotor del robot.
El estudio de las posibilidades de intercomunicacin entre los mdulos que
conforman la estructura electrnica del robot en base a un bus I2C.
Programacin en bajo nivel de una comunicacin I2C Slave con soporte hardware e
I2C Master enteramente implementado por software.
Diseo de las placas electrnicas definitivas usando el programa OrCAD 16.0.
Soldadura en placas de topos para prototipos de una cara y en placas de cobre con
pistas fresadas de doble cara.
El estudio de algunas posibilidades de interfaz y control sencillas basadas en un
pequeo mando o teclado.
Implementacin y sincronizacin global de todos los sistemas y variables en el
robot, con el fin de que pueda andar por control manual desde un mando o teclado.
Cabe decir tambin que, aunque el robot est inspirado en la morfologa de los insectos y
busque cierto grado de verosimilitud biolgica, este proyecto no pretende estudiar este
parmetro desde el punto de vista biomecnico ms all de las funcionalidades necesarias
para el robot. Tampoco se busca emular la locomocin de ninguna variedad de insecto por
encima de las capacidades que sean ptimas para que el robot desarrolle las tareas para las
que fue diseado. La locomocin hexpoda de los insectos, igual que la de la mayora de los
artrpodos, les confiere una increble capacidad de adaptacin al medio y de desenvoltura
por terrenos abruptos o de difcil acceso. Su efectividad inherente ha hecho posible que
esta familia de seres vivos, una de las ms antiguas de la historia de la evolucin animal,
haya sobrevivido hasta la actualidad sin sufrir grandes cambios evolutivos en su sistema
motor. De este modo se justifica el intento de emular, con mayor o menor fidelidad, este
sistema de locomocin para lograr una buena desenvoltura por terrenos irregulares, sin
embargo este es un proyecto que estudia la mecnica como medio y la electrnica como
fin, por lo que en ningn caso se usarn estas materias para dar soporte a un estudio
biolgico o de cualquier otro campo.
Pgina 13

Introduccin al proyecto

2.4.2 Esquema general de MIHRO


El control del sistema locomotor de MIHRO est distribuido entre siete placas
electrnicas: una central que realiza la funcin de cerebro o Master del bus I2C, y seis
esclavas dedicadas exclusivamente al control de cada una de las patas. Todas ellas estn
basadas en el microcontrolador de Microchip PIC16f88, del que se hablar ms adelante.
De estas placas slo las esclavas permanecern finalmente en el robot, pues la placa que
realiza la funcin de Master es, por ahora, una placa entrenadora que deber ser sustituida
en el futuro por su versin completa y definitiva (basada en un PIC16f877).
Cada uno de los seis esclavos recibe los estmulos de dos sensores de contacto, uno que
detecta la presin de la pata contra el suelo, y otro que detecta la presin de la pata contra
un obstculo eventual que se interponga en su trayectoria de avance horizontal. Adems,
cada esclavo controla los tres servomotores que constituyen las tres articulaciones de cada
pata. Por ltimo el Master, que recibe rdenes desde un pequeo teclado, gobierna a los
esclavos mediante un bus I2C (en naranja), que queda abierto por el lado del Master para
futuras ampliaciones.
Mot3

Mot2

Sensor 1
Sensor 2

Mot1

Mot1

Slave2

Mot2

Mot3
Sensor 1
Sensor 2

Slave1

Mot3

Mot3

Mot2

Mot2

Master

Slave4

Mot1

Slave3

Sensor 1
Sensor 2

Sensor 1
Sensor 2

Sensor 1
Sensor 2
Mot3

Mot1

Slave6

Mot2

Sensor 1
Sensor 2

Slave5

Mot1

Mot1
1

Figura F. 12: Diagrama de bloques general


(Fuente: Proyecto MIHRO)

Pgina 14

Mot2

Mot3

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


En el bus I2C todos los elementos se enganchan a unas lneas comunes referenciadas a
una masa compartida. Para facilitar el conexionado fsico de todos los integrantes del bus,
cada controladora de las patas recibe las tres lneas de conexionado (SCL, SDA y masa) del
dispositivo inmediatamente anterior conectado al bus y las enva al siguiente dispositivo.
De este modo, el Master slo necesita un conector de tres pines para enviar datos a
cualquiera de los eslavos conectados al bus y otro conector de tres pines para dejar el bus
abierto, tal y como muestra el diagrama siguiente:
VDD

10K

10K

Master

Slave1

Slave6

Figura F. 13: Diagrama de bloques de la comunicacin I2C


(Fuente: Proyecto MIHRO)

Las dos resistencias pull-up de 10K estn fsicamente integradas en el Master, y realizan
una funcin de AND lgico, pues mantienen el bus a nivel alto siempre que ninguno de los
elementos conectados al mismo fuerce el estado del bus a nivel bajo. Esto significa que
para introducir un nivel alto en el bus los elementos conectados al mismo no necesitan
aplicar directamente un nivel de tensin alto, sino que simplemente se configuran en
colector abierto para que la resistencia haga el resto. Si alguno de los elementos pretende
poner un nivel bajo en el bus y otro de ellos un nivel alto, siempre prevalecer el nivel bajo.

2.4.3 Factores limitantes


El desarrollo de este proyecto ha sido acotado desde un principio por dos factores
limitantes fundamentales: el tiempo y el presupuesto disponibles. El primero de ellos
repercute directamente en la cantidad de trabajo realizable, y por tanto en las habilidades de
que dispondr el MIHRO en el momento de la defensa del proyecto; el segundo repercute
especficamente sobre el modelo de servomotor escogido y la ausencia de una batera que
mantenga, aunque de forma poco optimizada, una cierta autonoma energtica en el robot.
En cuanto al servomotor escogido, ofrece las caractersticas mnimas para que el robot
funcione, y an as supone un gasto importante, por lo que la inclusin de servos ms
potentes y eficientes en el robot deber producirse en futuras etapas de su desarrollo.
Pgina 15

Introduccin al proyecto

2.4.4 Contenido de la memoria


La funcin indiscutible de cualquier memoria de este tipo es dejar completa constancia del
trabajo realizado a lo largo de toda la asignatura de PFC. Sin embargo, esta memoria
adems pretende ser, por un lado, una gua til y suficiente para repetir todo el trabajo
desarrollado aqu, y por el otro, un manual de instrucciones que permita a una tercera
persona gobernar el robot sin dificultad o peligro de daarlo.
As pues, las pginas que siguen recogen y distribuyen toda la informacin referente a
MIHRO en cinco bloques respectivamente referentes a su diseo mecnico, construccin,
diseo electrnico, programacin y resultado final. Los cinco bloques se complementan
con la informacin contenida en el Volumen II de este proyecto. En este volumen puede
encontrarse el Presupuesto, los Planos y el Cdigo fuente del master y de uno de los
esclavos. Este ltimo documento es de vital importancia para el entendimiento del
funcionamiento interno de MIHRO, pero su extensin ha hecho imposible su inclusin en
esta Memoria descriptiva.
Por ltimo, hay que puntualizar que las imgenes contenidas en el captulo 4 de esta
memoria carecen de pi de foto o referencia. Esto se debe a que el texto de este apartado
est redactado de forma que se relaciona implcitamente con las imgenes que lo
acompaan, por lo que ni las imgenes necesitan rotulacin ni sta acompaara a la
correcta edicin y esttica de este captulo. Hay que mencionar, no obstante, que todas las
imgenes contenidas en este apartado pertenecen al proyecto MIHRO.

2.4.5 Contenido del CD


El CD adjunto a esta memoria constituye su principal anexo, pues contiene informacin
vital sobre el proyecto, como cdigos fuente, archivos de diseo, vdeos y fotos, etc. Para la
correcta visualizacin de sus contenidos se ha adjuntado una carpeta (Raz:\Programas
adicionales\) que contiene varios programas en sus versiones demo o freeware que permitirn
ejecutar los ficheros de modelos tridimensionales del robot, ver los vdeos y documentos o
leer con facilidad los programas contenidos en el proyecto.
De entre estos programas, EditPlus 2, una interesante herramienta de edicin de cdigo
fuente para varios lenguajes de programacin, necesita concretar ciertos parmetros de
configuracin para la correcta visualizacin del cdigo fuente en formato ensamblador. El
programa hace uso de un archivo de sintaxis, PIC 16F88.stx, para colorear los distintos
elementos del programa (instrucciones, registros, comentarios, etc.), facilitando as su
lectura. De forma preconfigurada, el programa busca este archivo en el directorio
D:\Programas adicionales\EditPlus 2\PIC16F88.stx, entendiendo que el CD se
reproducir en la unidad D. Si no fuera as, bastara con cambiar la letra de unidad en la
ruta del archivo del campo Syntax file, accesible en el panel Tools/Preferences/Settings & syntax
y seleccionando PIC 16F88 al final de la lista File types.
Pgina 16

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

3 Diseo mecnico
3.1 Premisas
El robot ser un hexpodo de tres grados de libertad por pata y tres grados de
libertad ms entre cuello y cabeza.
Su esqueleto, sobretodo en esta etapa en que se usan motores poco potentes,
deber ser robusto pero ligero, por lo que se construir enteramente de aluminio.
Sus patas se distribuirn a lado y lado de su cuerpo, pero no formando dos lneas
rectas paralelas, sino dos curvas convexas ms separadas en el centro, cosa que
permitir al robot cambiar ms fcilmente de un esquema de locomocin paralelo
a uno circular o vectorial.
Sus articulaciones siempre tendrn dos puntos de apoyo, formadas por el eje
motriz de cada servo y por un eje trasero que deber aadrsele manualmente.
Sus patas sern lo ms estrechas posible para minimizar la posible obstaculizacin
del movimiento horizontal, siempre priorizando su requisito de robustez.
Sus patas dispondrn de una articulacin cadera lo ms chata posible, para
minimizar el esfuerzo que sufrir el eje trasero del motor que otorgue el
movimiento horizontal.
El segmento ms alejado de las patas, o tibias, deber estar provisto de un
sistema electromecnico capaz de captar la presin contra el suelo y contra un
eventual obstculo que interrumpa la trayectoria de la pata.
o Este mecanismo deber ceder sin ofrecer casi resistencia ante la presin en
el sentido de avance de la pata, pero tambin deber mostrarse firme en el
sentido de retroceso para aportar un buen punto de apoyo en el avance del
robot.
o Este mecanismo deber ofrecer la mayor superficie de deteccin posible,
incluyendo sobretodo el extremo ms alejado de la pata, o pi.
o Este mecanismo deber integrarse en el conjunto de la pata sin romper los
criterios estticos del robot.
Sus patas debern poder elevarse lo mximo posible para lograr superar obstculos
altos o, en el caso de las patas delanteras, para poder ejecutar una secuencia de
movimientos capaz de recoger un objeto ligero del terreno y cargarlo sobre s.
Sus patas debern poder descender lo mximo posible para que el robot pueda
andar con el cuerpo lo ms elevado posible en caso de que ste discurra por
terreno muy abrupto.
El cuerpo del robot dispondr de espacio suficiente para alojar a todos sus
sistemas electrnicos, adems de la batera y la cabeza.
Tomando como prioritario todo lo anterior, el robot se disear de acuerdo con
un criterio esttico (que no funcional) inspirado en la anatoma de las araas.
Pgina 17

Diseo mecnico

3.2 Evolucin del diseo mecnico


3.2.1 Metodologa y herramientas
El rasgo ms determinante en el diseo mecnico de MIHRO es la forma de sus patas;
tanto es as que el trabajo de diseo de stas ha supuesto aproximadamente el 95% del
total. La complejidad de este proceso reside en la necesidad de satisfacer las exigentes
premisas reflejadas en el apartado anterior mediante el diseo de piezas que puedan
fabricarse a partir de simple chapa de aluminio. Es por eso que antes de alcanzar el diseo
definitivo de las patas y del robot, el proceso ha tenido que pasar por cuatro etapas previas
que han permitido corregir fallos, poner a prueba las posibles soluciones y desarrollar una
metodologa de diseo eficiente basada en el software de tipo CAD.
Concretamente, y a excepcin del primer prototipo desarrollado, todo el diseo de la
mecnica de los prototipos de pata y del robot definitivo se ha llevado a cabo mediante el
software Google SketchUp, en su versin 6.0.515. Este programa de bocetaje en 3D fue
originalmente desarrollado por @Last Software con el objeto de ofrecer una solucin
sencilla y accesible para cualquier pblico ante el problema del diseo en 3D. Con esta
filosofa, SketchUp basa su funcionamiento en un nmero reducido de herramientas
bsicas, muy magnetizadas dentro del rea de diseo, e increblemente potentes a la par que
sencillas de usar. De este modo se consigue que el usuario, con una curva de aprendizaje de
apenas unos das, sea capaz de expresar en 3D y de forma intuitiva sus conceptos de
diseo. Con un poco ms de experiencia en su manejo, el programa se convierte en una
herramienta excelente de diseo mecnico, pues permite modelar piezas y volmenes con
gran rapidez y precisin, pudiendo luego evaluar la movilidad e interferencia de conjuntos
articulados y elementos mviles.
En el caso del proyecto MIHRO, este programa ha jugado un papel crucial en el diseo
mecnico del robot, pues ha permitido modelar y corregir las piezas, simular su movilidad e
interferencia y, una vez verificadas, desplegarlas para construir plantillas que puedan
traspasarse directamente a la chapa de aluminio para su posterior recorte. Slo de esta
manera ha sido posible construir piezas complejas que encajaran perfectamente entre s,
manteniendo una correspondencia con el diseo informtico original de aproximadamente
1mm de error medio.
Se recomienda encarecidamente instalar el programa (incluido en el CD) para poder
visualizar el modelo mecnico definitivo de MIHRO. Adems, para la correcta
visualizacin de los casi 900 elementos que comprende el modelo, entre piezas y ayudantes,
se recomienda navegar a travs de la jerarqua de grupos usando la ventana Outliner,
accesible desde el men Window. Del mismo modo, se recomienda el uso de las rdenes
Edit/Hide y Edit/Unhide para mostrar u ocultar las partes grandes del modelo que
obstaculicen la visin de las pequeas.

Pgina 18

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

3.2.2 Prototipos

Figura F. 14 Primer prototipo de pata


(Fuente: Proyecto MIHRO)

El primer prototipo desarrollado fue el nico


que no se dise usando SketchUp, por lo que
su estructura es mucho ms tosca y est menos
optimizada. Esta pata jams lleg a moverse,
pues se consider que su diseo no cumpla con
los requerimientos de este proyecto, y por tanto
el trabajo prosigui con el diseo de otro
prototipo ms optimizado, y no con el
desarrollo de la electrnica de control. Entre sus
principales problemas destacan la anchura de las
patas, pues la propia estructura de soporte de
los servos se extiende hacia la parte posterior de
stos para hacer las veces de eje trasero, la
escasa movilidad vertical del conjunto y la
ausencia de los sistemas de deteccin de suelo y
obstculos.

El segundo prototipo que se dise jams lleg a ver la luz, pues fue rpidamente
sustituido por el tercer prototipo. Aunque conserva algunos patrones de su predecesor,
mejora sustancialmente su movilidad vertical e incorpora elementos que han permanecido
hasta el diseo final, como el sensor de contacto con el suelo basado en una varilla
metlica, acabada en un taco de goma y suspendida sobre un muelle. Adems, en este
prototipo se estudi la posible inclusin de un encoder realimentador de la posicin vertical
de la pata, que se descart cuando se desarroll una estrategia de software capaz de emular
esta funcin incluso con mayor precisin.

Figura F. 15: Segundo prototipo de pata


(Fuente: Proyecto MIHRO)

Pgina 19

Diseo mecnico
El tercer prototipo se dise con la idea especfica de incluir un mecanismo de deteccin
del suelo y de los obstculos. Este mecanismo, distinto al que finalmente incorporan las
patas de MIHRO, consiste en un tubo estrecho envainado dentro de otro tubo algo ms
grueso, de modo que el primero, en cuyo extremo se asienta el tope de goma que hace de
pi, puede ascender por el interior del segundo para presionar un pulsador cuando la pata
hace contacto con el suelo. Al mismo tiempo, el tubo grueso se sujeta a la estructura de la
tibia atravesado slo por un tornillo, cosa que le permite pivotar en el plano paralelo a la
cara frontal de la tibia cuando la trayectoria de la pata interfiere con un obstculo. Al
pivotar, el movimiento de la parte superior del tubo presiona un pequeo interruptor que
hace efectiva la deteccin del obstculo.

Figura F. 16: Detector de obstculo abierto


(Fuente: Proyecto MIHRO)

Figura F. 17: Detector de obstculo cerrado


(Fuente: Proyecto MIHRO)

El diseo original de este prototipo


an comprenda la inclusin del
encoder. Ms tarde este diseo se
revis
para
eliminar
dicho
dispositivo, incluir los ejes traseros
en los servos (cosa que estrech la
pata) y adecuar su esttica al aspecto
del segundo prototipo. Finalmente la
pata se fabric y se acopl al soporte
de madera del primer prototipo. Esta
pata y los sistemas electrnicos que la
hacen funcionar constituyen la
maqueta de pruebas del proyecto
MIHRO. Entre sus defectos
Figura F. 18: Tercer prototipo de pata
mecnicos ms importantes destaca
(Fuente: Proyecto MIHRO)
la insuficiente capacidad de elevacin
de las tibias, la excesiva distancia entre el eje del motor elevador del fmur y el eje del
motor de movimiento horizontal (cosa que hace que el eje trasero de ste sufra) y la
insuficiente superficie de deteccin de obstculos de las tibias.

Pgina 20

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Figura F. 19: Aspecto final del tercer prototipo


(Fuente: Proyecto MIHRO)

En cuanto al cuarto prototipo, quizs no sea demasiado exacto llamarlo as, pues en
realidad se trata de un largo proceso de diseo que parte de un modelo completamente
distinto a los tres prototipos anteriores, y que culmina con el diseo final de la pata de
MIHRO. En la primera etapa de dicho proceso, se disea un modelo de pata con mayor
capacidad para recogerse sobre s mismo y mayor capacidad de elevacin vertical de la tibia.
As mismo, este primer concepto ofrece la ventaja de que, en su posicin recogida, el fmur
permanece completamente vertical, lo que reduce drsticamente el consumo de los motores
de la pata cuando sta se halla en su posicin inicial. Durante esta misma etapa se realizan
varias pruebas de rediseo del mecanismo de deteccin de suelo y obstculos para
adaptarlo a la nueva estructura y se intenta, sin xito, disear un fmur que permita situar
su motor de elevacin bajo el motor de movimiento horizontal de la cadera.

Figura F. 20: Primera etapa del diseo final de la pata


(Fuente: Proyecto MIHRO)

Pgina 21

Diseo mecnico
Durante una segunda etapa se ponen a
prueba dos estructuras de cadera posibles
que condicionaran drsticamente el
aspecto final del robot. En la primera
estructura, el motor de movimiento
horizontal de la cadera forma parte de la
pata, por lo que el cuerpo del robot
deber sujetarlo por sus dos ejes, dejando
suficiente espacio libre en su interior
como para que el motor, junto con la
pata,
se
muevan
libremente.
Conceptualmente, esta es la misma
estructura que usan los robots de Matt
Denton (ver captulo de Antecedentes),
Figura F. 21: Modelo de cadera mvil
por lo que cualquier parecido con un
(Fuente: Proyecto MIHRO)
sistema tan trillado se ha considerado
poco deseable. Adems, aunque este sistema otorga a la pata una gran capacidad de
movimiento horizontal, reduce su capacidad de movimiento vertical. No obstante, para
atenuar esta circunstancia, se disea un fmur con el puente (el segmento de metal que
une las dos aletas del fmur) avanzado, cosa que aumenta la capacidad de descenso del
mismo.
En la segunda estructura, por el contrario, el motor de movimiento horizontal de la cadera
forma parte de la estructura del trax y no de la pata, por lo que, para empezar, el motor
no se mueve dentro del cuerpo del robot, de manera que todo el rea no ocupada por los
motores del mismo se convierte en zona til para acoplar los sistemas que conforman su
electrnica.

Figura F. 22: Modelo de cadera fija


(Fuente: Proyecto MIHRO)

Pgina 22

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Este sistema necesita de una estructura que conecte los ejes del servo de movimiento
horizontal (sujeto al cuerpo del robot por sus aletas de soporte) a la estructura de la pata.
Dicha estructura se disea en primera instancia como una sola pieza que conecta el eje
motor del servo de movimiento horizontal a las aletas de soporte del motor de elevacin
del fmur, y una segunda pieza que sujeta el eje trasero del servo de movimiento horizontal
a la primera pieza (Figura F.22, centro y derecha). De esta forma, esta segunda solucin
slo reduce el rango de movimiento horizontal de las patas y no mejora su capacidad de
ascenso, aunque s de descenso, y ms an si se usa el fmur de puente avanzado.
No obstante, si se modifican estas piezas
de la cadera, de modo que exista una
nica pieza que abrace los dos ejes del
servo de movimiento horizontal y otra
pieza que sujete las aletas de soporte del
servo del fmur, se puede mejorar la
capacidad de movimiento horizontal de la
pata y sobretodo su capacidad de
elevacin, eso s, a costa de empeorar su
capacidad de descenso (Figura F.22,
izquierda). Finalmente, se hall que la
opcin ms equilibrada en cuanto a
capacidad de movimiento horizontal,
elevacin y descenso de la pata surga al
disear un nuevo fmur de puente
avanzado pero recortado. Y visto que las
propiedades mecnicas de este diseo
eran las mejores de cuantas se haban
probado, y que satisfacan perfectamente
las premisas de este proyecto, se opt por
escoger esta solucin como estructura
definitiva de las patas de MIHRO.

Figura F. 23: Diseo final de las patas


(Fuente: Proyecto MIHRO)

3.2.3 Ensayos (maqueta de pruebas)


Los experimentos realizados con la maqueta y el tercer prototipo de pata han resultado ser
de vital importancia para el desarrollo final del proyecto, sobre todo en lo que se refiere a la
implementacin de las principales estrategias de software para generar el movimiento de los
servos. Con la primera controladora, una pequea placa electrnica basada en el
PIC16F84A, se lograron establecer las principales rutinas de generacin de seales de
control PWM (Pulse Width Modulation) para los servos escogidos, los Futaba S3003. Este
es un servo analgico estndar cuyo control se basa en la modulacin del tiempo de nivel
alto, o TON, de una seal consigna que mantiene un perodo constante T de 20ms. En el
interior del servo esta consigna se compara constantemente con una tensin de referencia.
Pgina 23

Diseo mecnico
Dicha tensin de referencia
est condicionada por la
posicin de un potencimetro,
que
a
su
vez
est
mecnicamente conectado al
eje de salida del servomotor.
De esta manera, la seal PWM
es convertida a un nivel de
tensin que se compara con el
nivel de realimentacin de la
Figura F. 24: Control de posicin del servo
posicin del servo; si hay
(Fuente: www.digitalnemesis.com)
diferencia, el amplificador del
error har que el motor gire en un sentido u otro para minimizarla, y si las tensiones de
referencia y consigna se igualan, el motor se detendr en esa posicin. En el caso de los
Futaba S3003, y de la mayora de servos analgicos que hay hoy da en el mercado, este TON
representa una pequea fraccin de aproximadamente el 10% del perodo T, cosa que pone
de manifiesto la ineficiencia inherente a este tipo de servos en comparacin con los
llamados digitales, en los que este pulso de control llega a alcanzar entre el 20% y el 60%
del perodo total.
Si se indaga un poco sobre el parmetro TON se descubre que la mayora de servos
analgicos de esta escala responden ante una anchura de pulso que vara aproximadamente
entre 03 y 23ms, de forma que una seal con el pulso mnimo conducir al servo a
posicionarse en el extremo inferior de su rango de movimiento, mientras que una con el
pulso mximo le llevar a su extremo superior, pudiendo configurarse en cualquiera de sus
posiciones intermedias.

Figura F. 25: Caractersticas de la seal PWM


(Fuente: www.iearobotics.com)

Pgina 24

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


De este modo, el primer experimento que se realiz
sobre la maqueta fue la de determinar la correcta
temporizacin de los TON de tres seales de control
para hallar la correlacin exacta con las posiciones
reales de los tres servos. Para ello la placa se serva de
dos botones que aumentaban o disminuan una variable
de control que actuaba sobre una rutina de retardo que
permita cuantificar el tiempo transcurrido desde que el
pulso comienza en nivel alto hasta que termina
Figura F. 26: Primera controladora
volviendo al nivel bajo. Adems, hubo que programar
(Fuente: Proyecto MIHRO)
el sistema interruptivo y el mdulo Timer0 del
microcontrolador para poder repetir el proceso cada 20ms. Este sistema, de una forma casi
idntica, ha trascendido hasta los programas finales de control de MIHRO, por lo que la
explicacin ms detallada del cdigo fuente se realizar en el apartado de programacin de
esta memoria. Finalmente, se determin que el servo se posiciona en 0 (lmite inferior)
mediante un pulso de 048ms y a los 180 (lmite superior) a los 228ms. El intervalo de
tiempo entre estos niveles mnimo y mximo se cuantificaba mediante una variable que
ofreca un rango de 150 valores posibles, por lo que la posicin del servo poda controlarse
con 12 de precisin.

Figura F. 27
Figura F. 28
Figura F. 29
Imgenes panormica y de detalle de la seal PWM obtenida fluctuando entre dos valores
(Fuente: Proyecto MIHRO)

Despus de ste y otros experimentos realizados hubo que abandonar esta primera placa de
control por problemas inherentes al PIC16f84A, un dispositivo explotado hasta la saciedad
por ser uno de los ms vendidos de la marca Microchip, pero hoy da bastante desfasado.
El sustituto escogido fue el PIC16f88, un recambio generacional relativamente reciente del
PIC16f84, que integra en un espacio tambin de 18 patillas la mayora de mdulos de otros
microcontroladores mucho ms grandes, convirtindose en uno de los PICs ms verstiles
en relacin a su tamao que ofrece Microchip en esta gama. Para explorar las principales
opciones de comunicacin y procesamiento de este dispositivo, se dise una nueva placa
entrenadora que permite igualmente controlar los tres motores del prototipo, a la vez que
explotar las posibilidades de comunicacin I2C y USART (para RS-232) de este
microcontrolador. La placa adems incorpora tres botones de control, cinco LEDs y
conectividad para la programadora y para los dos sensores de contacto de la tibia del tercer
prototipo.
Pgina 25

Diseo mecnico
Con la placa entrenadora se pudieron realizar importantes avances en el control del tercer
prototipo; entre ellos destacan:
Mejora de la rutina de retraso para
lograr controlar la posicin de los
servos en base a una variable de
250 valores posibles, cifra que se
corresponde mucho mejor con las
caractersticas de una mquina de
8 bits. Con esta rutina se pueden
controlar los servos con una
precisin de 072.
Programacin de una secuencia de
movimiento que permite a la pata
dar un paso y retroceder hasta
su posicin inicial. Despus se
mejora la secuencia para reducir la
Figura F. 30: Placa entrenadora
inercia en sus extremos, evitando
(Fuente: Proyecto MIHRO)
as temblores indeseados.
Introduccin de cinco parmetros que controlan y definen todas las caractersticas
del paso. Estas son:
o Speed: Proporcin en la que fluctan las variables que definen la posicin
de los motores cada 20ms.
o Centro: Posicin central del paso. Permite corregir las pequeas diferencias
de montaje de cada pata, as como adaptar la posicin central de las patas
oblcuas.
o Rango: Distancia de avance y retroceso que cubrir el paso respecto del
centro. Influye sobre la velocidad de avance del robot.
o Zanco: Altura a la que se produce el movimiento horizontal de avance
respecto del de retroceso de la pata.
o Altura: Altura a la que se produce el movimiento horizontal de retroceso de
la pata. Determina la altura del cuerpo del robot respecto del suelo mientras
ste est andando.
Control de estas cinco variables mediante los tres botones de la placa. El
experimento demostr que poda controlarse el movimiento de la pata de forma
dinmica.
La conclusin ms importante a la que se lleg era que si se mantena la variable Speed
acotada en un valor inferior a 10, la pata responda con suficiente fidelidad a las consignas
de movimiento. Una velocidad superior a 10 provocaba reducciones en los rangos de
movimiento, pues el motor no es lo bastante rpido como para asumir una fluctuacin tan
precipitada. De este modo, se considera que la pata siempre est posicionada de acuerdo
con el valor instantneo de su variable de control, cosa que hace que no sea necesario un
encoder para realimentar la posicin vertical u horizontal de la pata cuando se produce la
deteccin del suelo o de un obstculo; basta con capturar el valor de dicha variable.
Pgina 26

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

3.2.4 Caractersticas mecnicas finales


Finalmente, el diseo mecnico del robot satisface las premisas de este proyecto, y adems
rene las siguientes caractersticas:

Caracterstica
Peso del robot
Tamao robot (rectngulo circunscrito)
Tamao Trax Base (rectngulo circunscrito)
rea til del Trax Base
rea til mxima de las Tapas Superior e Inferior
Distancia central til
Distancia cervical til
Distancia entre las patas delanteras a 90
Distancia entre la Tapa Superior y el Trax Base
Distancia entre la Tapa Inferior y el Trax Base
Movilidad horizontal de las patas delanteras, Fmur
plegado
Movilidad horizontal de las patas delanteras, Fmur
desplegado
Movilidad horizontal de las patas centrales, Fmur plegado
Movilidad horizontal de las patas centrales, Fmur
desplegado
Movilidad horizontal de las patas traseras, Fmur plegado
Movilidad horizontal de las patas traseras, Fmur
desplegado
Capacidad de elevacin del Fmur desde la posicin inicial
Capacidad de descenso del Fmur desde la posicin inicial
Capacidad de elevacin de la tibia en posicin inicial
Capacidad de elevacin de la tibia en elevacin mxima del
fmur
Rango de movimiento mximo de las Tibias
Distancia entre los ejes horizontal y vertical de la Cadera
Distancia entre los ejes de Fmur y Tibia
Apertura del paso (Fmur: 25, Tibia: 25) con incidencia
de las patas adyacentes
Capacidad de inclinacin lateral
Capacidad de inclinacin frontal
Altura mxima del cuerpo en posicin horizontal
Altura mxima de las patas delanteras en inclinacin frontal
mxima
Tabla T. 3: Propiedades mecnicas del robot MIHRO
(Fuente: Proyecto MIHRO)

Pgina 27

MIHRO
2250 Kg
31,1 cm X 32,1 cm
26 cm X 17 cm
162 cm2
281 cm2 x2
5 cm
3 cm
3 cm
2 cm
3 cm
-60, + 95
-75, + 95
-60, +60
-70, +60
-95, + 60
-110, + 60
35
150
95
25
190
3,8 cm
7 cm
-35, + 35
31
38
16,1 cm
38,7 cm

Diseo mecnico
Algunas imgenes del diseo definitivo y el resultado final.

Figura F. 31: Collage con distintas vistas del diseo y el resultado finales
(Fuente: Proyecto MIHRO)

Pgina 28

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Una variable crtica en el diseo mecnico es la distancia entre los ejes de los motores
Fmur y Tibia, que el en robot MIHRO mide exactamente 7cm. Cuanto ms corta sea
esta distancia, menos capacidad tendr la pata para recogerse sobre s misma, menos altura
podr alcanzar en su posicin erguida y ms cortos sern sus pasos, por lo que andar a
velocidad ms lenta. No obstante, cuanto ms larga sea esta distancia, menor ser el par
efectivo de los motores encargados de sostener el peso del robot, pues la fuerza que puede
ejercer un motor en su eje queda dividida por el valor de esta distancia en el otro lado del
fmur. De este modo, si la especificacin tcnica de los servos Futaba S3003 dice que
pueden ejercer un par de 41 Kg/cm alimentados a 6V, significa que podrn ejercer un par
de 41Kg/7cm = 058Kg en el otro lado del fmur.
Hay que tener en cuenta que tanto el motor Fmur como el Tibia colaboran en mayor
o menor medida en el levantamiento del peso del robot, dependiendo del ngulo en que se
encuentren el uno del otro, y ambos respecto de la vertical. No obstante, en ningn caso
salvo en el ideal, y slo si ambos motores se hallan en una posicin especfica, la pata podr
ofrecer una fuerza de mxima de 0,58 Kg x 2 = 116 Kg. A la prctica este valor es
inalcanzable, pero para corroborarlo se realiza un experimento de levantamiento de carga
(incluido en el apartado de vdeos del CD) que demuestra que el robot puede levantar un
total de 618g, adems de su propio peso. Este es un valor pequeo, pero acorde a lo que
caba esperar de este servomotor en una aplicacin as. No obstante, hay que decir que es
un valor poco fiable, pues se observ durante la experimentacin que cuanto ms
aumentaba el peso aadido, mayor se haca el consumo elctrico de los motores,
alcanzando, a partir de cierto peso, un consumo total de 414 A, el mximo que puede
ofrecer la fuente de alimentacin. En estas circunstancias, y dado que no se dispone de una
fuente de alimentacin con un lmite de entrega de corriente mayor, no se pudo comprobar
en este experimento el peso mximo que podra levantar el robot sin estar sometido a esta
restriccin. Por otro lado, el experimento revel varios datos sobre el consumo elctrico
del robot en distintas circunstancias (motores a 6V):

Situacin

Consumo

Patas recogidas, sin apoyo


Patas extendidas, sin apoyo
Patas extendidas, con apoyo
Maniobra de levantamiento sin peso
Maniobra de levantamiento con peso mximo
Robot caminando
Seales PWM apagadas (motor inactivo)
Consumo medio mnimo unitario de motores activos
Consumo medio mximo unitario de motores activos
Electrnica, con alimentacin de motores, andando
Electrnica, con alimentacin de motores, en reposo
Electrnica, sin alimentacin de motores
Tabla T. 4: Consumo elctrico del robot
(Fuente: Proyecto MIHRO)

Pgina 29

290mA
740mA
140A
310A 350A
414A
170A 380A
190mA
16mA
230mA
75mA 95mA
65mA
90mA

Fabricacin y montaje del esqueleto

4 Fabricacin y montaje del esqueleto


Entre las piezas que componen el robot se cuentan tubos metlicos, muelles, sensores de
contacto, motorizacin, tornillera, separadores, tacos de goma y electrnica en general. El
resto de piezas del robot, a las que nos referiremos como esqueleto han sido
completamente fabricadas a mano y de forma artesanal a partir de chapa de aluminio
normal de 1, 2 y 2,5 mm de espesor. Todas las piezas del esqueleto han sido diseadas por
ordenador, de acuerdo con el proceso visto en el captulo anterior, pero ninguna de ellas es
idntica a su modelo informtico, ni tampoco son idnticas entre s. La razn es que el
proceso de fabricacin es impreciso, y cada pieza ha de ser ligeramente modificada durante
el proceso de montaje para encajar con sus piezas colindantes. De este modo, y aunque
muchas de las piezas se fabrican en grupos de seis, cada una de ellas es nica y no puede ser
sustituida por otra de sus anlogas.
El cuerpo mecnico del robot est compuesto de un total de 853 componentes:
19 servomotores Standard Futaba S3003
o [S0] 1 servo Cuello 1 (Elevador de Cabeza)
o [S1] 6 servos Cadera (Motor 1, eje horizontal)
o [S2] 6 servos Fmur (Motor 2, eje vertical)
o [S3] 6 servos Tbia (Motor 3, eje vertical)
2 servomotores Mini (el proyecto actual no incluye el diseo de la cabeza)
o [S4] 1 servo Cuello 2 en eje horizontal
o [S5] 1 servo Cuello 3 en eje vertical
125 elementos elsticos o blandos
o [E0] 76 protectores de goma compatibles con servos Futaba Standard
o [E1] 19 soportes de plstico para el eje del servo Standard Futaba
o [E2] 2 soportes de plstico compatibles con servo Mini (no incluido)
o [E3] 12 sensores de contacto de tipo Mini-Bumper.
o [E4] 6 tacos huecos de goma antideslizante
o [E5] 6 muelles de 65mm
o [E6] 6 muelles de 4,5mm
18 separadores hechos a medida con tubo de aluminio de 0,5mm y 4mm
o [Y0] 6 separadores para la Tapa Superior del Trax
o [Y1] 6 separadores para la Tapa Inferior del Trax
o [Y2] 6 separadores para unin elstica de la Tibia Mvil
150 arandelas
o [A0] 12 arandelas normales M2,5
o [A1] 132 arandelas normales M3
o [A2] 6 arandelas de presin M2,5

Pgina 30

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


250 tornillos y 243 tuercas
o [T0] 19 tornillos de fijacin para ejes de servo Futaba Standard
o [T1] 50 tornillos de cabeza plana de 2mm x 10mm + 50 tuercas
o [T2] 6 tornillos de cabeza plana de 2,5mm x 20mm + 18 tuercas
o [T3] 8 tornillos de cabeza plana de 3mm x 10mm + 8 tuercas
o [T4] 76 tornillos de cabeza plana de 3mm x 20mm + 76 tuercas
o [T5] 6 tornillos de cabeza plana de 3mm x 35mm + 12 tuercas
o [T6] 12 tornillos de cabeza cnica de 2,5mm x 20mm
o [T7] 49 tornillos de cabeza cnica de 3mm x 10mm + 49 tuercas
o [T8] 12 tornillos de cabeza cnica de 3mm x 30mm + 18 tuercas
o [T9] 12 tornillos de cabeza hexagonal de 3mm x 10mm + 12 tuercas
48 piezas del esqueleto
o Piezas del Cuello
[P10] Cuello 1
o Piezas del Trax
[P00] Trax Base
[P01] Tapa Superior del Trax
[P02] Tapa Inferior del Trax
[P11] Hombro Izquierdo
[P12] Hombro Derecho
o Piezas de cada pata (simtricas en dos grupos de tres)
[P03] 6 Conector Cadera-Trax
[P04] 6 Conector Cadera-Fmur
[P05] 6 Fmur
[P06] 6 Parte Fija de la Tibia
[P07] 6 Soporte Superior del Pi
[P08] 6 Parte Mvil de la Tibia
[P09] 6 tubos de latn cromado de 6mm (Pies)
o Piezas de la Cabeza
(el proyecto actual no comprende el diseo de la cabeza)

Hay que mencionar que los elementos del despiece marcados como [S4], [S5] y [E2]
corresponden al montaje de la cabeza (que se lleva a cabo en la etapa 6 del desarrollo global
de MIHRO), por lo que no se concretan mayores detalles sobre estos elementos en este
proyecto. As mismo, las piezas [P10], [P11] y [P12], correspondientes al mecanismo de
elevacin del cuello, junto con los elementos que las acompaan (como el servo [S0]), han
sido diseados dentro del proyecto actual, pero sin llegar a montarse, pues su nica razn
de ser es el de elevar una cabeza que an no existe, y el espacio que ocupan se hace
necesario para instalar la placa entrenadora, que en esta etapa del proyecto hace las veces de
cerebro del robot.

Pgina 31

Fabricacin y montaje del esqueleto

4.1 Proceso de modificacin de los servos


El servo escogido para las patas del robot es el Futaba S3003, un servomotor de
modelismo, analgico y de tamao estndar. El principal motivo de la eleccin de este
servo es su popularidad y su precio econmico, ya que el ajustado presupuesto de que se
dispone para realizar este proyecto es uno de sus principales factores limitantes, y cualquier
servo de precio unitario ms caro (en este caso 12, aunque fue comprado por 10),
multiplicado por los 19 motores de este tipo que incorpora el robot habra supuesto un
gasto excesivo. Este es un servo veterano y muy conocido en el mbito del radiocontrol,
puesto que se suele emplear para montar, por ejemplo, la direccin de los coches
teledirigidos. Su fiabilidad est ms que comprobada, ofrece buen rendimiento y es fcil de
encontrar en las tiendas especializadas. Despus de hacer los clculos de diseo y de
comprobar que el par que ofrece este servo es suficiente para levantar el peso del robot,
ms el posible extra de carga, se decidi que era apto para aplicarse en esta etapa.
Valores tpicos:
Par:
Velocidad:
Reductora:
Dimensiones:
Peso:
Precio:

Alim. 4,8 V
3,2 Kg/cm
0,23 sec/60

Alim. 6 V
4,1 Kg/cm
0,16 sec/60
Nylon
41x20x36mm
37,2g
~12

Este servo se comercializa con pionera de nylon y eje de plstico, y est diseado para
acoplarse slo por un extremo de su eje de rotacin. Esto significa que es vulnerable a
fuerzas de torsin excesivas, pudiendo llegar a romperse si se somete a estrs fuera de su
eje normal de rotacin. Aunque el peso del robot no fuera suficiente para romper los ejes
de estos servos, la idea de sujetar los motores slo por uno de los extremos de su eje de
rotacin slo contribuira a aumentar la fragilidad del robot y a disminuir el tiempo de vida
de los motores, por eso es necesario hacer ciertas modificaciones en cada uno de los servos
antes de acoplarlos al robot. Estas modificaciones llevan, finalmente, a instalar un nuevo
extremo del eje de rotacin en la tapa trasera del servo, de forma que ste pueda acoplarse
al robot agarrado por dos puntos y no slo uno, aumentando as su robustez y durabilidad.

Pgina 32

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


A continuacin se describen los pasos a seguir para instalar los extremos traseros del eje de
los servos:
1. Se desenroscan los cuatro tornillos que sujetan la tapa trasera del
servo. Estos tornillos son tan largos porque tambin sujetan la
caja de engranajes al cuerpo del servo, el cual se deber
manipular con precaucin una vez sacados los tornillos, puesto
que de lo contrario se podra abrir y desmontar la caja de
engranajes accidentalmente.
2. Una vez abierto el servo queda por un lado la tapa y por el otro
el cuerpo boca abajo del servo, mostrando su circuitera interna.
3. La tapa trasera del servo tiene forma rectangular, y sujeta los
cables que salen del interior del servo mediante una pestaa
sobresaliente situada en el borde de uno de los lados cortos del
rectngulo. Esta pestaa se corta fcilmente con un cutter. Del
mismo modo, es necesario abrir un hueco en el marco interior
que permite el correcto encaje de tapa y cuerpo del servo, por el
lado contrario al de la pestaa.
4. La pestaa muestra dos pequeos orificios en la parte interior de
la tapa, que encajan con dos protuberancias situadas en esta
misma posicin, pero del lado del cuerpo del servo. Es fcil
reconocerlas, porque estn situadas justo a cada lado de la salida
de los cables. De nuevo con el cutter se cortan estas
protuberancias, pero con cuidado de no daar los cables.
5. Tambin muestra la tapa del servo, en el centro de su mitad ms
alejada de la salida de los cables, una hendidura redonda que
coincide con el centro del pequeo motor de CC situado en el
interior del servo. Por el lado interno de la tapa, esta hendidura
toma la forma de una protuberancia que oprime este pequeo
motor y lo mantiene fijo. Cabe decir que el eje del servo est
situado en su mitad ms cercana a la salida de los cables,
mientras que la hendidura est en la mitad contraria. No
obstante, si se gira la tapa trasera 180 esta hendidura queda
perfectamente alineada con el eje del servo, por eso se usar para
colocar justo ah el tornillo que har de eje trasero.
6. Es necesario terminar de perforar la hendidura con una broca de
3mm.

Pgina 33

Fabricacin y montaje del esqueleto


7. La perforacin dejar unos bordes de plstico en la cara interna
de la tapa que habr que cortar y limar hasta que la superficie
interior de la tapa quede lo ms lisa posible. Como el orificio se
encuentra encajonado ser ms prctico limar el reborde con un
fresoln y una punta de lima. Entonces la tapa estar lista para
colocar y fijar el tornillo que har de eje.
8. Adems de con la tuerca pertinente, el tornillo quedar
firmemente fijado al servo con una buena cantidad de cola de
epoxi. Esta cola tiene una doble funcin: por un lado evita que
las vibraciones derivadas del uso continuado del motor aflojen la
tuerca y debiliten el eje, y por otro lado forma un cuerpo
compacto que evita que las fuerzas perpendiculares que reciba el
eje daen o deformen la tapa de plstico.
9. En primer lugar se dibuja un crculo de cola de epoxi por el lado
interior de la tapa, alrededor del agujero donde ir el tornillo.
Sobre esta cola se coloca una arandela del n 3, [A1].
10. A continuacin se pone algo de cola sobre el centro de la
arandela y se hace pasar a travs de ella un tornillo de cabeza
cnica de 3mm x 10mm, [T7]. El sobrante de cola que queda
en el centro de la arandela impregna la rosca del tornillo, lo que
har que, una vez puesta la tuerca y seca la cola, sta quede an
ms firme. Por supuesto esto significa que una vez instalado este
eje ya no se podr retirar de la tapa del servo. Para esta
operacin es indispensable usar un tornillo de cabeza cnica,
puesto que el espacio disponible dentro del servo para la cabeza
del tornillo es mnimo, y una cabeza cnica se adentra
ligeramente en el agujero de una arandela, ocupando as menos
volumen que una cabeza plana.
11. De nuevo dibujamos un crculo con cola de epoxi, pero esta vez
en el lado exterior de la tapa, y de nuevo le colocamos una
arandela [A1] encima. Esta vez la arandela quedar atravesada
por la parte roscada del tornillo.
12. Finalmente se enrosca la tuerca y se aprieta bien con ayuda de
una llave inglesa pequea o alicate y un destornillador. Las
arandelas hacen posible un apretado ms vigoroso, ya que de no
haberlas puesto la superficie de plstico de la tapa se deformara
al apretar el tornillo. Para terminar se limpia el exceso de cola
procurando que sta recubra la tuerca, pero no la parte

Pgina 34

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


sobresaliente del tornillo, puesto que ser sta la que habr de
trabajar como eje trasero del servo.
13. Una vez lista la tapa del servo, sern necesarias algunas
modificaciones en su circuito interno para poder cerrarla. Dicho
circuito muestra su cara trasera, de modo que el primer paso ser
usar unas tenazas de corte pequeas para eliminar el sobrante de
todas las patillas de los componentes electrnicos asentados al
otro lado de la placa, procurando no daar el estao que los
mantiene sujetos y en contacto.
14. Acto seguido ser necesario usar un pequeo taladro de
maquetismo o fresoln con una fresa cnica pequea para
rebajar las tres soldaduras de estao situadas justo debajo de las
tres soldaduras que mantienen los cables sujetos a la placa. Estas
tres soldaduras, que conectan el potencimetro de
realimentacin a la placa, estn justo debajo de la cabeza del
tornillo que se ha instalado en la tapa del servo, y de no limarse
nos impediran cerrar la tapa. Esta es sin duda la operacin ms
delicada de este proceso, ya que un movimiento en falso podra
daar las pistas de la placa, o las pequeas resistencias SMD
soldadas a la placa por este lado.
15. Una vez rebajadas lo suficiente, es importante usar un pequeo
cepillo para eliminar cualquier polvo o limadura de estao que
pueda haber quedado adherido a la placa, puesto que este
residuo podra llegar a producir un cortocircuito u originar un
fallo de funcionamiento. Asimismo, es necesario usar un
polmetro con detector de conduccin sonoro para asegurarse
concienzudamente de que no se ha cortado o puenteado
ninguna pista ni soldadura de la placa.
16. Una vez verificada la placa, es necesario construir una lmina
aislante para evitar que la cabeza del tornillo pueda puentear las
soldaduras limadas al cerrar la tapa. Esta lmina est hecha de
plstico transparente y se construye dibujando el contorno
interior de la tapa del servo con un marcador indeleble para
poder recortarlo posteriormente. La intencin de que el plstico
tenga la misma forma y dimensiones que el interior de la tapa del
servo es evitar que sta se mueva en su interior.
17. Una vez recortada la lmina aislante basta con una gota de cola
para fijarla a la cabeza del tornillo en su posicin correcta.

Pgina 35

Fabricacin y montaje del esqueleto


18. Finalmente, se cierra la tapa del servo, se aprietan con
moderacin los cuatro tornillos y se deja secar durante 24h.
Despus del secado, convendr comprobar su buen
funcionamiento conectando el servo a la alimentacin pertinente
e inyectndole una seal PWM dentro de sus parmetros
admitidos en su terminal de consigna.

Pgina 36

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

4.2 Procedimientos de fabricacin del esqueleto.


Una vez terminado el diseo detallado por
ordenador, comienza la fabricacin de las piezas del
robot para su posterior ensamblado y montaje. Esta
memoria describe por separado ambos procesos
con la intencin de hacer la explicacin ms
inteligible, sin embargo lo cierto es que durante el
proceso real de construccin, fabricacin y
ensamblado se llevaron inevitablemente a cabo de
forma intercalada. Tambin es interesante
mencionar que todas las herramientas y materiales
que conlleva esta etapa son tpicas de un taller
casero, y dado que todo el proceso de fabricacin y
montaje se lleva a cabo completamente a mano y de
forma artesanal, el xito de dicho proceso depende
en gran medida de la habilidad de su constructor.
La fabricacin del esqueleto es un proceso que comienza con el modelo informtico
tridimensional del robot. El software Google SketchUp Pro 6 nos permite modificar por
separado cada pieza del robot y alinear sus caras hasta convertirlas en una superficie plana
con un contorno definido. Para hacer esto, no obstante, es necesario conocer el material
con el que se va a construir cada pieza, y haber analizado antes su maleabilidad y sus
posibilidades de mecanizacin. En nuestro caso, el robot est fabricado en chapa de
aluminio laminado normal (ms rgido que el aluminio virgen, pero menos que el
duraluminio) de 1, 2 y 25mm de espesor. Tras realizar algunas pruebas de doblado, se
observa que el aluminio no se curva en perfecto ngulo recto, sino que el eje de doblado
presenta un margen de rea curva que, de no tenerse en cuenta deformara las dimensiones
de las piezas y evitara que encajaran. Este margen se cuantifica en 2mm, 4mm y 5mm para
los espesores mencionados. Esto significa que el diseo informtico del robot ha de prever
estos mrgenes, y que han de quedar bien reflejados en el despliegue de las piezas.

Una vez desplegadas las piezas se exportan a otro programa, LayOut, incluido en el
paquete de Google SketchUp Pro 6, y que constituye una til herramienta para gestionar la
presentacin e impresin de los modelos diseados en SketchUp. Desde LayOut se
imprimen varios planos a escala 1:1 donde se disponen algunas de las piezas desplegadas,
Pgina 37

Fabricacin y montaje del esqueleto


distribuyndolas en el espacio de forma concienzuda. Ha de tenerse en cuenta que la
distribucin de las piezas se trasladar a la chapa de aluminio, donde habr que cortarlas
usando una simple sierra de arco, de manera que si las piezas no estn bien distribuidas en
el espacio disponible el proceso de corte podra entorpecerse o incluso hacerse imposible.

Una vez impreso, el plano se convierte en una plantilla calcndolo en una lmina de
plstico transparente con un rotulador indeleble de punta fina. Durante el calco, la lmina
de plstico y el plano deben mantenerse bien unidos para evitar que uno se mueva respecto
del otro. Adems, durante este proceso de calco se tendrn en cuenta ciertas reas que
harn de puente entre unas piezas y otras para mantenerlas unidas tras el recorte. De este
modo se conserva en una sola plantilla la distribucin de todas las piezas y no hay que
volver a distribuirlas cada vez que se pasen a la chapa de aluminio. Las zonas de doblado
deben quedar especialmente bien definidas y los agujeros deben quedar bien claros y
centrados durante el calco. Puesto que hay agujeros de distintos tamaos, ser bueno
marcar el dimetro de cada uno y perforarlos usando una broca de 2mm antes de recortar
la plantilla. Tambin es conveniente, para evitar errores, marcar sobre cada pieza el espesor
del aluminio que le corresponde.

Una vez listas las plantillas, se repasan sus bordes exteriores y los agujeros con un rotulador
permanente sobre la chapa de aluminio correspondiente. Las lneas deben quedar gruesas y
las reas de doblado bien marcadas, puesto que la manipulacin a la que se sometern las
piezas las borrar fcilmente, de manera que tendremos que repintarlas en ms de una
ocasin. Una vez listo el dibujo, los agujeros se marcan usando un punzn de acero
templado; de este modo ya no ser necesario repintarlos constantemente. Finalmente, se
recortan las piezas.

Pgina 38

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Para cortar las piezas se dispone de un banco de trabajo con dos tornillos de sujecin, y dos
sierras distintas: una para cortes rectos y otra para los curvos. Los dos tornillos del banco
servirn para agarrar por dos puntos las placas de aluminio cuando an son aparatosamente
grandes, ya que se venden en un formato de 60x60 cm. En el trabajo con las sierras habr
que tener en cuenta ciertas directrices: en primer lugar, el corte es impreciso y erosiona la
zona adyacente al mismo, de forma que se define un margen de 1mm aproximadamente
que separar la lnea de la zona de corte para salvaguardarla. En segundo lugar, el ancho del
corte es diferente para cada sierra: la sierra de cortes rectos elimina una franja de
aproximadamente 1mm de ancho, mientras que la de cortes curvos elimina una franja de
casi 3mm. Esto repercute directamente en la distancia que hay que mantener entre el corte
y la lnea. Por ltimo es muy importante colocar correctamente la pieza en el tornillo de
sujecin cuando se realiza un corte: la zona de incidencia de la sierra, sobretodo de la sierra
de corte recto, debe estar lo ms cerca posible del tornillo, porque de lo contrario el empuje
que se le da a la sierra podra doblar el aluminio y volver la pieza inservible si la sierra se
atascara, cosa que ocurre con frecuencia.

Pgina 39

Fabricacin y montaje del esqueleto


Una vez cortada, la pieza se sujeta de nuevo al
tornillo para limar sus bordes hasta dejar una silueta
limpia y definida. Se lima con una lima para metal,
gruesa y plano-convexa, as podremos usar la misma
lima para las zonas cncavas, las rectas y las
convexas. La lima debe eliminar tanto material como
sea necesario hasta que la lnea de contorno de la
pieza prcticamente desaparezca. De nuevo hay que
tener la precaucin de limar slo en la zona del borde
de la pieza cercano al tornillo de sujecin, porque de
lo contrario la fuerza de empuje de la lima podra
doblar la pieza.
Una vez hecho el contorno, y usando una lima igual, pero ms fina, se redondean los
cantos. Para hacerlo primero se realiza un bisel en todo el borde de la pieza y a ambos
lados. Despus el bisel se redondea usando la lima con suavidad hasta que se difumina,
quedando un borde mate y redondeado. Algunos recovecos sern de difcil acceso tanto en
el tornillo como sobre la mesa de trabajo, o exigirn limas ms pequeas. Es por eso, y por
la naturaleza de este proceso, que el trabajo de limado es lento, pesado y trabajoso.

Con esto concluye el corte y el limado de los contornos exteriores, pero algunas piezas
ofrecen contornos interiores que debern ser tratados de forma algo diferente.
Concretamente, aquellas piezas que abrazan y sujetan un servo muestran un contorno
rectangular que debe ser vaciado, limado y redondeado sin acceso desde el exterior. Estas
piezas son el Trax Base, P00, y las 6 Partes fijas de la Tibia, P06. El Conector CaderaFmur, P04, tambin abraza un servo, pero no lo hace por los cuatro costados, sino por
slo tres. Esto significa que se puede recortar con la sierra de forma normal, accediendo
por el lado abierto del rectngulo. Adems, en el caso de las piezas P04 y P06, el vaciado de
la cavidad del servo debe realizarse siempre despus de haber doblado la pieza. El motivo
tiene que ver con la robustez de la misma, puesto que en estos dos casos el doblez de la
pieza pasa muy cerca de los lados ms largos del hueco de los servos, de forma que una vez

Pgina 40

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


vaciado el hueco, el servo queda unido a la pieza slo por unas estrechas franjas de metal.
Estas franjas son suficientemente anchas para sujetar la estructura con fuerza, pero no para
doblarse de forma correcta. De este modo, si se vaca el hueco antes de doblar la pieza, al
doblarse sta se deforma, se desalinea y las franjas se agrietan, debilitando an ms la unin
entre el servo y el resto de la estructura. La solucin, vaciar el hueco despus de doblar la
pieza, ofrece un resultado satisfactorio a un alto precio, ya que el proceso de vaciado, ya de
por s engorroso, se vuelve adems incmodo y complicado.

El proceso de vaciado del hueco de los servos comienza usando el punzn de acero para
marcar siete puntos equidistantes formando un ngulo recto en dos de las esquinas
diagonalmente opuestas del rectngulo. Sobre cada una de estas marcas se perforar con
una broca de 3mm, de forma que deben estar suficientemente alejadas del contorno del
hueco como para que la broca no sobrepase la lnea de contorno, y suficientemente juntas
como para que cada agujero se solape ligeramente con sus dos agujeros adyacentes. Una
vez perforados, se usa una fresa de 3mm para eliminar el material que separa los agujeros
entre s. El resultado son dos ranuras yuxtapuestas en un vrtice y formando un ngulo
recto, de modo que cada una de las ranuras es ligeramente ms larga que el ancho de una
sierra de metal para corte recto, como la empleada anteriormente. Esto significa que, con la
ayuda de un mango especial que la agarra slo por un lado, podremos introducir la sierra
por las ranuras y serrar en ambas direcciones hasta recortar el hueco en el que deber entrar
el servo. Una vez hecho esto, de nuevo habr que limar los contornos del hueco hasta
dejarlos bien definidos para luego redondear los bordes, comprobando sta vez que el
agujero es suficiente para que el servo encaje. Cabe decir tambin que es conveniente
perforar los agujeros de sujecin del servo despus de haber terminado con el vaciado del
hueco, pues de lo contrario el ajuste de la pieza en el tornillo de sujecin o el doblado, si es
que se perforan estos agujeros antes de doblar, podran combar la superficie plana donde se
asentarn los tornillos que sujetarn el servo.

Pgina 41

Fabricacin y montaje del esqueleto

Una vez cortadas y limadas las piezas, y solucionado el problema de los contornos
interiores, el siguiente paso ser perforar las piezas segn las especificaciones del diseo.
No obstante, no todas las marcas hechas con el punzn deben perforarse por ahora, ya que
algunos agujeros han de albergar elementos mecnicos que deben ajustar entre s a la
perfeccin, y su localizacin exacta se calcular sobre las piezas definitivas, una vez
dobladas y montadas. El orden en el que deben intercalarse la perforacin de cada agujero y
los sucesivos procesos de la fabricacin de cada pieza se explicitan en el apartado de
montaje. Los agujeros se han realizado usando un taladro de columna a bajas revoluciones.
Esto es preferible al taladrar metal, porque conserva la integridad de la punta de las brocas,
que a altas revoluciones se calientan, y por ende se ablandan y se desafilan ms. El
problema es que perforar aluminio a bajas revoluciones provoca grandes extrusiones del
metal en la cara opuesta a la penetracin de la broca, de manera que habr que limar y
posteriormente repasar cada agujero.

Pgina 42

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Cabe decir tambin que algunos agujeros grandes ([O60],
[O76], [O88 O89], [O105] y [O109]) no se pueden hacer
directamente, sino que hay que usar brocas progresivamente
ms grandes, pues se corre un gran riesgo de que la posicin
del agujero vare. Tambin en estos casos es recomendable
agujerear despus de doblar la pieza, tal y como explicita el
proceso de montaje, pues el agujero se encuentra
peligrosamente cerca de una zona de doblez. El orden de
dimetro de las brocas que se han empleado sucesivamente
en los agujeros mayores de 3mm ha sido 3mm, 6mm y
8mm. Por otro lado, otros agujeros albergan tornillos de
cabeza cnica, y se hace necesario practicar un avellanado
del borde del agujero (imagen de la izquierda) con una broca
de 6mm para reducir el relieve de las mismas ([O34
O39], [O75], [O79 O81], [O86 - O87], [O106 O107] y [O110 O111]). Por ltimo,
algunos agujeros toman la forma de pequeas ranuras ([O108]) u orificios alargados
([O100]). Del mismo modo que se ha visto anteriormente, estas ranuras se forman tras
eliminar con una fresa el material que separa a varios agujeros adyacentes, y los orificios
alargados sencillamente se moldean con la fresa a partir de un orificio inicial ms pequeo.

Una vez terminada la primera tanda de agujeros se procede a doblar las piezas. El aluminio
laminado es un material muy poco elstico, de manera que prcticamente no recupera su
forma inicial despus de someterlo a una deformacin. Esto por un lado es algo positivo,
ya que facilita el proceso de doblado, pero por el otro conlleva un riesgo. Cuando el
aluminio se dobla, el lado interno del doblez se comprime y se densifica, mientras que el
lado externo se expande y se ablanda. Si slo se dobla una vez, la pieza es resistente y
fiable, pero si este doblez se desdobla en sentido contrario, la parte comprimida del doblez
no se expande de forma plstica, sino que se agrieta y se degrada. De este modo, si un
doblez se realiza en sentido contrario por error, al desdoblarse quedar mucho ms frgil, y
si se desdobla una tercera vez puede llegar a partirse. Por eso todos los dobleces han de
salir bien el en primer intento, pues no hay una segunda oportunidad: si sale mal, la pieza se
deshecha.

Pgina 43

Fabricacin y montaje del esqueleto

Para que los dobleces definan una lnea perfecta no es recomendable fiarse de los gastados
bordes del tornillo de sujecin, es mejor usar una barra de acero de borde recto y definido.
Esta barra siempre se coloca entre la pieza y el tornillo en el sentido de doblado,
aproximadamente 1mm o 1,5mm por encima del borde marcado del doblez para los
aluminios de 2mm y 2,5mm, respectivamente. Esto se debe a que el aluminio se deformar
ligeramente por el lado en que lo tenemos agarrado al tornillo en cuanto lo reafirmemos en
su posicin final, con ayuda de una escuadra y fuera del tornillo.

Adems, en algunos dobleces especialmente anchos el aluminio resulta ser tan resistente
que es imposible doblarlo por simple empuje perpendicular. En estos casos es necesario
usar un martillo y un tas, que no es otra cosa que una pieza de metal no demasiado duro
(cobre, en nuestro caso) que se usa sobre la pieza de aluminio para dirigir el efecto de los
golpes, y para que ste no reciba directamente los impactos del martillo, que le dejaran
marca.

Pgina 44

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Tal y como se ha mencionado anteriormente, algunos orificios ser mejor realizarlos


despus de alguna de las etapas de doblado de cada pieza, segn detalla el apartado de
montaje. De entre estos merecen ser mecionados algunos de los orificios grandes ([O60],
[O76] y [O88 O89]), que servirn para albergar las piezas de plstico [E1] que se
acoplarn al eje motriz de los servos. Los cuatro son
orificios de 8mm alojados en piezas que toman la
forma de dos planos enfrentados y separados una
cierta distancia, cosa que permite que dichas piezas
puedan sujetar los ejes trasero y motriz de un servo
mediante un orificio de 3mm para el eje trasero en
uno de los planos de la pieza, y otro de 8mm, el
que nos ocupa, que alberga el soporte del eje motriz
en el plano opuesto. De este modo, el orificio de
8mm debe quedar perfectamente alineado con el de 3mm, independientemente de lo
bien o mal que hayan quedado los dobleces de la pieza en cuestin, para evitar que el eje
del servo quede torcido, y por tanto su plano de rotacin desviado. As pues, aunque la
pieza no haya quedado perfectamente doblada, estos orificios s deben quedar
perfectamente alineados.
Para conseguirlo, primero se perfora con una broca de 3mm uno de cada par de agujeros;
es indiferente si se trata del agujero del eje motriz o del eje trasero. A continuacin se usa
un tornillo de cabeza plana de 3mm x 35mm, [T5], para pasarlo por el orificio y apretarlo
con una tuerca. La presin de la tuerca har que el tornillo marque la lnea perfectamente
perpendicular al plano en el que se halla el agujero, y su extremo roscado, que quedar muy
cerca del plano opuesto, marcar la posicin exacta del orificio que debe practicarse en
dicho plano. As los agujeros del eje trasero y motriz quedarn perfectamente alineados, y el
servo podr girar exactamente en el plano que le corresponde. Este proceso ha de realizarse
concienzudamente, ya que la desviacin de los ejes de los servos [S2] y [S3] puede provocar
fallos graves de funcionamiento, como por ejemplo la activacin errnea de los sensores de
obstculo cuando la pata presiona contra el suelo.

Pgina 45

Fabricacin y montaje del esqueleto

Adems, para facilitar la insercin en sentido oblicuo del servo en el espacio interior de la
pieza, en ms de una ocasin se hace necesario practicar un avellanado interno del orificio
de sujecin del eje trasero ([O75] y [O86 O87]), que realizaremos, igual que hicimos
antes, con una broca de 6mm, pero accediendo esta vez desde el agujero de 8mm que
hicimos en la parte opuesta de la pieza.

Sobre estos orificios cabe decir tambin que, aunque servirn para albergar soportes [E1]
idnticos, en el caso del agujero [O88] el soporte podr quedar ajustado en el orificio,
mientras que en el de los agujeros [O76] y [O89] el soporte deber quedar holgado. Esto es
un requisito derivado del proceso de montaje, ya que el agujero [O88] est situado en una
de las dos aletas de la pieza P05, y la forma de dichas aletas les permite deformarse
separndose entre s lo suficiente como para poder encajar el servo en su interior y
encerrarlo posteriormente al restablecerse la forma original de la pieza por pura elasticidad

Pgina 46

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


del metal. No obstante, ha de tenerse en cuenta que el aluminio es muy poco elstico, por
lo que si el metal se somete a demasiado estrs, la pieza puede deformarse de forma
irreversible. Con todo esto, el soporte de plstico [E1] puede instalarse y fijarse en este
orificio antes de instalar el servo, pues an y con esta pieza instalada, la insercin del servo
es factible gracias a las propiedades mecnicas de la pieza. Por el contrario, en el caso de los
agujeros [O76] y [O89] la pieza admite poca o ninguna deformacin, por lo que es
necesario que estos orificios estn despejados para aprovechar hasta el ltimo milmetro de
espacio maniobrable y as poder albergar el eje motriz del servo durante su proceso de
insercin en la pieza. Una vez colocado el servo, se encierran sus ejes en la pieza acoplando
el soporte [E1] al eje motriz del servo y atornillndolo a la pieza. El problema es que la
pieza de plstico se expande ligeramente al encajar con el eje estriado del servo, por lo que
si no se ha previsto una cierta holgura en su orificio se hace muy complicado colocarla en
su lugar.
Como se ha explicado anteriormente, el proceso de insercin comienza introduciendo
antes el eje trasero del servo en su orificio correspondiente, y desde una trayectoria oblicua,
para luego insertar el eje motriz en el orificio opuesto. Pero esto puede suponer un
problema, ya que la trayectoria de insercin del eje trasero del servo no se corresponde con
la trayectoria natural del orificio. En consecuencia, y con el agravante de que el eje trasero
del servo est roscado por estar construido con un tornillo, es ms que probable que el eje
se atasque en el agujero, o que sencillamente no entre. En ambos casos es probable que el
proceso no pueda completarse, por eso puede hacerse necesario practicar un avellanado en
la cara interior de dicho orificio. De este modo, el orificio acepta una trayectoria de
insercin del eje trasero mucho ms amplia y el proceso puede completarse. Adems, y a
pesar de la mayor flexibilidad de la pieza P05, puede incluso hacerse necesario practicar este
avellanado en [O86] para insertar alguno de los servos [S3].

Pgina 47

Fabricacin y montaje del esqueleto


Llegados a este punto, todas las piezas del esqueleto estn
prcticamente fabricadas; slo quedan por hacer algunos de
los agujeros que se realizarn casi al final del proceso de
montaje. Dicho proceso se explica de forma genrica ms
adelante, sin embargo hay algunos aspectos sobre los
procedimientos de montaje que deben tratarse al detalle en
este captulo. Casi todos los puntos que se tratan a
continuacin se refieren al montaje de los terceros segmentos
de las patas, o Tibias. La funcionalidad que se le exige a esta
parte del robot eleva su complejidad estructural, y hace que su
construccin y montaje supongan casi la mitad de tiempo total
empleado en la construccin del robot.
En primer lugar es importante mencionar que muchos de
los tornillos y tuercas del robot estn asegurados con un
recubrimiento de cola de epoxi. Tambin lo estn los
soportes [E1] del eje motriz de los servos y sus tornillos
[T1], los bumpers [E3] y los topes de goma [E4] de los
Pies. La razn del uso de este recubrimiento de cola es
evitar que las vibraciones producidas por el
funcionamiento continuado del robot aflojen estos
tornillos o piezas, poniendo as en posible peligro la
integridad de todo el conjunto.

Los que no estn recubiertos de cola son aquellos tornillos que


debern aflojarse o extraerse para desmontar determinadas partes del
robot, en caso de que algn sensor o motor deba ser sustituido. No
obstante, en este ltimo caso los tornillos se mantienen firmemente
sujetos a pesar de no estar encolados, ya que todos ellos estn
atornillados sobre plstico, separadores de goma o arandelas de
presin. De este modo, el sustrato que soporta la presin del tornillo
es flexible, de manera que su tendencia a recuperar su forma no
comprimida mantiene al tornillo siempre apretado. La cola de epoxi
empleada ha sido, segn las necesidades de cada etapa del montaje,
Araldit Standard (izquierda) o Araldit Rpido, ambos de la marca
Ceys. Los dos son pegamentos extrafuertes tiles para todo tipo de

Pgina 48

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


materiales: el primero seca en 12 horas y es capaz de soportar una traccin de 350 Kg/cm2
a los 3 das, y el segundo seca en 1 hora y es capaz de soportar una traccin de 170 Kg/cm2
a las 48 horas de secado. Adems, el pegamento siempre se ha aplicado sobre superficies
rayadas o limadas, pero no pulidas, para aumentar su capacidad de adherencia.
Una forma especial de usar este poderoso pegamento ha sido el caso de los tornillos [T9]
alojados en los orificios [O101 O102] y [O112 O113] de P06 y P08. Estos tornillos
permiten que la parte mvil de la Tibia permanezca firmemente unida a la parte fija en el
plano vertical de la pata, pudiendo a la vez pendular en el sentido de avance. De este modo,
la parte mvil de la Tibia se mantiene firme cuando el robot pisa contra el suelo, pero
retrocede cuando la pata choca con un obstculo interpuesto en su trayectoria de avance.
El eje de giro de esta pieza est compuesto por dos tornillos fijados con Araldit por sus dos
extremos: la tuerca est fijada a la parte mvil y la cabeza a la parte fija. La tuerca, no
obstante, slo est fijada por su contorno, de manera que el Araldit une la tuerca a la parte
mvil de la Tibia, pero no al tornillo, que puede girar libremente por su interior. Como esta
pieza slo debe realizar movimientos muy pequeos, el efecto de movimiento transversal
de la tuerca sobre el tornillo pierde efecto, y a la prctica se comportan como un eje que
gira libremente a travs de un ojal.

Pgina 49

Fabricacin y montaje del esqueleto


Para lograr esto, la tuerca debe quedar firmemente fijada a la pieza mvil, pero no puede
entrar ni una sola brizna de pegamento dentro de la parte roscada. Como esto es
prcticamente imposible, se sigue un proceso de recuperacin del giro fluido de la tuerca
sobre el tornillo. Primero se fijan tuerca y tornillo a la parte mvil estando ambos bien
apretados, de manera que la parte de tornillo que sobresale de la tuerca tambin recibe
parte de Araldit. Una vez seco se corta el sobrante de tornillo con una cortadora de disco
de manera que no quede nada de Araldit en la cara ms superior de la tuerca. A
continuacin se extrae el tornillo desde el interior (en este punto, por supuesto, el servo
an no ha sido instalado) y se limpia bien la rosca de tuerca y tornillo con el filo de un
cutter. Se introduce de nuevo el tornillo en la tuerca y se comprueba que el giro es fluido.
Se enrosca el tornillo hasta su posicin final (sin llegar a apretar, pero sin holgura) y se pega
la cabeza a la parte fija de la Tibia. Al secarse, la parte mvil de la Tibia oscila suavemente
sobre la parte fija, pero no hay riesgo de que tuerca ni tornillo se aflojen y se caigan.
Otra de las funciones que se le ha dado al Araldit es la de fijar los topes de goma [E4] a las
bolas de los extremos de los tubos de latn de los Pies. Los tacos de goma entran a presin,
de manera que tienden a salirse de las bolas, por eso es necesario usar una improvisada
prensa hasta que el Araldit se seca para obligar a los topes de goma a quedarse en la
posicin correcta. Una vez seco, es imprescindible eliminar con un cutter el sobrante de
Araldit que mancha el tubo de latn en la zona cercana al tope de goma, pues ah se
instalar un ajustado muelle que no funcionar correctamente si existen manchas de Araldit
que entorpezcan su movimiento de compresin.

Los sensores de contacto [E3] tambin han sido fijados al esqueleto con Araldit, pero en
este caso el proceso ha sido mucho ms delicado (y accidentado) que en el resto de casos.
Para empezar, el sensor no es ms que una pequea caja de plstico fino que dispone en
una de sus caras de una fina palanquilla de metal que, si se presiona, hunde un pequesimo
botn de plstico que abre o cierra un
interruptor. La palanquilla en s no es ms
que una lmina elstica de metal con una
forma tal que puede sujetarse a modo de
bisagra en un extremo de la caja de
plstico; es el muelle situado bajo el botn
de plstico lo que hace que si se deja de

Pgina 50

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


aplicar fuerza sobre la palanquilla, sta vuelva a su posicin inicial. El problema es que si
entra la ms mnima cantidad de Araldit (o de cualquier otro pegamento de los que se han
probado) en las cercanas del botn de plstico o de la bisagra de la palanquilla, el sensor
deja irremisiblemente de funcionar sin posibilidad alguna de recuperarse. Adems, esto slo
puede comprobarse cuando el pegamento est seco, de manera que la nica forma de
retirar el sensor es destruyndolo, limpiando la zona, y comenzando de nuevo la operacin
con un sensor nuevo.
Pero este no es el nico problema derivado de la instalacin de los sensores. Segn su
funcin, estos sensores se dividen entre los que sirven de detector de obstculos y de
contacto con el suelo. Gracias a la localizacin ms espaciada de los sensores de obstculo,
es posible fijarlos con dos pequeos tornillos [T1] de 2mm x 10mm y sus tuercas en su
posicin correcta mientras se seca el pegamento (la viscosidad del Araladit cuando an no
est seco hace imposible lograr que el sensor se mantenga esttico en su posicin correcta
durante el secado sin los tornillos). Dichos tornillos agarran al sensor a travs de dos
orificios de 2mm que ste incorpora de fbrica. El problema aparece al instalar los
sensores [E3] que detectan el contacto con el suelo, pues su cercana al tubo del pi hace
imposible colocar tuercas en los tornillos, de forma que stos se caen. La nica solucin es
instalar los sensores atravesados a presin por unos tornillos [T6] algo ms gruesos
(25mm), de manera que cada tornillo dibuje una rosca en la superficie interior de cada
orificio de 2mm del sensor. De este modo, el sensor hace de tuerca y puede quedar
igualmente fijado mediante un tornillo sin tuerca. Al secarse el Araldit se corta el sobrante
de tornillo a la altura del sensor con un disco de corte, y as ya no se obstaculiza el tubo del
pi. No obstante, y a pesar de la evidencia del proceso, la instalacin de estos sensores fue
muy accidentada. Resulta que el orificio de sujecin del sensor est demasiado cerca del
borde del mismo, de manera que lo nico que cierra el crculo del orificio es una fina capa
de plstico que se rompe al intentar introducir un tornillo ms grueso de 2mm. La nica
solucin posible fue usar una broca de 2mm para limar y ampliar ligeramente el dimetro
de dicho orificio, de forma que el tornillo hiciera menos presin contra el orificio del
sensor. An y as, con mucha facilidad algn sensor se deforma o se rompe y hay que
volver a empezar, pero fue de esta manera como finalmente se consiguieron instalar seis
sensores ntegros y funcionales.

Pgina 51

Fabricacin y montaje del esqueleto


Cabe decir tambin que la fuerza del retorno elstico de las palanquillas de los sensores
[E3] es completamente insuficiente. Usando slo estas palanquillas, los sensores de
obstculo se activan por la simple inercia del movimiento de las patas y los tubos de los
pies tiemblan y tintinean constantemente dentro de sus orificios. Por eso es necesario usar
muelles que aporten cierta solidez al retorno elstico de los sensores, pero stos deben ser
suficientemente blandos como para no entorpecer la correcta deteccin del suelo y de los
obstculos. Para ello se usan muelles blandos de 65mm [E5] y 45mm [E6], que se
mueven con libertad sobre los tubos de 6mm de los pies y los tubos separadores de
4mm [Y2] del retorno elstico aadido entre las partes fija y mvil de la Tibia. Adems,
estos muelles han sido probados y cortados a medida en cada ocasin, para conseguir que
el muelle no aplique sobre la pieza mvil ms fuerza de la necesaria. En cuanto a su
instalacin, en el caso de los muelles [E5] de los pies es sencilla: los tubos encajan casi
perfectamente con los orificios que los sujetan, de manera que basta con deformar el
extremo superior de los muelles, abriendo la espiral al final, para que sea imposible que el
muelle se atasque en el orificio.

Por el contrario, la instalacin de los muelles [E6] de los sensores de obstculo es mucho
ms compleja. Hay un conjunto de piezas formado por un tornillo [T8] con su tuerca, un
separador [Y2] y una arandela [A0] que se instalan de forma solidaria a la parte mvil de la
Tibia, P08, a travs del orificio [O114] (para entender la nomenclatura de la explicacin que
sigue es recomendable consultar el apartado correspondiente al ensamblado de las Tibias
en el captulo de montaje). Dicho conjunto atraviesa el orificio [O100] de la parte fija de la
Tibia, P06, de manera que permite que la aleta inferior de P06 circule a lo largo de [Y2],
pero limitado en un extremo por el cuerpo de P08 y en el otro por la arandela [A0] que le
hace de tope, cosa que permite que el movimiento pendulante de P08 quede limitado por
esta estructura. Adems ha de tenerse en cuenta que [O100] debe ser suficientemente
ancho y alargado como para que [Y2] circule por su interior sin rozamiento alguno, pues de
haberlo el mecanismo podra dejar de funcionar correctamente, pero a la vez debe ser ms
pequeo que el dimetro exterior de la arandela [A0], pues de lo contrario sta dejara de
Pgina 52

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


cumplir su funcin como tope. El retorno elstico se hace efectivo en el momento en que
se instala el muelle [E6] sobre [Y2], limitado en su extremo ms cercano a P06 por una
arandela [A1] cuyo orificio es ligeramente ms ancho que el dimetro de [Y2], de modo que
puede circular sobre este separador pero no permite que el fino muelle entre en contacto
con [O100], pues de hacerlo [E6] podra meterse dentro de [O100] y el mecanismo se
atascara o dejara de funcionar. As pues, cuando una pata en movimiento se encuentra con
un obstculo, P08 es empujada hacia la aleta de P06, de forma que [O100] se desplaza por
[Y2], arrastra a [A1] y comprime el muelle [E6], provocando la tendencia de P08 a
recuperar su posicin inicial.

No obstante, existe un problema en este sistema, y es que la arandela [A1] (sealada en


verde en las imgenes sobre estas lneas) tiene un dimetro exterior tal que interfiere con la
limitada distancia entre [Y2] y la cara de P06 paralela al mismo. Para solucionar esto se usa
una esmeriladora para limar un cierto arco del permetro de [A1] hasta dibujarle un lado
recto casi a la altura de su dimetro interior. Este es un proceso muy delicado que requiere
mecanizar una pieza muy pequea, sujetando la arandela con
unos alicates y con buen pulso, pues el borde giratorio de la
esmeriladora es algo irregular, y el ms mnimo exceso de
presin entre la arandela y dicho borde giratorio puede
provocar un impacto que doblar la arandela, hacindola
inservible. Una vez conseguido, se elimina el exceso de metal
del borde del nuevo lado de la arandela apoyndolo ladeado
sobre una lijadora de banda, que en nuestro caso comparte el
motor con la esmeriladora. Hecho esto la arandela se instala
en el robot, atravesada por el tubo separador y con su lado
plano colocado entre [Y2] y la cara mencionada de P06, de
forma que puede moverse con libertad.

Pgina 53

Fabricacin y montaje del esqueleto

Otro procedimiento que debe detallarse en este apartado es el de las numerosas piezas del
robot que se cortan a medida usando una cortadora de disco. Para empezar, prcticamente
todos los tornillos del robot se cortan a medida una vez apretados para eliminar el sobrante
de tornillo que, en muchos casos, puede llegar obstaculizar la instalacin o el movimiento
de otras piezas. Dado que estos tornillos son de acero, para cortarlos se usa un taladro de
mano de alta velocidad al que se le ha puesto un disco de corte en el cabezal. La misma
herramienta se usa tambin en otro proceso que no tiene que ver con el largo de los
tornillos: el vaciado de los contornos interiores de las tapas superior e inferior del cuerpo
del robot. Estas piezas, P01 y P02, estn hechas de aluminio de 1mm, que puede cortarse
fcilmente con la cortadora de disco en un procedimiento mucho ms rpido y sencillo que
el que se sigue para vaciar los contornos interiores de las piezas de P00 y P06, de 25mm y
2mm de espesor respectivamente. En este ltimo caso no se usa la cortadora de disco
porque el aluminio es demasiado grueso, y su corte conlleva demasiado desgaste del disco y
demasiado tiempo continuado de uso de esta herramienta, que est diseada para usos
cortos ya que se calienta con rapidez, pudiendo llegar a quemarse si se usa
continuadamente durante demasiado rato.

Pgina 54

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Tambin se cortan con esta herramienta los separadores de tubo de aluminio de 4mm
[Y0], [Y1] e [Y2]. Para cortarlos a la medida exacta, primero se calcula su longitud sobre su
ubicacin real con un pi de rey, y se le suma un milmetro, que se perder entre el limado
de los bordes y la compresin del tubo al apretarse el tornillo que lo sujete. Acto seguido,
se usa el mismo pi de rey para trasladar la medida al tubo con una marca de rotulador, y se
corta el tubo procurando dejar la marca intacta. La alternativa al disco de corte es la sierra
de arco, pero no es recomendable, ya que se hace necesario agarrar el tubo con el tornillo
de sujecin del banco de trabajo, pudiendo deformarlo hasta estropearlo.

Con todo esto, ya es posible construir el robot. No obstante, como cada pieza es
ligeramente diferente a las dems, aunque sean del mismo tipo, se hace necesario probar
cada pieza con el soporte en el que ha de encajar hasta encontrar las parejas de piezas que
encajen mejor. Incluso algunas patas encajarn en determinadas zonas del cuerpo mejor
que otras, por eso se hace necesario numerar todas las piezas antes de su montaje
definitivo. Adems, una vez construido el robot habr que retocar ciertos puntos crticos
para conseguir que todas las piezas se muevan con suavidad. Estos retoques se realizan con
una fresa cnica colocada en el cabezal del taladro de maquetismo, y limando las zonas
crticas, ya sean de aluminio o excesos de Araldit. Finalmente las patas del robot consiguen
la movilidad para la que se disearon.

Pgina 55

Fabricacin y montaje del esqueleto


Cabe decir tambin que se siguen ciertos criterios relacionados con la posicin de las patas:
aunque todas las patas deben funcionar correctamente, las delanteras 1 y 2, sern las ms
exigentes en cuanto a movilidad vertical y deteccin de suelo y obstculos, por lo que se
colocar en estas posiciones a las patas que ofrezcan mayor rango de movimiento vertical y
mayor sensibilidad sensorial. Por otro lado, las patas 5 y 6 tendrn menores exigencias en
cuanto a la deteccin de obstculos, pero han de ser las ms robustas, ya que el robot
tendr que levantar la cabeza a menudo o sostenerse a cuatro patas, incrementando el peso
que stas habrn de soportar, por lo que se escogern aqu las patas robustas y duras en
cuanto al retorno elstico de los sensores de obstculo. Las dos patas restantes se colocarn
en las posiciones 3 y 4, que tienen unos requerimientos medios.

Por ltimo, una vez montado y comprobado el robot se sueldan los terminales de los
sensores usando cables blandos cortados a la medida necesaria, y agrupados, junto con los
cables de los servos, en fundas de goma termo-retrctil que se fijan al esqueleto con bridas
de plstico pequeas.

Pgina 56

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

4.3 Proceso de montaje


Este apartado pretende ser una gua visual que ayude a entender cmo se ensamblan todos
los componentes mecnicos mencionados en el despiece del robot, y qu procesos de
fabricacin de los explicados en el apartado anterior se siguen para dar forma a cada una de
las piezas.
Modificacin de los Servos: Antes de empezar todo el proceso de montaje hay
que dejar lista la instalacin de los ejes traseros de los servos, pues stos no se
pueden instalar cuando el servo ya est fijado en su lugar. Se usa un tornillo [T7],
con su tuerca, dos arandelas [A1] y 4 protectores de goma [E0] para cada servo. Los
cuatro tornillos internos del servo no se contabilizan en el despiece.

Construccin del Cuello: El Cuello es una prtiga motorizada que se ensambla al


Trax i que permite levantar y bajar la cabeza un total de 110. Est formado por
un servo y la pieza P10.
o P10 Cuello (aluminio 25mm):

1- Corte de la preforma.

2- Corte de los contornos interiores

Pgina 57

Fabricacin y montaje del esqueleto


3- Perforacin de los orificios de
3mm:
O0
O1
O2
O3

4- Doblado de la pieza.

o Montaje del Cuello: Se hacen pasar 4 tornillos [T4] a travs de los orificios
[O0 O3] de la pieza P10, del servo [S0] y de 4 arandelas [A1], para acabar
apretndose en sus tuercas.

Construccin del Trax: El Trax es el mdulo central del robot; el resto de sus
partes (las seis Patas y el Cuello + Cabeza), adems de todos los mdulos
electrnicos, van unidas a l. Est formado por cinco piezas, cuyo proceso de
fabricacin se explica a continuacin:

Pgina 58

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o P00 Trax Base (aluminio 25mm):

1- Corte de la preforma.

2- Corte de los contornos interiores.

3- Perforacin de los orificios de 3mm [O4 O43]:


O4
O5
O28
O7
O6
O29
O35
O8
O9
O36
O30
O11
O10
O14
O15
O18
O12
O13
O37
O31

O34
O24
O25
O26
O27
O40
O41
O42
O33
O39
O20
O21
O43
O38
O32
O22
O23
O19
O17
O16

Pgina 59

Fabricacin y montaje del esqueleto

4- Avellanado
de
los
orificios [O34 O39].
El avellanado se realiza
por la cara inferior de la
pieza (en sta y las otras
imgenes la pieza est
boca arriba), ya que los
tornillos que encajarn
en estos orificios tienen
la cabeza cnica.

o P01 Tapa Superior (aluminio 1mm):

1- Corte de la preforma.

2- Corte de los contornos


interiores.

3- Perforacin de los agujeros de 3mm:


O44
O45
O46
O47
O48
O49

Pgina 60

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o P02 Tapa Inferior (aluminio 1mm):

1- Corte de la preforma.

2- Corte de los contornos


interiores.

3- Perforacin de los agujeros de 3mm:


O50
O56
O51
O57
O59
O52
O58
O55
O54
O53

o P11 Hombro Izquierdo (aluminio 2mm):


(De izquierda a derecha)
1- Corte de la preforma
2- Orificio [O60] de 3mm
para el soporte del eje del
servo.
3- [O60] se agranda hasta los
8mm y, usando el
soporte del eje del servo
como modelo, se perforan
los dos orificios laterales
de 2mm [O61] y [O62].

Pgina 61

Fabricacin y montaje del esqueleto


4- Doblado de la pieza.

[O63] [O64]

5- Se aaden los orificios


de 3mm [O63 O66].
La medida exacta de
estos orificios se toma
de los [O42-O43] y
[O56-O57], colocando la
pieza en su lugar durante
el montaje.

[O61] [O60] [O62]

[O65] [O66]

o P12 Hombro Derecho (aluminio 2mm):

(De izquierda a derecha)


1- Corte de la preforma.

2- Perforacin [O67] de 3mm para el


eje trasero del servo.

3-

Doblado de la pieza
[O68] [O69] [O67]
4-

Se aaden los orificios de


3mm [O68 O71]. La
medida exacta de estos
orificios se toma de los
[O40-O41] y [O58-O59],
colocando la pieza en su
lugar durante el montaje.
[O70] [O71]

Pgina 62

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o Montaje del Trax:
1- El montaje comienza con la insercin de 6 tornillos [T5], a travs de los orificios
[O28 O33] de la pieza P00, de forma que sus tuercas sujeten firmemente a 6
separadores [Y1]. El sobrante de tornillo no se recorta hasta el montaje de P02.

2- Del mismo modo, se usan 6 tornillos [T8] para sujetar 6 separadores [Y0] a travs
de los orificios [O34 O39] de la pieza P00. Tampoco aqu se recorta el sobrante
de tornillo, ya que debe quedar suficiente tornillo para acoplar P01 ms adelante.

Pgina 63

Fabricacin y montaje del esqueleto


3-

Se acopla el soporte del eje del


servo [E1] al orificio [O60] de la
pieza P11. [E1] se fija al Hombro
Izquierdo usando dos tornillos
[T1] y sus tuercas, a travs de los
orificios [O61] y [O62].

4- Un tornillo [T0] fija la pieza P11 al servo [S0] del Cuello, atravesando [E1] y [O60],
al mismo tiempo que dos tornillos [T3] y sus tuercas unen las piezas P11 y P00 a
travs de los orificios [O42], [O43], [O63] y [O64].

Detalle del Hombro Izquierdo,


P11, una vez acoplado al Trax
Base, P00, y al conjunto del Cuello.

Pgina 64

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


5- Para montar el Hombro Derecho se acopla la pieza P12 al Trax Base, P00,
mediante dos tornillos [T3] y sus tuercas, y a travs de los agujeros [O40], [O41],
[O68] y [O69], teniendo en cuenta que el eje trasero del servo ha de atravesar el
orificio [O67]. Para esquivar el separador inferior acoplado en P00 justo delante del
emplazamiento de P12, ste se debe insertar en el conjunto de abajo a arriba.

Detalle del Hombro Derecho, P12, una vez acoplado al Trax Base, P00, y al
conjunto del Cuello.

Pgina 65

Fabricacin y montaje del esqueleto

6- El siguiente paso es ensamblar


los
6
servos
[S1]
en
sus
emplazamientos de la pieza P00,
usando 4 tornillos [T4] con sus tuercas
y 4 arandelas [A1] por cada servo (24
de cada en total), a travs de los
orificios [O4 O27].

Arriba, una vista del


montaje completo.
A la izquierda, el
aspecto del montaje
terminado.

Pgina 66

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


7- Una vez instalados los servos, se acopla la Tapa Superior del Trax, P01, en el
sobrante de los tornillos [T8] de los separadores superiores, aadiendo una tuerca a
cada tornillo y a travs de los orificios [O44 O49]. Estas tuercas no se aprietan en
exceso, ya que la tapa superior deber retirarse cada vez que haya que manipular los
componentes instalados en el Trax. Para instalar P01 habr que levantar el
conjunto Cuello para hacer pasar P10 por el contorno interior rectangular de P01.
Una vez instalada la pieza, ya se pueden recortar a la medida exacta los sobrantes de
los tornillos [T8].

8- Siguiendo el mismo proceso se instala la Tapa Inferior del Trax, P02, aadiendo
una tuerca a cada tornillo [T5], y a travs de los orificios [O50 O55]. En este caso
habr que tener en cuenta que tambin hay que fijar la pieza P11 a P02 mediante
dos tornillos [T3] que atravesarn los orificios [O56 O57], de P02, y [O65 O66],
de P11. Del mismo modo, se fija P12 a P02 usando tambin dos tornillos [T3] que
atravesarn en este caso los orificios [O58 O59], de P02, y [O70 O71], de P12.
Una vez instalada la pieza, pueden recortarse los sobrantes de todos los tornillos
para mejorar el acabado de la Tapa Inferior del Trax.
Con este ltimo paso concluye el montaje del Trax, sin embargo las Tapas
Superior e Inferior del mismo debern retirarse en varias ocasiones despus de este
punto para instalar el resto de componentes electrnicos del robot. Por eso es
recomendable que los tornillos [T3] de la Tapa Inferior se instalen al revs (de
arriba abajo, en vez de abajo a arriba, como muestra el diagrama de montaje), y que
sus tuercas no se aprieten demasiado hasta que el robot est finalizado y la Tapa
Inferior pueda montarse de forma permanente.

Pgina 67

Fabricacin y montaje del esqueleto


Vista superior del montaje de P02.

Vista Inferior del montaje de P02.

Pgina 68

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Vista superior del Trax + Cuello terminados.

Vista inferior del Trax + Cuello terminados.

Pgina 69

Fabricacin y montaje del esqueleto


Recuento de piezas de Trax + Cuello (Total 223 componentes: 6 piezas, 7 servos,
29 elementos blandos, 12 separadores, 42 arandelas, 58 tornillos y 69 tuercas):
o P00: Trax Base
o P01: Tapa Superior del Trax
o P02: Tapa Inferior del Trax
o P10: Cuello 1
o P11: Hombro Izquierdo
o P12: Hombro Derecho
o [S0]: Servo Cuello 1
o [S1]: 6 Servos Cadera
o [E0]: 28 Protectores de goma para servo Futaba
o [E1]: 1 Soporte de plstico para eje Futaba
o [Y0]: 6 Separadores Superiores
o [Y1]: 6 Separadores Inferiores
o [A1]: 42 Arandelas M3
o [T0]: 1 Tornillo
o [T1]: 2 Tornillos y 2 Tuercas
o [T3]: 8 Tornillos y 8 Tuercas
o [T4]: 28 Tornillos y 28 Tuercas
o [T5]: 6 Tornillos y 12 Tuercas
o [T7]: 7 Tornillos y 7 Tuercas
o [T8]: 6 Tornillos y 12 Tuercas

Construccin 1 de las patas (Cadera y Fmur): La fabricacin y montaje de las


patas es un proceso que se divide en dos etapas. En esta primera etapa se fabrican y
se montan las tres primeras piezas, correspondientes a la unin de la Cadera y el
Fmur. Una vez completadas, y antes de instalar las Tibias, este mdulo de pata
incompleta se acopla al trax. Medido en tiempo, el montaje del trax y el primer
mdulo de las patas ocupa aproximadamente el 60% del tiempo total de
construccin del robot. El 40% restante se dedica nicamente a construir e instalar
las Tibias.
Cabe decir tambin que las patas son simtricas en dos grupos de tres, las patas
derechas y las izquierdas. Las preformas de todas las piezas son idnticas, pero el
proceso de doblado las definir como piezas derechas o izquierdas. Debido a las
propiedades del aluminio explicadas anteriormente este proceso es irreversible, por
lo que requiere una especial atencin.

Pgina 70

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o P03 Conector Cadera - Trax (aluminio 25mm):
1.

Corte de la preforma.
2. Perforacin de los orificios de 3mm.
O72
O73
O74
O75

3. Doblado de la pieza.

4. Alienacin del orificio opuesto a [O75] en el eje del servo


mediante un tornillo [T5] y su tuerca (este tornillo no
permanece en el robot despus de este paso, por lo que no
figura en el despiece).
5. Perforacin del orificio de 3mm [O76].
6.

[O76]
[O77]
[O78]

Se agranda [O76] hasta superar los


8mm y, usando una pieza [E1]
como molde se aaden los orificios
de 2mm [O77] y [O78]. [E1] debe
quedar holgado en [O76] por
exigencias del proceso de montaje.

o P04 Conector Cadera Fmur (aluminio 25mm):


1.

Corte de la preforma.
2.

Perforacin de los orificios de


3mm:
O79
O80
O81

Pgina 71

Fabricacin y montaje del esqueleto


3. Doblado de la pieza.
4.

5.

Corte del hueco para el


servo.

Perforacin de los orificios de 3mm:

O82
O83
O84
O85
6. Avellanado de los
orificios [O79],
[O80] y [O81].

o P05 Fmur (aluminio 2mm):


1. Corte de la preforma

2. Perforacin de los orificios de 3mm:

[O86]
[O87]

Pgina 72

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


2. Doblado de la pieza
4. Alienacin de los orificios opuestos a [O86] y
[O87] mediante dos tornillos [T5] y sus tuercas (de
nuevo estos tornillos son temporales, por lo que no
figuran en el despiece).

5. Perforacin de los orificios [O88 O89] de 3mm:


6. Se agrandan [O88] y [O89] hasta los 8mm
y, usando una pieza [E1] como molde, se
aaden los orificios de 2mm [O90 O91]
y [O92 O93].
[O88]
[O89]

O90
O91
O92
O93

[E1] debe quedar holgado en [O89] por exigencias del proceso de montaje, mientras que
[O88] puede quedar ajustado. Esto se debe a que, excepto con [O88], el eje del servo
tendr que entrar en el orificio antes que [E1] para poder quedar encerrado en la pieza.

Pgina 73

Fabricacin y montaje del esqueleto


o Montaje 1 de las patas (Cadera + Fmur):
1. El montaje comienza con la instalacin de una pieza [E1] en el interior del orificio
[O76] del Conector Cadera Trax, P03, y sujetndola con dos tornillos [T1] y sus
tuercas a travs de los orificios [O77] y [O78]. La pieza [E1] sobresale
aproximadamente 05mm por la cara interior de P03,
de manera que slo podr colocarse en aquellas
piezas que muestren suficiente holgura para
introducir los dos ejes del servo en sus respectivos
orificios. En aquellas piezas en que al doblarse haya
quedado ms estrecha la distancia entre [O75] y
[O76], la pieza [E1] deber instalarse ms adelante,
cuando los ejes del servo hayan sido introducidos en
estos orificios. En estos casos el servo se introduce
empezando por el eje trasero, y desde una trayectoria
de insercin de ms de 30 respecto de la lnea que
definen los orificios de los ejes, por lo que puede
hacerse necesario incluso realizar un avellanado en
[O75] por la cara interna de P03 para aumentar el
ngulo de inclinacin del eje que admite el orificio.
2. Acto seguido se acoplan las piezas P03, Conector Cadera Fmur, y P04, Conector
Cadera Trax, mediante tres tornillos [T7] con sus tuercas, y a travs de los
orificios [O79 O81] y [O72 O74].

Pgina 74

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


3. Para terminar el mdulo Cadera se acopla un servo [S2] a la pieza P04 mediante
cuatro tornillos [T4] con sus tuercas, cuatro arandelas [A1] y a travs de los orificios
[O82 O85].

(Aspecto del mdulo Cadera una vez


montado).

4.

Por su parte el mdulo Fmur slo lo


componen la pieza P05 y dos soportes [E1]
que se conectarn a los ejes motrices de los
servos [S2] y [S3]. No obstante, por ahora
slo se acopla una de las piezas [E1] en el
orificio [O88] y mediante dos tornillos [T1]
con sus tuercas a travs de [O90 O91]. En
este caso se coloca [E1] antes que el servo,
por lo que la pieza puede quedar ajustada al
orificio. Por el contrario, la pieza que se
instalar en [O89] debe quedar holgada,
porque se introducir el eje del servo en el
orificio antes que esta pieza.

Pgina 75

Fabricacin y montaje del esqueleto


5. Empezando por el eje trasero, y realizando un avellanado del lado interior de [O87]
si fuera necesario, tal y como sucedi con la pieza P03, se insertan los ejes del servo
[S2] en los orificios [O87] y [O89] de P05. Acto seguido, el servo queda atrapado en
la pieza P05 acoplndole al eje motriz del servo, y a travs de [O89], un soporte
[E1] sujeto por dos tornillos [T1] con sus tuercas a travs de [O92 O93]. Esta
operacin es algo tediosa, ya que, una vez colocado el servo en su lugar, el espacio
disponible para enroscar cada tuerca al tornillo [T1] ser nicamente el que separa
el frontal del servo de la cara interna de P05.

(Vistas trasera y superior del montaje)

Pgina 76

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

6. Por ltimo, un tornillo [T0] asegura


[E1] al servo.

o Montaje de (Cadera + Fmur) + Trax:


1. El montaje comienza con la insercin, comenzando por el eje trasero e
insertndolo desde una trayectoria diagonal, de uno de los servos [S1] instalados en
el Trax entre los orificios [O75] y [O76] de la pieza P03. En este momento puede
ser necesario desacoplar el soporte [E1] que podramos haber acoplado
anteriormente, o incluso de avellanar la cara interior del orificio [O75] para lograr
que el eje trasero se inserte completamente antes de insertar el eje motriz. Si esto
ocurriera, a continuacin habra que encerrar el servo en la pieza acoplando [E1] al
eje motriz del servo y fijndolo con los dos tornillos [T1] y sus tuercas a P03.

Pgina 77

Fabricacin y montaje del esqueleto


2. Por ltimo, basta con usar un tornillo [T0] para fijar [E1] al eje motriz del servo y
repetir todo el proceso seis veces hasta acoplar cada una de las seis patas an
incompletas al Trax.

(Imagen inferior del montaje completado).

Pgina 78

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

(Imagen superior del montaje terminado. Es interesante compararla con la imagen


real del robot en esta etapa de montaje para ver que la construccin real del aparato
cumple hasta este punto con todas las especificaciones de diseo).

Pgina 79

Fabricacin y montaje del esqueleto

Recuento de piezas de los 6 mdulos Cadera + Fmur (Total 282 componentes: 18


piezas, 6 servos, 42 elementos blandos, 36 arandelas, 96 tornillos y 84 tuercas):
o P03: 6 Conectores Cadera - Trax
o P04: 6 Conectores Cadera - Fmur
o P05: 6 Fmur
o [S2]: 6 Servos Fmur
o [E0]: 24 Protectores de goma para servo Futaba
o [E1]: 18 Soportes de plstico para eje Futaba
o [A1]: 36 Arandelas normales M3
o [T0]: 12 Tornillos (6 en el montaje (Cadera + Fmur) + Trax)
o [T1]: 36 Tornillos y 36 Tuercas
o [T4]: 24 Tornillos y 24 Tuercas
o [T7]: 24 Tornillos y 24 Tuercas

Pgina 80

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Construccin 2 de las patas (Tibias): Esta etapa del montaje dejar el robot
terminado con todas las partes de su esqueleto a excepcin de la Cabeza. La
construccin de las Tibias es ms compleja y lenta que las etapas de montaje vistas
hasta ahora, ya que integra piezas ms pequeas y exige mayor precisin en la
fabricacin de las mismas, de modo que se emplea casi tanto tiempo en construir y
montar las Tibias como en el resto del robot. Las Tibias tambin son simtricas en
dos grupos de tres, y cada una de ellas est formada por tres piezas de aluminio que
a menudo no encajarn a la perfeccin entre s, de modo que habr que seleccionar
y agrupar aquellas que sean ms afines para obtener los mejores resultados, y
compararlas en algunos pasos para acertar la posicin exacta de dobleces y orificios.
A causa de esta imprecisin, muchas de las piezas pequeas como muelles,
separadores y tornillos debern instalarse de forma previa para medirse, cortarse a
medida y volverse a instalar. De este modo, y aunque esta gua de montaje supone
piezas perfectas y cortadas a medida para no resultar catica y repetitiva, la realidad
tras cada etapa del montaje incluye decenas de pasos intermedios que aqu se
omiten.

o P06 Parte Fija de la Tibia (aluminio 2mm):


1- Corte de la preforma

2- Perforacin de los orificios de 3mm


[O94 O97] y de los orificios de 2mm
[O98 O99].

[O98] [O99] [O97] [O96] [O94] [O95]

Pgina 81

Fabricacin y montaje del esqueleto


1- Primer doblado de la pieza en tres
de sus aletas.

2- Corte del contorno interior que


albergar el servo y perforacin
del orificio de 3mm [O100].

[O100]

2- Con una fresa de 3mm se agranda y


alarga el orificio [O100] hasta que ste
tome la forma de un valo de unos 45mm
en su dimetro corto.

3- El siguiente paso es el doblado


de las dos franjas que an
quedaban por doblar, pero para
realizar el doblez en la primera
de ellas (marcada en rojo en la
imagen) es necesario hallar su
posicin exacta comparando
individualmente cada pieza P06
con la pieza P08 con la que ha de
encajar. Adems, esta pieza P08
deber hallarse por lo menos en
su etapa 4 de fabricacin para
resultar til en este proceso. Se
entiende pues, que el proceso de
fabricacin de las piezas P06 y
P08 debe llevarse en paralelo, y
que ambos juegos de piezas
deben agruparse de dos en dos
para garantizar que cada pareja
encaja de forma ptima.

Pgina 82

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


La imagen de la derecha
muestra los parmetros
a tener en cuenta en
cuanto a la posicin
vertical correcta de P06
respecto a P08. P06 ha
de poder pendular hacia
atrs lo suficiente como
para que la pieza pueda
manipularse durante su
montaje (en rojo) y
tambin ha de poder
pendular hacia delante
unos pocos grados (en
azul), suficientes como
para que el sensor de obstculo que ir instalado en la aleta de la pieza P06 pueda
comprimir su lengeta contra el cuerpo de P08. Si P06 queda demasiado alta o demasiado
baja respecto P08, estos dos movimientos pueden quedar obstaculizados. La imagen de la
derecha muestra el aspecto de la pieza una vez doblada.
4- El siguiente paso de nuevo requiere la interaccin de las piezas P06 y P08, aunque
esta vez ser necesario que P08 se halle al menos en su etapa 8 de fabricacin.
Colocando las dos piezas en la dimensin vertical correcta, segn explica el paso
anterior, se usan los orificios de P08 [O112] y [O113], previamente alineados, para
marcar los dos orificios en P06 que definirn el eje en que esta pieza pendular
sobre P08.

Pgina 83

Fabricacin y montaje del esqueleto

5- Por ltimo, se perforan los dos orificios de 3mm.

O101
O102

o P07 Soporte Superior del Pi (aluminio 2mm):

1- Corte de la preforma.

2- Perforacin de los orificios de 3mm.


[O103]

3- Doblado de la pieza.

4- Se agranda [O105] hasta los 6mm.

Pgina 84

[O104]
[O105]

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o P08 Parte Mvil de la Tibia (aluminio 2mm):
1- Corte de la preforma.

2- Perforacin de los orificios de


3mm [O106 O109], i de los de
2mm [O110 O111].

[O106]

[O107]
[O111]
[O108]
[O110]

Es necesario hacer
notar que el orificio
[O108] es ms bien una
ranura, por lo que
primero ser necesario
hacerle tomar la forma
de dos orificios de
3mm muy juntos
(izquierda), para luego
convertirlos finalmente
en una ranura usando
una fresa de 3mm
(derecha).

Pgina 85

[O109]

Fabricacin y montaje del esqueleto


3- Avellanado de los orificios de 3mm
[O106 O107] y [O110 O111].

4- Primer doblado de la pieza (vista


trasera).

5- Se agranda [O109] hasta los 6mm.

6- Este paso ocurre a la vez que se


ejecuta la etapa 6 de fabricacin
de la pieza P06, slo que en
este caso la superposicin de las
piezas sirve para calcular la
posicin exacta de la franja de
doblez marcada en rojo sobre
P08.

Pgina 86

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Adems, aprovechando que durante la
etapa 6 de la fabricacin de P06 se
calcula el alineamiento vertical de
dicha pieza sobre P08 (izquierda), se
marca y posteriormente se perfora en
esta ltima el orificio de 3mm
[O112]. Finalmente, se procede a
doblar P08 (imagen inferior).
[O112]

7- A continuacin se alinea el emplazamiento de [O113]


con el de [O112] usando un tornillo [T4] con su tuerca
para proyectar una lnea perpendicular a [O112] que
interseca con P08, segn
muestra la imagen. Dicho
tornillo y su tuerca slo
permanecer en el robot
mientras dure esta operacin,
por lo que no figura en el
despiece.

8- Acto seguido se perfora el


orificio de 3mm.
[O113]

Pgina 87

Fabricacin y montaje del esqueleto


9- Finalmente, es necesario volver a interactuar con la
pieza P06 para marcar la posicin exacta del ltimo
orificio de P08. En esta ocasin har falta que P06
est completamente terminada, y que P06 y P08
queden fijadas la una a la otra en perfecta alineacin
de los orificios [O112 O113] y [O101 O102]. Se
usa un tornillo [T3] con su tuerca y dos arandelas
[A1], que de nuevo no figurarn en el despiece, para
proyectar de la forma ms centrada posible la
perpendicular a [O100] sobre P08.

(Vista general del montaje arriba y


detalle a la izquierda)

10- Se perfora el orificio de 3mm y se le realiza un


posterior avellanado por su cara externa.
[O114]

Pgina 88

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o P09 Pi (Tubo de latn cromado de 6mm):

1- La parte principal del pi es un


tubo de latn cromado de 6mm
que termina en uno de sus
extremos en una masa metlica,
tambin de latn, en forma de
bola. Este es el nico componente
del esqueleto del robot, a parte de
la tornillera y otras piezas de
unin,
que
no
ha
sido
completamente moldeado a mano,
sino que procede de un sencillo
toallero extensible que comercializa
la marca Ikea. Se inserta esta
terminacin en forma de bola
metlica en el interior de un taco
hueco de goma antideslizante [E4]
relleno de cola de epoxi, tras limar el metal para darle rugosidad y mejorar la
adherencia del adhesivo. En las siguientes 12 horas el taco de goma debe
permanecer inmvil para no quedar torcido al secarse la cola. Para conseguirlo los
seis pies, correspondientes a las seis patas, se secan en una improvisada prensa que
los sujeta en la posicin deseada.
2- Tras el secado, P09 se inserta en P08 a travs del
orificio [O109], procurando colocarlo correctamente
en sentido vertical. En este paso ha de preverse que
[E4] no debe llegar a tocar a P08, salvo por una
distancia de entre 5 y 10mm que ms tarde albergar
el muelle del pi. Una vez colocado en la posicin
correcta se marca el
trozo superior sobrante
del tubo (en rojo) y se
determina la posicin
exacta de [O115],
comparando la altura
de la marca con el
extremo inferior de la
ranura [O108].

Pgina 89

Fabricacin y montaje del esqueleto


Este paso debe realizarse de forma conjunta en las seis Tibias a la vez. El motivo es
que el orificio [O115] determinar la distancia con la que el pi sobresale de P08, y
dicha distancia debe compensar los defectos de doblado de P08. Dicho de otra
forma, las seis piezas resultantes de la fabricacin de las seis P08 no sern idnticas,
sino que en cada una habr diferencias en la distancia que separa la aleta que
contiene el orificio [O109] del eje que cruza los orificios [O112 O113]. Estas
diferencias deben ser compensadas por la disposicin de los pies, ya que de lo
contrario aquellas Tibias que hayan quedado ms cortas podran no tocar el suelo
cuando el robot se hallara erguido. Esto se traducira en una mala funcionalidad de
las mismas y en una indeseable distribucin del peso del robot sobre sus patas. Para
solucionarlo, la posicin correcta de todos los pies se marca a la vez manteniendo
constante en todos ellos la distancia entre el eje [O112 O113] y el extremo
inferior del taco de goma [E4].

3- Finalmente se corta el sobrante del tubo con la cortadora de disco y se perfora el


orificio de 25mm.
[O115]

Pgina 90

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


o Montaje de las Tibias:

1- El montaje empieza con la instalacin del sensor de contacto [E3] en la pieza P08
mediante dos tornillos [T6] y a travs de los orificios [O110 O111]. Estos
tornillos no usan tuerca, ya que roscan a presin en los orificios de la estructura de
plstico de [E3], pero el tornillo sobrante debe ser cortado al ras para no
obstaculizar la insercin del pi ms adelante.

2- Usando dos tornillos [T7] con sus


tuercas se acopla la pieza P07 a P08 a
travs de los orificios [O106 O107] y
[O103 O104].

3- Por otro lado, se usan dos tornillos [T1]


con sus tuercas para fijar un sensor [E3]
a la pieza P06, a travs de los orificios
[O98 O99].

Pgina 91

Fabricacin y montaje del esqueleto


4- Llegados a este punto, las piezas P08 (+P07) y P06 ya estn listas para unirse. Dicha
unin se realiza mediante dos tornillos [T9] que se introducen de dentro a fuera, y
cuando las piezas P06 y P08 estn alineadas en su posicin correcta, a travs de los
orificios [O101 O102] de P06, y que a su vez atraviesan dos arandelas [A1], que
hacen de separador entre P06 y P08, para finalmente atravesar, tambin de dentro a
fuera, los orificios [O112 O113] de P08. Por ltimo dos tuercas cierran la unin
por ambos lados, pero no se aprietan en absoluto, puesto que cualquier presin en
el eje de giro de estas dos piezas puede producir un rozamiento que dificultara su
movimiento. Ha de tenerse en cuenta que la pieza P08 pendula sobre P06 para
presionar sobre el sensor de contacto instalado en esta ltima cuando la trayectoria
de la pata interfiere con un obstculo. As pues, el sensor debe activarse con una
presin mnima, por lo que la dureza de su retorno elstico tambin ser mnima,
de manera que P08 no retornar a su posicin inicial si su unin con P06 no ofrece
una resistencia mecnica despreciable.
No obstante, al estar tan flojas las tuercas de los [T9], stas podran desenroscarse y
caerse a causa de las vibraciones inherentes al funcionamiento de los motores y del
movimiento del robot, por lo que tuerca y tornillo deben ir fijados al esqueleto con
cola de epoxi. Dicha cola se aplica de forma normal a la cabeza de cada tornillo
[T9] para unirla a P06, pero debe aplicarse con mucho cuidado en el lado de la
tuerca, pues debe fijarla a P08 por su contorno, pero sin entrar en contacto en
ningn momento con el tornillo. Si no se respeta esta premisa, tuerca y tornillo
quedarn completamente unidos, y la unin ser inservible.

Pgina 92

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


(Vista superior y aspecto terminado del montaje).

5- Una vez acopladas las dos piezas y comprobado el buen funcionamiento del eje de
movimiento, ya no ser necesario operar en el espacio interior de P06, por lo que
puede acoplarse el servo [S3], que ocupar ese mismo espacio. Para hacerlo se usan
cuatro tornillos [T4] con sus tuercas, y cuatro arandelas [A1] para sujetar el servo a
P06 a travs de los orificios [O94 O97].

Pgina 93

Fabricacin y montaje del esqueleto


6- A continuacin se procede a instalar el retorno elstico del sensor de obstculo.
Este retorno elstico es un conjunto de seis piezas pequeas que consiguen que
P08 retorne a su posicin inicial cuando la pata deja de hacer presin contra un
obstculo, y adems hacen de tope a P08, evitando que pendule libremente sobre
P06 ms all de su posicin deseada. Su instalacin se lleva a cabo en dos pasos: en
este primer paso la aleta inferior de P06 se separa de P08 y se hace pasar un tornillo
[T8] a travs de [O114], que se enfunda con un separador [Y2] desde el otro lado
de P08. Sobre [Y2] se coloca un muelle [E6] que se
encierra con una arandela [A1] modificada. Dicha
arandela (imagen de la izquierda) tiene un cierto arco
de su circunferencia recortado para encajar
suavemente con la forma de la aleta inferior de P06, y
adems su dimetro inferior encaja casi perfectamente
con el dimetro exterior del tubo de aluminio que
hace de separador, de modo que cuando desciende la
aleta inferior de P06, la arandela puede moverse a lo
largo de [Y2], comprimiendo a [E6] mientras que [Y2]
y el sobrante de [T8] pasan libremente a travs de
[O100].

Pgina 94

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


7- El segundo paso sirve para evitar que la aleta inferior de P06 pueda volver a
separarse de P08, de modo que se fija el retorno elstico con la tuerca de [T8],
atrapando a la vez a una arandela [A0] entre la tuerca y el borde del separador [Y2].
La arandela [A0] tiene un dimetro interior inferior al de [Y2], por lo que ste no
puede atravesarla, pero a la vez tiene un dimetro exterior superior al de [O100],
por lo que el orificio tampoco puede superar la arandela y la pieza queda atrapada
entre un tope y un muelle. Finalmente, [T8], [Y2] y [A0] quedan fijados a P08
comprimidos por la tuerca, mientras que [E6], [A1] y P06 pueden desplazarse por
[Y2], limitados por [A0] por un lado y por la compresin de [E6] por el otro.

8- Finalmente, el montaje de la Tibia termina con la


instalacin del pi P09 (vista de la Tibia terminada a la
derecha). Para hacerlo se hace pasar el extremo abierto
del tubo de P09 por el interior de un muelle [E5] hasta
que ste descanse sobre la base del tubo, introducido en
la boca del taco de goma. A continuacin se inserta P09
por el mismo extremo a travs de los orificios [O109] y
[O105] de la Tibia, y se comprime [E5] contra [O109]
hasta que [O115] se alinee con [O108]. Entonces se
introduce un tornillo [T2] equipado con una arandela de
presin [A2] y una arandela [A0] a travs de [O115] y de
tres de sus tuercas, para terminar introducindose en
[O108]. De este modo, [O108] permite un ascenso y
descenso de [T2] suficiente como para que sus tuercas
puedan apretar la lengeta del sensor [E3] cuando la
pata proyecta a P09 contra el suelo. Adems, [T2] no
puede sellarse con cola de epoxi, puesto que es
necesario desmontarlo para poder extraer P09 cuando
sea necesario realizar reparaciones o sustituciones de
Pgina 95

Fabricacin y montaje del esqueleto


piezas en la Tibia. Por eso se coloca una arandela de presin en [A2] que mantendr
las tuercas siempre apretadas hasta que se desee aflojarlas.

Hecho esto las Tibias estn terminadas, y slo queda ver si funcionan correctamente
comprobando que los sensores dan seal y que los retornos elsticos confieren a las partes
mviles de la Tibia un movimiento suave pero firme. Las siguientes imgenes muestran el
acabado real de la Tibia y el funcionamiento de sus dos sensores puesto a prueba.

Pgina 96

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

o Montaje de las Tibias + Patas + Trax:

1- Al finalizar esta etapa de montaje el esqueleto del robot estar completamente


terminado a excepcin de la Cabeza. Para acoplar las Tibias al conjunto Trax +
Cadera + Fmur habr que forzar ligeramente las aletas del Fmur a separarse para
albergar el servo [S3] de la Tibia. Este proceso ha de realizarse con moderacin, ya
que el aluminio tiene un coeficiente de elasticidad muy bajo, y separar los extremos
de esta pieza en exceso podra provocar su deformacin, que por otro lado no se
podra corregir una vez instalada la Tibia. El eje trasero de [S3] se introduce
primero en [O86] desde una trayectoria diagonal y despus el eje motriz se acopla a
la pieza [E1] instalada previamente en el orificio [O88]. Hecho esto [S3], y por tanto
la Tibia entera, quedan encerrados en el Fmur. Por ltimo se asegura la unin
apretando un tornillo [T0] al eje motriz de [S3].

Pgina 97

Fabricacin y montaje del esqueleto

(Vistas
superior
flechas
apertura
Fmur).

frontal, trasera y
del montaje. Las
verdes indican la
de las aletas del

El proceso se repite con las seis patas hasta obtener el esqueleto completo (a excepcin de
la cabeza). Las siguientes imgenes muestran su aspecto final desde varios ngulos.
Adems, llegados a este punto resulta interesante comparar el modelo virtual con el
esqueleto real para comprobar que se han cumplido todas las especificaciones de diseo,
por eso cada vista renderizada del robot va acompaada de su fotografa anloga. Las
imgenes hablan por s solas: el diseo original se ha recreado de forma satisfactoria, todas
las Tibias son perfectamente funcionales y las articulaciones cubren todo el rango de
movimiento para el que se disearon.
(Hay que apuntar que, como se ha apuntado al inicio de este captulo, el cuello del robot
finalmente no se montar en esta etapa del proyecto, por lo que en las fotografas que
siguen el Cuello an no ha sido instalado en el robot, aunque el diseo lo contemple).
Pgina 98

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina 99

Fabricacin y montaje del esqueleto

Pgina 100

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina 101

Fabricacin y montaje del esqueleto


Recuento de piezas de las 6 Tibias (Total 348 componentes: 24 piezas, 6 servos, 54
elementos blandos, 6 separadores, 72 arandelas, 96 tornillos y 90 tuercas):
o P06: 6 Partes Fijas de la Tibia
o P07: 6 Soportes Superiores del Pi
o P08: 6 Partes Mviles de la Tibia
o P09: 6 Pies
o [S3]: 6 Servos Tibia
o [E0]: 24 Protectores de goma para servo Futaba
o [E3]: 12 Sensores de contacto de tipo Mini-Bumper
o [E4]: 6 Topes huecos de goma antideslizante
o [E5]: 6 Muelles de 65mm
o [E6]: 6 Muelles de 45mm
o [Y2]: 6 Separadores de tubo de aluminio de 4mm
o [A0]: 12 Arandelas normales M25
o [A1]: 54 Arandelas normales M3
o [A2]: 6 Arandelas de presin M25
o [T0]: 6 Tornillos
o [T1]: 12 Tornillos y 12 tuercas
o [T2]: 6 Tornillos y 18 tuercas
o [T4]: 24 Tornillos y 24 tuercas
o [T6]: 12 Tornillos
o [T7]: 18 Tornillos y 18 tuercas
o [T8]: 6 Tornillos y 6 tuercas
o [T9]: 12 Tornillos y 12 tuercas

Pgina 102

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5 Diseo electrnico
5.1 PIC16f88
El microcontrolador escogido para este proyecto es uno de los ms verstiles de entre los
integrados pequeos de la familia 16f de Microchip. Entre sus caractersticas ms
importantes destacan:
Integrado PDIP de 18 pines
16 pines de Entrada/Salida genricos
7 Kbytes de memoria Flash de programa (4096 instrucciones de un Word)
368 bytes de memoria SRAM
256 vytes de memoria EEPROM
Modo oscilador HS de hasta 20 MHz
7 Canales de conversin ADC de 10 bits
Mdulo SSP con soporte hardware para I2C Slave y SPI
Mdulo AUSART (en operacin RS-232 usa un oscilador interno)
Dos mdulos Timer de 8 bits con disparo de interrupcin
Un mdulo Timer de 16 bits con disparo de interrupcin
Mdulo Capture/Compare/PWM de 16 y 10 bits
Dos fuentes de interrupcin externa: RB0 y cambio en el Puerto B[4:7]
In-Circuit Serial Programming (ICSP)
100 000 ciclos tpicos de lectura/escritura en la memoria Flash
1 000 000 ciclos tpicos de lectura/escritura en la memoria EEPROM
Set de slo 35 instrucciones RISC
La cantidad de funciones que puede
realizar cada patilla, expresada en su
diagrama de conexionado, pone de
manifiesto la aglomeracin de sistemas
que agrupa este integrado. Las tres placas
electrnicas que se desarrollan en este
proyecto hacen uso de todas y cada una
de estas patillas, as como de las
principales funciones de sus mdulos SSP
y Timer1, y de sus dos fuentes de
interrupcin externa, adems de varias de
las internas, entre otros.
Figura F. 32: Patillaje del PIC16f88
(Fuente: PIC16f88 DataSheet)

Pgina 103

Diseo electrnico

5.2 Placa Patas grupo A


5.2.1 Caractersticas
La controladora de cada pata es una pequea placa electrnica de doble cara de no ms de
126 cm2 (45mm x 28mm) que ofrece las siguientes caractersticas:
Conector de alimentacin de 3 pines: VSS, VDD, y VSERVO, que corresponden a 0V,
5V y 6V (tpicamente, aunque puede variar).
Tres conectores de tres pines (VSS, VSERVO y PWM) para los servos compatibles con
el conector Futaba.
3 LEDs indicadores: deteccin del suelo, deteccin de obstculo y estado de
ON/no error.
PIC16f88.
Xtal oscilador de 20MHz.
Botn de RESET.
Conector principal de 16 pines mediante el que se accede a las patillas de
programacin, alimentacin, sensores, comunicacin I2C y expansin para sensor
de infrarrojos de cada pata.
El mapa del circuito electrnico de esta placa puede consultarse en el anexo de Planos.
La placa Patas grupo A est diseada para conectarse a las patas 1, 3 y 6. Esto se debe a
que la estructura mecnica del cuerpo del robot es simtrica en dos ejes, por lo que las
patas 1, 3 y 5 son simtricas a las 2, 4 y 6, del mismo modo que las patas 1 y 2 son
simtricas a las 5 y 6. De esta manera, 2 y 4, y 1 y 3 son simtricas entre s de forma normal,
mientras que 5 y 6 lo son de forma inversa. As pues, para que las placas puedan encajar
con la estructura del robot, deber haber un grupo A de placas diseado para tres de las
patas, y otro grupo B diseado para las patas simtricas a las primeras.
La placa est diseada para instalarse detrs de los servomotores acoplados al Trax Base
del robot, en el espacio entre esta pieza y la Tapa Inferior y orientando su conector
principal hacia la Tapa Inferior. As mismo, la placa tiene todos sus componentes
electrnicos soldados a la cara TOP de su serigrafa, excepto los conectores de
alimentacin y servos, los LEDs y el botn de RESET, todos ellos expresamente situados
en la cara BOTTOM y en las bandas laterales de la placa. De este modo, la placa ofrece una
zona llana donde slo hay soldaduras, justo encima de su hendidura inferior de 3 x 20mm,
de manera que puede usarse esta rea despejada para encolar la placa a la pared trasera del
servo acoplado al Trax Base. Con esto se consigue que todos los componentes
electrnicos que forman la placa estn orientados hacia el interior del robot, excepto los
elementos mencionados, que estarn orientados hacia el exterior, o hacia la pata. De esta
forma, podr consultarse el estado de los LEDs, apretar el botn de RESET o conectar la
alimentacin y los servos a la placa desde el exterior del robot.
Pgina 104

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Figura F. 33: Vista exterior de dos placas simtricas


(Fuente: Proyecto MIHRO)

Figura F. 34: Vista interior de dos placas simtricas


(Fuente: Proyecto MIHRO)

5.2.2 Lista de componentes


Placa de cobre sobre fibra de vidrio de doble cara y de 50 micras de espesor.
PIC 16f88 en encapsulado PDIP18
Zcalo PDIP 18 patillas
Resistencia 025W: 1K (x3)
Resistencia 025W: 10K (x3)
Resistencia 025W: 47K
Resistencia 025W: 220
Resistencia 025W: 330
Condensador cermico 15pF (x2)
Condensador cermico 100nF
Xtal oscilador 20MHz
LED verde 3mm (x2)
LED rojo 3mm
Pulsador mini normal
Conector hembra doble fila 254mm para cable plano 16pin
Conector macho doble fila 254mm acodado 16pin
Conector macho poste 2,54mm 3pin
Conector hembra 2,54mm 3pin
Conector en tira macho 254mm bajo perfil 20pin (slo se usan 9 y en grupos de 3)
Cable plano 16 hilos
Cable rojo 04mm
Cable negro 07mm
Cable naranja 07mm

Pgina 105

Diseo electrnico

5.2.3 Serigrafas TOP y BOTTOM


El circuito de la placa Patas ha sido diseado usando el programa OrCAD Capture,
incluido en el paquete de software OrCAD 16.0. La serigrafa de la placa Patas ha sido
diseada mediante el software OrCAD Layout, incluido en el mismo paquete. La serigrafa
de esta pata est diseada para estamparse sobre una placa de cobre de doble cara y de 50
micras de espesor. Todas las pistas tienen un ancho constante de 06 mm, excepto las pistas
de VSS y VSERVO, que tienen un ancho de 0,8 mm. Todos los orificios tienen un dimetro de
08 mm y disponen de un pad de 1,5 mm de dimetro. El estampado de las pistas y las
perforaciones sobre la placa ha sido realizado mediante una mquina fresadora
especializada con un cabezal de 04 mm de dimetro.

Figuras F. 35, F. 36 y F. 37: Serigrafas Top, Bottom y SST, a escala real, de la Placa Patas grupo A
(Fuente: Proyecto MIHRO)

En las tres imgenes (aparecen ampliadas en el anexo de Planos) puede verse que el perfil
rectangular de la placa tiene una hendidura de 3 x 20mm en su costado inferior, justo
debajo del espacio que ocupa el PIC. Esta hendidura sirve para evitar que la placa quede
levantada por encima de las tuercas de los tornillos que sujetan el servo tras el que se
instalar esta placa. Tambin evita que dichas tuercas puedan entrar en contacto con las
pistas o las soldaduras de la placa, pudiendo provocar as algn puente o cortocircuito.
La mayor dificultad en la fabricacin de estas placas ha sido sin duda el proceso de soldado.
Las placas, adems de ser pequeas y apiadas, exigen que los componentes electrnicos
que las integran se suelden por sus dos caras. Esto es relativamente sencillo en el caso de
resistencias o condensadores, pero se vuelve una tarea ardua en el caso de los conectores,
pues todos ellos disponen de un zcalo que tapa, al instalar el componente sobre la placa
en su posicin correcta, los pads en los que deben soldarse sus patillas. Ms difcil an
resulta la soldadura de los zcalos que han de albergar a los microcontroladores (estos
integrados son sensibles a la temperatura y se estropean, por lo que nunca se sueldan
directamente a la placa), pues la soldadura debe realizarse tanto en la cara por la que
sobresalen las patillas del zcalo al colocarlo en su lugar como en la misma cara en la que se
asienta el zcalo, teniendo que soldar con gran habilidad debajo del mismo, y sin ninguna
oportunidad de error. Otros componentes, como el botn de RESET, el Xtal oscilador, los
LEDs o el conector de 16 pines, tambin resultan extremadamente difciles de soldar, por
lo que la tarea de soldadura ha acabado por ser una de las ms complejas de todo el
proyecto en cuanto a la habilidad manual que exige.
Pgina 106

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5.2.4 Operacin
El acceso a los conectores, los indicadores y el RESET de la placa patas se realiza desde
el exterior y, excepto en el caso del conector principal, desde el lateral del robot.
Conector A:
VSS
VDD
VSERVO

RESET

Conectores:
S1

LED 1

S2:

LED 2

PWM
VSERVO
VSS

LED 3

Figura F. 38: Elementos 1 de la placa Patas


(Fuente: Proyecto MIHRO)

S3

Conector
Principal

Xtal 20MHz

PIC 16f88

Figura F. 39: Elementos 2 de la placa Patas


(Fuente: Proyecto MIHRO)

Hay que tener en cuenta que LED 1 y LED 3 son, respectivamente, los indicadores de
deteccin de obstculo y contacto con el suelo. As mismo, S1, S2 y S3 corresponden, por
orden, a los servomotores de Cadera, Fmur y Tibia. Los tres tienen el mismo
patillaje, pero diferencindose en que cada uno recibe su propia seal PWM.
Pgina 107

Diseo electrnico
El conector principal ofrece acceso a las principales caractersticas de la placa. No obstante
algunas de ellas, como el botn de RESET, son incompatibles con la tarjeta programadora
empleada en este proyecto, por lo que habr dos conectores, uno normal y otro de
programacin, que permitirn conectar las patillas que sean necesarias en cada caso. Este
botn de RESET est inicialmente desconectado de la patilla MCLR del microcontrolador,
pero tanto sta como el botn disponen de un pin en el conector principal, de manera que
el botn puede conectarse al PIC puenteando ambas patillas fsicamente en el conector. De
esta manera, al conectar la programadora, la patilla MCLR estar conectada slo a la
programadora, mientras que al conectar el robot de forma normal MCLR volver a
conectarse con el botn de RESET.
Por ltimo ha de mencionarse que los ltimos tres pines del conector principal no se usan
(los ltimos dos pines, si contamos con que uno de ellos lo usa la tarjeta programadora).
Estos pines corresponden a una posible expansin an no implementada de las funciones
de la pata, que consiste en introducir un tercer plano de deteccin de obstculos mediante
un dispositivo ptico, como un optoacoplador reflexivo. La inclusin de un tercer plano de
deteccin en las patas permitira al robot detectar obstculos tambin cuando avanzara de
forma vectorial. No obstante, la implementacin mecnica de este sistema es
extremadamente compleja, si se pretenden conservar los criterios de robustez del robot,
por lo que se ha optado por una solucin ptica en vez de mecnica. La placa patas est
preparada, mediante estos pines y las resistencias de 47K y 220, para digitalizar una
seal analgica procedente de un optoacoplador reflexivo genrico situado en la Tibia (los
valores de las resistencias corresponden a un CNY70) y cuantificar as la proximidad de un
obstculo.

Opto In (NC)
220 (NC)
VDD
MCLR
PGD
PGC
VDD
Sens. Suelo
Sens. Obst.
VSS
SDA
SCL
SDA
SCL
VSS
RESET

Programadora
Sensores
I2C Out
I2C In

Figura F. 40: Diagrama de pines del Conector Principal del grupo A


(Fuente: Proyecto MIHRO)

En el diagrama, las lneas verdes corresponden al conector normal, mientras que las rojas se
refieren al conector de la programadora. Adems, el diagrama tambin es vlido para el
conector hembra.
Pgina 108

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Para programar las placas patas grupo A es necesario tener en cuenta ciertas
consideraciones:
Los conectores principales de
cada pata son accesibles desde
la parte inferior del robot, a
travs de la Tapa Inferior del
Trax.
Para programar una placa del
grupo A habr que disponer de
un cable adaptado para la
funcin de programacin,
segn el diagrama de pines de la
pgina anterior (este cable no
ser compatible con las placas
Figura F. 41: Acceso a los Conectores Principales
(Fuente: Proyecto MIHRO)
pata del grupo B).
Una vez conectado el cable a los terminales de la programadora, se desconecta el
conector principal normal de la placa que se desea programar, y se introduce el
conector de programacin.

Figura F. 42 : Extraccin del conector


(Fuente: Proyecto MIHRO)

Figura F. 43: Conexin de la programadora.


(Fuente: Proyecto MIHRO)

Es imperativo desconectar el cable de alimentacin de la placa que se desea


programar. Esto se debe a que la programadora est diseada para acceder a un
PIC colocado en un zcalo aislado, por lo que se asume que la tensin de
programacin slo alimentar al PIC. Si esta tensin de programacin, conectada a
VDD, encuentra otros elementos que provoquen un consumo de corriente, la
programadora no podr mantener la tensin de programacin y el proceso fallar
irremisiblemente.
Por ltimo, si la programacin se ha realizado con xito, se desconecta el cable de
programacin, se devuelve el Conector Principal de la placa a su sitio y se reconecta
el cable de alimentacin.

Pgina 109

Diseo electrnico

5.3 Placa Patas grupo B


5.3.1 Caractersticas
Esta placa es prcticamente idntica a su anloga del grupo A, excepto en el hecho de que
su serigrafa es el reflejo horizontal de la serigrafa de la placa del grupo A. Esto significa
que la placa del grupo B dispone a su izquierda todos los elementos que la placa del grupo
A dispone a su derecha, y viceversa. De este modo se soluciona el problema de la
disposicin simtrica de las placas, comentado en el apartado 5.2.1. A pesar de ello, ambas
tienen similar forma e idntico tamao, integran los mismos componentes electrnicos,
proceden del mismo circuito Patas y mantienen el mismo patillaje en todos los
conectores excepto en el Conector Principal. Entonces, el motivo de que se haya
desarrollado una nueva serigrafa para esta placa en vez de usar una versin espejada de la
serigrafa del grupo A reside en el hecho de que el PIC, un componente integrado y con un
patillaje definido, no se puede espejar. La nica forma de construir esta placa directamente
de la serigrafa del grupo A sera cambiar la cara de la placa en que se suelda el PIC
(dndole as la vuelta, cosa que orientara sus patillas en el sentido correcto), pero esto hara
que el PIC ocupase el espacio destinado a encolar la placa a la parte trasera del servo, por lo
que esta solucin queda descartada.
La nica solucin entones es desarrollar una nueva serigrafa basada en el mismo circuito, e
integrar en ella los mismos componentes electrnicos que los del grupo A (con la
excepcin de los LEDs: el grupo A tiene dos verdes y uno rojo, mientras que el grupo B
tiene dos rojos y uno verde). El resultado es el siguiente:

Figuras F. 44, F. 45 y F. 46: Serigrafas Top, Bottom y SST, a escala real, de la Placa Patas grupo B
(Fuente: Proyecto MIHRO)

(El anexo Planos dispone de una versin ampliada de estas serigrafas para su mejor
visualizacin).
Aunque el proceso de programacin y la operacin con esta placa son los mismos que con
la placa de grupo A, hay que hacer notar que el patillaje del Conector Principal de esta placa
es distinto, por lo que las Patas grupo B necesitarn, entre otras cosas, un cable de
programacin propio.

Pgina 110

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

VSS
SDA

RESET

I2C In

SCL

SDA

SCL
Sens. Obst.
VSS
VDD
Sens. Suelo
PGD
PGC
VDD
MCLR
Opto In (NC)
220

I2C Out
Sensores

Programadora

Figura F. 47: Diagrama de pines del Conector Principal del grupo A


(Fuente: Proyecto MIHRO)

Otra diferencia entre la placa de grupo A y de grupo B que hay que poner de manifiesto es
la distribucin de los conectores de los servos. En el caso de la placa de grupo A, los servos
de Cadera, Fmur y Tibia se conectan a los conectores S1, S2 y S3, respectivamente.
Esto es, de arriba abajo y de fuera a dentro. Por el contrario, los conectores de los servos
de la placa de grupo B se cuentan de dentro a fuera y de abajo arriba, por lo que, en el
diagrama del apartado 5.2.4 el servo Cadera correspondera a S3, el servo Fmur a S2 y
el servo Tibia a S1.
Como informacin adicional, se puede decir que tanto la
placa patas de grupo A como la de grupo B presentan un
consumo medio de 12mA, algo menos si los motores estn
alimentados y en reposo. Tambin es interesante mencionar
que los LEDs de estado se han incluido en la placa con el fin
de detectar fcilmente fallos en el funcionamiento de los
sensores de contacto o de la misma electrnica, y tambin
con el fin de ayudar en el desarrollo del software durante las
etapas de programacin. Con el mismo objeto se ha incluido
el botn de RESET en el diseo de estas placas, pues en la
Figura F. 48: LEDs de estado
aplicacin final carecen de mayor uso, ya que en pocas
(Fuente: Proyecto MIHRO)
circunstancias se puede dar el caso de que estas placas deban
reiniciarse manualmente, y en tal caso bastara con desconectar la alimentacin y volverla a
conectar. En cualquier caso, en el momento de la programacin se puede activar o
desactivar la funcin que realiza este botn actuando sobre el flag de configuracin
MCLRE (Memmory Clear Enabled), pero en caso de que est activado ha de tenerse en
cuenta que estas placas no debern funcionar si no tienen su conector principal conectado,
pues de no tenerlo el pin de MCLR quedara al aire, de modo que su funcionamiento se
volvera impredecible y podra provocar reinicios del programa no deseados.
Pgina 111

Diseo electrnico

5.4 Placa Entrenadora


5.4.1 Caractersticas
Aunque originalmente se dise para realizar experimentos sobre la locomocin del tercer
prototipo de pata que se desarroll, tal y como explica el captulo 3, finalmente esta placa se
ha adaptado para encajar en la estructura de MIHRO y se ha programado para tomar el rol
de cerebro o Master del bus I2C. Entre sus principales caractersticas destacan:
Dos conectores de alimentacin de dos pines, uno para VDD y VSS y otro para
VSERVO y VSS.
Dos conectores para los sensores de suelo y obstculo.
Tres conectores de tres pines (VSS, VSERVO y PWM) para los servos compatibles con
el conector Futaba.
Tres botones.
Cinco LEDs indicadores: tres verdes para los botones, y dos para las seales RX y
TX de la comunicacin RS-232, uno verde y otro rojo.
PIC16f88 con dos ranuras de expansin para darle un uso diferente a cualquiera de
sus patas.
Xtal oscilador de 20MHz.
Botn de RESET.
Dos conectores para el bus I2C. Slo se usa uno de ellos, pues el otro debe quedar
abierto para futuras expansiones.
Un conector de tres pines para la comunicacin RS-232.
Dos resistencias pull-up conectadas a SCL y SDA. Al estar estas resistencias en el
Master, el bus queda configurado para cualquier esclavo que se le conecte.
Dos arrays de cinco jumpers cada uno, uno de programacin y otro de trabajo. Si se
conecta el jumper de programacin y se desconecta el de trabajo, las patillas de
programacin del PIC quedan conectadas nicamente a la programadora. De lo
contrario, estas patillas interactan con el circuito de forma normal.
Driver MAX232, conversor de niveles TTL a RS-232.
El mapa del circuito electrnico de esta placa puede consultarse en el anexo de Planos.
En el cambio de Entrenadora a Master, esta placa no ha sufrido ningn cambio en su
circuito gracias a las ranuras de expansin que abrazan el microcontrolador. Por ejemplo,
una de las tareas ms importantes que lleva a cabo esta placa es la lectura del pequeo
teclado numrico desde el que el usuario introduce las rdenes a ejecutar por el robot.
Dicho teclado consta de once botones que deben ser ledos en once pines diferentes del
PIC. Esto es imposible en primera instancia, ya que el diseo inicial de la placa otorga una
funcin definida a cada una de las patillas del PIC, pero mediante la ranura de expansin y
el control de direccin de los puertos del PIC es posible cambiarlo y adaptarlo al teclado.
Pgina 112

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5.4.2 Lista de componentes


Placa de topos para prototipos de baquelita
PIC 16f88 en encapsulado PDIP18
Zcalo PDIP 18 patillas
MAX232N encapsulado en PDIP16
Zcalo PDIP 16 patillas
Resistencia 025W: 1K (x5)
Array de resistencias 025W: 10K (x8)
Resistencia 025W: 330
Condensador cermico 15pF (x2)
Condensador cermico 100nF
Condensador electroltico 1uF (x4)
Xtal oscilador 20MHz
LED verde 6mm (x4)
LED rojo 6mm
Pulsador mini normal (x4)
Conector macho acodado 2,54mm 2pin (x5) + hembras
Conector macho acodado 2,54mm 3pin (x4) + hembras
Conector en tira hembra 254mm 20pin (slo se usan 18)
Conector en tira macho acodado 254mm bajo perfil 20pin (tres trozos de tres pin)
Conector en tira macho poste 254mm bajo perfil doble lnea 20pin (se usan 2x2x5)
Cables varios

5.4.3 Serigrafas TOP y BOTTOM


Al contrario de lo que caba esperar, ya que este circuito se dise en una etapa muy
temprana del proyecto, la placa entrenadora ha dado muy buen resultado, demostrando ser
estable, fiable y duradera. No obstante, es una placa hecha a mano y apenas diseada por
ordenador, por lo que no existen mapas de su serigrafa ms precisos que el mapa que se
dibuj usando SketchUp para guiar su fabricacin. La placa est fsicamente construida
sobre una placa de topos para prototipos de baquelita, y utiliza un sistema de jumpers para
conmutar entre las tareas de programacin y trabajo normal: cuando la placa est
recibiendo un uso normal, un microrruptor de cinco vas, adaptado para puentear con
todos sus interruptores cerrados un array de cinco jumpers, permite que llegue al PIC su
alimentacin normal y conecta los pines MCLR, RB7 y RB6 al resto del circuito. Por el
contrario, cuando se pretende programar el microcontrolador, el microrruptor debe
puentear los pines del segundo array de jumpers para que slo los pines de programacin
se conecten a la programadora.

Pgina 113

Diseo electrnico

Figura F. 49: Serigrafa Top de la placa Master


(Fuente: Proyecto MIHRO)

Figura F. 50: Serigrafa Bottom de la placa Master


(Fuente: Proyecto MIHRO)

Pgina 114

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5.4.4 Operacin
La placa Entrenadora, de acuerdo con el uso especfico que recibe en su aplicacin final
sobre el robot, slo necesita de la conexin de sus conectores de alimentacin e I2C. El
resto de sus conectores estn pensados para su uso como controladora del tercer prototipo
de pata en la maqueta para la que se dise, o como herramienta de comunicacin con un
PC mediante RS-232, aunque esta aplicacin no ha llegado a implementarse en este
proyecto.
Alimentacin VDD
Alimentacin VSERVO
Sensor de suelo

PIC16F88

Servos

Ranuras de
expansin

Sensor de obstculo

Microrruptor
de 5 vas

MAX232
I2C

Programacin

RS-232

Figura F. 51: Elementos de la placa Entrenadora


(Fuente: Proecto MIHRO)

Cuando el microrruptor de 5 vas est conectado sobre el array de jumpers de trabajo


normal, su tercera va acta como interruptor de alimentacin, aunque hay que tener en
cuenta que slo conecta o desconecta la alimentacin del PIC, por lo que si la tercera va
del microrruptor est abierta en esta posicin, aunque el PIC deje de funcionar, el resto del
circuito sigue recibiendo alimentacin. Por otro lado, cuando el microrruptor da soporte a
la funcin de programacin desde el array de jumpers correspondiente, es la primera de sus
cinco vas la que controla la tensin de programacin que recibe el PIC.
Adems, la aplicacin final de esta placa hace uso de los conectores de expansin del PIC
para implementar el control desde un teclado numrico o un mando parecido al de algunas
videoconsolas. Este no es un teclado matricial, por lo que su lectura requiere de tantas
patillas del PIC como botones se deseen leer. En esta aplicacin slo se dispone de 11
patillas que puedan dar soporte a la lectura de los botones del teclado, por lo que, aunque el
teclado tiene 12 botones, uno de ellos (*) no muestra conectividad con el circuito. No
obstante, los 11 botones disponibles ofrecen la posibilidad de un control completo sobre
todas las funciones del robot, segn resume la tabla siguiente:

Pgina 115

Diseo electrnico

Teclado

Mando

Dgito 1

Dgito2

Dgito3

Dgito4

No botn
0
1
2
3
4
5
6
7
8
9
#

No botn
4
1 (L1, Sel.)
L2 (3)
Up
R2
Left
Down
Right
Start (2)

Stop ()
+0
+ 100
+ 200
(N.I.)()
action,4=1()
action,1=1()
action,5=1()
action,2=1()
action,1=0()
action,3=1()
I2C Send()

+0
+10
+20
+30
+40
+50
+60*/[Err()]
+70*/[Err()]
+80*/[Err()]
+90*/[Err()]
Err()

+0
+1
+2
+3
+4
+5
+6**/[Err()]
+7**/[Err()]
+8**/[Err()]
+9**/[Err()]
Err()

"acu"=0
Speed
Centro
Rango
Zanco
Altura
M1
M2
M3
Slave ***
Mode

(): Permanece en el mismo dgito


* : No si el primer dgito es 2
** : No si el primer dgito es 2 y el segundo 5
*** : Si es 0, se dirige a todos los esclavos
Tabla T. 5: rdenes manuales mediante teclado o mando
(Fuente: Proyecto MIHRO)

Figura F. 52: Mando y teclado


(Fuente: Proyecto MIHRO)

No obstante, el mando, mucho ms cmodo para el control de las funciones dinmicas del
robot, no ofrece la posibilidad de introducir todos los valores numricos disponibles desde
el teclado, por lo que este ltimo ser preferible para las tareas de control esttico del robot.
Las rdenes introducidas desde el mando o el teclado se interpretan en el PIC maestro, que
produce una serie de envos de datos por el bus I2C a los distintos esclavos, consiguiendo
que stos acten en consecuencia.
Pgina 116

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5.5 Otros elementos de hardware


5.5.1 Programadora PIPO2
El PIC16F88 incorpora un mdulo llamado ICSP (In-Circuit Serial Programming) que le
permite gestionar la escritura de su propia memoria de programa o datos durante el
proceso de programacin. De este modo, lo nico que debe hacer el programador para
grabar un cdigo fuente en el microcontrolador es enviar los datos en cdigo mquina por
un canal serie, provocando a la vez los niveles de tensin adecuados para este proceso. Para
resolver esta tarea existen montones de circuitos y dispositivos en el mercado que ofrecen
diferentes niveles de caractersticas adicionales complementarias al proceso de grabacin.
No obstante, llama la atencin esta PIPO2, basada en un circuito parecido llamado
LudiPIPO, por su enorme simplicidad y efectividad.

Figura F. 53: Programadora PIPO2


(Fuente: Proyecto MIHRO)

La programadora PIPO 2, cuyo esquema y documentacin estn incluidos en el anexo de


Planos y en el CD respectivamente, slo realiza la tarea de adecuacin de los niveles de
tensin requeridos para grabar cualquiera de los PICs incluidos en su lista de dispositivos
compatibles (en la cual se encuentran adems memorias EEPROM y algn otro integrado),
tomando los datos y la alimentacin de un puerto serie convencional. De esta forma, con la
ayuda de un software genrico, se puede usar el puerto serie de un PC para programar un
gran nmero de microcontroladores PIC usando esta tarjeta como puente entre el PC y las
cinco patillas de programacin del PIC (VDD, PGD, PGC, VPP y VSS). Pero lo que ms
sorprende de este circuito es que puede montarse en apenas un rato por un precio no
superior a 10, por lo que constituye un recurso efectivo y rpido para resolver la grabacin
de estos microcontroladores. Adems, el Club de Robtica Autnoma de la EUPMT lleva
ya algunos aos usando este circuito y los que lo han montado (correctamente) han
comprobado que es duradero, robusto y fiable.
Pgina 117

Diseo electrnico

5.5.2 Otros mdulos ayudantes


Adems de la electrnica mencionada hasta ahora, se hace necesario incluir en el robot
algunos circuitos pequeos y simples que suplan de forma provisional la carencia de la
placa de alimentacin. El ms importante de ellos es un pequeo circuito regulador de
tensin basado en un L7805 que convierte un nivel mnimo de 7,5V, sometido a las
inestabilidades inherentes a la fuente de alimentacin de laboratorio que se est usando, en
un nivel estable de 5V (VDD). Aunque su complejidad es mnima y sus funciones bsicas, el
robot no podra realizar ni una sola accin sin este circuito. Los otros dos mdulos
adicionales que usa MIHRO son un distribuidor de los conectores de alimentacin de cada
placa y un soporte con dos LEDs indicadores para los interruptores de alimentacin
generales del robot.

5.5.3 Diseo previo de la placa de alimentacin


Aunque no forma parte del desarrollo de ninguna de las etapas incluidas en este proyecto,
se realiz un diseo preliminar de la placa de alimentacin que acabar gestionando la
energa del robot. Su esquemtico puede consultarse en el anexo de Planos. A grandes
trazos, lo que pretende este circuito es modularizar la distribucin de la energa, de forma
que, por un lado, se pueda activar o desactivar cualquiera de los mdulos esclavos del
robot, y por otro, se pueda regular dinmicamente la tensin de alimentacin que llega en
cada momento a los motores de cada pata por separado. Para lograrlo, se sigue una
estrategia que consiste en reducir la tensin que llega a aquellas patas que estn avanzando,
y por tanto que no estn soportando el peso del robot, a la vez que se aumenta la tensin
que llega a las patas que estn en el suelo, que necesitan ejercer un par motor suficiente
como para sostener y arrastrar el peso del robot a lo largo de cada paso. Esto se consigue
mediante los dos integrados AD5263BRUZ50, dos potencimetros digitales de cuatro
canales y de 50 K de fondo de escala, que pueden gobernarse por I2C, y que permiten
regular, mediante la variacin de cada una de sus resistencias, la intensidad de la patilla de
ajuste de un regulador de tensin variable LM317, capaz de entregar hasta 1,5A a cada pata.
Adems, 2 de las 24 patillas de estos potencimetros son salidas digitales controlables
desde algunos de sus registros internos accesibles mediante la comunicacin I2C. Esto
ofrece la interesante posibilidad de controlar hasta 4 seales digitales en la placa de
alimentacin mediante el envo de rdenes por el bus desde el Master. De este modo, es
posible controlar algunos elementos crticos de esta placa, como rels o transistores
MOSFET, que gestionen la conexin o desconexin de sus diferentes mdulos sin tener
que incluir ningn microcontrolador en la misma. Con esto se lograra, entre otras cosas,
ampliar su diseo con un mdulo gestor de la carga de una batera controlado desde el
Master, o incluir un conmutador que permitiera escoger entre una fuente de carga
domstica fija o una clula fotovoltaica, cuya inclusin en este proyecto est planificada
para sus ltimas etapas de desarrollo.
Pgina 118

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

6 Programacin
6.1 Herramientas de programacin
La tarea de programacin del robot se divide a su vez en tres sub-tareas (edicin,
compilado y grabacin) que han sido realizadas mediante programas gratuitos descargados
de Internet:
EditPlus 2: Este sencillo programa constituye una interesante herramienta de
edicin de cdigo fuente en ensamblador si se configura adecuadamente. Lo que
hay que hacer sencillamente es linkar ciertos parmetros del panel de preferencias
del programa a un archivo de sintaxis, que nosotros mismos podemos escribir o
modificar, para poder ver los distintos elementos del cdigo en pantalla coloreados
para su mejor distincin. Con esto el programa permite visualizar en una lista
ayudante la correcta escritura de las 35 instrucciones que componen el lenguaje
ensamblador (sin macros) de la familia 16F de Microchip, as como disear
nuestros propios templates con cabeceras, fragmentos de cdigo, etc., adems de sus
otras caractersticas genricas.

Figura F. 54: Interfaz del editor EditPlus2


(Fuente: Proyecto MIHRO)

Pgina 119

Programacin
MPASM: Compilador para lenguaje ensamblador proporcionado por Microchip.
Su funcin es la de traducir el texto guardado en un archivo de cdigo fuente .asm
a un archivo .hex de valores hexadecimales (cdigo mquina), que contiene la
informacin que deberemos grabar en el PIC. Tras la compilacin se generan los
archivos secundarios de error, listado y referencia cruzada, adems del archivo.hex.

Figura F. 55: Interfaz del compilador MPASM


(Fuente: Proyecto MIHRO)

Figura F. 56: Resultado de la compilacin


(Fuente: Proyecto MIHRO)

Pgina 120

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


WinPic800: Este es el software grabador de PICs que se us en la ltima edicin
del Curset dEstiu de Robtica de la EUPMT. Su interfaz, sencilla y directa,
permite grabar el PIC, leerlo, borrarlo y verificarlo, pero tambin testar el hardware
programador, y reconocer el dispositivo que se pretende programar. Otras opciones
interesantes son, por ejemplo, la posibilidad de modificar los fuses de configuracin
del PIC antes de programarlo, sobrescribiendo la configuracin que hubiramos
programado en el cdigo fuente, o la de leer el contenido en cdigo mquina de un
PIC e interpretarlo para reconvertirlo de nuevo a cdigo ensamblador.

Figura F. 57: Interfaz de WinPic800


(Fuente: Proyecto MIHRO)

Figura F. 58: Configuracin de WinPic800 para programar con PIPO2


(Fuente: Proyecto MIHRO)

Pgina 121

Programacin

6.2 Programas
Resulta complicado dejar una constancia fehaciente del trabajo de programacin realizado
en este proyecto, pues la extensin del cdigo fuente desarrollado, as como el carcter
crptico inherente al lenguaje ensamblador hacen difcil tanto la tarea de adjuntarlo en esta
memoria como la de explicar su funcionamiento detallado. Finalmente, la estrategia
adoptada para solucionar el problema ha sido la de aunar ambas tareas escribiendo un
cdigo fuente muy comentado, casi a cada lnea que se preste a ello, y adjuntar en el anexo
de Cdigo fuente los programas del Master y de uno de los esclavos. Hay que tener en
cuenta que, aunque son muy similares, los seis programas esclavos desarrollados mantienen
sustanciosas diferencias entre s, como por ejemplo la declaracin de las variables limitantes
de sus movimientos o las rutinas de correccin de los motores 2 y 3 en las etapas finales de
cada paso. No obstante, la totalidad del software definitivo escrito suma ms de 10.000
lneas de cdigo, por lo que finalmente se opt por incluir en el proyecto escrito, y slo en
un documento anexo, dos de los programas desarrollados (los dos ms distintos entre s).
As mismo, esta memoria slo pretende dar a conocer el funcionamiento genrico y global
de estos dos programas, dejando las explicaciones ms concretas en manos de los
comentarios intercalados en el cdigo.

6.2.1 Programa pata_iglu_R3.asm


Este es el programa de control de la pata nmero 3 del robot, y presenta una equivalencia
superior al 90% con los otros dos programas correspondientes a las otras dos patas
derechas del robot. El funcionamiento general del programa se basa en el uso de variables
de flags, o banderas, que permiten planificar y definir todas las divergencias que existen en el
programa, de manera que cada mdulo del cdigo se pueda ejecutar correctamente aunque
se acceda a l desde casi cualquier posicin aleatoria del programa completo. El motor del
programa es la interrupcin del Timer1, que hace que todas las tareas del mismo, excepto
las inicializaciones, se repitan cada 20ms. Este es un perodo suficientemente rpido como
para que parezca que el robot responde a sus estmulos en tiempo real, pero lo cierto es que
el refresco de acciones y variables se produce slo 50 veces por segundo. No obstante,
esta circunstancia obliga al programa a controlar, mediante los flags mencionados, el acceso
a cualquiera de sus procesos para bloquear su ejecucin ms de una vez por cada perodo.
Configuracin: a destacar que el PIC funciona en el modo oscilador HS con un Xtal de
20MHz. Esto nos deja, teniendo en cuenta que el Ciclo de Instruccin de esta mquina
consta de 4 ciclos de reloj, en un C.I.= 200ns. Adems, el programa activa las
caractersticas de Power-Up Timer, Brown-out Reset y MCLR Enabled (aunque la aplicacin esta
ltima slo cobra sentido durante las etapas de puesta en marcha del robot). Otras
caractersticas como el Watch Dog Timer, o la proteccin de cdigo han sido
voluntariamente desactivadas.
Pgina 122

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Bucle principal: mantiene al procesador ocupado en un bucle infinito despus de haber
terminado todas las tareas que debe realizar en cada perodo de 20ms. Se mantiene
permanentemente testeando los flags de desvo a las rutinas ciclo y movs, pero dado
que movs slo puede activarse al terminar la rutina ciclo, slo la activacin de esta
rutina, o una interrupcin, podrn sacar al programa de este bucle. De hecho, de forma
genrica el programa sale de este bucle para atender a la interrupcin por overflow del
Timer1, configurado para contar periodos de 20ms, que precisamente tiene como nica
tarea (la interrupcin) la activar el flag de acceso a la rutina ciclo.
Rutina ciclo: Esta rutina de slo 18 lneas es la ms importante del programa, pues se
encarga de generar, una vez cada 20ms, el pulso de control PWM de la posicin de cada
uno de los tres servos implicados en esta pata. La estrategia que sigue para hacerlo es
simple: se parte de la premisa de que la patilla conectada a la seal PWM del servo en
cuestin muestra un nivel bajo en su salida, as que se pone en nivel alto para iniciar el
pulso. A continuacin se llama a un retraso ciego de tantos milisegundos como se le
indique a travs de la variable de entrada del. Cuando el tiempo ha terminado, el
programa regresa a la lnea siguiente a la llamada del retardo, en la que se devuelve el estado
de la patilla al nivel bajo y se prosigue con el control del siguiente servo. Una vez
completado el pulso correspondiente a la posicin deseada en cada servo, se bloquea el
acceso a la rutina ciclo, para no repetir el pulso antes del prximo perodo de 20ms, y se
activa el acceso a la variable movs. Finalmente, el programa retorna al bucle principal.
Hay que hacer notar que el tiempo que el procesador transcurre en la rutina de retraso es
tiempo de clculo perdido, pues ste slo se dedica a contar instrucciones con el objeto de
perder tiempo de forma controlada. Si se tiene en cuenta que el ancho de pulso mximo
que se le pueden enviar a estos servos es 228ms, el peor caso de prdida de tiempo de
clculo se producira cuando los tres motores desearan esta posicin extrema, por lo que el
procesador perdera un tiempo por valor de 684ms. De este modo, se puede determinar
que este sistema permitira el control de 8 servomotores de este tipo como mximo por
cada microcontrolador, a costa de limitar el tiempo para el procesamiento de otras tareas.
Rutina movs: Aunque es muchsimo ms larga, esta rutina slo tarda en ejecutarse una
fraccin centesimal de lo que tarda ciclo. Su cometido es la gestin de la fluctuacin
controlada de las variables m1, m2 y m3, de las que se nutre ciclo para determinar la
posicin en que debe posicionarse cada servo. Para ello, esta rutina se nutre a su vez de un
buen nmero de variables que condicionan el comportamiento dinmico de la pata, aunque
las ms importantes y determinantes son action y mode.
La variable 'action' contiene 8 banderas:
action,0 : 1= Go
0= Stop
action,1 : 1= Atrs
0= Delante
action,2 : 1= Giro Izquierda 0= No Giro
action,3 : 1= Giro Derecha 0= No Giro
action,4 : 1= Rotacin Izq. 0= No Rotacin
action,5 : 1= Rotacin Dch. 0= No Rotacin
action,6 : 1= Ida del paso
0= No Ida
action,7 : 1= Vuelta del paso 0= No vuelta
Pgina 123

Programacin
Dichas banderas son modificadas por el Master mediante la rutina de comunicacin I 2C,
que se trata ms tarde, y se usan para coordinar la accin motora que deber realizar la pata.
Por eso, los bits [2:5] slo se emplean en el programa del Master, mientras que el resto de
bits sirven para ordenar al esclavo un movimiento de avance o retroceso que se sincroniza
con el del resto de las patas mediante la activacin y desactivacin controlada de los bits
[6:7].
La variable 'mode' contiene 8 banderas:
mode,0 : 1= Modo Dinmico
0= Modo Esttico
mode,1 : 1= Modo levantamiento
0= No Modo
mode,2 : 1= Modo Coger
0= No Modo
mode,3 : 1= Modo Inicial
0= No Modo
mode,4 : 1= Modo Programacin
0= No Modo
mode,5 : 1= Obstculo detec.
0= No Obstculo
mode,6 : 1= (N.I.)
0= (N.I.)
mode,7 : 1= (N.I.)
0= (N.I.)
Mode, por el contrario, acta a un nivel ms alto, determinando el tipo de accin motora
que deber realizar la pata entre:
Modo esttico: La pata no ejecuta el control evolutivo de las variables m1, m2 y
m3, slo copia en ellas las consignas que le enva el Master para mantener cada
motor en una posicin fija. Mediante este modo, el usuario puede introducir por
teclado el valor exacto de la posicin que desea que adquiera un motor del robot.
Modo Dinmico: La pata ejecuta un control evolutivo de las variables m1, m2 y m3
diseado para reproducir la secuencia de movimientos de un paso. Dicha secuencia
recibe el nombre de igl por la forma que dibujan sus motores 1 y 2 trabajando al
unsono, y su principal caracterstica es que est diseada para reducir la inercia en
los lmites de su rango de movimiento, consiguiendo as evitar las oscilaciones,
optimizar el paso, reducir el consumo y alargar la vida de los motores. La secuencia
igl se divide en 7 etapas controladas por 8 variables que definen puntos clave de
su movimiento en los ejes de m1, m2 y m3. Dichas variables estn a su vez
controladas por las variables speed, centro, rango, zanco y altura, que constituyen las 5
consignas definitorias del paso. As pues, mediante el envo de estas 5 variables, el
Master controla todas las caractersticas de cada paso de la pata. Tambin hay que
decir que cada etapa se nutre de las rutinas fluc y find_m3 para ejecutar,
respectivamente, una evolucin progresiva de la posicin de los motores tanto en
su sentido de avance como de retroceso, y una correccin del valor de m3 que le
permite definir una lnea recta en su movimiento de retroceso (mejorando as la
estabilidad en el avance del robot).
Modo inicial: lleva al robot a una posicin conocida de inicio que mantiene durante
un par de segundos
Modo levantamiento: hace que el robot se levante con sus seis patas. Normalmente
se llega a este modo justo despus del modo inicial.
Modo programacin: hace que las patas del robot desciendan con las tibias
recogidas, cosa que facilita la operacin de darle la vuelta al robot para programarlo.
Pgina 124

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Modo coger: Cuando el robot se halla a una distancia conocida de un objeto que
desea recoger y cargar, ejecuta una secuencia de movimiento con sus patas
delanteras que lo agarra, lo eleva y lo deposita sobre su cuerpo mientras el robot se
sostiene sobre sus cuatro patas traseras. Esta caracterstica an no ha sido
implementada.
Rutina delay: esta es la rutina de retraso mencionada anteriormente. Consiste en la
ejecucin de un primer tiempo de retardo de 048ms, correspondientes al ancho del pulso
mnimo que se le puede mandar al servo. Acto seguido ejecuta tantas veces como se le haya
indicado a travs de la variable del una rutina de exactamente 7,2us. De esta manera se
puede controlar el intervalo entre la posicin de 0 (048ms) y de 180 (228ms) con 250 de
los 255 valores posibles de una variable de 8 bits, consiguiendo as controlar la posicin de
cada servo con una precisin de 180/250 = 0,72.
I2C Slave: a esta rutina slo se llega cuando ocurre un evento en el mdulo SSP que
produce una interrupcin (y sta est desenmascarada). Lo que hace es discernir entre 5
situaciones distintas que determinan su comportamiento:
Recepcin de un dato en escritura, el ltimo byte es una direccin.
Recepcin de un dato en escritura, el ltimo byte es un dato.
Recepcin de un dato en lectura, el ltimo byte es una direccin.
Recepcin de un dato en lectura, el ltimo byte es un dato.
Finalizacin / Reset de la comunicacin I2C.
Para ms detalles, consultar el apartado correspondiente a este fragmento del cdigo en el
anexo de Cdigo fuente.
Sistema Interruptivo: Este programa responde a las interrupciones de: evento en el
mdulo SSP, overflow del Timer1, flanco de subida en el pin RB0/INT y cambio en el pin
RB4 (esta fuente de interrupcin debe enmascararse cuando est desenmascarada la
interrupcin por evento en el mdulo SSP).

6.2.2 Programa master_teclado.asm


Este programa, al contrario que el anterior, no funciona a intervalos regulares, sino de
forma continua. A grandes rasgos, su funcionamiento se basa en la interaccin entre la
placa Master y el teclado que lleva conectado: de forma normal el programa se mantiene
atrapado en el bucle principal, pero sale del mismo cuando el usuario pulsa una tecla, y va a
parar a la rutina de gestin de esa tecla. Dicha rutina tiene cuatro estados posibles que le
indican si la tecla se ha pulsado cuando la mquina esperaba un dgito1, 2, 3 o 4. Por
ejemplo, si se pulsa un nmero cuando el estado del programa corresponda al dgito 1, la
tecla presionada conllevar la ejecucin del cdigo escrito en el espacio destinado al dgito 1
de la rutina de dicha tecla, y acto seguido el programa cambiar al estado de dgito 2.

Pgina 125

Programacin
Adems, existen normas para presionar una u otra tecla en cada uno de los dgitos. Por
ejemplo, si se presiona la secuencia de teclas 1-4-3-1 (consultar la tabla T.5 del
apartado 5.5.4), el cdigo de dgito 1 de la tecla 1 har que una variable acu valga 100,
el cdigo de dgito 2 de la tecla 4 har que acu se incremente en 40, el cdigo de dgito
3 de la tecla 3 har que acu se incremente en 3 puntos, obteniendo el valor 143 en
acu, y por ltimo el cdigo de dgito 4 de la tecla 1 har que dicho valor se almacene
en la variable speed. De este modo, el cdigo se protege contra su mal uso, evitando que se
introduzcan valores errneos. Por ejemplo, si intentamos introducir un 5 en el primer
dgito se iluminar un LED rojo gestionado desde la rutina led4, indicndonos que ha
habido un error. El error, por otro lado, es lgico, pues cualquier cifra que empezara por 5
en su campo de las centenas debera valer al menos 500, y lo mximo que pueden
cuantificar las variables de 8 bits es 255 (FFh). Otro ejemplo de cifra errnea sera la
introduccin de la secuencia 2-7-X o 2-5-7; en el primer caso, el siete no
llegara a entrar, pues cualquier nmero superior a 270 supera ya de por s a 255, por lo que
el sistema ni siquiera nos dejara llegar al tercer dgito. En el segundo caso, el 5 entrara
pero el sistema nos dara error al introducir el 7 final.
Algunas teclas, no obstante, se toleran en situaciones errneas para darles otros usos. Es el
caso, por ejemplo, de los nmeros superiores a 2 en el primer dgito, todos incorrectos
segn lo explicado, pero que en este caso sirven para manejar la rutina movs, activando y
desactivando los flags de la variable action que le indican qu tipo de secuencia debe
sincronizar el Master en todas las patas para producir unos u otros movimientos. Por
ejemplo, si se le da la orden de avanzar en lnea recta el primer dgito la rutina mandar las
consignas de movimiento dinmico a cada pata para que ejecuten una secuencia de
locomocin triangular normal (esto significa que todas las patas avanzan y retroceden la
misma distancia, pero las patas 1, 4 y 5 lo hacen a destiempo de las 2, 3 y 6, de forma que
cuando unas avanzan las otras retroceden). Por otro lado, si se le da la orden de girar a la
derecha mientras se avanza, le estar indicando a la rutina que ejecute la secuencia de
locomocin triangular, pero reduciendo el rango de las patas del lado derecho del robot
respecto de las del izquierdo, consiguiendo as que el robot se ladee.
Otros botones ejecutan tareas ms concretas de almacenamiento y envo de los datos,
como la tecla # que enva los datos almacenados por I2C al esclavo cuya direccin se
haya almacenado usando la tecla 9, o a todos ellos si dicho valor es 0.
A parte de esto, slo queda por decir que el Master no usa ninguna fuente de interrupcin,
aunque disponga de algunas programadas para futuras revisiones de este programa, y que
su rutina ms compleja, la implementacin de la comunicacin I2C en modo Single Master
completamente por software, exige un anlisis demasiado concreto como para abordarlo en
este apartado, por lo que deber ser consultado en el apartado correspondiente del anexo
de Cdigo fuente.

Pgina 126

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

7 Resultado
La integracin de todos sus sistemas le confieren a MIHRO su aspecto final.

Figura F. 59: Aspecto final de MIHRO


(Fuente: Proyecto MIHRO)

Puesto que el resultado final no puede evaluarse con una imagen, sino que exige ver al
robot en funcionamiento, se han adjuntado algunos vdeos demostrativos en el CD que
muestran algunos de los principales experimentos que ha conllevado el desarrollo de
MIHRO, as como la demostracin de su operacin y de sus principales habilidades.

Pgina 127

Conclusin

8 Conclusin
Este proyecto persegua desde un principio unos objetivos que exigan una cantidad de
trabajo que exceda ampliamente las expectativas y la disponibilidad de tiempo de esta
asignatura, por eso, como explican los primeros captulos de esta memoria, el trabajo se
fragment en etapas diseadas para abordar el desarrollo de partes y caractersticas
concretas del robot, obteniendo al final de cada una un resultado visible y evaluable. Con
este sistema, se determin que los objetivos principales de este proyecto corresponderan a
las tres primeras etapas de su desarrollo global, y a partir de de ah se ira ampliando el
proyecto con tantos objetivos de las etapas siguientes como el tiempo permitiera. No
obstante, llegados al final de la asignatura ha quedado patente que el trabajo de estas tres
primeras etapas fue subestimado, pues la consecucin de sus objetivos solamente ha dejado
tiempo para comenzar el desarrollo de uno de los puntos de la cuarta etapa, el diseo de la
placa de alimentacin, sin llegar siquiera a completarlo. A pesar de ello, la consecucin de
estos objetivos principales ya supone un logro para el proyecto, pues su desarrollo ha
resultado ser una tarea ardua y compleja que ha exigido una dedicacin muy superior a lo
esperado.
La parte grata de esta circunstancia es que se han adquirido montones de conocimientos de
gran valor sobre todas la materias y procesos incluidos en este trabajo. Se concluye
entonces que se han asumido con xito todos los objetivos principales de este proyecto,
incluyendo los que se referan a la consideracin del mismo como herramienta de
aprendizaje y preparacin para el futuro profesional:
Se ha aprendido a desarrollar aplicaciones que requieran el uso de
microcontroladores PIC, incluyendo los recursos electrnicos y las tcnicas
necesarias para programarlos.
Se ha aprendido a programar y gobernar un sistema de comunicacin electrnica
basada en el bus I2C.
Se ha adquirido experiencia y habilidad en la soldadura de circuitos electrnicos de
dificultad avanzada.
Se han asumido valiosos mtodos y herramientas tiles para el diseo de estructuras
mecnicas.
Se han adquirido grandes conocimientos, experiencia y habilidad en la construccin
y montaje de mecanismos y piezas articuladas.
Se ha aprendido a disear circuitos y serigrafas usando OrCAD Capture y OrCAD
Layout.
Se ha aprendido a dominar el lenguaje ensamblador de la familia 16F de Michochip,
incluyendo la programacin de algunos de los principales mdulos perifricos y del
sistema interruptivo de estos dispositivos.
Se han adquirido tcnicas de programacin que permiten el control dinmico de
servomotores pequeos mediante seales PWM.
Pgina 128

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


Se han adquirido hbitos de programacin y ordenacin de las variables y funciones
de un programa en ensamblador que evitan los problemas tpicos de mal
funcionamiento derivados de estrategias algortmicas deficientes.
Se han asumido tcnicas de bsqueda, gestin y ordenacin de la informacin, as
como de su correcta expresin en forma de documentos tcnicos.
Se han adquirido valiosos conocimientos sobre robtica general, locomocin de
robots y desarrollo de aplicaciones de este campo.
Y muchos ms.
Adems, todo este aprendizaje y la correcta finalizacin de esta primera etapa del proyecto
permitirn encarar desde una posicin mucho ms cmoda el gran trabajo que queda an
por hacer. Y ese trabajo comenzar lo antes posible con el desarrollo de la etapa cuatro,
sobre todo en lo referente a la placa de alimentacin y la inclusin de la batera, dos
parmetros que dotarn al robot de autonoma energtica y harn que ste pueda prescindir
de su actual cordn umbilical. Tambin ser un cambio inminente, en cuanto se renan los
fondos para asumir el coste, la sustitucin de los actuales servomotores Tibia y Fmur
por otros ms potentes, mejorando as la estabilidad del robot, sus propiedades motrices y
su capacidad de carga.
Como ltimo punto de esta conclusin y de esta memoria descriptiva, quisiera dejar en el
aire una propuesta dirigida a cualquier persona interesada en realizar un proyecto de este
tipo, o incluso en seguir los pasos de ste mismo. La propuesta consiste en desarrollar un
sistema de comunicacin para que varios robots como ste se sincronicen o se organicen
para realizar tareas en colaborativas. Si se coge como modelo el sistema desarrollado para
MIHRO, su bus interno tendra que extenderse a un canal de comunicacin inalmbrico
que le permitira interactuar con las variables de control internas de otro robot como l,
permitiendo a ambos compartir informacin procedente de sus respectivos sistemas
sensoriales, enviarse rdenes o variables de control, etc. De esta forma se extendera la
capacidad de deteccin un robot a la del otro, permitiendo a ambos colaborar para realizar
tareas como sostener y transportar objetos ms pesados o menos manejables, explorar
zonas ms amplias o realizar tareas de seguimiento, vigilancia o rastreo cubriendo varios
puntos de accin o ngulos de visin simultneamente.

Pgina 129

Bibliografa

9 Bibliografa
9.1 Proyectos de Final de Carrera EUPMT
[1]

Carlos Vivancos Gmez, Robot insecte intelligent. Matar, EUPMT 2000.

[2]

Isaac Hernndez Izquierdo, Construcci dun Robot Quadrped. Matar, EUPMT


2002.

[3]

Marc Rivas Capafons, Disseny i creaci dun microbot insect autnom. Matar, EUPMT
2005.

[4]

Keila Belando Baca, Robot hexpode Mordor. Matar, EUPMT 2005.

[5]

Jordi Estrella Domene, Diseo y Construccin de un Hexpodo Autnomo. Matar,


EUPMT 2007.

9.2 Libros
[1]

Joseph L. Jones, Anita M. Flynn, Bruce A. Seiger, Mobile Robots. Inspiration to


Implementation. Segunda edicin. Natick, Massachusetts, A K Peters 1999.

[2]

Jos M Angulo Usategui, Susana Romero Yesa, Ignacio Angulo Martnez,


Microbtica. Tecnologa, aplicaciones y montaje prctico. Segunda edicin. Madrid,
Paraninfo Thomson Learning 2001.

[3]

Jos M Angulo Usategui, Susana Romero Yesa, Ignacio Angulo Martnez,


Microcontroladores PIC. Diseo prctico de aplicaciones. Segunda parte. Madrid, Mc Graw
Hill 2000.

[4]

Jos M Angulo Usategui, Ignacio Angulo Martnez, Microcontroladores PIC. Diseo


prctico de aplicaciones. Primera parte. Tercera edicin. Madrid, Mc Graw Hill 2003.

Pgina 130

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

9.3 Data Sheets y Notas de Aplicacin


[1]

Microchip Technology Inc. AN515. Communicating with the I2C Bus Using the
PIC16C5X. DS00515D. 1993.

[2]

National Semiconductor Corporation. LM78XX Series Voltage Regulators. 1995.

[3]

National Semiconductor Corporation. LM117/LM317A/LM317 3-Terminal


Adjustable Regulator. 1996.

[4]

Microchip Technology Inc. AN578. Use of the SSP Module in the I2C Multi-Master
Environment. DS00578B. 1997.

[5]

Microchip Technology Inc. AN554. Software Implementation of I2C Bus Master.


DS00554C. 1997.

[6]

Vishay Semiconductor GmbH. CNY70. Reflective Optical Sensor with Transistor


Output. 83751. 2000.

[7]

Microchip Technology Inc. PIC16F84A Data Sheet. DS35007B. 2001.

[8]

Maxim Integrated Products. MAX220 MAX249. +5V-Powered, Multichannel


RS-232 Drivers/Receivers. 2001.

[9]

Analog Devices, Inc. AD5263. Quad, 15 V, 256-Position, Digital Potentiometer with


Pin Selectable SPI/I2C. 2003.

[10]

Microchip Technology Inc. PIC16F87/88 Data Sheet. DS30487C. 2005.

[11]

Microchip Technology Inc. PIC16F87/88 Rev. B1 Silicon Errata. DS80171K.


2006.

[12]

Microchip Technology Inc. AN734. Using the PIC Devices SSP and MSSP Modules
for Slave I2C Communication. DS00734B. 2008.

Pgina 131

Bibliografa

9.4 Artculos y otras publicaciones


[1]

Enric Celaya, Jos Luis Albarral. Implementation of a hierarchical walk controller for the
LAURON III hexapod robot. IRI, Institut de Robtica i Informtica Industrial
(UPC-CSIC), 2003.

[2]

Nstor Sorli Martnez de Oraa, Pedro Fernndez Gmez. Robot Hexpodo. Escola
Universitria Politcnica de Vilanova i la Geltr (UPC), 2003.

[3]

Sergi Gomis Gasc (Club de Robtica Autnoma). Curs de Robtica (rev.2).


EUPMT, 2006.

[4]

A. Schneider, U. Schmucker. Force Sensing for Multi-legged Walking Robots: Theory and
Experiments Part 1: Overview and Force Sensing.
(Fuente: Mobile Robots, Moving Intelligence. Jonas Buchli, 2006.)

[5]

Alejandro Arango Saavedra, Hctor Fabio Satizbal Meja, Humberto Loaiza


Correa. Diseo e implementacin de un robot mvil hexpodo. Universidad del Valle,
Colombia, 2006.

[6]

Shota Fujii, Kenji Inoue, Tomohito Takubo, Tatsuo Arai. Climbing up onto
Steps for Limb Mechanism Robot ASTERISK. Universidad de Osaka, 2006.

[7]

Alberto Snchez Espinosa, Carlos Lpez Cardelo. Diseo de un Robot Hexpodo.


Hardware y Software de Control. Escola Universitria Politcnica de Vilanova i la
Geltr (UPC).

9.5 Pginas web


[1]

CRA (Club de Robtica Autnoma) de la EUPMT.


http://www.eupmt.es/cra

[2]

Farnell, distribuidor de productos electrnicos a nivel mundial.


http://es.farnell.com

[3]

RS-Amidata, distribuidor de productos electrnicos a nivel mundial.


http://es.rs-online.com/web

Pgina 132

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


[4]

Microchip, fabricante de los microcontroladores PIC.


http://www.microchip.com

[5]

Futaba, fabricante de servomotores de modelismo.


http://www.futaba-rc.com

[6]

WinPic800, software empleado para programar los PICs.


http://www.winpic800.com

[7]

Google SketchUp, software empleado para el diseo mecnico en 3D.


http://sketchup.google.com

[8]

EditPlus 2, software empleado para escribir el cdigo fuente.


http://www.editplus.com

[9]

Cadence OrCAD, paquete de software empleado para disear la electrnica.


http://www.cadence.com/orcad

[10]

Mundobot, web dedicada al robot Melanie.


http://mundobot.com/projects/melanie/spmelanie

[11]

Mike Smyths Hexapod Robot.


http://home.ctlnet.com/~robotguy67/hexapod/hexapod

[12]

Kojis Hexapod Robot.


http://www2.plala.or.jp/k_y_yoshino/6legs/6legs_top_e

[13]

Micromagic Systems, web del creador de robots Matt Denton.


http://www.micromagicsystems.com

[14]

Vdeos de los robots de Matt Denton.


http://www.youtube.com/user/winchymatt

[15]

Projekt Marvin.
http://www.vreal.de

[16]

Trossen Robotics, robot Phoenix.


http://forums.trossenrobotics.com/showthread.php?t=1352

[17]

Trossen Robotics, robot Oxyopus.


http://forums.trossenrobotics.com/gallery/showimage.php?i=101

[18]

Robot Bill-Ant.
http://biorobots.cwru.edu/projects/billant

Pgina 133

Bibliografa

[19]

Robot RHex.
http://www.rhex.web.tr

[20]

Robot Arachnobot.
http://www.pdjinc.com/arachno

[21]

Arai Lab., Universidad de Osaka, robot Asterisk.


http://www-arailab.sys.es.osaka-u.ac.jp/research/limbgroup/e_index

[22]

IRI (Institut de Robtica i Informtica Industrial, UPC), robot Lauron III.


http://www-iri.upc.es/groups/arobots/legged_robots/robots

[23]

Robots Argentina, completa web sobre robtica.


http://robots-argentina.com.ar/robots

[24]

Robot AMOS-WD06
http://www.chaos.gwdg.de/~poramate/AMOSWD06

[25]

Walking Machines, gran catlogo de robots caminadores


http://www.walking-machines.org

[26]

Robotis, fabricante del kitt Biloid.


http://www.robotis.com

[27]

Robot Shop, tienda especializada en materiales para la robtica.


http://www.robotshop.ca

[28]

SuperRobtica, tienda especializada en materiales para la robtica


http://www.superrobotica.com

Pgina 134

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

[Pgina en blanco, Contraportada]

Pgina 135

Bibliografa
[Pgina en blanco, para k anexos vaya en pgina par]

Pgina 136

Ingeniera Tcnica Industrial: Especialidad Electrnica Industrial

PROYECTO MIHRO
(MOBILE INTELLIGENT HEXAPOD ROBOT)
VOLUMEN II

IGNACIO PEDROSA LOJO


JULIN HORRILLO TELLO

OTOO 2008

VOLUMEN II
PRESUPUESTO

IGNACIO PEDROSA LOJO


JULIN HORRILLO TELLO

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

ndice de presupuesto

Desglose de material ______________________________________________ VI

Mediciones _____________________________________________________VII

Cuadro de precios ________________________________________________VII

Presupuesto parcial ______________________________________________ VIII

Presupuesto global _______________________________________________ IX

Pgina V

Presupuesto

1 Desglose de material
Concepto

Cantidad

Precio Unitario
()

Total
()

1
1
1
13
1
12
12
6
2
1

26,00
22,00
15,00
2,50
2,50
0,60
0,20
7,20
5,70
5,60

26,00
22,00
15,00
32,50
2,50
7,20
2,40
43,20
11,40
5,60

12
22
1
1

1,25
10,00
3,00
8,50

15,00
220,00
3,00
8,50

6
4
2
1
10
2
1
2
10
8
76
32
26
13
5
87
12
-

4,89
5,29
3,52
3,79
5,32
3,61
1,22
0,19
0,38
0,16
0,22
-

29,34
21,16
7,04
3,79
53,21
7,22
1,22
0,39
0,43
3,04
12,16
1,59
1,38
2,86
3,61
27,57
14,48
1,32

Componentes mecnicos
Chapa de aluminio 25mm (50x50cm)
Chapa de aluminio 2mm (50x50cm)
Chapa de aluminio 1mm (30x30cm)
Tornillera (20 unidades)
Tubo de aluminio para separadores
Tacos de goma antideslizante
Muelles
Tubos de latn cromado
Araldit Standard
Araldit Rpido
Componentes electromecnicos
Sensores de contacto Mini-bumper
Servos Standard Futaba S3003
Teclado numrico
Pad videoconsola
Componentes electrnicos
Placa de cobre de doble cara
Placa de topos de Baquelita (100x170)
Estao para soldadura 1mm
Estao para soldadura 0,5mm
PIC16F88
PIC16F84A
MAX232
L7805
Zcalos
Xtal oscilador 20MHz
Resistencias
Condensadores
LEDs
Pulsadores
Interruptores
Conectores
Cables (paquetes de 1 metro)
Otros (miscelnea)

Subtotal

606,11

Pgina VI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2 Mediciones
Ref.
1
2
3
4
5
6
7
8
9
10
11
12

Descripcin

Partes iguales

Horas de proyectista destinadas a la bsqueda de


informacin y antecedentes
Horas de proyectista destinadas al diseo electrnico y
mecnico
Horas de proyectista destinadas a la fabricacin y
montaje de los elementos mecnicos y electrnicos
Horas de proyectistas destinadas al desarrollo del
software
Horas de proyectista destinadas a la puesta en marcha
de todo el conjunto
Horas de proyectista destinadas a la elaboracin escrita
de la memoria del proyecto
Soporte para el almacenamiento de informacin y
copias de seguridad (CDs)
Impresin de los documentos del proyecto.
Impresin de documentos de soporte y versiones
preliminares
Encuadernacin de los documentos del proyecto.
Desplazamientos varios (Onda Radio BCN)
Minutos de conexin telefnica a Internet

30
100
70
50
30
20
6
255
400
2
1
1800

3 Cuadro de precios
Ref.

Unidades

Precio unitario ()

1
2
3
4
5
6
7
8
9
10
11
12

Horas
Horas
Horas
Horas
Horas
Horas
CDs
Hojas en calidad
Hojas en borrador
Encuadernacin
Billetes de Cercanas (T10 3 zonas)
Minutos

25
50
25
50
50
25
0,5
0,45
0,15
7
19,80
0,03

Pgina VII

Presupuesto

4 Presupuesto parcial
Ref.
1
2
3
4
5
6
7
8
9
10
11
12

Partes
Precio
Importe
iguales unitario ()
()

Descripcin
Horas de proyectista destinadas a la
bsqueda de informacin y antecedentes
Horas de proyectista destinadas al diseo
electrnico y mecnico
Horas de proyectista destinadas a la
fabricacin y montaje de los elementos
mecnicos y electrnicos
Horas de proyectistas destinadas al
desarrollo del software
Horas de proyectista destinadas a la
puesta en marcha de todo el conjunto
Horas de proyectista destinadas a la
elaboracin escrita de la memoria del
proyecto
Soporte para el almacenamiento de
informacin y copias de seguridad (CDs)
Impresin de los documentos del
proyecto.
Impresin de documentos de soporte y
versiones preliminares
Encuadernacin de los documentos del
proyecto.
Desplazamientos varios (Onda Radio
BCN)
Minutos de conexin telefnica a Internet

Subtotal

30

25

750

100

50

5.000

70

25

1.750

50

50

2.500

30

50

1.500

20

25

500

0,5

255

0,45

114,75

400

0,15

60

14

19,80

19,80

1800

0,03

54

12.265,55

Pgina
VIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

5 Presupuesto global
Concepto

Cantidad ()

Total Material

606,11

Total Presupuesto Parcial

12.265,55

Total

12.871,66

IVA (16%)

2.059,47

Total Presupuesto

14.931,13

La elaboracin del presente proyecto genera unos gastos de catorce mil novecientos treinta
y uno con trece euros.

Pgina IX

VOLUMEN II
PLANOS

IGNACIO PEDROSA LOJO


JULIN HORRILLO TELLO

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

ndice de planos
1

Esquemticos ___________________________________________________ IV
1.1 Esquemtico de las placas Patas __________________________________ IV
1.2 Esquemtico de la placa Entrenadora _______________________________ VI
1.3 Esquemtico de la placa de Alimentacin ___________________________ VIII
1.4 Esquemtico de la programadora PIPO2 _____________________________ X
Serigrafas ______________________________________________________XII
2.1 Placa Entrenadora, TOP _________________________________________ XII
2.2 Placa Entrenadora, BOTTOM ___________________________________ XIII
2.3 Placa Patas, grupo A, TOP ____________________________________ XIV
2.3.1 Escala 1:1______________________________________________ XIV
2.3.2 Escala 3:1______________________________________________ XIV
2.4 Placa Patas, grupo A, BOTTOM _________________________________ XV
2.4.1 Escala 1:1_______________________________________________ XV
2.4.2 Escala 3:1_______________________________________________ XV
2.5 Placa Patas, grupo A, SST _____________________________________ XVI
2.5.1 Escala 1:1______________________________________________ XVI
2.5.2 Escala 3:1______________________________________________ XVI
2.6 Placa Patas, grupo B, TOP ___________________________________ XVII
2.6.1 Escala 1:1_____________________________________________ XVII
2.6.2 Escala 3:1_____________________________________________ XVII
2.7 Placa Patas, grupo B, BOTTOM _______________________________ XVIII
2.7.1 Escala 1:1_____________________________________________ XVIII
2.7.2 Escala 3:1_____________________________________________ XVIII
2.8 Placa Patas, grupo B, SST _____________________________________ XIX
2.8.1 Escala 1:1______________________________________________ XIX
2.8.2 Escala 3:1______________________________________________ XIX
Planos mecnicos ________________________________________________ XX
3.1 P00: Trax Base _______________________________________________ XX
3.2 P01: Tapa Superior del Trax ___________________________________ XXII
3.3 P02: Tapa Inferior del Trax ____________________________________ XXIV
3.4 P03: Conector Cadera-Trax y P04: Conector Cadera-Fmur ___________ XXVI
3.5 P05: Fmur _______________________________________________ XXVIII
3.6 P06: Parte Fija de la Tibia ______________________________________ XXX
3.7 P07: Soporte Superior del Pi y P08: Parte Mvil de la Tibia ___________ XXXII
3.8 P09: Pi y P10: Cuello 1 _____________________________________ XXXIV
3.9 P11: Hombro Izquierdo y P12: Hombro Derecho _________________ XXXVI

Pgina III

Planos

1 Esquemticos

1.1 Esquemtico de las placas Patas

Pgina IV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina V

Planos

1.2 Esquemtico de la placa Entrenadora

Pgina VI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina VII

Planos

1.3 Esquemtico de la placa de Alimentacin

Pgina
VIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina IX

Planos

1.4 Esquemtico de la programadora PIPO2

Pgina X

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina XI

Planos

2 Serigrafas
2.1 Placa Entrenadora, TOP

Pgina XII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2.2 Placa Entrenadora, BOTTOM

Pgina
XIII

Planos

2.3 Placa Patas, grupo A, TOP

2.3.1 Escala 1:1

2.3.2 Escala 3:1

Pgina
XIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2.4 Placa Patas, grupo A, BOTTOM

2.4.1 Escala 1:1

2.4.2 Escala 3:1

Pgina XV

Planos

2.5 Placa Patas, grupo A, SST

2.5.1 Escala 1:1

2.5.2 Escala 3:1

Pgina
XVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2.6 Placa Patas, grupo B, TOP

2.6.1 Escala 1:1

2.6.2 Escala 3:1

Pgina
XVII

Planos

2.7 Placa Patas, grupo B, BOTTOM

2.7.1 Escala 1:1

2.7.2 Escala 3:1

Pgina
XVIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

2.8 Placa Patas, grupo B, SST

2.8.1 Escala 1:1

2.8.2 Escala 3:1

Pgina
XIX

Planos

3 Planos mecnicos

3.1 P00: Trax Base

Pgina XX

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXI

Planos

3.2 P01: Tapa Superior del Trax

Pgina
XXII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXIII

Planos

3.3 P02: Tapa Inferior del Trax

Pgina
XXIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXV

Planos

3.4 P03: Conector Cadera-Trax y P04: Conector


Cadera-Fmur

Pgina
XXVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXVII

Planos

3.5 P05: Fmur

Pgina
XXVIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXIX

Planos

3.6 P06: Parte Fija de la Tibia

Pgina
XXX

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXXI

Planos

3.7 P07: Soporte Superior del Pi y P08: Parte


Mvil de la Tibia

Pgina
XXXII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXXIII

Planos

3.8 P09: Pi y P10: Cuello 1

Pgina
XXXIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXXV

Planos

3.9 P11: Hombro Izquierdo y P12: Hombro


Derecho

Pgina
XXXVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

Pgina
XXXVII

VOLUMEN II
CDIGO FUENTE

IGNACIO PEDROSA LOJO


JULIN HORRILLO TELLO

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

ndice de cdigo fuente


1

Cdigo fuente de la pata 3 _________________________________________ IV


Fuses de configuracin _____________________________________________ V
Variables en memoria _____________________________________________ V
Vectores ______________________________________________________ VII
Configuracin de puertos y registros _________________________________ VII
Inicializacin de variables ________________________________________ VIII
Bucle principal __________________________________________________ IX
Rutina "ciclo" ___________________________________________________ IX
Rutina "movs" ___________________________________________________ X
Rutina "fluc" __________________________________________________ XIX
Rutina "find_m3" _______________________________________________ XX
Rutina "delay" _________________________________________________ XXI
Comunicacin I2C Slave ________________________________________ XXII
Servicio de interrupcin ________________________________________ XXVI

Cdigo fuente de la placa Master _______________________________ XXVIII


Fuses de configuracin _________________________________________ XXIX
Variables en memoria __________________________________________ XXIX
Vectores ____________________________________________________ XXXI
Configuracin de puertos y registros ______________________________ XXXI
Inicializacin de variables ______________________________________ XXXII
Bucle principal ______________________________________________ XXXIII
Rutina de accin de botones ___________________________________ XXXIV
Rutina "led1" __________________________________________________ XLI
Rutina "led2" __________________________________________________ XLI
Rutina "led3" _________________________________________________ XLII
Rutina "led4" ________________________________________________ XLIII
Rutina "led5" ________________________________________________ XLIII
Rutina "delay" ________________________________________________ XLIV
Comunicacin I2C Master _______________________________________ XLV
Servicio de interrupcin __________________________________________ LII

Pgina III

Cdigo fuente

1 Cdigo fuente de la pata 3


Este es un cdigo fuente en fase de pruebas. Su versin definitiva se adjunta en el CD.

Pgina IV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;____________________________________________________________________
;------------------------- Encabezado ------------------------------;
;
Archivo:
pata_iglu_R3.asm
;
Autor:
Ignacio Pedrosa Lojo
;
Versin:
1.00
;
;
Descripcin: Programa de control y comunicacin de la pata 3
;
Incluye el cdigo para la gestin de los motores,
;
las variables de control del movimiento, la rutina
;
de retraso adaptada al servo Futaba S3003, la
;
gestin de la comunicacin I2C en modo esclavo y la
;
gestin del Sistema Interruptivo.
;
; Ensamblado mediante Microchip Assembler v5.00 (MPASM)
; El archivo "P16F88.inc" proporcionado por Microchip debe ser
; incluido en el directorio de trabajo en caso de no usar MPASM v5.00
;
;____________________________________________________________________
;-------------------------------------------------------------------LIST
P=16F88
INCLUDE
"P16F88.INC"
; Registro 1 de Configuracin
__CONFIG
_CONFIG1, _CP_OFF
& _CCP1_RB3
& _DEBUG_OFF
& _WRT_PROTECT_OFF
& _CPD_OFF
& _LVP_OFF
& _BODEN_ON
& _MCLR_ON
& _PWRTE_ON
& _WDT_OFF
& _HS_OSC

;
;
;
;
;
;
;
;
;
;

CCP1 en el pin RB3


modo depuracin OFF
Proteccin de escritura OFF
Code protection OFF
Low voltage programming OFF
Brown-out Reset enabled
Botn de RESET activado (!)
Power-Up timer enabled
Watch Dog Timer OFF
HS Oscillator Mode

; Registro 2 de Configuracin
__CONFIG
_CONFIG2, _IESO_OFF
& _FCMEN_OFF
;--------------------- Variables en memoria ------------------------cont
del
cont2
del2
cont3
del3
m1
m2
m3
action
w_temp
stat_t
pcl_t
mot
mot2
fst
speed
centro
rango
zanco
altura
m1_max
m1_min
m2_max

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

h'20'
h'21'
h'22'
h'23'
h'24'
h'25'
h'26'
h'27'
h'28'
h'29'
h'2A'
h'2B'
h'2C'
h'2D'
h'2E'
h'2F'
h'30'
h'31'
h'32'
h'33'
h'34'
h'35'
h'36'
h'37'

Pgina V

Cdigo fuente
m2_min
m3_max
m3_min
umax_m1
umin_m1
usup_m1
uinf_m1
usup_m2
umed_m2
uinf_m2
upos_m3
mot3
meta
var
comp
mode
r_m1
r_m2
r_m3
mot4

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

h'38'
h'39'
h'3A'
h'3B'
h'3C'
h'3D'
h'3E'
h'3F'
h'40'
h'41'
h'42'
h'43'
h'44'
h'45'
h'46'
h'47'
h'48'
h'49'
h'4A'
h'4B'
; hasta 7Fh

;
;
;
;
;
;
;
;
;

la variable 'action' contiene 8 banderas:


action,0 : 1= Go
0= Stop
action,1 : 1= Atrs
0= Delante
action,2 : 1= Giro Izquierda
0= No Giro
action,3 : 1= Giro Derecha
0= No Giro
action,4 : 1= Rotacin Izq.
0= No Rotacin
action,5 : 1= Rotacin Dch.
0= No Rotacin
action,6 : 1= Ida del paso
0= No Ida
action,7 : 1= Vuelta del paso
0= No vuelta

;
;
;
;
;
;
;
;
;

la variable
mode,0 : 1=
mode,1 : 1=
mode,2 : 1=
mode,3 : 1=
mode,4 : 1=
mode,5 : 1=
mode,6 : 1=
mode,7 : 1=

;
;
;
;
;
;
;
;
;

la variable 'mot' contiene 8 banderas:


mot,0 = LED indicador
mot,1 = Recibir Speed / enviar mot2 (I2C)
mot,2 = Recibir Centro / enviar mode (I2C)
mot,3 = Recibir Rango / enviar Zanco (I2C)
mot,4 = rutina ciclo
mot,5 = rutina movs
mot,6 = posicionamiento inicial
mot,7 = secuencia de levantamiento

;
;
;
;
;
;
;
;
;

la variable 'mot2' contiene 8 banderas:


mot2,0 = Etapa 0
mot2,1 = Etapa 1
mot2,2 = Etapa 2
mot2,3 = Etapa 3
mot2,4 = Etapa 4
mot2,5 = Etapa 5
mot2,6 = Etapa 6
mot2,7 = Etapa 7

'mode' contiene 8 banderas:


Modo Dinmico
0= Modo Esttico
Modo levantamiento
0= No Modo
Modo Cojer
0= No Modo
Modo Inicial
0= No Modo
Modo Programacin
0= No Modo
Obstculo detec.
0= No Obstculo
0=
0=

Pgina VI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;
;
;
;
;
;
;
;
;

la variable 'mot3' contiene 8 banderas:


mot3,0 = Fluctuacin terminada
mot3,1 = m1 terminado
mot3,2 = m2 terminado
mot3,3 = m3 terminado
mot3,4 = estado anterior en m1,3
mot3,5 = flag de aplicar el factor corrector de m3
mot3,6 = Recibir Zanco / enviar altura (I2C)
mot3,7 = Recibir Altura

;
;
;
;
;
;
;
;
;

la variable 'mot4' contiene 8 banderas:


mot4,0 = Recibir mode
mot4,1 = Recibir action
mot4,2 = Recibir r_m1
mot4,3 = Recibir r_m2
mot4,4 = Recibir r_m3
mot4,5 =
mot4,6 =
mot4,7 =

;---------------- Vectores de inicio e interrupcin ----------------ORG


GOTO
ORG
GOTO
ORG

0x00
inicio
0x04
isr
0X05

;-------------- Configuracin de puertos y registros ---------------inicio BSF


MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
BCF

STATUS,RP0
b'00000000'
ANSEL
b'10110000'
TRISA
b'00110011'
TRISB
b'11000110'
OPTION_REG
b'11000000'
INTCON
b'00001001'
PIE1
b'00000000'
PIE2
d'30'
SSPADD
SSPSTAT,SMP
SSPSTAT,CKE

BCF
MOVLW
MOVWF
MOVLW
MOVWF

STATUS,RP0
b'00010001'
T1CON
b'00110110'
SSPCON

MOVLW
MOVWF
MOVLW
MOVWF

b'00000000'
PIR1
b'00000000'
PIR2

; banco mem 1
; ADC desactivado
; PORTA (0=output, 1=input)
;
;
;
;
;

PORTB (0=output, 1=input)


Pull-ups Off y configuracion Timer0 con
preescaler 1:128 (aunque timer 0 no se usa)
se desenmascara la interrupccin de perifricos,
y general y se =0 los flags

; se desenmasacara la interrucin de SSP y Timer1


;
;
;
;
;

perifericos 2 queda enmascarado


h'1E', b'00011110'
esta ser la direccin de mi pata. El bit0 es R/W.
en operacin I2C se mantiene a 0
en operacin I2C se mantiene a 0

;
;
;
;
;
;
;

banco mem 0
Configuracin y encendido del Timer1
preescaler 1:2, segn el clock interno
configuracin del mdulo SSP
SSPCON,5 = enable bit
SSPCON,4 = enable clock
SSPM<3:0> = 0110 Slave mode, 7-bit

; De momento se borran todas las banderas


; De momento se borran todas las banderas

Pgina VII

Cdigo fuente
;---------------------- Inicializaciones ---------------------------CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF

PORTA
PORTB
SSPBUF
cont
del
cont2
del2
cont3
del3
mot
mot2
mot3
mot4
action
w_temp
stat_t
pcl_t
umax_m1
umin_m1
usup_m1
uinf_m1
usup_m2
umed_m2
uinf_m2
upos_m3
meta
var
comp
mode

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

d'2'
speed
d'135'
centro
d'55'
rango
d'130'
zanco
d'210'
altura

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

d'210'
m1_max
d'60'
m1_min
d'220'
m2_max
d'20'
m2_min
d'250'
m3_max
d'15'
m3_min

; M1 tope superior

BSF
BSF
BSF
MOVLW
MOVWF

mot,6
mot2,0
PORTB,2
d'250'
fst

; bandera de posicionamiento inicial


; comenzamos en la etapa 0
; Led de estado ON
; +o- = 1 sec para posicionar la pata
; al principio

MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF

centro,W
m1
m2_max,W
m2
m3_min,W
m3

; m1 empieza en centro

; velocidad inicial = 2
; centro incial = 135
; rango incial = 55
; zanco incial = 100
; altura incial = 210

; M1 tope inferior
; M2 tope superior
; M2 tope inferior
; M3 tope superior
; M3 tope inferior

; m2 empieza en m2_max
; m3 empieza en m3_min

Pgina
VIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF

centro,W
r_m1
centro,W
r_m2
centro,W
r_m2

; r_m1 empieza en centro


; r_m2 empieza en centro
; r_m3 empieza en centro

;--------------- Inicio del programa principal----------------------;


Est compuesto por cinco mdulos pincipales:
;
rutina "bucle": permanece a la espera de que se activen los
;
flags de las rutinas "ciclo" y "movs"
;
rutina "ciclo": gestinona los motores mandando un puls PWM.
;
Puede llegar a durar ms de 6 ms
;
rutina "movs": gestiona la forma en que fluctan
;
dinmicamente las variables que goviernan el robot
;
rutina "fluc": permite que una variable se aproxime
;
lenamente, a una meta mayor o menor.
;
rutina "m3_find": permite aplicar un factor de correccin al
;
movimiento le la tibia que hace que el pi se mueva en lnea
;
recta.
;
"movs" se acctiva cuando acaba "ciclo" y "ciclo" se activa cada 20ms.
;-------------------------------------------------------------------;------------------- Bucle Principal -------------------------------bucle BTFSC
CALL
BTFSC
CALL
GOTO

mot,4
ciclo
mot,5
movs

; identificador de "ciclo"

bucle

; y vuelve a empezar el bucle.

; identificador de "movs"

;-------------------- Rutina de ciclo ------------------------------ciclo MOVF


MOVWF
BSF
CALL
BCF

m1,W
del
PORTA,1
delay
PORTA,1

;
;
;
;
;

carga
carga
RA1 =
llama
RA1 =

m1 en W
W en "del"
1
la rutina de retardo
0

MOVF
MOVWF
BSF
CALL
BCF

m2,W
del
PORTA,2
delay
PORTA,2

;
;
;
;
;

carga
carga
RA2 =
llama
RA2 =

m2 en W
W en "del"
1
la rutina de retardo
0

MOVF
MOVWF
BSF
CALL
BCF

m3,W
del
PORTA,3
delay
PORTA,3

;
;
;
;
;

carga
carga
RA3 =
llama
RA3 =

m2 en W
W en "del"
1
la rutina de retardo
0

BCF
BSF

mot,4
mot,5

; bajo bandera de ciclo


; subo bandera de movs

RETURN

Pgina IX

Cdigo fuente
;------------------------ RUTINA DE MOVIMIENTO ---------------------;____________________________________________________________________
;--------------------------- Limitadores ---------------------------movs

com1

com2

MOVF
SUBLW
BTFSS
CLRF

speed,W
d'10'
STATUS,C
speed

;
;
;
;

si speed
10-speed
si speed
si speed

MOVF
SUBLW
BTFSC
GOTO
MOVLW
MOVWF

rango,W
d'125'
STATUS,C
com1
d'125'
rango

;
;
;
;

si rango > 125; rango = 125


125-rango en W
si rango < 125; 125-rango > 0; C=1; otra cosa
si rango > 125; 125-rango < 0; C=0; Solucin

MOVF

rango,W

ADDWF
BTFSS
GOTO
MOVF
SUBWF
MOVWF

centro,W
STATUS,C
com2
rango,W
m1_max,W
centro

;
;
;
;
;

MOVF
ADDWF
SUBWF
BTFSC

rango,W
centro,W
m1_max,W
STATUS,C

GOTO

com3

MOVF
rango,W
SUBWF m1_max,W
MOVWF centro
com3

com4

MOVF

rango,W

SUBWF
BTFSC
GOTO
MOVF
ADDWF
MOVWF

centro,W
STATUS,C
com4
rango,W
m1_min,W
centro

MOVF
SUBWF
SUBWF
BTFSS

rango,W
centro,W
m1_min,W
STATUS,C

GOTO

com5

MOVF
rango,W
ADDWF m1_min,W
MOVWF centro
com5

MOVF
SUBLW
SUBWF
BTFSS

m2_min,W
d'250'
altura,W
STATUS,C

GOTO

com6

MOVF
m2_min,W
SUBLW d'250'
MOVWF altura

> 10; speed = 0


en W
< 10; 10-speed > 0; C=1; otra cosa
> 10; 10-speed < 0; C=0; Solucin

; rango = 125
si en centro+rango ha habido un salto de 255 a 0;
centro+rango = m1_max
centro+rango en W
si en centro+rango ; C=0; otra cosa
si en centro+rango ; C=1; solucin

; centro = m1_max-rango
;
;
;
;
;
;
;

si centro+rango > m1_max; centro = m1_max-rango


centro+rango en W
m1_max-(centro+rango) en W
si centro+rango>m1_max; m1_max-(centro+rango) < 0;
C=0: solucin
si centro+rango<m1_max; m1_max-(centro+rango) > 0;
C=1: otra cosa

; centro = m1_max-rango
;
;
;
;
;

si en centro-rango ha habido un salto de 0 a 255;


centro-rango=m1_min
centro-rango en W
si en centro-rango C=0; solucin
si en centro-rango C=1; otra cosa

; centro = m1_min+rango
;
;
;
;
;
;
;

si centro-rango < m1_min; centro = m1_min+rango


centro-rango en W
m1_min-(centro-rango) en W
si centro-rango>m1_min; m1_min-(centro-rango) < 0;
C=0: otra cosa
si centro-rango<m1_min; m1_min-(centro-rango) > 0;
C=1: solucin

; centro = m1_min+rango
;
;
;
;
;
;
;

si altura > 250 - m2_min; altura = 250-m2_min


250 - m2_min
altura - (250-m2_min)
si altura<(250-m2_min); altura - (250-m2_min) < 0;
C=0: otra cosa
si altura>(250-m2_min); altura - (250-m2_min) > 0;
C=1: solucin

; altura = 250-m2_min

Pgina X

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

com6

BCF
RRF
ADDLW
SUBWF
BTFSC

STATUS,C
rango,W
d'5'
zanco,W
STATUS,C

GOTO

com7

RRF
rango,W
ADDLW d'5'
MOVWF zanco
com7

MOVF

altura,W

SUBLW
ADDWF
SUBWF
BTFSC

d'250'
zanco,W
m2_max,W
STATUS,C

GOTO

umbral

MOVF
SUBLW
ADDWF
MOVWF

m2_max,W
d'250'
zanco,W
altura

;
;
;
;
;
;
;
;

borro el carry para rotar


si zanco < rango/2 + 5; zanco = rango/2 + 5
5 + rango/2
zanco - (5 + rango/2)
si zanco>(5 + rango/2); zanco - (5 + rango/2) > 0;
C=1: otra cosa
si zanco<(5 + rango/2); zanco - (5 + rango/2) < 0;
C=0: Solucin

; zanco = 5 + rango/2
;
;
;
;
;
;
;

si 250 - altura + zanco > m2_max; altura =


= 250 - m2_max + zanco
250 - altura
zanco + (250 - altura)
m2_max - (zanco + (250 - altura))
si m2_max > (zanco + (250 - altura));
m2_max - (zanco + (250 - altura)) > 0; C=1; otra

cosa
; si m2_max < (zanco + (250 - altura));
; m2_max-(zanco + (250 - altura)) < 0: C=0; solucin
; 250 - m2_max
; zanco + (250-m2_max)
; altura = zanco + (250-m2_max)

;--------------------------- Umbrales ------------------------------umbral MOVF


rango,W
ADDWF centro,W
MOVWF umax_m1

; centro + rango
; umax_m1 = centro + rango

MOVF
rango,W
SUBWF centro,W
MOVWF umin_m1

; centro - rango
; umin_m1 = centro - rango

BCF
RRF
ADDWF
MOVWF

STATUS,C
rango,W
centro,W
usup_m1

;
;
;
;

Borro Carry (no puede haber carry!)


roto a la derecha para /2(con carry se suma 128!)
centro + rango/2
usup_m1 = centro + rango/2

BCF
RRF
SUBWF
MOVWF

STATUS,C
rango,W
centro,W
uinf_m1

;
;
;
;

Borro Carry (no puede haber carry)


roto a la derecha para /2(con carry se suma 128!)
centro - rango/2
uinf_m1 = centro - rango/2

MOVF
altura,W
SUBLW d'250'
MOVWF uinf_m2

; 250 - altura
; uinf_m2 = 250 - altura

MOVF
zanco,W
ADDWF uinf_m2,W
MOVWF usup_m2

; uinf_m2 + zanco
; usup_m2 = uinf_m2 + zanco

BCF
RRF
SUBWF
MOVWF

;
;
;
;

STATUS,C
rango,W
usup_m2,W
umed_m2

Borro Carry (no puede haber carry)


roto a la derecha para /2(con carry se suma 128!)
usup_m2 - rango/2
umed_m2 = usup_m2 - rango/2

Pgina XI

Cdigo fuente
;--------------------- Posicionamiento inicial ---------------------BTFSS
GOTO
BTFSC
GOTO
una_vez
MOVF
MOVWF
MOVF
MOVWF
MOVF
MOVWF
DECFSZ
GOTO
BSF
GOTO

mot,6
et0
mot,7
ini0

; flag de primer ciclo


; si no estoy en primer ciclo voy a etapa 0
; flag de secuencia de levantamiento

centro,W
m1
m2_max,W
m2
m3_min,W
m3

; m1 empieza en centro

fst,F
salir
mot,7
salir

; Decrementa fst, cuando sea 0...


; termina la temporizacin inicial
; y comienza la secuendia de levantamiento

; m2 empieza en m2_max
; m3 empieza en m3_min

;------------------------ Inicializacin 0 -------------------------ini0

BTFSS mot2,0
GOTO
ini1

; estoy en etapa 0

MOVLW
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSS
GOTO

d'25'
meta
m3,W
var
d'0'
comp
fluc
var,W
m3
mot3,0
salir

; valor que busca m3 en esta etapa

BCF
CLRF
BSF
GOTO

mot3,0
mot2
mot2,1
salir

; Si m3 ha llegado se borra el flag de llegada


; Y se activa el flag de siguiente etapa

; compensacin de velocidad

; Comprovacin de llegada de m3

;-------------- Inicializacin 1 ------------------------------ini1

BTFSS mot2,1
GOTO
salir

; estoy en etapa 1

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF

uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2

; valor que busca m2 en esta etapa

MOVLW
SUBWF
BTFSC
GOTO
MOVF
SUBLW
MOVWF

d'170'
m2,W
STATUS,C
salir
m2,W
d'220'
m3

BTFSS mot3,0
GOTO
salir

; compensacin de velocidad

; m2 - 170
; Si m2 > 170, C=1; si m2 < 170, C=0
; valor que busca m3 en esta etapa
; 250 - m2 - 30 = INV(uinf_m2) - 30 = 220 - m2
; Comprovacin de llegada de m3

Pgina XII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


BCF
CLRF
BSF
BCF
BCF
GOTO

mot3,0
mot2
mot2,7
mot,7
mot,6
salir

; Si m3 ha llegado se borra el flag de llegada


; Y se activa el flag de siguiente etapa
; se activa la etapa 7
; ya no es el periodo inicial de posicionamiento

;____________________________________________________________________
;------------------------------- Etapas ----------------------------;
;
Este apartado ejecuta una secuencia de movimiento que realiza
;
un paso de tipo "ing", segn el esquema siguiente.
;
Se llama as por la forma que definen el movimento de los
;
motores 1 y 2. Su principal ventaja es que reduce la inercia
;
en los extremos del movimiento horizontal, logrando disminuir
;
as la oscilacin de la pata, y por tanto su conumo
;
;
;
2___________________3
;
/-\
;
/
\
;
/
\
;
1//
\\4
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
0||<-----|----------|-----||5
;
7
6
;-------------- Etapa 0 ------------------------------et0

BTFSS mot2,0
GOTO
et1

; estoy en etapa 0

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

umin_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; valor que busca m1 en esta etapa

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

umed_m2,W
meta
m2,W
var
d'1'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BCF
CLRF
CALL

mot3,5
upos_m3
find_m3

; impide aplicar el factor corrector de m3


; borra la cuenta del factor corrector
; llamo la rutina de clculo de m3

; compensacin de velocidad

; compensacin de velocidad

Pgina
XIII

Cdigo fuente
BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,1
salir

; Y se activa el flag de siguiente etapa

;-------------- Etapa 1 ------------------------------et1

BTFSS mot2,1
GOTO
et2

; estoy en etapa 1

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

uinf_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; valor que busca m1 en esta etapa

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

usup_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BCF
CLRF
CALL

mot3,5
upos_m3
find_m3

; impide aplicar el factor corrector de m3


; borra la cuenta del factor corrector
; llamo la rutina de clculo de m3

BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,2
salir

; Y se activa el flag de siguiente etapa

; compensacin de velocidad

; compensacin de velocidad

Pgina
XIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;-------------- Etapa 2 ------------------------------et2

BTFSS mot2,2
GOTO
et3

; estoy en etapa 2

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

usup_m1,W
meta
m1,W
var
d'1'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; valor que busca m1 en esta etapa

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

usup_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BCF
CLRF
CALL

mot3,5
upos_m3
find_m3

; impide aplicar el factor corrector de m3


; borra la cuenta del factor corrector
; llamo la rutina de clculo de m3

BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,3
salir

; Y se activa el flag de siguiente etapa

; compensacin de velocidad

; compensacin de velocidad

;-------------- Etapa 3 ------------------------------et3

BTFSS mot2,3
GOTO
et4

; estoy en etapa 3

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

; valor que busca m1 en esta etapa

umax_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; compensacin de velocidad

Pgina XV

Cdigo fuente
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

umed_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BCF
CLRF
CALL

mot3,5
upos_m3
find_m3

; impide aplicar el factor corrector de m3


; borra la cuenta del factor corrector
; llamo la rutina de clculo de m3

BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegadose borran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,4
salir

; Y se activa el flag de siguiente etapa

; compensacin de velocidad

;-------------- Etapa 4 ------------------------------et4

BTFSS
GOTO
MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

mot2,4
et5
umax_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; estoy en etapa 4

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

uinf_m2,W
meta
m2,W
var
d'1'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BCF
CLRF
CALL

mot3,5
upos_m3
find_m3

; impide aplicar el factor corrector de m3


; borra la cuenta del factor corrector
; llamo la rutina de clculo de m3

BTFSS mot3,1
GOTO
salir
BTFSS mot3,2

; valor que busca m1 en esta etapa

; compensacin de velocidad

; compensacin de velocidad

; Comprovacin de llegada de motores 1 y 2

Pgina
XVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


GOTO

salir

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,5
salir

; Y se activa el flag de siguiente etapa

;-------------- Etapa 5 ------------------------------et5

BTFSS mot2,5
GOTO
et6

; estoy en etapa 5

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

usup_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; valor que busca m1 en esta etapa

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BSF
CALL

mot3,5
find_m3

; permite aplicar el factor corrector de m3


; llamo la rutina de clculo de m3

BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,6
salir

; Y se activa el flag de siguiente etapa

; compensacin de velocidad

; compensacin de velocidad

;-------------- Etapa 6 ------------------------------et6

BTFSS mot2,6
GOTO
et7

; estoy en etapa 6

MOVF
MOVWF
MOVF
MOVWF

; valor que busca m1 en esta etapa

uinf_m1,W
meta
m1,W
var

Pgina
XVII

Cdigo fuente
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

d'1'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; compensacin de velocidad

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2
mot3,0

; valor que busca m2 en esta etapa

BSF
CALL

mot3,5
find_m3

; permite aplicar el factor corrector de m3


; llamo la rutina de clculo de m3

BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF
GOTO

mot2
mot2,7
salir

; Y se activa el flag de siguiente etapa

; compensacin de velocidad

;-------------- Etapa 7 ------------------------------et7

BTFSS mot2,7
GOTO
salir

; estoy en etapa 7

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF
BCF

umin_m1,W
meta
m1,W
var
d'0'
comp
fluc
var,W
m1
mot3,0
mot3,1
mot3,0

; valor que busca m1 en esta etapa

MOVF
MOVWF
MOVF
MOVWF
MOVLW
MOVWF
CALL
MOVF
MOVWF
BTFSC
BSF

uinf_m2,W
meta
m2,W
var
d'0'
comp
fluc
var,W
m2
mot3,0
mot3,2

; valor que busca m2 en esta etapa

; compensacin de velocidad

; compensacin de velocidad

Pgina
XVIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


BCF

mot3,0

BSF
CALL

mot3,5
find_m3

; permite aplicar el factor corrector de m3


; llamo la rutina de clculo de m3

BTFSS
GOTO
BTFSS
GOTO

mot3,1
salir
mot3,2
salir

; Comprovacin de llegada de motores 1 y 2

BCF
BCF

mot3,1
mot3,2

; Si todos han llegado seborran los flags de llegada

CLRF
BSF

mot2
mot2,0

; Y se activa el flag de siguiente etapa

;-------------------------------------------------------------------;------------------------ Salida de movs ---------------------------salir BCF

mot,5

; Borro el flag de rutina movs, para


; acceder slo una vez cada 20ms

RETURN
;____________________________________________________________________
;----------------------- Flujo de variable -------------------------fluc

MOVF
SUBWF
BTFSS
GOTO
BSF
GOTO

var,W
meta,W
STATUS,Z
diff
mot3,0
sale

MOVF
SUBWF
BTFSS
GOTO

var,W
meta,W
STATUS,C
resta

MOVF
ADDWF
ADDWF
MOVF
SUBWF
BTFSC
GOTO
MOVF
MOVWF
BSF
GOTO

speed,W
comp,W
var,F
var,W
meta,W
STATUS,C
sale
meta,W
var
mot3,0
sale

; la variable crece hacia la meta


; comp + speed
; comp + speed + var == var

resta MOVF
ADDWF
SUBWF
MOVF
SUBWF
BTFSS
GOTO
MOVF
MOVWF
BSF

speed,W
comp,W
var,F
var,W
meta,W
STATUS,C
sale
meta,W
var
mot3,0

; la variable decrece hacia la meta


; comp + speed
; var - (comp + speed) == var

diff

suma

sale

;
;
;
;
;

meta - var
Z=1 si meta = var, Z=0 si meta <> var
Si meta <> var, voy a diff
si meta = var, flag de finalizar fluctuacin
y salgo de rutina

; meta - var
; C=1 si meta > var, C=0 si meta < var

; meta - var
; C=1 si meta > var, C=0 si meta < var

; si var ya ha llegado a meta, mot3,0=1

; meta - var
; C=1 si meta > var, C=0 si meta < var

; si var ya ha llegado a meta, mot3,0=1

RETURN

Pgina
XIX

Cdigo fuente
;------------------------- Clculo de m3 ----------------------------find_m3
MOVF
m2,W
SUBLW d'220'
MOVWF m3

etapa6
bit1

etap6
menor

eta6
bit_1

etp6
listo

BTFSS
GOTO
MOVF
SUBWF
BTFSS
GOTO
BTFSC
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
GOTO
INCF
BCF
GOTO
BTFSS
GOTO
BTFSC
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BSF
GOTO
INCF
BSF
GOTO
BTFSC
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
SUBWF
BCF
GOTO
DECF
BCF
GOTO
BTFSS
GOTO
BTFSC
GOTO
BTFSC
GOTO
MOVLW
SUBWF
BSF
GOTO
DECF
BSF
MOVF
SUBWF

mot3,5
listo
centro,W
m1,W
STATUS,C
menor
m1,3
bit1
mot3,4
listo
mot2,6
etapa6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
listo
m1,3
listo
mot3,4
listo
mot2,6
etap6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
listo
m1,3
bit_1
mot3,4
listo
mot2,6
eta6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
listo
m1,3
listo
mot3,4
listo
mot2,6
etp6
d'4'
upos_m3,F
mot3,4
listo
upos_m3,F
mot3,4
upos_m3,W
m3,F

; valor que busca m3 en esta etapa


; 250 - m2 - 30 = INV(uinf_m2) - 30 = 220 - m2
; flag para aplicar el factor corrector de m3
; m1 - centro = m1 - 135
; Si m1 > 135, C=1; si m1 < 135, C=0
; miro el bit 3 pk se modifica a cada mltiplo de 8
; estado anterior del bit
; compruevo si estoy en etapa 6
; factor de incremento

; miro el bit 3 pk se modifica a cada mltiplo de 8


; estado anterior del bit
; compruevo si estoy en etapa 6
; factor de incremento

; miro el bit 3 pk se modifica a cada mltiplo de 8


; estado anterior del bit
; compruebo si estoy en etapa 6
; factor de decremento

; miro el bit 3 pk se modifica a cada mltiplo de 8


; estado anterior del bit
; compruebo si estoy en etapa 6
; factor de decremento

; aplico el factor corrector a m3


; m3 = m3 - upos_m3

RETURN

Pgina XX

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;____________________________________________________________________
;------------------ Rutina de retraso ------------------------------;
La variable "del" contiene el valor del
;
retraso segn: <del> * 7,2us + 40 * 12us = retraso
;
La rutina tiene 2 partes (delay y delay2)
;
DELAY ejecuta un retraso constante de 40*12us = 0,48ms
;
y no recibe nign parmetro de entrada
;
DELAY2 ejecuta un retraso segun la variable "del"
;
1<"del"<250, de mx 7,2us*250 = 1,8ms
;
as el retraso sera 0,4872ms < retraso < 2,28ms
;
que coincide con los lmites del servo
;-------------------------------------------------------------------delay MOVLW d'40'
MOVWF del3

; 40 ciclos de 12us=0,48ms (mnimo ptimo del servo)


; contador grande

delay3 MOVLW d'10'


MOVWF cont3
NOP
NOP
NOP

; 60 instrucciones X 200 ns = 12us


; contador pequeo

retar3 NOP
NOP
DECFSZ cont3,F
GOTO
retar3
NOP
DECFSZ del3,F
GOTO
delay3
NOP

; decrementa cont en 1, salta si con1=0

; decrementa del en 1, salta si del=0

;-------------------------------------delay2 MOVLW d'6'


MOVWF cont
NOP

; 36 instrucciones X 200 ns = 7,2us


; contador pequeo

retar NOP
NOP
DECFSZ cont,F
GOTO
retar
NOP
DECFSZ del,F
GOTO
delay2
NOP

; 250 ciclos de 7,2us = 1,8 ms


; 1,8ms + 0,48ms = 2,28 ms (mximo ptimo del servo)

RETURN

Pgina
XXI

Cdigo fuente
;____________________________________________________________________
;------------------------- Rutina de Esclavo I2C -------------------; Esta rutina identifica 5 posibles estados en la comuncacin I2C
;
+ Escritura del master, envo de la direccin del esclavo
;
+ Escritura del master, envo del dato
;
+ Lectura del master, envo de la direccin del esclavo
;
+ Lectura del master, envo del dato desde el esclavo
;
+ Reset en la comnicacin I2c, el master manda un No-ACK
; Despus el master enva una secuencia de variables (Speed, Centro,
; Rango, Zanco, Altura) o demanda unas variables de control (mot2,
; mode, Zanco y Altura)
;-------------------------------------------------------------------i2c_com
BSF
BTFSC
GOTO
BTFSC
GOTO
GOTO
s_1

BTFSS
GOTO
BTFSC
GOTO
BCF
BTFSC
GOTO

STATUS,RP0
SSPSTAT,S
s_1
SSPSTAT,P
res_I2C
exit

;
;
;
;
;
;

banco mem 1 (SSPSTAT est en banco 1)


lectura del bit Start
S = 1
S = 0, lectura del bit Paro
P = 1 = condicin de Stop, Bus libre
P = 0 = I2C no funcionando

SSPSTAT,D_A
no_res
SSPSTAT,BF
no_res
STATUS,RP0
SSPCON,CKP
res_I2C

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

comprovacin Data/Adress para estado de Reset I2C


D_A = 0, no puede ser Reset I2C
comprovacin BF para estado de Reset I2C
BF = 1, no puede ser Reset I2C
banco mem 0
comprovacin CKP para estado de Reset I2C
CKP = 1, se cumple Reset I2C
CKP = 0, no puede ser Reset I2C
banco mem 1
lectura del bit Read/Write
R_W = 1 = Read
R_W = 0 = Write
lectura del bit Data/Adress
D_A = 1 = escritura con dato
D_A = 0 = escritura con direccin
lectura del bit Data/Adress
D_A = 0 = lectura con direccin (BF no se mira)
D_A = 1 = Data (BF se testea en la rutina)

no_res BSF
STATUS,RP0
BTFSC SSPSTAT,R_W
GOTO
read

read

BTFSC
GOTO
GOTO
BTFSS
GOTO
GOTO

SSPSTAT,D_A
w_dat
w_dir
SSPSTAT,D_A
r_dir
r_dat

;-----------------------------------------------------------------;--------------- Escritura con direccin -------------------------w_dir BSF


BTFSC
GOTO
BCF
MOVF
BTFSC
BCF
GOTO
in_dir BCF
MOVF
BSF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
GOTO

STATUS,RP0
SSPSTAT,BF
in_dir
STATUS,RP0
SSPBUF,W
SSPCON,SSPOV
SSPCON,SSPOV
fallo
STATUS,RP0
SSPBUF,W
mot,1
mot,2
mot,3
mot3,6
mot3,7
mot4,0
mot4,1
mot4,2
mot4,3
mot4,4
exit

;
;
;
;
;
;
;

banco mem 1
Leo BF para ver si el dato ha entrado
si 1, voy al dato
banco mem 0
Leo SSPBUF para borrar BF, descarto el dato
miro overflow
si es 1 lo borro

;
;
;
;
;
;

banco mem 0
Leo SSPBUF para borrar BF, descarto el dato
A continuacin viene por el I2C la secuencia de
actualizacin de variables
As que borro las banderas, y activo la primera
para empezar por speed

; Hecho esto, estoy listo para recibir la


; actualizacin, y salgo

Pgina
XXII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;--------------- Escritura con dato -----------------------------w_dat BSF
BTFSC
GOTO
BCF
MOVF
BTFSC
BCF
GOTO
in_dat BCF
BTFSS
GOTO
BCF
MOVF
GOTO

STATUS,RP0
SSPSTAT,BF
in_dat
STATUS,RP0
SSPBUF,W
SSPCON,SSPOV
SSPCON,SSPOV
fallo
STATUS,RP0
SSPCON,SSPOV
speed_c
SSPCON,SSPOV
SSPBUF,W
fallo

;
;
;
;
;
;
;

banco mem 1
Leo BF para ver si el dato ha entrado
si 1, voy al dato
banco mem 0
Leo SSPBUF para borrar BF, descarto el dato
miro overflow
si es 1 lo borro

;
;
;
;
;
;

banco mem 0
Compruevo que No ha habido Overflow
si No ha habido Overfow, recibo el primer dato
S ha habido overflow, borro el bit de overflow
leo SSPBUF para borrar BF, descarto el dato
finalmente, llamo a fallo

speed_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot,1
cent_c
SSPBUF,W
speed
mot,1
mot,2
acaba

; Si la recepcin ha es buena y toca recibir Speed


; Si no toca Speed, probemos con Centro
; Si toca Speed, lo cargo del Bffer a la variable

cent_c BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot,2
rango_c
SSPBUF,W
centro
mot,2
mot,3
acaba

; Toca recibir Centro


; Si no toca Centro, probemos con Rango
; Si toca Centro, lo cargo del Bffer a la variable

rango_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot,3
zanco_c
SSPBUF,W
rango
mot,3
mot3,6
acaba

; Toca recibir Rango


; Si no toca Rango, probemos con Zanco
; Si toca Rango, lo cargo del Bffer a la variable

zanco_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot3,6
altur_c
SSPBUF,W
zanco
mot3,6
mot3,7
acaba

; Toca recibir Zanco


; Si no toca Zanco, probemos con Altura
; Si toca Zanco, lo cargo del Bffer a la variable

altur_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot3,7
mode_c
SSPBUF,W
altura
mot3,7
mot4,0
acaba

; Toca recibir Altura


; Si no toca Altura, vamos a mode
; Si toca Altura, lo cargo del Bffer a la variable

mode_c BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot4,0
actio_c
SSPBUF,W
mode
mot4,0
mot4,1
acaba

; Toca recibir mode


; Si no toca mode, vamos a action
; Si toca mode, lo cargo del Bffer a la variable

; apago mot,1 y enciendo mot,2 para que


; el siguiente byte recibido vaya a Centro

; apago mot,2 y enciendo mot,3 para que


; el siguiente byte recibido vaya a Rango

; apago mot,3 y enciendo mot3,6 para que


; el siguiente byte recibido vaya a Zanco

; apago mot3,6 y enciendo mot3,7 para que


; el siguiente byte recibido vaya a Altura

; apago mot3,7 y enciendo mot4,0 para que


; el siguiente byte recibido vaya a mode

; apago mot4,0 y enciendo mot4,1 para que


; el siguiente byte recibido vaya a action

Pgina
XXIII

Cdigo fuente
actio_c
BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO
m1_c

m2_c

m3_c

mot4,1
m1_c
SSPBUF,W
action
mot4,1
mot4,2
acaba

; Toca recibir action


; Si no toca action, vamos a r_m1
; Si toca action, lo cargo del Bffer a la variable

BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot4,2
m2_c
SSPBUF,W
r_m1
mot4,2
mot4,3
acaba

; Toca recibir r_m1


; Si no toca r_m1, vamos a r_m2
; Si toca r_m1, lo cargo del Bffer a la variable

BTFSS
GOTO
MOVF
MOVWF
BCF
BSF
GOTO

mot4,3
m3_c
SSPBUF,W
r_m2
mot4,3
mot4,4
acaba

; Toca recibir r_m2


; Si no toca r_m2, vamos a r_m3
; Si toca r_m2, lo cargo del Bffer a la variable

BTFSS
GOTO
MOVF
MOVWF
BCF
BSF

mot4,4
exit
SSPBUF,W
r_m3
mot4,4
mot,1

; Toca recibir r_m3


; Si no toca r_m3, salimos
; Si toca r_m3, lo cargo del Bffer a la variable

STATUS,RP0
SSPSTAT,BF
fallo
exit

;
;
;
;

acaba BSF
BTFSC
GOTO
GOTO

; apago mot4,1 y enciendo mot4,2 para que


; el siguiente byte recibido vaya a r_m1

; apago mot4,2 y enciendo mot4,3 para que


; el siguiente byte recibido vaya a r_m2

; apago mot4,3 y enciendo mot4,4 para que


; el siguiente byte recibido vaya a r_m3

; apago mot4,4 y enciendo mot,1 para que


; el siguiente byte recibido vaya a Speed
banco mem 1
Leo BF para ver si se ha borrado
si sigue siendo 1, error
si se ha borrado, exit

;--------------- Lectura con direccin -----------------------------r_dir BCF


BTFSC
GOTO
MOVF
BSF
de datos
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
GOTO

STATUS,RP0
SSPCON,CKP
fallo
SSPBUF,W
mot,1

;
;
;
;
;

banco mem 0
CKP = 0?
CKP = 1, error
Leo Buffer para borrar BF
BF = 0, preparo las banderas para envo secuencial

mot,2
mot,3
mot3,6
mot3,7
mot4,0
mot4,1
mot4,2
mot4,3
mot4,4
mot2R

; mando mot2 (est en R_dat, pero no importa)

Pgina
XXIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;--------------- Lectura con dato ----------------------------------r_dat BCF
BTFSC
GOTO
BSF
BTFSC
GOTO
BCF

STATUS,RP0
SSPCON,CKP
fallo
STATUS,RP0
SSPSTAT,BF
r_dat
STATUS,RP0

;
;
;
;
;
;
;
;

banco mem 0
CKP = 0?
CKP = 1
banco mem 1
CKP = 0, compruebo BF = 0?
BF = 1, me espero a que se vace
BF = 0, continua la secuencia de envo (Speed ya
est enviado), banco mem 0

mot2R BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO

mot,1
modeR
SSPCON,WCOL
mot2,W
SSPBUF
SSPCON,WCOL
mot2R
SSPCON,CKP
mot,1
mot,2
exit

;
;
;
;

Toca enviar mot2


Si no toca mot2, probemos con mode
borro el flag de colisin
Si toca mot2, lo cargo de la variable al Bffer

;
;
;
;
;

Hay colisin de datos?


Si la hay vuelvo a intentarlo
Si no la hay, enciendo CKP para mandar el dato
apago mot,1 y enciendo mot,2 para que
el siguiente byte enviado sea Centro

modeR BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO

mot,2
zancoR
SSPCON,WCOL
mode,W
SSPBUF
SSPCON,WCOL
modeR
SSPCON,CKP
mot,2
mot,3
exit

;
;
;
;

Toca enviar mode


Si no toca mode, probemos con zanco
borro el flag de colisin
Si toca mode, lo cargo de la variable al Bffer

;
;
;
;
;

Hay colisin de datos?


Si la hay vuelvo a intentarlo
Si no la hay, enciendo CKP para mandar el dato
apago mot,2 y enciendo mot,3 para que
el siguiente byte enviado sea Rango

zancoR BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO

mot,3
alturaR
SSPCON,WCOL
zanco,W
SSPBUF
SSPCON,WCOL
zancoR
SSPCON,CKP
mot,3
mot3,6
exit

;
;
;
;

Toca enviar Zanco


Si no toca Zanco, probemos con Altura
borro el flag de colisin
Si toca Zanco, lo cargo de la variable al Bffer

;
;
;
;
;

Hay colisin de datos?


Si la hay vuelvo a intentarlo
Si no la hay, enciendo CKP para mandar el dato
apago mot,3 y enciendo mot3,6 para que
el siguiente byte enviado sea Zanco

alturaR
BTFSS
GOTO
BCF
MOVF
MOVWF
BTFSC
GOTO
BSF
BCF
BSF
GOTO

mot3,6
exit
SSPCON,WCOL
altura,W
SSPBUF
SSPCON,WCOL
alturaR
SSPCON,CKP
mot3,6
mot,1
exit

;
;
;
;

Toca enviar altura


Si no toca altura, salimos
borro el flag de colisin
Si toca Altura, lo cargo de la variable al Bffer

;
;
;
;
;

Hay colisin de datos?


Si la hay vuelvo a intentarlo
Si no la hay, enciendo CKP para mandar el dato
apago mot3,6 y enciendo mot,1 para que
el siguiente byte enviado sea mot2

Pgina
XXV

Cdigo fuente
;--------------- Fin de la comunicacin ----------------------------res_I2C
MOVF
BSF
BTFSC
GOTO
BCF
BTFSC
BCF
BSF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
BCF
GOTO

BCF
STATUS,RP0
; banco mem 0
SSPBUF,W
; Leo SSPBUF para borrar BF, descarto el dato
STATUS,RP0
; banco mem 1
SSPSTAT,BF
; Leo BF para ver si se ha borrado
fallo
; si sigue siendo 1 error
STATUS,RP0
; banco mem 0
SSPCON,SSPOV ; miro overflow
SSPCON,SSPOV ; si es 1 lo borro
mot,1
; Reinicio de la secuencia de envo/recepcin
mot,2
mot,3
mot3,6
mot3,7
mot4,0
mot4,1
mot4,2
mot4,3
mot4,4
exit

;---------------------------------------------------------------fallo BCF
STATUS,RP0
BCF
PORTB,2
RETURN

; banco mem 0
; Led de estado OFF

exit

; banco mem 0
; Led de estado ON

BCF
STATUS,RP0
BSF
PORTB,2
RETURN

;____________________________________________________________________
;--------------- Rutina de Servicio de Interrupcin-----------------;
(para salvar el reg. status se usa swap pk as no se altera el
;
contenido (status contiene los flag aritmticos). Al volver de
;
la rutina se restablece el orden de los nibbles.)
;
;
Hay tres fuentes de interrupcin:
;
flanco de rubida de RB0/int (sirve para el control de
;
adaptacin al terreno, actualmente sin implementar)
;
Mdulo SSP
;
ovrerflow del Timer 1
;-------------------------------------------------------------------isr

MOVWF
SWAPF
MOVWF
MOVF
MOVWF

w_temp
STATUS,W
stat_t
PCLATH,W
pcl_t

; salva registro W en reg. temporal


; salva el reg. status (swap no altera el registro)
; dndole la vuelta

BCF
BCF

INTCON,GIE
STATUS,RP0

; apago interrupciones
; banco mem 0

BTFSC INTCON,RBIF
GOTO
i_rb
BTFSC INTCON,INTF
GOTO
i_rb0

;
;
;
;
;

pooling de RB7:RB4
(Actualmente desactivado para preservar
el funcionamiento de I2C_com)
pooling de RB0/INT
Actualmente no implementado

BTFSC PIR1,SSPIF
GOTO
i2c_ev

; pooling de evento en el mdulo SSP

BTFSC PIR1,TMR1IF
GOTO
i_tmr1
GOTO
escape

; pooling de overflow Timer1

Pgina
XXVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


i_rb

MOVF
BCF
BSF
GOTO

PORTB,F
INTCON,RBIF
INTCON,RBIE
escape

i_rb0 BCF
BSF
GOTO

INTCON,INTF
INTCON,INTE
escape

; limpiamos el flag
; desenmascaramos la INT

i_tmr1 BCF
BSF
BSF
BCF

PIR1,TMR1IF
STATUS,RP0
PIE1,TMR1IE
STATUS,RP0

; limpiamos el flag
; banco mem 1 (PIE1 est en banco 1)
; desenmascaramos la INT
; banco mem 0

MOVLW
MOVWF
MOVLW
MOVWF

h'3C'
TMR1H
h'B0'
TMR1L

cargo 3C en TMR1H y

BSF
GOTO

mot,4
escape

;
;
;
;
;
;
;
;
;

PIR1,SSPIF
STATUS,RP0
PIE1,SSPIE
STATUS,RP0

;
;
;
;

limpiamos el flag
banco mem 1 (PIE1 est en banco 1)
desenmascaramos la INT
banco mem 0

i2c_com

; accin en caso de evento en el mdulo SSP

pcl_t,W
PCLATH
stat_t,W
STATUS
w_temp,F
w_temp,W

;
;
;
;

i2c_ev BCF
BSF
BSF
BCF
CALL
escape MOVF
MOVWF
SWAPF
MOVWF
SWAPF
SWAPF
RETFIE

; limpiamos el flag
; desenmascaramos la INT

cargo B0 en TMR1L para que


juntos hagan 3CB0, que hasta FFFF incrementa
C350 veces, que son 50000 veces en decimal,
de manera que el timer se demora
200ns x 2 x 50000 = 20ms (2 es el preescaler)
subo bandera de ciclo
as se ejecuta cada 20ms

le da la vuelta al stat_t
y lo reestablece en status
reestablece W desde W_temp
dandole la vuelta 2 veces

; salgo de rutina

;-----------------------------------------END
;------------------------------------------

(Total: 1.475 lneas)

Pgina
XXVII

Cdigo fuente

2 Cdigo fuente de la placa Master


Este es un cdigo fuente en fase de pruebas. Su versin definitiva se adjunta en el CD.

Pgina
XXVIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;____________________________________________________________________
;------------------------- Encabezado ------------------------------;
;
Archivo:
master_teclado.asm
;
Autor:
Ignacio Pedrosa Lojo
;
Versin:
1.00
;
;
Descripcin: Programa de control y comunicacin de la placa
;
maestra. Incluye el cdigo para la lectura del
;
teclado, el control de los LEDs indicadores, la
;
rutina de retraso, el control del movimiento del
;
robot, la gestin de la comunicacin I2Cen modo
;
Master y la gestin del Sistema Interruptivo.
;
; Ensamblado mediante Microchip Assembler v5.00 (MPASM)
; El archivo "P16F88.inc" proporcionado por Microchip debe ser
; incluido en el directorio de trabajo en caso de no usar MPASM v5.00
;
;____________________________________________________________________
;-------------------------------------------------------------------LIST
P=16F88
INCLUDE
"P16F88.INC"
; Registro 1 de Configuracin
__CONFIG
_CONFIG1, _CP_OFF
& _CCP1_RB3
& _DEBUG_OFF
& _WRT_PROTECT_OFF
& _CPD_OFF
& _LVP_OFF
& _BODEN_ON
& _MCLR_ON
& _PWRTE_ON
& _WDT_OFF
& _HS_OSC

;
;
;
;
;
;
;
;
;
;

CCP1 en la patilla RB3


Modo debug OFF
Proteccin contra escritura OFF
Code protection OFF
Low voltage Programming OFF
Brown-out reset enabled
Memmory Clear enabled
Power-up timer enabled
WatchDog Timer OFF
HS Oscillator mode

; Registro 2 de Configuracin
__CONFIG
_CONFIG2, _IESO_OFF & _FCMEN_OFF
;--------------------- Variables en memoria ------------------------cont
del
cont2
del2
cont3
del3
m1
m2
m3
fail
w_temp
stat_t
pcl_t
mot
mot2
mot3
acu
time
dato
send_d
read_d
slave
speed
centro
rango

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

h'20'
h'21'
h'22'
h'23'
h'24'
h'25'
h'26'
h'27'
h'28'
h'29'
h'2A'
h'2B'
h'2C'
h'2D'
h'2E'
h'2F'
h'30'
h'31'
h'32'
h'33'
h'34'
h'35'
h'36'
h'37'
h'38'

Pgina
XXIX

Cdigo fuente
zanco
altura
slv1
slv2
slv3
slv4
slv5
slv6
slv_gen
action
mode
r_mot2
r_mode
r_zanco
r_altu

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

h'39'
h'3A'
h'3B'
h'3C'
h'3D'
h'3E'
h'3F'
h'40'
h'41'
h'42'
h'43'
h'44'
h'45'
h'46'
h'47'
; hasta 7Fh

;
;
;
;
;
;
;
;
;

la variable 'action' contiene 8 banderas:


action,0 : 1= Go
0= Stop
action,1 : 1= Atrs
0= Delante
action,2 : 1= Giro Izquierda
0= No Giro
action,3 : 1= Giro Derecha
0= No Giro
action,4 : 1= Rotacin Izq.
0= No Rotacin
action,5 : 1= Rotacin Dch.
0= No Rotacin
action,6 : 1= Ida del paso
0= No Ida
action,7 : 1= Vuelta del paso
0= No vuelta

;
;
;
;
;
;
;
;
;

la variable
mode,0 : 1=
mode,1 : 1=
mode,2 : 1=
mode,3 : 1=
mode,4 : 1=
mode,5 : 1=
mode,6 : 1=
mode,7 : 1=

;
;
;
;
;
;
;
;
;

la variable 'mot' contiene 8 banderas:


mot,0 = botn 0
mot,1 = botn 1
mot,2 = botn 2
mot,3 = botn 3
mot,4 = botn 4
mot,5 = botn 5
mot,6 = botn 6
mot,7 = botn 7

;
;
;
;
;
;
;
;
;

la variable 'mot2' contiene 8 banderas:


mot2,0 =
mot2,1 =
mot2,2 = primer dgito es 2
mot2,3 =
mot2,4 =
mot2,5 = segundo dgito es 5
mot2,6 =
mot2,7 =

;
;
;
;
;
;
;
;
;

la variable 'mot3' contiene 8 banderas:


mot3,0 = botn 8
mot3,1 = primer dgito
mot3,2 = segundo dgito
mot3,3 = tercer dgito
mot3,4 = cuarto dgito
mot3,5 = recuerdo de ACK=1, NACK=0;
mot3,6 = botn 9
mot3,7 = botn A

'mode' contiene 8 banderas:


Modo Dinmico
0= Modo Esttico
Modo levantamiento
0= No Modo
Modo Cojer
0= No Modo
Modo Inicial
0= No Modo
Modo Programacin
0= No Modo
Obstculo detec.
0= No Obstculo
0=
0=

Pgina
XXX

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;---------------- Vectores de inicio e interrupcin ----------------ORG
GOTO
ORG
GOTO
ORG

0x00
inicio
0x04
isr
0X05

;-------------- Configuracin de puertos y registros ----------------inicio BSF


MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

STATUS,RP0
b'00000000'
ANSEL
b'10111111'
TRISA
b'11111111'
TRISB
b'11000000'
OPTION_REG
b'01010000'
INTCON
b'00001000'
PIE1
b'00000000'
PIE2
d'70'
SSPADD

BCF
BCF
BCF
MOVLW
MOVWF

SSPSTAT,SMP
SSPSTAT,CKE
STATUS,RP0
b'00111011'
SSPCON

MOVLW
MOVWF
MOVLW
MOVWF

b'00000000'
PIR1
b'00000000'
PIR2

; banco mem 1
; ADC desactivado
; PORTA (0=output, 1=input)
;
;
;
;
;

PORTB (0=output, 1=input)


configuracion: Timer0 con
preescaler 1/2 (no se usa)
se desenmascara la interrupccin de perifricos y
externa, pero por ahora, desactivo interrupciones

; Slo se desenmasacara la interrucin de SSP


;
;
;
;
;
;
;
;
;
;
;

perifericos 2 queda enmascarado


h'46', b'01000110'
esta ser la direccin del master, (para
Multi-Master Mode)
en operacin I2C se mantiene a 0
en operacin I2C se mantiene a 0
banco mem 0
configuracin del mdulo SSP
SSPCON,5 = 1, enable bit
SSPCON,4 = 1, enable clock
SSPM<3:0> = 1011 Firmware Master Mode (Slave Idle)

; De momento se borran todas las banderas


; De momento se borran todas las banderas

Pgina
XXXI

Cdigo fuente
;---------------------- Inicializaciones -------------------------CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF
CLRF

PORTA
PORTB
SSPBUF
cont
del
cont2
del2
cont3
del3
mot
mot2
mot3
w_temp
stat_t
pcl_t
acu
time
fail
dato
send_d
read_d
action
mode
r_mot2
r_mode
r_zanco
r_altu

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF

d'10'
slv1
d'20'
slv2
d'30'
slv3
d'40'
slv4
d'50'
slv5
d'60'
slv6
slv_gen

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

d'4'
speed
d'135'
centro
d'15'
rango
d'130'
zanco
d'210'
altura

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF

d'135'
m1
d'135'
m2
d'135'
m3

BSF
mot3,1
MOVLW d'250'
MOVWF time

; direccin esclavo 1
; direccin esclavo 2
; direccin esclavo 3
; direccin esclavo 4
; direccin esclavo 5
; direccin esclavo 6
; direccin esclavo introducido por el usuario
; velocidad inicial = 4
; centro incial = 135
; rango incial = 15
; zanco incial = 100
; altura incial = 210
; m1, m2 y m3 comienzan en un valor cntrico

; comenzamos con primer dgito


; dejo cargado time

Pgina
XXXII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;----------------------- Bucle principal-----------------------------bucle BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF
BTFSC
BSF

PORTA,0
mot,0
PORTA,1
mot,1
PORTA,2
mot,2
PORTA,3
mot,3
PORTA,4
mot,4
PORTB,5
mot,5
PORTB,6
mot,6
PORTB,7
mot,7
PORTB,2
mot3,0
PORTB,3
mot3,6
PORTB,0
mot3,7

; bot0
; bot1
; bot2
; bot3
; bot4
; bot5
; bot6
; bot7
; bot8
; bot9
; botA

BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL
BTFSC
CALL

mot,0
bot0
mot,1
bot1
mot,2
bot2
mot,3
bot3
mot,4
bot4
mot,5
bot5
mot,6
bot6
mot,7
bot7
mot3,0
bot8
mot3,6
bot9
mot3,7
botA

; Llamada bot0

GOTO

bucle

; y vuelve a empezar el bucle.

; Llamada bot1
; Llamada bot2
; Llamada bot3
; Llamada bot4
; Llamada bot5
; Llamada bot6
; Llamada bot7
; Llamada bot8
; Llamada bot9
; Llamada botA

Pgina
XXXIII

Cdigo fuente
;____________________________________________________________________
;---------------- Rutinas de accin de los botones -----------------;--------------- Rutina botn 0 -------------------------------------bot0

MOVLW
MOVWF
CALL
BTFSC
GOTO

b0_d1 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b0_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b0_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b0_d4 BTFSS
GOTO
CLRF
BCF
BCF
BCF
BSF
exb0

d'250'
del
delay
PORTA,0
bot0
mot3,1
b0_d2
d'0'
acu,F
mot3,1
mot3,2
led1
exb0
mot3,2
b0_d3
d'0'
acu,F
mot3,2
mot3,3
led2
exb0
mot3,3
b0_d4
d'0'
acu,F
mot3,3
mot3,4
led3
exb0
mot3,4
exb0
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Llamar a un retraso de 2,28ms


; para evitar rebotes
; Salta si RA0=0

; Accin para apretar b0 en el primer dgito

; Accin para apretar b0 en el segundo dgito

; Accin para apretar b0 en el tercer dgito

;
;
;
;
;
;

Accin para apretar b0 en el cuarto dgito


Borro acu
Borro las banderas de primer dgito es 2
y de segundo dgito es 5
borro flag dfito 4 y activo dgito1
para volver a empezar

BCF
mot,0
RETURN

;--------------- Rutina botn 1 -------------------------------------bot1

MOVLW
MOVWF
CALL
BTFSC
GOTO

b1_d1 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b1_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF

d'250'
del
delay
PORTA,1
bot1
mot3,1
b1_d2
d'100'
acu,F
mot3,1
mot3,2
led1
exb1
mot3,2
b1_d3
d'10'
acu,F
mot3,2

; Llamar a un retraso de 2,28ms


; para evitar rebotes
; Salta si RA1=0

; Accin para apretar b1 en el primer dgito

; Accin para apretar b1 en el segundo dgito

Pgina
XXXIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


BSF
CALL
GOTO
b1_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b1_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb1

mot3,3
led2
exb1
mot3,3
b1_d4
d'1'
acu,F
mot3,3
mot3,4
led3
exb1
mot3,4
exb1
acu,W
speed
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Accin para apretar b1 en el tercer dgito

; Accin para apretar b1 en el cuarto dgito


; apretar "1" en el dgito 4
; carga speed con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dfito 4 y activo dgito 1
para volver a empezar

BCF
mot,1
RETURN

;-------- rutina botn 2 -----------------------bot2

MOVLW
MOVWF
CALL
BTFSC
GOTO

b2_d1 BTFSS
GOTO
MOVLW
ADDWF
BSF
BCF
BSF
CALL
GOTO
b2_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b2_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b2_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF

d'250'
del
delay
PORTA,2
bot2
mot3,1
b2_d2
d'200'
acu,F
mot2,2
mot3,1
mot3,2
led1
exb2
mot3,2
b2_d3
d'20'
acu,F
mot3,2
mot3,3
led2
exb2
mot3,3
b2_d4
d'2'
acu,F
mot3,3
mot3,4
led3
exb2
mot3,4
exb2
acu,W
centro
d'1'
acu
led5
acu

; Idem k bot1
; Salta si RA2=0

; Accin para apretar b2 en el primer dgito


; Bandera de primer digito es dos

; Accin para apretar b2 en el segundo dgito

; Accin para apretar b2 en el tercer dgito

; Accin para apretar b1 en el cuarto dgito


; apretar "2" en el dgito 4
; carga centro con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta

Pgina
XXXV

Cdigo fuente
BCF
BCF
BCF
BSF
exb2

mot2,2
mot2,5
mot3,4
mot3,1

;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dfito 4 y activo dgito 1
para volver a empezar

BCF
mot,2
RETURN

;------------- Rutina boton 3 ---------------bot3

MOVLW
MOVWF
CALL
BTFSC
GOTO

b3_d1 BTFSS
GOTO
CALL
GOTO
b3_d2 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b3_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b3_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb3

d'250'
del
delay
PORTA,3
bot3
mot3,1
b3_d2
led4
exb3
mot3,2
b3_d3
d'30'
acu,F
mot3,2
mot3,3
led2
exb3
mot3,3
b3_d4
d'3'
acu,F
mot3,3
mot3,4
led3
exb3
mot3,4
exb3
acu,W
rango
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Idem k bot1
; Salta si RA3=0

; Mensaje de error
; Apretar b3 en el primer dgito no tiene sentido
; Accin para apretar b3 en el segundo dgito

; Accin para apretar b3 en el tercer dgito

; Accin para apretar b1 en el cuarto dgito


; apretar "3" en el dgito 4
; carga rango con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dfito 4 y activo dgito 1
para volver a empezar

BCF
mot,3
RETURN

;------------- Rutina boton 4 ---------------bot4

MOVLW
MOVWF
CALL
BTFSC
GOTO

b4_d1 BTFSS
GOTO
CALL
GOTO
b4_d2 BTFSS
GOTO
MOVLW
ADDWF

d'250'
del
delay
PORTA,4
bot4
mot3,1
b4_d2
led4
exb4
mot3,2
b4_d3
d'40'
acu,F

; Idem k bot1
; Salta si RA4=0

; Mensaje de error
; Apretar b4 en el primer dgito no tiene sentido
; Accin para apretar b4 en el segundo dgito

Pgina
XXXVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


BCF
BSF
CALL
GOTO
b4_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b4_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb4

mot3,2
mot3,3
led2
exb4
mot3,3
b4_d4
d'4'
acu,F
mot3,3
mot3,4
led3
exb4
mot3,4
exb4
acu,W
zanco
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Accin para apretar b4 en el tercer dgito

; Accin para apretar b1 en el cuarto dgito


; apretar "4" en el dgito 4
; carga zanco con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dfito 4 y activo dgito 1
para volver a empezar

BCF
mot,4
RETURN

;------------- Rutina boton 5 ---------------bot5

MOVLW
MOVWF
CALL
BTFSC
GOTO

b5_d1 BTFSS
GOTO
CALL
GOTO
b5_d2 BTFSS
GOTO
MOVLW
ADDWF
BTFSC
BSF
BCF
BSF
CALL
GOTO
b5_d3 BTFSS
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
b5_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF

d'250'
del
delay
PORTB,5
bot5
mot3,1
b5_d2
led4
exb5
mot3,2
b5_d3
d'50'
acu,F
mot2,2
mot2,5
mot3,2
mot3,3
led2
exb5
mot3,3
b5_d4
d'5'
acu,F
mot3,3
mot3,4
led3
exb5
mot3,4
exb5
acu,W
altura
d'1'
acu
led5
acu
mot2,2
mot2,5

; Idem k bot1
; Salta si RB5=0

; Mensaje de error
; Apretar b5 en el primer dgito no tiene sentido
; Accin para apretar b5 en el segundo dgito
; Si el primer digito es 2 (200 + ...)
; Bandera de segundo digito es cinco

; Accin para apretar b5 en el tercer dgito

; Accin para apretar b1 en el cuarto dgito


; apretar "5" en el dgito 4
; carga altura con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
; Borro las banderas de primer dgito es 2
; y de segundo dgito es 5

Pgina
XXXVII

Cdigo fuente
BCF
BSF
exb5

mot3,4
mot3,1

; borro flag dfito 4 y activo dgito 1


; para volver a empezar

BCF
mot,5
RETURN

;------------- Rutina boton 6 ---------------bot6

MOVLW
MOVWF
CALL
BTFSC
GOTO

b6_d1 BTFSS
GOTO
CALL
GOTO
b6_d2 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
over6 CALL
GOTO
b6_d3 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
ovr6
CALL
GOTO
b6_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb6

d'250'
del
delay
PORTB,6
bot6
mot3,1
b6_d2
led4
exb6
mot3,2
b6_d3
mot2,2
over6
d'60'
acu,F
mot3,2
mot3,3
led2
exb6
led4
exb6
mot3,3
b6_d4
mot2,5
ovr6
d'6'
acu,F
mot3,3
mot3,4
led3
exb6
led4
exb6
mot3,4
exb6
acu,W
m1
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Idem k bot1
; Salta si RB6=0

; Mensaje de error
; Apretar b6 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b6 en el segundo dgito

; Mensaje de error

; Continua si el segundo dgito no es 5


; Accin para apretar b6 en el tercer dgito

; Mensaje de error
; Accin para apretar b6 en el cuarto dgito
; apretar "6" en el dgito 4
; carga m1 con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dgito 4 y activo dgito 1
para volver a empezar

BCF
mot,6
RETURN

;------------- Rutina boton 7 ---------------bot7

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTB,7
bot7

; Idem k bot1
; Salta si RB7=0

b7_d1 BTFSS mot3,1


GOTO
b7_d2

Pgina
XXXVIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)

b7_d2

over7
b7_d3

ovr7
b7_d4

exb7

CALL
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
CALL
GOTO
BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
CALL
GOTO
BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF

led4
exb7
mot3,2
b7_d3
mot2,2
over7
d'70'
acu,F
mot3,2
mot3,3
led2
exb7
led4
exb7
mot3,3
b7_d4
mot2,5
ovr7
d'7'
acu,F
mot3,3
mot3,4
led3
exb7
led4
exb7
mot3,4
exb7
acu,W
m2
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Mensaje de error
; Apretar b7 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b7 en el segundo dgito

; Mensaje de error

; Continua si el segundo dgito no es 5


; Accin para apretar b7 en el tercer dgito

; Mensaje de error
; Accin para apretar b7 en el cuarto dgito
; apretar "7" en el dgito 4
; carga m2 con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dgito 4 y activo dgito 1
para volver a empezar

BCF
mot,7
RETURN

;------------- Rutina boton 8 ---------------bot8

MOVLW
MOVWF
CALL
BTFSC
GOTO

b8_d1 BTFSS
GOTO
CALL
GOTO
b8_d2 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
over8 CALL
GOTO
b8_d3 BTFSS
GOTO

d'250'
del
delay
PORTB,2
bot8
mot3,1
b8_d2
led4
exb8
mot3,2
b8_d3
mot2,2
over8
d'80'
acu,F
mot3,2
mot3,3
led2
exb8
led4
exb8
mot3,3
b8_d4

; Idem k bot1
; Salta si RB2=0

; Mensaje de error
; Apretar b8 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b8 en el segundo dgito

; Mensaje de error

Pgina
XXXIX

Cdigo fuente
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
ovr8
CALL
GOTO
b8_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exb8

mot2,5
ovr8
d'8'
acu,F
mot3,3
mot3,4
led3
exb8
led4
exb8
mot3,4
exb8
acu,W
m3
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Continua si el segundo dgito no es 5


; Accin para apretar b8 en el tercer dgito

; Mensaje de error
; Accin para apretar b8 en el cuarto dgito
; apretar "8" en el dgito 4
; carga m3 con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dgito 4 y activo dgito 1
para volver a empezar

BCF
mot3,0
RETURN

;------------- Rutina boton 9 ---------------bot9

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTB,3
bot9

b9_d1 BTFSS
GOTO
CALL
GOTO
b9_d2 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
over9 CALL
GOTO
b9_d3 BTFSS
GOTO
BTFSC
GOTO
MOVLW
ADDWF
BCF
BSF
CALL
GOTO
ovr9
CALL
GOTO
b9_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF

mot3,1
b9_d2
led4
exb9
mot3,2
b9_d3
mot2,2
over9
d'90'
acu,F
mot3,2
mot3,3
led2
exb9
led4
exb9
mot3,3
b9_d4
mot2,5
ovr9
d'9'
acu,F
mot3,3
mot3,4
led3
exb9
led4
exb9
mot3,4
exb9
acu,W
slv_gen
d'1'
acu

; Idem k bot1
; Salta si RB3=0

; Mensaje de error
; Apretar b9 en el primer dgito no tiene sentido
; Continua si el primer dgito no es 2
; Accin para apretar b9 en el segundo dgito

; Mensaje de error

; Continua si el segundo dgito no es 5


; Accin para apretar b9 en el tercer dgito

; Mensaje de error
; Accin para apretar b9 en el cuarto dgito
; apretar "9" en el dgito 4
; carga slv_gen con el valor introducido
; cargo 1 en acu

Pgina XL

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


CALL
CLRF
BCF
BCF
BCF
BSF
exb9

led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; mando un 1 a led5 para sealizar la carga correcta


;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dfito 4 y activo dgito 1
para volver a empezar

BCF
mot3,6
RETURN

;------------- Rutina boton A ---------------botA

MOVLW
MOVWF
CALL
BTFSC
GOTO

bA_d1 BTFSS
GOTO
CALL
GOTO
bA_d2 BTFSS
GOTO
CALL
GOTO
bA_d3 BTFSS
GOTO
CALL
GOTO
bA_d4 BTFSS
GOTO
MOVF
MOVWF
MOVLW
MOVWF
CALL
CLRF
BCF
BCF
BCF
BSF
exbA

d'250'
del
delay
PORTB,0
botA
mot3,1
bA_d2
i2c_wr
exbA
mot3,2
bA_d3
led4
exbA
mot3,3
bA_d4
led4
exbA
mot3,4
exbA
acu,W
mode
d'1'
acu
led5
acu
mot2,2
mot2,5
mot3,4
mot3,1

; Idem k bot1
; Salta si RB0=0

; Apretar A en el dgito 1 efecta una escritura I2C


; No se borran banderas, sigue activo digito 1
; Mensaje de error
; Apretar bA en el segundo dgito no tiene sentido
; Mensaje de error
; Apretar bA en el terecer dgito no tiene sentido
; Accin para apretar bA en el cuarto dgito
; apretar "A" en el dgito 4
; carga mode con el valor introducido
; cargo 1 en acu
; mando un 1 a led5 para sealizar la carga correcta
;
;
;
;

Borro las banderas de primer dgito es 2


y de segundo dgito es 5
borro flag dgito 4 y activo dgito 1
para volver a empezar

BCF
mot3,7
RETURN

;___________________________________________________________________________
;----------------------------- Rutina LED 1 -------------------------------led1

ld1

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTA,0
led1

; Enciende el primer LED

BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'10111110'
TRISA
STATUS,RP0

; banco mem 1

BSF
MOVLW
MOVWF
CALL

PORTA,0
d'250'
del
delay

; Salta si RA0=0

; RA0 outputs
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes

DECFSZ time,F
GOTO
ld1
BCF
PORTA,0

Pgina XLI

Cdigo fuente
BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'10111111'
TRISA
STATUS,RP0

MOVLW d'250'
MOVWF time
RETURN

; banco mem 1
; RA0 input
; banco mem 0
; 250 veces 2,28ms son 0,57s

;----------------------------- Rutina LED 2 --------------------------------led2

ld2

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTA,4
led2

; Enciende el segundo LED

BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'10101111'
TRISA
STATUS,RP0

; banco mem 1

BSF
MOVLW
MOVWF
CALL

PORTA,4
d'250'
del
delay

; Salta si RA4=0

; RA4 output
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes

DECFSZ time,F
GOTO
ld2
BCF
PORTA,4
BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'10111111'
TRISA
STATUS,RP0

MOVLW d'250'
MOVWF time
RETURN

; banco mem 1
; RA4 input
; banco mem 0
; 250 veces 2,28ms son 0,57s

;----------------------------- Rutina LED 3 -------------------------------led3

ld3

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTB,7
led3

; Enciende el tercer LED

BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'01111111'
TRISB
STATUS,RP0

; banco mem 1

BSF
MOVLW
MOVWF
CALL
DECFSZ
GOTO
BCF
BSF
MOVLW
MOVWF
BCF

PORTB,7
d'250'
del
delay
time,F
ld3
PORTB,7
STATUS,RP0
b'11111111'
TRISB
STATUS,RP0

MOVLW d'250'
MOVWF time
RETURN

; Salta si RB7=0

; RB7 output
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes

; banco mem 1
; RB7 input
; banco mem 0
; 250 veces 2,28ms son 0,57s

Pgina
XLII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;----------------------------- Rutina LED 4 --------------------------------led4

ld4

ld44

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTB,2
led4

; Enciende y apaga el LED rojo

BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'01111011'
TRISB
STATUS,RP0

; banco mem 1

BSF
MOVLW
MOVWF
CALL

PORTB,2
d'250'
del
delay

DECFSZ
GOTO
MOVLW
MOVWF

time,F
ld4
d'250'
time

BCF
MOVLW
MOVWF
CALL

PORTB,2
d'250'
del
delay

DECFSZ
GOTO
MOVLW
MOVWF

time,F
ld44
d'250'
time

BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'11111111'
TRISB
STATUS,RP0

; Salta si RB2=0

; RB2 output
; banco mem 0
; Llamar a un retraso de 2,28ms
; para evitar rebotes

; 250 veces 2,28ms son 0,57s

; Llamar a un retraso de 2,28ms


; para evitar rebotes

; 250 veces 2,28ms son 0,57s


; banco mem 1
; RB2 input
; banco mem 0

RETURN
;----------------------------- Rutina LED 5 --------------------------------led5

MOVLW
MOVWF
CALL
BTFSC
GOTO

d'250'
del
delay
PORTB,5
led5

; Enciende el LED tantas veces como "acu"

BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'01011111'
TRISB
STATUS,RP0

; banco mem 1

; Salta si RB2=0

; RB5 output
; banco mem 0

ld53

BSF
PORTB,5
MOVLW d'250'
MOVWF time

; Enciendo LED
; 250 veces 2,28ms son 0,57s

ld5

MOVLW
MOVWF
CALL
DECFSZ
GOTO

; Llamar a un retraso de 2,28ms

ld52

d'250'
del
delay
time,F
ld5

BCF
PORTB,5
MOVLW d'250'
MOVWF time

; Apago LED
; 250 veces 2,28ms son 0,57s

MOVLW d'250'

; Llamar a un retraso de 2,28ms

Pgina
XLIII

Cdigo fuente
MOVWF
CALL
DECFSZ
GOTO

del
delay
time,F
ld52

DECFSZ acu,F
GOTO
ld53
BSF
MOVLW
MOVWF
BCF

STATUS,RP0
b'11111111'
TRISB
STATUS,RP0

MOVLW d'250'
MOVWF time
RETURN

; banco mem 1
; RB5 input
; banco mem 0
; 250 veces 2,28ms son 0,57s

;--------------------- Rutina de retraso ---------------------------;


La variable "del" contiene el valor del
;
retraso segn: <del> * 7,2us + 40 * 12us = retraso
;
La rutina tiene 2 partes (delay y delay2)
;
DELAY ejecuta un retraso constante de 40*12us = 0,48ms
;
y no recibe nign parmetro de entrada
;
DELAY2 ejecuta un retraso segun la variable "del"
;
1<"del"<250, de mx 7,2us*250 = 1,8ms
;
as el retraso sera 0,4872ms < retraso < 2,28ms
;
que coincide con los lmites del servo
;-------------------------------------------------------------------delay MOVLW d'40'
MOVWF del3
delay3 MOVLW d'10'
MOVWF cont3
NOP
NOP
NOP
retar3 NOP
NOP
DECFSZ cont3,F
GOTO
retar3
NOP
DECFSZ del3,F
GOTO
delay3
NOP

; 40 ciclos de 12us = 0,48 ms


;(mnimo ptimo del servo)
; contador grande
; 60 instrucciones X 200 ns = 12us
; contador pequeo

; decrementa cont en 1, salta si con1=0

; decrementa del en 1, salta si del=0

;-------------------------------------delay2 MOVLW d'6'


MOVWF cont
NOP

; 36 instrucciones X 200 ns = 7,2us


; contador pequeo

retar NOP
NOP
DECFSZ cont,F
GOTO
retar
NOP
DECFSZ del,F
GOTO
delay2

; 250 ciclos de 7,2us = 1,8 ms


; 1,8 ms + 0,48ms = 2,28 ms
;(mximo ptimo del servo)

NOP
RETURN

Pgina
XLIV

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;____________________________________________________________________
;----------------- Rutina de comunicacin Master I2C ---------------; Esta rutina planifica las acciones que se pretenden realizar y
; llama a cada procedimiento secuencialmente:
;
+ Enva Start
;
+ Enva Stop
;
+ Evna ACK
;
+ Enva NACK
;
+ Enva Dato
;
+ Enva Direccin para escritura
;
+ Enva Direccin para lectura
;
+ Esperar y recibir ACK / NACK
;
+ Esperar y recibir Dato
; SDA y SCL se controlan mediante los bits de direccin TRIS, ya que
; el nivel del bus se libera en colector abierto (con pull-up), de
; manera que la salida fsica del pin siempre es 0 (PORTB)
;-------------------------------------------------------------------;-------------------- Secuencia de escritura de direcciones ----------------i2c_wr MOVF
BTFSC
GOTO
CALL
MOVF
MOVWF
CAll
BTFSS
RETURN
CALL

slv_gen,W
STATUS,Z
resend
s_send
slv_gen,W
slave
write_s
mot3,5

;
;
;
;

compruevo si slv_gen es 0
si lo es, envo los parmetros a todas las patas
Mando seal Start
Cargo la direccin del esclavo escojido en "slave"

vari

;
;
;
;

Mando demanda de escritura


compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
envo el resto de variables

s_send

; Mando seal Start

MOVF
MOVWF
CAll
BTFSS
RETURN
CALL

slv1,W
slave
write_s
mot3,5

; Cargo la direccin del esclavo 1 en "slave"

MOVF
MOVWF
CAll
BTFSS
RETURN
CALL

slv2,W
slave
write_s
mot3,5

MOVF
MOVWF
CAll
BTFSS
RETURN
CALL

slv3,W
slave
write_s
mot3,5

MOVF
MOVWF
CAll
BTFSS
RETURN
CALL

slv4,W
slave
write_s
mot3,5

MOVF
MOVWF
CAll
BTFSS

slv5,W
slave
write_s
mot3,5

RETURN
resend CALL

vari

vari

vari

vari

;
;
;
;

Mando demanda de escritura


compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
envo de variables

; Cargo la direccin del esclavo 2 en "slave"


;
;
;
;

Mando demanda de escritura


compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
envo de variables

; Cargo la direccin del esclavo 3 en "slave"


;
;
;
;

Mando demanda de escritura


compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
envo de variables

; Cargo la direccin del esclavo 4 en "slave"


;
;
;
;

Mando demanda de escritura


compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
envo de variables

; Cargo la direccin del esclavo 5 en "slave"


; Mando demanda de escritura
; compruevo si ha habido ACK

Pgina
XLV

Cdigo fuente
RETURN
CALL
vari

; No ha habido ACK por 10 veces, error de envo


; envo de variables

MOVF
MOVWF
CAll
BTFSS
RETURN
CALL

; Cargo la direccin del esclavo 6 en "slave"

slv6,W
slave
write_s
mot3,5
vari

;
;
;
;

Mando demanda de escritura


compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo
envo de variables

RETURN
;----------------- Secuencia de escritura de los parmetros ---------------vari

MOVF
MOVWF
CAll
BTFSS
RETURN

speed,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "speed"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

centro,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "centro"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

rango,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "rango"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

zanco,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "zanco"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

altura,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "altura"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

mode,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "mode"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

action,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "action"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

m1,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "m1"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

MOVF
MOVWF
CAll
BTFSS
RETURN

m2,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "m2"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

Pgina
XLVI

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


MOVF
MOVWF
CAll
BTFSS
RETURN

m3,W
send_d
data_s
mot3,5

;
;
;
;
;

Envo de "m3"
Cargo el dato que deseo mandar en "send_d"
Mando el dato, si NACK repite el envo
compruevo si ha habido ACK
No ha habido ACK por 10 veces, error de envo

CALL

p_send

; Mando seal de Stop

RETURN
;------------------- Secuencia de lectura de parmetros -------------------i2c_rd
CALL

s_send

; Mando seal Start

MOVF
MOVWF
CAll
BTFSS
RETURN

slv_gen,W
slave
read_s
mot3,5

; Cargo la direccin del esclavo escojido en "slave"

CALL
MOVF
MOVWF
CALL

data_r
read_d,W
r_mot2
ack_s

;
;
;
;

recibo el dato en read_d


el dato recibido es mot2
traslado el dato a una variable buffer
ACK para que mande el siguiente dato

CALL
MOVF
MOVWF
CALL

data_r
read_d,W
r_mode
ack_s

;
;
;
;

recibo el dato en read_d


el dato recibido es mode
traslado el dato a una variable buffer
ACK para que mande el siguiente dato

CALL
MOVF
MOVWF
CALL

data_r
read_d,W
r_zanco
ack_s

; recibo el dato en read_d


; el dato recibido es zanco
; traslado el dato a una variable buffer
; ACK para que mande el siguiente dato

; Mando demanda de escritura


; compruevo si ha habido ACK
; No ha habido ACK por 10 veces, error de envo

CALL
data_r
MOVF
read_d,W
MOVWF r_altu

; recibo el dato en read_d


; el dato recibido es altura
; traslado el dato a una variable buffer

CALL

; Mando seal de Stop

p_send

RETURN

Pgina
XLVII

Cdigo fuente
;------------------ Mandar secuencia de Sart --------------------s_send
BSF
BSF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BCF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF
BCF
BCF

STATUS,RP0
TRISB,1
TRISB,4
STATUS,RP0
PORTB,4
s_send

;
;
;
;
;
;
;
;

Enviar Start
banco mem 1 (TRISB est en banco 1)
SDA en alto
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6us

STATUS,RP0
TRISB,1

; banco mem 1
; SDA flanco de bajada mientras SCL en alto
; retraso de 1,6 us

STATUS,RP0
TRISB,4
STATUS,RP0

;
;
;
;

banco mem 1
SCL en bajo para encadenar con el siguiente pulso
banco mem 0
el cdigo cumple el retraso total de 1,6 us

RETURN
;------------------ Mandar secuencia de Paro --------------------p_send
BSF
BCF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BSF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BCF

STATUS,RP0
TRISB,1
TRISB,4
STATUS,RP0
PORTB,4
p_send

;
;
;
;
;
;
;
;

Enviar Stop
banco mem 1 (TRISB est en banco 1)
SDA en bajo
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6us

STATUS,RP0
TRISB,1

; banco mem 1
; SDA flanco de subida mientras SCL en alto
; retraso de 1,6 us

STATUS,RP0

; banco mem 0

RETURN

Pgina
XLVIII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;-------------------------- Mandar dato -------------------------; Entradas: dato a mandar en "send_d"
;----------------------------------------------------------------data_s MOVF
send_d,W
MOVWF dato

;
;
;
;

Enviar dato (MSB primero)


el dato se modifica, pero la info est
a salvo en send_d
reinicio contador a 8

dato,7
bit_1
STATUS,RP0
TRISB,1
hold
STATUS,RP0
TRISB,1
TRISB,4

;
;
;
;

el bit es 0?
el bit es 1
banco mem 1
el bit es 0, SDA = 0

;
;
;
;

banco mem 1
el bit es 1, SDA = 1
me aseguro que SCL en bajo al empezar
retraso total de 1,6 us

STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
snd

;
;
;
;
;
;

banco mem 1
SCL en alto manda el bit
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6 us

STATUS,RP0
TRISB,4
STATUS,RP0
dato,F

CAll
ack_r
BTFSC mot3,5

;
;
;
;
;
;
;
;
;
;

banco mem 1
SCL en bajo para encadenar con el siguiente pulso
banco mem 0
roto dato a la izquierda
retraso software mayor de 1'6 us
inicialmente 8
hasta el bit 0, repito el proceso
retraso software mayor de 1'6 us
llamo a la comprovacin de ACK
compruevo ACK

RETURN

; Si ACK, salgo

MOVLW d'8'
MOVWF cont2
new_bit
BTFSC
GOTO
BSF
BCF
GOTO
bit_1 BSF
BSF
hold
BCF
NOP
NOP
NOP
NOP
NOP
NOP
snd
BSF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BCF
BCF
RLF

DECFSZ cont2,F
GOTO
new_bit

MOVF

send_d,W

MOVWF
INCF
MOVF
SUBLW
BTFSS
GOTO
CLRF
GOTO

dato
fail,F
fail,W
d'10'
STATUS,Z
data_s
fail
fallo

; si NACK, cargo de nuevo la variable y


; repito desde el principio

;
;
;
;
;

10 fail
si fail=10, 10-fail = 0
si fail < 10, vuelvo a intentar
si fail = 10, borro fail y
error

Pgina
XLIX

Cdigo fuente
;-------------------------- recibir dato ------------------------; Salidas: dato recibido en "read_d"
;----------------------------------------------------------------data_r MOVLW d'8'
MOVWF cont2

; Recibir dato (MSB primero)


; reinicio contador a 8

n_bit NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
BSF
BSF
BCF
BTFSS
GOTO
BTFSS
GOTO
BSF
GOTO
b_zero BCF
decr
DECFSZ
GOTO
GOTO
corr_0 RLF

; restraso de 1,6 us mientras slave prepara el dato

STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
n_bit
PORTB,1
b_zero
read_d,0
decr
read_d,0
cont2,F
corr_0
fin_r
read_d,F

NOP
BSF
BCF
NOP
NOP
NOP
NOP
NOP
GOTO

STATUS,RP0
TRISB,4

banco mem 1
SCL en alto para recibir el bit
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, testeo SDA
SDA=0
SDA=1, enciendo el bit 0

; borro el bit 0
; decremento el contador
;
;
;
;
;
;
;
;

y lo corro a la izquierda
cuando haya corrido 8 veces, el primero
recibido estar en el bit 7
no hace falta ms retraso para que se cumpla
el Ton de SCL
banco mem 1
SCL en bajo para encadenar con el siguiente pulso
retraso preventivo de 1us

;
;
;
;

no hace falta ms retraso para que


se cumpla el Ton de SCL
banco mem 1
SCL en bajo para encadenar con el siguiente pulso

n_bit

fin_r NOP
BSF
BCF
CALL

;
;
;
;
;
;
;
;

STATUS,RP0
TRISB,4
ack_s

RETURN
;------------------------ Enviar Direccin para escritura ------------------; Entradas: Direccin del esclavo en "slave"
;---------------------------------------------------------------------------write_s
BCF
MOVF
MOVWF
CALL

slave,0
slave,W
send_d
data_s

; Enviar Direccin para escritura


; bit0 de slave para escritura = 0
; preparo el byte a mandar
; llamo a enviar el dato

RETURN

Pgina L

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;---------------------- Enviar Direccin para lectura --------------------; Entradas: Direccin del esclavo en "slave"
;-------------------------------------------------------------------------read_s
BSF
MOVF
MOVWF
CALL

slave,0
slave,W
send_d
data_s

; Enviar Direccin para lectura


; bit0 de slave para lectura = 1
; preparo el byte a mandar
; llamo a enviar el dato

RETURN
;------------------------ leer ACK / mandar NACK --------------------------ack_r
BSF
BSF
NOP
NOP
NOP
NOP

STATUS,RP0
TRISB,1

puls_9 BSF
BSF
BCF
BTFSS
GOTO
BTFSS
GOTO
BCF
GOTO
hold2 BSF
NOP

STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
puls_9
PORTB,1
hold2
mot3,5
hold3
mot3,5

hold3 BSF
BCF
BCF

STATUS,RP0
TRISB,4
STATUS,RP0

;
;
;
;

comprueva ACK / enva NACK


banco mem 1
SDA=1 para permitir modificacin desde slave
Retraso preventivo de 0,8 us

;
;
;
;
;
;
;
;

banco mem 1
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, compruevo SDA
SDA=0, ACK
SDA=1, NACK

; retraso software de 1'6 us


;
;
;
;

banco mem 1
SCL en bajo para encadenar con el siguiente pulso
banco mem 0
retraso software mayor de 1'6 us

RETURN
;------------------------ Mandar ACK --------------------------ack_s
BSF
BCF
NOP
NOP
NOP
NOP
NOP
NOP
NOP
puls9 BSF
BSF
BCF
BTFSS
GOTO
NOP
NOP
NOP
NOP
BSF
BCF
BCF

;
;
;
;

Enviar ACK
banco mem 1
SDA=0 significa ACK
Retraso total de 1,6us

STATUS,RP0
TRISB,4
STATUS,RP0
PORTB,4
puls9

;
;
;
;
;
;

banco mem 1
SCL en alto
banco mem 0
SCL est bloqueado por esclavo (=0)?
S, lo intento hasta que el esclavo lo libere
No, retraso total de 1,6 us

STATUS,RP0
TRISB,4
STATUS,RP0

; banco mem 1
; SCL en bajo para encadenar con el siguiente pulso
; banco mem 0

STATUS,RP0
TRISB,1

RETURN

Pgina LI

Cdigo fuente
;------------------------ Mandar NACK --------------------------nack_s
CALL

ack_r

; Enviar NACK
; recibir un ACK pone SDA en nivel alto,
; por lo que es lo mismo que mandar NACK

RETURN
;------------------------ En caso de Fallo --------------------------fallo CALL
led4
RETURN

; mensaje de error

;------------------ Rutina de Servicio de Interrupcin--------------;


Para salvar y reestablecer el reg. status se usa swap pk as
;
no se altera su contenido, ya que status contiene los flags
;
aritmticos. Al volver de la rutina se reestablece el orden
;
de los nibbles.
;
Este programa no usa ninguna fuente de interrupcin, aunque
;
queda preparado para asumir en un futuro prximo las
;
las fuentes de interrupcin:
;
flanco de rubida de RB0/int
;
Evento en el mdulo SSP (Multi-Master Mode)
;
ovrerflow del Timer 0
;-------------------------------------------------------------------isr

MOVWF
SWAPF
MOVWF
MOVF
MOVWF

w_temp
STATUS,W
stat_t
PCLATH,W
pcl_t

; salva regstro W en reg. temporal


; salva el reg. status
; dandole la vuelta

BCF
BCF

INTCON,GIE
STATUS,RP0

; apago interrupciones
; banco mem 0

;------------------------ Pooling ----------------------------------BTFSC


GOTO
BTFSC
GOTO
BTFSC
GOTO
GOTO

INTCON,INTF
i_rb0
PIR1,SSPIF
i2c_ev
PIR1,TMR1IF
i_tmr1
escape

; pooling de RB0/INT
; pooling de evento en el mdulo SSP
; pooling de overflow Timer1

;------------------ Interrupcin externa ---------------------------i_rb0 BCF


BSF
GOTO

INTCON,INTF
INTCON,INTE
escape

; limpiamos el flag
; desenmascaramos la INT

;------------------------- Timer1 ----------------------------------i_tmr1 BCF


BSF
BSF
BCF

PIR1,TMR1IF
STATUS,RP0
PIE1,TMR1IE
STATUS,RP0

;
;
;
;

MOVLW
MOVWF
MOVLW
MOVWF

h'3C'
TMR1H
h'B0'
TMR1L

; cargo 3C en TMR1H y

BSF
GOTO

mot,4
escape

;
;
;
;
;
;
;

limpiamos el flag
banco mem 1 (PIE1 est en banco 1)
desenmascaramos la INT
banco mem 0

cargo B0 en TMR1L para que


juntos hagan 3CB0, que hasta FFFF incrementa
C350 veces, que son 50000 veces en decimal,
de manera que el timer se demora
200ns x 2 x 50000 = 20ms (2 es el preescaler)
subo bandera de ciclo
as se ejecuta cada 20ms

Pgina LII

Proyecto MIHRO (Mobile Intelligent Hexapod Robot)


;-------------------------- Interrupcin I2C ---------------------i2c_ev BCF
BSF
BSF
BCF

PIR1,SSPIF
STATUS,RP0
PIE1,SSPIE
STATUS,RP0

;CALL i2c_com

;
;
;
;

limpiamos el flag
banco mem 1 (PIE1 est en banco 1)
desenmascaramos la INT
banco mem 0

; accin en caso de evento en el mdulo SSP


; puesto que es single master, no se usa

;------------------------- Salida de ISR ------------------------escape MOVF


MOVWF
SWAPF
MOVWF
SWAPF
SWAPF

pcl_t,W
PCLATH
stat_t,W
STATUS
w_temp,F
w_temp,W

RETFIE

;
;
;
;

le da la vuelta al stat_t
y lo reestablece en status
reestablece W desde W_temp
dandole la vuelta 2 veces

; salgo de rutina

;-----------------------------------------END
;------------------------------------------

(Total: 1572 lneas)

Pgina LIII

You might also like