72
Universidad Autónoma Metropolitana Unidad lztapalapa Brazo mecánico controlado por motores de paso acoplados a un sistema con microprocesador Reporte final presentado a la División de Ciencias Básicas e Ingeniería, como parte del Proyecto de Ingeniería Electrónica II Departamento de Ingeniería Eléctrica Carrera: Ingeniería E l e c t r ó d ,.:,;;J.. , .."" Asesor: <P \r Donaciano Jiménéz V z :/ Por Rodolfo Hernández Valdez 91320399 Miguel Angel Mendoza Delgado 92220209 Abril de 2000

Brazo mecanico

Embed Size (px)

Citation preview

Page 1: Brazo mecanico

Universidad Autónoma Metropolitana Unidad lztapalapa

Brazo mecánico controlado por motores de paso acoplados a un sistema con microprocesador

Reporte final presentado a la División de Ciencias Básicas e Ingeniería, como parte del Proyecto de Ingeniería Electrónica II

Departamento de Ingeniería Eléctrica

Carrera: Ingeniería E l e c t r ó d ,.:,;;J.. , ..""

Asesor: <P \r

Donaciano Jiménéz V z

:/

Por Rodolfo Hernández Valdez 91 320399 Miguel Angel Mendoza Delgado 92220209

Abril de 2000

Page 2: Brazo mecanico

lndice

Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Propósito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Justificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

Capítulo 1 ¿Qué es un robot? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1 . 1 El término robof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2 Generaciones de robots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3 Clasificación de los robots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.4 Partes de un robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Capítulo 2 Características generales de los robots . . . . . . . . . . . . . . . . . . . 11

2.1 Grados de libertad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1 . 1 Punto de vista de la teoría de mecanismos y máquinas . . . . . . . . 12

2.1.2 Punto de vista de la Robótica . . . . . . . . . . . . . . . . . . . . . 14

2.2 Volumen de trabajo: Capacidad de carga . . . . . . . . . . . . . . . . . . . 14

2.3 El concepto de gr@per(elemento terminal) . . . . . . . . . . . . . . . . . . . 14

2.3.1 Tipos de herramientas . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.4 Precisión en la repetibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.5 Velocidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.6 Lenguajes de programación . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.6.1 Lenguajes de la primera generación . . . . . . . . . . . . . . . . . . 17

2.6.2 Lenguajes de la segunda generación . . . . . . . . . . . . . . . . . . 17

Capítulo 3 Cinemática y posicionamiento de robots . . . . . . . . . . . . . . . . . . . 18

3.1 Articulaciones robóticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.2 La cinemática aplicada a la Robótica . . . . . . . . . . . . . . . . . . . . . . 19

3.3 Problema cinemático directo . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.4 Problema cinernático inverso . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Page 3: Brazo mecanico

Capítulo 4 Motores eléctricos de paso a paso . . . . . . . . . . . . . . . . . . . . . . . 24

4.1 Elementos motrices de los robots . . . . . . . . . . . . . . . . . . . . . . . . 24

4.2 Motores eléctricos de paso a paso . . . . . . . . . . . . . . . . . . . . . . . 25

4.3 Sistemas de control para motores PAP . . . . . . . . . . . . . . . . . . . . . 28

4.3.1 Sistemas de control en lazo abierto, basados en microprocesador . . . 28

Capítulo 5 Sistemas de control con microprocesador . . . . . . . . . . . . . . . . . . . 30

5.1 Estructura y funciones del sistema de control . . . . . . . . . . . . . . . . . 30

5.2 Niveles de control por computadora . . . . . . . . . . . . . . . . . . . . . . . 31

Capítulo 6 Implementación del brazo mecánico . . . . . . . . . . . . . . . . . . . . . 32

6.1 Circuito interface entre la PC y los motores de paso . . . . . . . . . . . . . . 32

6.1 . 1 Diseño del circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.1.2 Lista de material . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6.2 Descripción de los motores . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

6.3 Programa de simulación y control del brazo mecánico . . . . . . . . . . . . . 36

6.3.1 Instrucciones de uso . . . . . . . . . . . . . . . . . . . . . . . . . . 36

6.3.2 Código fuente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Page 4: Brazo mecanico

Introducción La Robótica es un concepto de dominio público. La mayor parte de la gente tiene una idea de lo que es la

Robótica, sabe sus aplicaciones y 'el potencial que posee; sin embargo, no conocen el origen de la palabra

robot, ni tienen idea de la naturaleza de las aplicaciones útiles de la Robótica como ciencia.

La Robótica, como la conocemos hoy en día, tiene sus orígenes hace miles de años. Comenzaremos

aclarando que, antiguamente, los robots eran conocidos con el nombre de autómatas, y la Robótica no era

reconocida como ciencia, es más, la palabra robot surgió hasta mucho después del origen de los autómatas.

Desde el principio de los tiempos, el hombre ha deseado crear vida artificial. Se ha empeñado en dar

vida a seres artificiales que le acompañen en su morada, o que realicen sus tareas repetitivas, pesadas o

difíciles de realizar por un ser humano. Estos primeros autómatas utilizaban, principalmente, la fuerza bruta

para poder ejecutar sus movimientos. A las primeras máquinas herramientas que ayudaron al hombre a

facilitarle su trabajo no se les daba el nombre de autómata, sino más bien se les reconocía como artefactos o

simples máquinas.

Antiguamente, se creaban artefactos capaces de realizar tareas diarias y comunes para los hombres,

o bien para facilitarles las labores cotidianas; se daban cuenta de que había tareas repetitivas que se podían

igualar con un complejo sistema, y es así como se comienzan a crear máquinas capaces de repetir las

mismas labores que el hombre realizaba. Los ingenieros griegos aportaron grandes conocimientos acerca de

los autómatas, aunque su interés estaba enfocado más bien hacia el saber humano que hacia las

aplicaciones prácticas. Tiempo después, los autómatas fueron los protagonistas principales de una infinidad

de relatos de ciencia-ficción.

Los primeros robots creados en toda la historia de la humanidad no tenían más que un solo fin:

entretener a sus dueños. Sus inventores sólo se interesaban en conceder los deseos de recrear a quien les

pedía construir el robot. Sin embargo, estos inventores se comenzaron a dar cuenta de que los robots podían

imitar movimientos humanos o de alguna criatura viva. Estos movimientos pudieron ser mecanizados y, de

esta manera, se podían automatizar y mecanizar algunas de las labores más sencillas de aquellos tiempos. El

origen del desarrollo de la Robótica se basa en el empeño por automatizar la mayoría de las operaciones en

una fábrica; esto se remonta al siglo XVII, en la industria textil, donde se diseñaron telares que se controlaban

con tarjetas perforadas.

I

Page 5: Brazo mecanico

Objetivo Diseñar y construir un brazo mecánico controlado por un programa de computadora que manipule los motores

de paso correspondientes a cada grado de libertad del brazo.

Propósito Conocer las ventajas y desventajas del uso de la computadora personal y los motores de pasos en la

implementación de un brazo de robot.

Con el nacimiento de la Revolución Industrial, muchas fábricas tuvieron gran aceptación por la automatización

de procesos repetitivos en la linea de ensamblaje. La automatización consiste, principalmente, en diseñar

sistemas capaces de ejecutar tareas repetitivas hechas por los hombres y de controlar operaciones sin la

ayuda de un operador humano. El término automatización también se utiliza para describir a los sistemas

programables que pueden operar independientemente del control humano. La mayoría de las industrias han

sido automatizadas o utilizan tecnologia para automatizar algunas labores; en la industria de la telefonia, la

marcación, la transmisión y la facturación están completamente automatizadas.

La aparición de los robots es consecuencia directa del desafio que ha representado para el hombre

hacer cada vez más eficientes los procesos de producción. Asi, las aplicaciones de la Robótica en la

automatización de esos procesos se han convertido en parte imprescindible de fábricas de aparatos

electrónicos, automóviles, etc.

Hay estadísticas que indican claramente las ventajas de la utilización de un robot en lugar de mano

de obra humana en ciertas tareas (sin mencionar las implicaciones sociales de la Robótica, que no trataremos

en este Proyecto). Entre esas ventajas están la velocidad y la precisión con que operan los robots, incluyendo

el hecho de que "no se cansan" y "no protestan".

Además, existen aplicaciones donde la Robótica juega un papel fundamental, es decir, sin ésta sería

prácticamente imposible llevar a cabo tales aplicaciones, por ejemplo, el manejo de sustancias radioactivas

mediante brazos manipuladores.

2

Page 6: Brazo mecanico

1

¿Qué es un robot?

1 .I El término robot Desde la antigüedad se ha tenido la idea de crear autómatas que imitaran a los hombres o a los animales.

Pero no fue sino hasta este siglo cuando se desarrolló la tecnología para construir máquinas que sustituyeran

al hombre en tareas pesadas, peligrosas o monótonas. Tales máquinas reciben el nombre de robot. Este

término, de origen checo, aparece por vez primera en novelas de ciencia ficción, aunque es hasta el año 1961

cuando llega a la industria el primer robot util.

Mikell Groover, en su libro Automation, Production Systems and Computer lntegrated Manufacturing,

define al robot industrial como "...una máquina programable, de propósito general, que posee ciertas

características antropomórficas, es decir, con características basadas en la figura humana...". La figura 1 . 1

muestra la analogía existente entre las partes del brazo humano y el mecánico.

TEBRATO BRAZO -" - _""" ""

K

Figura 1.1. El brazo mecánico es un robof con características anfropomótficas.

3

Page 7: Brazo mecanico

Cabe destacar que la característica antropomórfica más común en nuestros días es la de un brazo

mecánico, el cual realiza diversas tareas industriales.

Pero el robot industrial, que se conoce y emplea en nuestros días, no surge como consecuencia de la

tendencia o afición de reproducir seres vivientes, sino de la necesidad. Con el objetivo de diseñar una

máquina flexible, adaptable al entorno y de fácil manejo, George Devol, pionero de la Robótica Industrial,

patentó, en 1956, un manipulador programable que fue el germen del robot industrial.

Para las normas ISO, un robot industrial es un manipulador automático reprogramable y multifuncional,

que posee ejes capaces de agarrar materiales, objetos, herramientas, mecanismos especializados, a través

de operaciones programadas para la ejecución de una variedad de tareas.

Un robot industrial es una máquina que puede efectuar un número diverso de trabajos,

automáticamente, mediante la programación previa; su estructura es en forma de brazo mecánico y tiene la

capacidad de adaptarse a diferentes aprehensores o herramientas. Un robot tiene la posibilidad de llevar a

cabo trabajos completamente diferentes e, incluso, tomar decisiones según la información procedente del

mundo exterior mediante el adecuado programa operativo de su sistema informático.

Los usos actuales de los robots son:

Militares

Industriales

Personales

Educativos

Existen en el mercado diversas empresas dedicadas a la fabricación de robots industriales, por 10 que existen

diferentes marcas y modelos. Estos últimos normalmente son asignados para identificarlos o de acuerdo a su

función.

La Robótica es una tecnología transdisciplinaria, ya que no solamente hace uso de los recursos que le

proporcionan varias ciencias afines, sino que la misma Robótica produce notables transformaciones en cada

una de estas ciencias: Electrónica, Computación, Automática, Matemáticas, Mecánica, ...

4

Page 8: Brazo mecanico

1.2 Generaciones de robots La primera generación se caracteriza por mecanismos de relojería que permiten mover cajas

musicales o juguetes de cuerda y lavarropas de ciclo fijo. Están limitados a un número pequeño de

movimientos.

La segunda generación, en vez de utilizar interruptores, usa una secuencia numérica de control de

movimientos almacenados. El 90 YO de los robots industriales en USA pertenecen a esta generación.

La tercera generación de robots utiliza las computadoras para su estrategia de control y tiene algún

conocimiento del ambiente local a través del uso de sensores.

La cuarta generación mejora las extensiones sensoriales, para comprender sus acciones y el

mundo que los rodea. Utilizan lógicas difusas y procesamiento dirigido por expectativas.

La quinta generación pretende que el control emerja de la adecuada organización y distribución de

módulos conductuales; esta nueva arquitectura es denominada arquitectura de subsumción.

1.3 Clasificación de los robots Hay diversas propuestas en la clasificación de los robots; Japón, país líder tanto en la construcción como en

la aplicación de robots en diversos campos, ofrece una clasificación muy amplia, que se presenta a

continuación:

Robots Manipuladores: Son sistemas mecánicos multifuncionales, con un sencillo sistema de control,

que permite gobernar el movimiento de sus elementos, de los siguientes modos:

0 Manual: cuando el operario controla directamente la tarea del manipulador.

0 De secuencia fija: cuando se repite, de forma invariable, la tarea del manipulador.

0 De secuencia variable: se pueden alterar algunas características de los ciclos de trabajo.

Robots de repetición o aprendizaje: Son manipuladores que se limitan a repetir una secuencia de

movimientos, previamente ejecutada por un operador humano, haciendo uso de un controlador manual o un

dispositivo auxiliar. En este tipo de robots, el operario en la fase de enseñanza, se vale de una pistola de

5

Page 9: Brazo mecanico

programación con diversos pulsadores o teclas, o bien, de joystics, o bien utiliza un maniquí o, a veces,

desplaza directamente la mano del robot.

Robots con control por computadora: Son manipuladores o sistemas mecánicos multifuncionales,

controlados por una computadora. En este tipo de robots, el programador no necesita mover realmente el

elemento de la máquina, cuando la prepara para realizar un trabajo. El control por computadora dispone de un

lenguaje especifico, compuesto por varias instrucciones adaptados al robot, con las que se puede

confeccionar un programa de aplicación utilizando sólo la terminal de la computadora y no el brazo.

Robots inteligentes: Son similares a los del grupo anterior, pero además son capaces de relacionarse

con el mundo que les rodea a través de sensores y tomar decisiones en tiempo real (autoprogramables). La

visión artificial, el sonido de la máquina y la inteligencia artificial, son las ciencias que más se están

estudiando para su aplicación en los robots inteligentes.

Micro-Robots: Con fines educacionales, de entrenamiento o investigación. Existen numerosos robots

de formación o micro-robots a un precio muy accesible y cuya estructura y funcionamiento son similares a los

de la aplicación industrial.

Tomando en cuenta ésta y otras propuestas, hemos hecho una clasificación más general: hay robots de

tres clases. Los robots de aprendizaje graban en su memoria electrónica los movimientos que han ejecutado

por vez primera para que, posteriormente, los reproduzcan fielmente, sin ninguna intervención ulterior del

hombre. Los robots programados están gobernados por una computadora, cuyas instrucciones siguen

constantemente. Por último, los robots autoadaptables disponen de detectores, captadores, cámaras de

televisión u otros medios que le permiten tener en cuenta los eventuales cambios del entorno para modificar

su programa.

1.4 Partes de un Robot Un manipulador robótico podría ser visto más que sólo como una serie de enlaces mecánicos. El brazo

mecánico sólo es un componente de todo un Sistema Robótico, mostrado en la figura 1.2, el cual consiste del

brazo, fuente de poder externa, elemento terminal (gripper), sensores exteros e internos, servo-control,

interface con la computadora y control por computadora. Aún el software programado podría ser considerado

como una parte integral de todo el sistema, dado que la manera en la cual el robot es programado y

controlado puede tener un impacto mayor en su desempeño y un subsecuente rango de aplicaciones.

6

Page 10: Brazo mecanico

Fuente de poder externa

residente terminal

Figura 1.2. Componentes de un Sistema Robótico.

El brazo humano puede ser representado en un robot, cuyas articulaciones le permiten hasta seis

grados de libertad y que, por consiguiente, puede orientarse en todas las direcciones; lleva en su extremo

libre dos pinzas o algún sistema de fijación para las herramientas que ha de usar; sus movimientos son

regulados por mecanismos (p. ej. motores PAP) acoplados a un microprocesador.

La idea común que se tiene de un robot industrial es la de un brazo mecánico articulado pero, como

se habia mencionado al inicio de este apartado, este elemento no es más que una parte de lo que se

considera técnicamente como un sistema de robot industrial.

Un sistema de robot industrial consta de las siguientes partes:

Manipulador o brazo mecánico.

Controlador.

Elementos mofrices o actuadores.

Elemento terminal, herramienta o aprehensor.

Sensores de información en los robots inteligentes.

7

Page 11: Brazo mecanico

Así, al robot industrial se le engloba dentro de la arquitectura de la celda flexible de manufactura, en la

que se combinan los diversos dispositivos que configuran un núcleo básico de producción.

Manipulador: Recibe el nombre de manipulador o brazo de robot, el conjunto de elementos mecánicos

que propician el movimiento del elemento terminal (aprehensor o herramienta). Dentro de la estructura interna

del manipulador se alojan, en muchas ocasiones, los elementos motrices, engranajes y transmisores que

soportan el movimiento de las cuatro partes que, generalmente, suelen conformar el brazo:

Base o pedestal de fijación

Cuerpo

Brazo

Antebrazo

Los cuatro elementos rígidos del brazo están relacionados entre si mediante articulaciones, como se muestra

en la figura 1.3, las cuales pueden ser giratorias, cuando el movimiento permitido es de rotación, o

prismáticas, en las que existe un movimiento de traslación entre los elementos que relacionan.

Figura 1.3. Componentes del brazo manipulador.

8

Page 12: Brazo mecanico

A semejanza con el brazo humano, a las uniones o articulaciones del manipulador se les denomina:

O Unión del cuerpo (base-cuerpo)

O Unión hombro (cuerpo-brazo)

O Unión codo (brazo-antebrazo)

O Unión muñeca (antebrazo-aprehensor)

El número de elementos del brazo, y de las articulaciones que los relacionan, determinan los grados de

libertad del manipulador que, en los robots industriales, suelen ser 6 y coinciden con los movimientos

independientes que posicionan las partes del brazo en el espacio.

Controlador: Recibe este nombre el dispositivo que se encarga de regular el movimiento de los elementos del manipulador y todo tipo de acciones, cálculos y procesado de información que se realiza.

La complejidad del control varía según los parámetros que se gobiernan, pudiendo existir las siguientes

categorías:

O Controlador de posición: interviene en el control de la posición del elemento terminal. Puede

actuar en modo punto a punto, o bien, en modo continuo, en cuyo caso recibe el nombre de

control continuo de trayectoria.

O Controlador dinámico: toma en cuenta las propiedades dinámicas del manipulador, motores y

elementos asociados.

O Control adaptativo: considera la variación de las características del manipulador al variar la

posición.

Elementos motrices o actuadores: Son los encargados de producir el movimiento de las articulaciones

directamente o a través de poleas o cables. Se clasifican en tres grupos:

O Neumáticos: emplean aire comprimido como fuente de energía y son muy indicados en el control

de movimientos rápidos, pero de precisión limitada.

0 Hidráulicos: son recomendables en los manipuladores que tienen una gran capacidad de carga,

junto con una precisa regulación de velocidad.

0 Eléctricos: son los más utilizados, por su fácil y preciso control, as¡ como por otras propiedades

ventajosas que reporta su funcionamiento.

Page 13: Brazo mecanico

Elemento Terminal (gripper): es un dispositivo que se une a la muñeca del brazo del robot con la

finalidad de activarlo para la realización de una tarea específica.

Por Io general, la problemática del elemento terminal radica en que ha de soportar una elevada

capacidad de carga y, al mismo tiempo, conviene que tenga peso y tamaño reducidos. Como consecuencia

de la amplia variedad de tareas a las que se destinan los robots, el elemento terminal adopta formas muy

diversas. En bastantes ocasiones es necesario diseñar el elemento terminal de acuerdo a la aplicación en la

que se emplea.

Los diversos tipos de elementos terminales podemos dividirlos en dos grandes categorías: pinzas y

herramientas,

Las pinzas han sido diseñadas para que el robot cargue y descargue objetos, transporte materiales y

ensamble piezas. Los tipos de pinzas más comunes pertenecen al tipo llamado pivotante. Los dedos de la

pinza giran en relación con los puntos fijos del pivote. De esta manera, la pinza se abre y se cierra. Otro tipo

de pinzas se denominan de movimiento h a / En este caso, los dedos se abren y se cierran ejecutando un

movimiento paralelo entre sí.

AI momento de diseñar una pinza deben tomarse en cuenta la forma y peso de la pieza de trabajo, así

como el tipo de movimiento que harán los dedos. Con estos lineamientos, se puede asegurar una buena

sujeción, de tal forma que la pinza no modifique o dañe la estructura de la pieza. Una regla general es que la

pinza debe sujetar a la pieza de trabajo de su centro de gravedad. Esto ocasiona que se anulen los

momentos que se pudieran generar por el peso de la pieza de trabajo. Para reducir los tiempos de ciclo en

operaciones de carga y descarga de piezas a máquinas-herramientas, se pueden diseñar efectores finales

con doble pinza. Existen otros tipos de pinzas como ventosas, pinzas magnéticas y pinzas adhesivas.

Dependiendo de la aplicación, se pueden sustituir las pinzas por herramientas.

Sensores de Información: Los robots de la Mima generación tienen capacidad para relacionarse con el

entorno y tomar decisiones en tiempo real, para adaptar sus planes de acción a las circunstancias exteriores.

La información que reciben les hace autoprogramables, o sea, alteran su actuación en función de la situación

externa, Io que supone disponer de un cierto grado de inteligencia artificial,

10

Page 14: Brazo mecanico

Características generales de los robots

2.1 Grados de libertad Son 10s paremetros que se precisan para determinar la posición y la orientación del elemento terminal del

manipulador. También se pueden definir los grados de libertad como los posibles movimientos básicos (giros

y desplazamientos) independientes.

Los grados de libertad del brazo de un manipulador están directamente relacionados con su anatomía o

configuración.

Un mayor número de grados de libertad conlleva al aumento de la flexibilidad en el posicionamiento del

elemento terminal. Aunque la mayoría de las aplicaciones industriales requieren de 6 grados de libertad, como

las de soldadura, mecanizado y paletización, otras más complejas exigen un número mayor, tal es el caso de

las labores de montaje. Tareas más sencillas y con movimientos más limitados, como las de pintura, suelen

exigir 4 ó 5 grados de libertad.

La mano humana cuenta con unos 22 grados de libertad y, al mismo tiempo, la vista y el tacto ligados al

cerebro, le permiten una habilidad increíble en un sinnúmero de operaciones. Entonces, es necesario limitar el

número de grados de libertad al mínimo indispensable. Esto se hace mediante el siguiente análisis:

La posición de un cuerpo rigido en el espacio (figura 2.1) queda determinada si conocemos la posición

de tres de sus puntos. Estos, a su vez, quedan determinados por nueve coordenadas,

Page 15: Brazo mecanico

Figura 2.1. Posición de un cuerpo rígido en el espacio.

dado que el cuerpo es rígido, se cumple que las distancias entre los puntos son constantes, por Io que se

obtienen las siguientes relaciones:

Estas tres relaciones permiten eliminar tres incógnitas. Entonces, tenemos 6 coordenadas libres, lo que

nos indica que se puede construir un mecanismo con seis grados de libertad, para colocar un objeto en

cualquier punto del espacio a su alcance y con cualquier orientación. (De hecho, en los robots industriales,

tres grados de libertad se emplean para definir la posición en el espacio y los otros tres para orientar la mano

de sujeción o herramienta).

2.1 .I Punto de vista de la teoría de mecanismos y máquinas

Dada una configuración cinemática cualquiera, el criterio de Grijbler permite establecer el número de grados

de libertad correspondiente.

Page 16: Brazo mecanico

Sea un sistema formado por N elementos indeformables. En el espacio de tres dimensiones, cada uno

de estos elementos dispone de seis grados de libertad, de los que tres corresponden a las tres coordenadas

{XO, yo, ZO) del centro de coordenadas asociado a éI, y los otros tres definen la posición angular de los ejes (x, y, z) respecto a la referencia global. Si los elementos no estuvieran conectados mediante pares cinemáticos,

sería preciso conocer 6N parámetros para definir las posiciones de todos ellos. Además, uno de los elementos (el soporte) es fijo y, por lo tanto, el número de grados de libertad se reduce a 6(N-1).

Por otra parte, los elementos del manipulador se encuentran unidos entre sí mediante pares cinemáticos

R o P, que permiten, únicamente, un desplazamiento. El par que conecta la mano de sujeción con el resto del

brazo (par esférico E) permite tres giros. En los robots con una configuración tradicional, cada elemento tiene

dos pares cinemáticos, excepto el soporte y la mano de sujeción, que sólo tienen uno.

El número de pares cinemáticos R o P es N-2, si existe un Único par esferico E. El número de grados

de libertad del mecanismo se puede, entonces, calcular como:

G 6 {N-?) -5 (N-2) -3 N -t ?

La forma habitual de trabajo de los robots manipuladores se puede asimilar a una generación de

trayectorias en su forma restringida, entendiendo por tal la que trata de colocar un punto de mecanismo en

una posicibn determinada. Si se impone, como única condición, que el centro de la mano de sujeción del

robot ocupe una posición dada (x, y, z), y el brazo manipulador sea de seis grados de libertad, quedarán tres

parámetros sin definir.

Para ilustrar mejor Io que se ha comentado aquí, supóngase un brazo manipulador que actúa en el plano

y sea de un tipo derivado de una cadena abierta formada por N elementos unidos mediante N - 1 pares R.

Si se fija uno de los elementos, por ejemplo el 1 , se obtendrá un sistema cuyo número de grados de

libertad es:

G = 3 (N-?) -2 (N-1) = N-1,

ya que cada elemento en el plano posee tres grados de libertad y cada par R restringe dos.

I3

Page 17: Brazo mecanico

2.1.2 Punto de vista de la Robótica

El punto de vista desde el que se contempla el problema de cálculo de los grados de libertad, en las obras

que tratan exclusivamente sobre Robótica, es un tanto menos formal que el descrito en el apartado anterior,

aunque, por supuesto, perfectamente válido. La diferencia fundamental estriba en el número de elementos a

tener en cuenta y en la forma de construir la muñeca de la mano de sujeción. En efecto, el rótulo se

materializa mediante tres pares de rotación y la mano mediante tres elementos diferentes, con Io que el

número de elementos pasa a ser dos o más que los N considerados en el apartado anterior. Por otra parte, en

la Robótica se acostumbra a no considerar al fijo como un elemento. Llamando E al número de elementos así

contados, se verifica:

€ = N + 1

El número de grados de libertad se puede calcular teniendo en cuenta que los elementos se unen

mediante pares de rotación:

G = 6€-5€= €

Los elementos de un robot con seis grados de libertad son: la base, el brazo, el antebrazo y los tres que

componen la mano.

2.2 Volumen de trabajo: Capacidad de carga El peso (en kilogramos) que puede transportar una garra del manipulador recibe el nombre de capacidad de

carga. A veces, este dato Io proporcionan los fabricantes, incluyendo el peso de la propia carga. La capacidad

de carga es una de las características que más se tienen en cuenta en la selección del robot, según la tarea a

que se destine. En soldadura y mecanizado es común precisar capacidades de carga superiores a los 50 Kg.

2.3 El concepto de gripper (elemento terminal) Existe una gran variedad de elementos terminales requeridos para efectuar las diferentes funciones de

trabajo. Esta variedad de elementos pueden ser divididos en dos categorías principales:

Grippers

Tools

Los grippers son elementos terminales utilizados para sujetar y sostener objetos. Los objetos son

generalmente piezas de trabajo que tienen que ser movidas por el robot. Estas aplicaciones de manejo de

I4

Page 18: Brazo mecanico

piezas incluyen carga y descarga, tomar las piezas de una banda transportadora y colocar partes en un pallet.

Además de las piezas de trabajo, otros objetos manejados por el gripper del robot incluyen cajas, botes,

materia prima y herramientas.

Los grippers pueden ser clasificados como grippers sencillos o grippers dobles, aunque esta

clasificación se aplica mejor a los grippers mecánicos. El gripper sencillo se distingue por el hecho de que

solamente es colocado un dispositivo de sujeción en el elemento terminal del robot. Un gripper doble tiene

dos dispositivos de sujeción colocados en el elemento terminal y es utilizado para manejar dos objetos por

separado. Ambos dispositivos pueden actuar independientemente. El doble gripper es utilizado para las

funciones de carga y descarga. El término gripper múltiple es utilizado cuando son colocados dos o más

dispositivos de sujeción en el elemento terminal del robot.

2.3.1 Tipos de herramientas

En muchas aplicaciones, el robot requiere manipular una herramienta en vez de sólo piezas de trabajo

(partes). En la mayoría de las aplicaciones de robots, en las cuales una herramienta es manipulada, la

herramienta es colocada directamente al robot. En estos casos, la herramienta es el elemento terminal.

Algunos ejemplos de herramientas utilizadas en las aplicaciones de robot como elementos terminales son:

Spot-Welding tools (Herramientas de soldadura punto), Arc-Welding torch (Soplete de soldadura en arco),

Spray-painting nozzle (Pintura en Spray), Drilling (taladrado), Routing, Wire brushing (pintura), Grinding,

Liquid cement applications for assembly (Aplicaciones de cemento líquido), heating torches, Waterjet cuffing

tool (Herramienta de corte a presión).

En cada caso, el robot debe controlar la actuación de la herramienta. Por ejemplo, el robot debe

coordinar la ejecución de la soldadura punto como parte de su ciclo de trabajo. Esto es controlado de la

misma manera en que el gripper se abre y cierra.

2.4 Precisión en la repetibilidad Esta magnitud establece el grado de exactitud en la repetición de los movimientos de un manipulador al

realizar una tarea programada.

Dependiendo del trabajo que se deba realizar, la precisión en la repetibilidad de los movimientos es

mayor o menor. Así, por ejemplo, en labores de ensamblaje de piezas, dicha característica ha de ser menor

que k 0.1 mm. En soldadura, pintura y manipulación de piezas, la precisión en la repetibilidad está

comprendida entre 1 y 3 mm y en las operaciones de mecanizado, la precisión ha de ser menor de 1 mm.

Page 19: Brazo mecanico

2.5 Velocidad En muchas ocasiones, una velocidad de trabajo elevada aumenta extraordinariamente el rendimiento del

robot, por lo que esta magnitud se valora considerablemente en la elección del mismo.

En las tareas de soldadura y manipulación de piezas es muy aconsejable que la velocidad de trabajo

sea alta. En pintura, mecanizado y ensamblaje, la velocidad debe ser media e incluso baja.

2.6 Lenguajes de programación La programación de robots es la utilizada en las aplicaciones industriales y consta de dos técnicas

fundamentales:

0 programación gestual

0 programación textual

La programación gestual consiste en guiar el brazo del robot directamente a Io largo de la trayectoria que

debe seguir. Los puntos del camino se graban en la memoria y luego se repiten. Este tipo de programación

exige el empleo del manipulador en la fase de enseñanza, es decir, trabaja on line.

En la programación textual, las acciones que ha de realizar el brazo se especifican mediante las

instrucciones de un lenguaje; las trayectorias del manipulador se calculan matemáticamente con gran

precisión y se evita el posicionamiento a ojo, muy corriente en la programación gestual.

El primer lenguaje textual de un robot fue WAVE, desarrollado en 1973 como un lenguaje experimental,

para la investigación de la inteligencia artificial en el laboratorio de Stanford. Esta investigación demostraba la

factibilidad de la coordinación mano-ojo del robot. El desarrollo de un siguiente lenguaje fue en 1974, en

Stanford. Este lenguaje fue llamado AL y podía ser utilizado en el control de múltiples brazos de robot en la

realización de las tareas que requerían la coordinación de brazos. Muchos de los conceptos de WAVE y AL

se utilizaron en el desarrollo del primer lenguaje textual comercial para programar un robot: VAL (Victor's

Assembly Language) fue presentado por Unimation, Inc. para sus series de robots PUMA. Este lenguaje fue

mejorado como VAL /I y presentado en 1984.

El trabajo en el desarrollo de lenguajes para robots también fue realizado por la IBM. Dos de los

lenguajes de la IBM son AUTOPASS y AML (A manufacturing Languages) utilizados para el ensamble y

tareas similares.

16

Page 20: Brazo mecanico

Otros lenguajes textuales para robots que deben ser mencionados son RAIL, presentado en 1981 por

Atdomafix for robotic assembly and arc welding así como la máquina de visión MCL (Manufacturing Control

Language) desarrollado por la fuerza aérea como un lenguaje mejorado de APT (Automatic Programmed

Tooling) y HELP utilizado por la Compañía General Electric.

2.6.1 Lenguajes de la primera generación

Utilizan una combinación de comandos y procedimientos para desarrollar programas de robots. Fueron

desarrollados largamente para implementar el control del movimiento por medio de la programación con

lenguaje textual. Una característica típica de estos lenguajes incluye la capacidad de definir el movimiento del

manipulador, interpolación lineal y comandos elementales de sensor que involucran señales de on/off. El

lenguaje VAL es un ejemplo de un lenguaje de programación de un robot de primera generación. Las

limitaciones comunes de este tipo de lenguajes comprenden la incapacidad de especificar cálculos complejos

de aritmética para ser utilizados durante la ejecución del programa, la incapacidad de hacer uso de sensores

complejos y sensores de datos, y una limitada capacidad para comunicarse con otras computadoras.

2.6.2 Lenguajes de la segunda generación

Los lenguajes de la segunda generación superan muchas de las limitaciones de los lenguajes de la primera

generación y añaden otras capacidades incorporando características que hacen que el robot parezca más

inteligente. Las características y capacidades de los lenguajes de la segunda generación pueden ser listados

como sigue:

0 Control del movimiento.

0 Capacidades avanzadas de sensor: tiene la capacidad de manejar algo más que señales

binarias onloff y la capacidad de controlar dispositivos por medio de sensores de datos.

0 lnteligencia limitada: es la capacidad de utilizar información recibida del ambiente de trabajo para

modificar el comportamiento del sistema de una manera programable.

Comunicaciones y procesamiento de datos: cuentan con la capacidad de interactuar con otras

computadoras y con bases de datos computarizadas con el propósito de mantener registros,

generar reportes y controlar actividades en la celda de manufactura.

17

Page 21: Brazo mecanico

Cinemática y posicionamiento de robots

3.1 Articulaciones robóticas Un robot industrial es un manipulador que puede realizar diversas tareas dentro de un espacio de trabajo

determinado. Está compuesto de elementos conectados mediante articulaciones en una cadena cinemática

abierta. Normalmente, las articulaciones son giratorias (rotación) o prisrndficas (traslación). Una articulación

giratoria es como una bisagra y permite relativa rotación entre dos elementos. Una articulación prismática

permite relativo movimiento lineal entre dos elementos. El símbolo R representa las articulaciones giratorias y

P las articulaciones prismáticas, como se muestra en la figura 3.1.

I

Articulación I

Figura 3.1. Representación simbólica de alficulaciones de robots.

18

Page 22: Brazo mecanico

Cada articulación representa la interconexión entre dos elementos contiguos I y I ;+l. Denotamos el eje

de rotación de una articulación giratoria o el eje a Io largo del cual una articulación prismática se desliza, por Zi

si la articulación es la interconexión de los elementos i e i +l. Las variables de articulación, denotadas por 6 ,

para una articulación giratoria y como d; para una articulación prismática, representan desplazamiento relativo

entre elementos adyacentes.

3.2 La cinemática aplicada a la Robótica La cinemática del brazo del robot trata con el estudio analítico de la geometría del movimiento de un brazo de

robot con respecto a un sistema de coordenadas de referencia fijo, sin considerar las fuerzas o momentos que

originan el movimiento. Así, la cinemática se interesa por la descripción analítica del desplazamiento espacial

del robot como una función del tiempo, en particular de las relaciones entre la posición de las variables de

articulación y la posición y orientación del efector final del brazo del robot.

Hay dos problemas fundamentales en la cinemática del robot. El primer problema se suele conocer

como el problema cinemático directo, mientras que el segundo problema es el problema cinemático inverso.

Como las variables independientes en un robot son las variables de articulación, y una tarea se suele dar en

términos del sistema de coordenadas de referencia, se utiliza de manera más frecuente el problema

cinernático inverso. Denavit y Hartenberg [I9551 propusieron un enfoque sistemático y generalizado de utilizar

álgebra matricial para describir y representar la geometría espacial de los elementos del brazo del robot con

respecto a un sistema de referencia fijo. Este método utiliza una matriz de transformación homogénea 4 x 4

para describir la relación espacial entre dos elementos mecánicos rígidos adyacentes y reduce el problema

cinernático directo a encontrar una matriz de transformación homogénea 4 x 4 que relaciona el

desplazamiento espacial del sistema de coordenadas de la mano al sistema de coordenadas de referencia.

Estas matrices de transformación homogéneas son también útiles en derivar las ecuaciones dinámicas de

movimiento del brazo del robot. En general, el problema cinernático inverso se puede resolver mediante los

métodos algebraico, iterativo o geométrico.

3.3 Problema cinernático directo Suponer que se desea mover el manipulador desde su posición original A hasta una posición B, entre cuyos

puntos el robot sigue el contorno de la superficie S a C, a una velocidad constante, mientras mantiene una

fuerza prescrita F normal a la superficie.

19

Page 23: Brazo mecanico

El primer problema encontrado es describir la posición de la herramienta y los sitios A y B (y, muy

probablemente, la superficie entera S) con respecto a un sistema de coordenadas común.

A veces, el manipulador puede ser capaz de captar su posición de alguna manera, utilizando

sensores internos (decodificadores de posición), localizados en las articulaciones 1 y 2, los cuales pueden

medir directamente los ángulos de las articulaciones (31 y (32. Entonces necesitaríamos, por lo tanto, expresar

las posiciones A y B en términos de esos ángulos de las articulaciones. Esto conduce al problema cinernático

directo, el cual determina la posición y la orientación del elemento terminal o herramienta, en términos de los

ángulos de las articulaciones. Es común establecer un sistema fijo de coordenadas, denominado marco de la

base, al cual todos los objetos, incluyendo el manipulador, toman como referencia. En este caso,

establecemos el marco de la base coordenado o, x, y,, en la base del robot, como se muestra en la figura 3.2.

Figura 3.2. Marcos coordenados para un robot lineal de dos elementos.

Las coordenadas (x, y) de la herramienta son expresadas en este marco coordenado como

x = al cos %I + a2 cos (8, + g2)

y = al sen el + a2 sen (0, + e2)

2 0

Page 24: Brazo mecanico

Además, la orientación del marco de la herramienta, relativa al marco de la base, está dada por los

cosenos de dirección de los ejes xz y y2 , relativos a los ejes xo y yo, esto es,

los cuales podemos combinar en una matriz de orientación,

donde io, j o son los vectores unitarios orthonormales estándares en el marco de la base y iz, j 2 son los

vectores unitarios orthonormales estándares en el marco de la herramienta.

Estas ecuaciones son llamadas las ecuaciones cinemáticas directas. Para un robot de seis grados de

libertad, estas ecuaciones son bastante complejas y no pueden escribirse tan fácilmente como el manipulador

de dos elementos.

3.4 Problema cinemático inverso

Ahora, dados los ángulos de las articulaciones 01 y 8 2 , podemos determinar las coordenadas x y y. Con el

objeto de dirigir al robot para moverse hacia la posición B, necesitamos Io inverso; esto es, necesitamos las

variables de las articulaciones en términos de las coordenadas x y y de B. Este es el problema cinemático

inverso. En otras palabras, dados x y y e n las ecuaciones cinemáticas directas, deseamos resolverlas para los

ángulos de las articulaciones. Dado que las ecuaciones cinemáticas directas no son lineales, una solución

puede no ser fácil de encontrar, no hay una solución única en general. Podemos ver, por ejemplo, en el caso

de un mecanismo plano de dos elementos, que no puede haber solución si las coordenadas dadas (x, y)

están fuera del alcance del manipulador. Si estas coordenadas están en el alcance del manipulador, puede

haber dos soluciones, como se muestra en la figura 3.3. Las denominadas configuraciones elbow up y elbow

down, pueden ser exactamente una solución si el manipulador debe extenderse completamente para alcanzar

el punto. En algunos casos puede haber un numero infinito de soluciones (cuando el mecanismo consta de

más elementos).

2 1

Page 25: Brazo mecanico

t

Figura 3.3. Soluciones múltiples de la cinemáfica inversa.

Considerar el diagrama de la figura 3.4. Usando la ley de los cosenos, podemos verificar que el

ángulo 63 está dado por

t

X

Figura 3.4. Obfención de los ángulos de las articulaciones de un brazo plano de dos elernenfos.

Ahora, podemos determinar 192 como

6 = cos -l (0)

No obstante, una mejor manera de encontrar 63 es darse cuenta que, si cos (82) está dado por (I), entonces

sen (82) está dado por

2 2

Page 26: Brazo mecanico

y, por lo tanto, & puede determinarse por

La ventaja de esta última aproximación es que las soluciones elbow up y elbow down pueden recuperarse

encontrando los signos positivo y negativo en (2), respectivamente.

El problema cinernático inverso puede solucionarse (en la mayoría de los manipuladores

correspondientes a robots industriales comercializados actualmente) sin que sea necesario recurrir a

procedimientos iterativos de resolución de sistemas de ecuaciones no lineales. Tales procedimientos

requieren un número de operaciones tan grande, que harían imposible el control eficaz del robot (para pasar

de una posición a otra sería preciso esperar un tiempo excesivamente largo).

Por el contrario, en el caso de robots con más de seis grados de libertad, en los que hay que recurrir a

criterios de optimización para obtener la posición de los elementos, resulta imprescindible utilizar

procedimientos iterativos.

Page 27: Brazo mecanico

Motores eléctricos de paso a paso

4.1 Elementos motrices de los robots Existen tres tipos de dispositivos que producen el movimiento de las articulaciones del manipulador:

hidráulicos, neumáticos y eléctricos.

Los dispositivos neumáticos hacen uso de aire comprimido y los hidráulicos de un fluido a presión. Se

aconseja el empleo de elementos hidráulicos en los manipuladores que deban poseer gran capacidad de

carga, con un aceptable control de la velocidad. Los dispositivos neumáticos ofrecen mayor velocidad, aunque

con una regulación imprecisa de ésta.

En cambio, los motores eléctricos se caracterizan por la facilidad de realizar un control preciso de su

movimiento. Han adquirido mayor aplicación en la Robótica debido a la facilidad de encontrar energía

eléctrica en cualquier parte, unido a su funcionamiento limpio y seguro, y su fácil adaptación a los circuitos

electrónicos basados en microprocesadores.

Dentro de los diversos tipos de motores eléctricos, los más adecuados para el movimiento de las

articulaciones de los manipuladores son los de corriente continua y los de paso a paso (PAP).

Los de corriente continua producen un par casi proporcional al voltaje de entrada, por Io que tienen una

regulación precisa. Requieren captadores que informen al sistema de control sobre la posición del eje en cada

instante, realizando un trabajo en bucle cerrado.

Los motores PAP giran su eje un ángulo fijo, aplicando a sus bobinas un conjunto adecuado de

impulsos eléctricos. No requieren detectores de la posición de su eje, ya que el simple conteo de los impulsos

aplicados determina el ángulo girado. Trabajan en bucle abierto; pero, al no recorrer su eje todas las

posiciones posibles, limitan el área de trabajo.

24

Page 28: Brazo mecanico

4.2 Motores eléctricos de paso a paso Un motor es un aparato que convierte energía eléctrica en energía mecánica en base al hecho de que una

corriente eléctrica, que circula por una espira dentro de un campo magnético, experimenta una torca.

El principio de funcionamiento de los motores PAP se basa en las fuerzas de atracción y repulsión

ejercidas entre polos magnéticos.

Figura 4.1. Posicionamiento de/ rotor ante /as fuerzas magnéticas ejercidas por /os dos estafores.

Las bobinas del estator A se alimentan de tal manera que se comportan como un polo Norte, mientras

que las del estator B hacen de éste un polo Sur. Con esta situación, el rotor giratorio, que consiste en un imán

permanente, se mueve hasta alcanzar la posición de equilibrio.

Si el estator tuviese cuatro polos, al cambiar su polaridad, mediante un control externo, el rotor giraría

con incrementos angulares de 90". Para obtener incrementos angulares más pequeños, se incrementa el

número de polos del estator. La interacción entre los polos del estator y los del rotor hace que, al aplicarse

dos ondas cuadradas, defasadas un cuarto de periodo entre si, a las dos bobinas de los electroimanes, el

rotor gire un cuarto de paso polar por cada cambio de polaridad en la tensión aplicada a las bobinas. Así, para

un motor con doce pares de polos por bobina del estator, se producirán 48 pasos de revolución, o sea, 7.5"

por paso.

2 5

Page 29: Brazo mecanico

Figura 4.2. Motor de pasos elemental.

Existen dos modos de funcionamiento para los motores de paso a paso, a saber:

Paso completo (Full-step mode).

Medio paso (Half-step mode).

El motor realiza el paso en cuanto la secuencia adecuada se transfiere a las bobinas. Después de cuatro

pasos, se conectan nuevamente las dos primeras bobinas, repitiéndose la secuencia. Se llama ángulo de

paso al ángulo que gira el eje del motor, cada vez que se cambia la polaridad de las bobinas, siendo una

función del número de dientes del rotor y de la secuencia aplicada.

La velocidad del motor es proporcional a la frecuencia con la que se envían los impulsos de excitación a

los devanados.

Por su construcción, los motores de pasos se dividen en cuatro tipos:

De imán permanente (PM).

De reluctancia variable de una pila (VR).

De reluctancia variable de multipilas (VRSM).

Hibridos (HSM).

2 6

Page 30: Brazo mecanico

Los motores de pasos híbridos son la combinación de la estructura de los motores de pasos de

reluctancia variable y los de imán permanente. Pueden tener dos secciones (de estator y rotor) o más, con un

eje de imán permanente entre las dos secciones. Cada sección incluye un rotor dentado y un estator con sus

polos dentados y sus devanados, respectivamente. El número de dientes del rotor y del estator son diferentes.

Los dientes del estator están perfectamente alineados en las dos secciones y los dientes del rotor están

alineados con un defasamiento de 1/2 grado.

Figura 4.3. Empleo de transistores para el arranque de un motor de pasos

$~~~~~ emcum

Figura 4.4. Las 4 bobinas se conectan a un circuito amplificador.

2 7

Page 31: Brazo mecanico

En la figura 4.3 se muestra la representación esquemática para el encendido de un motor de pasos.

Se hace uso de transistores para iniciar la secuencia. Los transistores amplifican de la señal de entrada que,

generalmente, proviene de un microprocesador, que envía una corriente muy baja. Así, los transistores

amplifican esta corriente hasta cien veces (lo suficiente para energizar las bobinas e iniciar el funcionamiento

del motor). La conexión de los cables de un motor de pasos se muestra en la figura 4.4.

4.3 Sistemas de control para motores PAP Una buena regulación del movimiento de un motor PAP exige un sistema de control apropiado. De manera

general, el sistema de control recibe las consignas de velocidad y sentido de giro y genera la secuencia de

impulsos eléctricos adecuada para su aplicación a las bobinas del motor, como se muestra en la figura 4.5.

VELOCIDAD b SISTEMA DE

SENTIDO DE GIRO CONTROL b

Figura 4.5. Esquema general de la actuación del sistema de control

4.3.1 Sistemas de control en lazo abierto, basados en microprocesador

El esquema por bloques de un sistema de control con microprocesador, funcionando en lazo abierto se

muestra en la figura 4.6.

SISTEMA CON CIRCUITO

MICROPROCESADOR DE > ADAPTACI~N

I I

Figura 4.6. Sistema de control en lazo abierto

2 8

Page 32: Brazo mecanico

Aquí, las señales de control generadas por el sistema deben tener en cuenta las restricciones que

impone el motor, la carga y el circuito de adaptación.

En los sistemas en lazo abierto no existe realimentación en la posición real del eje del motor, entonces

debe responder con precisión a los cambios de excitación que se aplican a sus bobinas. Si dichos cambios

son muy rápidos y el movimiento del eje no puede seguirlos, se originan errores de posicionamiento. También

deben tenerse en consideración las variaciones de la carga conectada al motor.

Sin embargo, el uso de un sistema basado en un microprocesador implica las siguientes ventajas:

1. Programa de control fácilmente variable, al estar basado en software.

2. Posibilidad de controlar otras funciones auxiliares

3. Posibilidad de dedicar parte de la memoria a guardar datos y programas de utilidad.

El sistema de control dotado de microprocesador puede encargarse de la generación de la secuencia de

estados, así como de las señales de tiempo y de carácter auxiliar. También puede entregar la información

digital sobre la posición y los comandos de arranque y parada, dejando la elaboración de las señales de

control de fase a un controlador posterior.

Si el sistema con microprocesador se encarga de todo el control, pueden usarse configuraciones

complejas que optimicen el funcionamiento del motor. Por ejemplo, se podria definir con exactitud la duración

de cada paso y ajustar con precisión la velocidad a una curva memorizada.

Cuando el sistema con microprocesador opera conjuntamente con un controlador auxiliar, los programas

son menos ambiciosos. Para motores PAP que alcanzan los 2000 pasosls y el paso tiene una duración de 50

microsegundos, un control exclusivo por software queda limitado entre unas 25 y 50 instrucciones, por cada

paso del motor, restringiendo el gobierno del sistema a las funciones más sencillas (duración del paso,

número y secuencia de pasos).

2 9

Page 33: Brazo mecanico

Sistemas de control con microprocesador

5.1 Estructura y funciones del sistema de control En la actualidad, la mayoría de los robots disponen, como sistema de control, de un mini, un conjunto

multimicroprocesador o un microcomputador, dependiendo del alcance y amplitud de sus funciones. Desde su

aparición, el microprocesador ha formado parte del controlador principal de la configuración propia de un

robot.

La construcción dinámica de algoritmos y la simulación de su validez empleando modelos, está siendo

desarrollada, experimentalmente, en algunos centros de investigación. Asimismo, está en fase de estudio la

construcción de sistemas de control, capaces de generar de forma continua y en tiempo real, los algoritmos

de gobierno, que adaptan la máquina a los cambios del mundo exterior.

Las funciones más importantes que debe llevar acabo el sistema de control son las siguientes:

1. Control y adaptación con los elementos motrices.

2. Control y adaptación con los sensores exteriores y procesamiento de la información que facilitan.

3. Elaboración y cálculo de las secuencias de movimientos.

4. Establecimiento de los métodos de control adaptativo, si los hubiese.

5. Coordinación con los demás dispositivos y máquinas, que conforman la célula de fabricación flexible,

en la que el robot es parte integrante y principal.

Un aspecto muy relevante del moderno sistema de control, corresponde al tipo de realimentación que usa

para la concepción del modelo dinámico. Dicha realimentación puede ser de origen interno, si el robot utiliza

información exclusiva de parámetros propios, y de origen externo, si tiene en cuenta el estado del entorno del

trabajo.

30

Page 34: Brazo mecanico

Las ecuaciones dinámicas se calculan en función de la velocidad, posición, aceleración, pares, etc.,

mediante un modelo matemático apropiado. Posteriormente, se hallan los pares que han de aplicarse a los

actuadores, que controlan los movimientos del robot

5.2 Niveles de control por computadora Los robots pueden clasificarse de acuerdo al tipo de control por parte del sistema microprocesador:

7 . Robots punto a punto sin servocontrol.

2. Robots punto a punto con servocontrol.

3. Robots con control continuo, para seguimiento de trayectorias.

4. Robots con capacidad de generación de trayectorias.

En el primer apartado, se encuentran los robots a los que se les muestra los puntos del camino que deben

seguir, almacenando dicha información en la memoria del sistema del sistema. La fase de aprendizaje se

puede realizar por medio de un teclado, un joystick, un brazo maestro o, directamente, trasladando el punto

final del manipulador.

Si no existe un mecanismo servocontrol, la situación de cada elemento del brazo se hace posible, ya sea

utilizando topes mecánicos o empleando motores de paso a paso, cuya posición se conoce de acuerdo con la

secuencia de impulsos aplicados.

El sistema de control para robots de punto a punto sin servocontrol suele emplear un Único

microprocesador. Los periféricos principales que soporta la CPU son dos:

Entrada de información. El teclado de control manual, junto con la puerta de información desde un

microcomputador, son los elementos encargados de recibir información desde el exterior.

Salida de información. Estos periféricos están formados por los adaptadores de los pulsos de control

que se aplican a las bobinas de los motores paso a paso, por la caja de control manual y por la

información que se traslada a la computadora principal.

La sección de entradalsalida, que conecta al microcomputador con el mundo exterior, consta de cuatro partes

importantes: gobierno de motores, teclado del mando manual de aprendizaje, comunicación serie y líneas

disponibles para el usuario.

31

Page 35: Brazo mecanico

n

Implementación del brazo mecánico

6.1 Circuito interface entre la PC y los motores de paso

El diseño del hardware (interface entre la PC y los motores de paso) forma parte de un sistema de control en

lazo abierto, es decir, no existe retroalimentación en la posición real del eje del motor; en consecuencia, las

señales de control generadas por el sistema con microprocesador, a través del puerto paralelo, deben tener

en cuenta las restricciones que impone el motor, la carga y el hardware controlador.

6.1.1 Diseño del circuito

El control del brazo mecánico requiere una PC, cuyo puerto paralelo transfiere los valores generados por un

programa residente en esta máquina escrito en lenguaje Turbo C.

Luego de identificar el bus de datos en el puerto paralelo, las 8 líneas digitales (DO-D7) se

configuran de la forma siguiente:

DO-D3: Son cuatro bits de información o dato por donde se envía la secuencia de pulsos para que

gire el motor seleccionado.

D4-D6: Son tres bits de dirección que seleccionan el motor, al que se envía la información.

El circuito interface (figura 6.1) consta de 8 circuitos integrados TTL y 6 circuitos amplificadores que

decodifican el dato y activan el motor seleccionado.

Los 7 bits pasan al decodificador (se conectan D4-D6 a los tres pines de selección del C.I. 74138) y

a los latches (se conectan DO-D3 a los pines de entrada de los C.I. 74375). El latch activado por el

decodificador suministra las cuatro señales QA-QD a los 6 circuitos amplificadores (ULN 2003) que

proporcionan la corriente necesaria a las bobinas de los motores.

32

Page 36: Brazo mecanico

I

Figura 6.1. Circuito eleclr6nko para controlar los mdores de paso a traves del puerto paralelo de una PC.

3 3

Page 37: Brazo mecanico

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

b + 4 . 5 v

Figura 6.2. Conexión de/ UN2003 a /as bobinas de/ motor.

6.1.2 Lista de material

I

1 1 SN74LS138N (Multiplexor para seleccionar 1 de 8 salidas)

1 SN74LS04N (Seis inversores)

6 SN74LS375NS (Cuatro latches de tres estados) I

1 I Conector DB25 Macho

14 Base para circuito integrado

2 Placa de circuito impreso tipo protoboard

Varios Cable plano y alambre para interconexiones

34

Page 38: Brazo mecanico

6.2 Descripción de los motores En la figura 6.3 se muestra la conexión de las líneas QA-QD a los cables de los motores utilizados.

QD

Qc QE QA

+ 4.5 v

I I

O O

Qc QE

L I

QA : azul QE : azul-blanco Qc : rojo QD : rojo-blanco Alimentación (+ 4.5 V) : negro y blanco

figura 6.3. Conexión de los motores del brazo mecánico,

La secuencia de estados lógicos que se aplican a las cuatro bobinas del motor PAP a controlar,

cuando su eje gira en el sentido de las manecillas del reloj, se presenta en la figura 6.4, mientras que en la

figura 6.5 se muestra el ciclo de estados lógicos para que el eje del motor gire en sentido contrario a las

agujas del reloj.

I I Fases del motor de pasos I

1 2 1 O 1 O O

3

1 O O O 4

O 1 O O

figura 6.4. Tabla de excitacidn CW de las fases del motor de pasos.

35

Page 39: Brazo mecanico

Fases del motor de pasos

figura 6.5 Tabla de excitación CC W de las fases del motor de pasos.

Se van a controlar motores de pasos con los siguientes datos:

npo: Híbrido.

Número de fases: 4 fases.

Ahgulo de fase: 2'1 paso.

Número de dientes delrotor. 45 dientes.

Número de dientes delestator. 36 dientes.

Movhiento del diente delrotor 8 grados.

Mowmiento deldiente delestator 1 0 grados.

Razón de pasos: 180 pasos I revolución.

El movimiento del diente se define como la separación angular entre dos puntos correspondientes

de los dientes adyacentes.

6.3 Programa de simulación y control del brazo mecánico Este programa, escrito en lenguaje Turbo C, tiene como finalidad controlar los motores de paso del brazo

mecánico, enviando palabras de control a través del puerto paralelo (bus de datos). Además, mientras el

brazo ejecuta sus movimientos, se presenta en el monitor de la computadora una simulación gráfica de tales

movimientos.

36

Page 40: Brazo mecanico

6.3.1 Instrucciones de uso

Posicionarse en el directorio donde se encuentra el archivo ejecutable y teclear Io siguiente:

A:\ >BRAZO29

Se debe ejecutar el programa en DOS, debido a que, al hacer pruebas, detectamos un conflicto

entre Windows y el programa del robot por el control del puerto paralelo, que se refleja en los retardos

adicionales (bastante significativos) que se observaron en el envío de los datos por el puerto LPTl .

Una vez hecho esto, aparecerá el menú de opciones del programa, donde el usuario debe teclear el

número correspondiente a la opción elegida, o la tecla Esc para salir a DOS.

(1) Introducir ángulos

(2) Introducir coordenadas

(3) Realizar tarea específica

(Esc) Salir

(1) Introducir ángulos: En esta opción, el usuario debe especificar cuántos grados girará cada

segmento del brazo.

Primer ángulo (correspondiente a la rotación de la base) -90 a 270 grados

Segundo ángulo (correspondiente al movimiento del -28 a 208 grados

hombro)

Tercer ángulo (correspondiente al movimiento del codo) -180 a 180 grados

Cuarto ángulo (correspondiente al movimiento de la -180 a 180 grados

muñeca)

Quinto ángulo (correspondiente al de giro de l a muñeca) -180 a 180 grados

Aprensar (1) o Soltar (O) Elegir entre cero y uno

(2) Introducir coordenadas: Eligiendo esta opción, el usuario debe señalar las coordenadas (4 J zj hacia donde el punto del brazo se debe dirigir.

37

Page 41: Brazo mecanico

Coordenada en X

Coordenada en Y

Coordenada en Z

Ángulo mano (correspondiente al movimiento de la -180 a 180 grados

muñeca)

Ángulo pinza (correspondiente al de giro de la muñeca) -180 a 180 grados

Aprensar (1) o Soltar (O) Elegir entre cero y uno

Los límites de las coordenadas dependen del ángulo con que la muñeca se acercará al objeto (Ángulo

mano).

(3) Tarea específica: Seleccionando esta opción, el brazo automáticamente realizará la tarea con

que ha sido programado previamente. ÉSta consiste en una acción repetida del llamado por coordenadas; se

le ingresan coordenadas de los diferentes puntos hacia donde el brazo se debe dirigir con la acción

correspondiente (Aprensar o Soltar).

6.3.2 Código fuente

En las páginas siguientes se muestra el programa completo, codificado en lenguaje Turbo C, correspondiente

al control y simulación del brazo mecánico.

//PROGRAMA DE SIMULACION GRAFICA Y CONTROL, A TRAVES DEL PUERTO PARALELO, DE UN BRAZO DE

//ROBOT CON 6 GRADOS DE LIBERTAD.

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <math.h>

#include <string.h>

#define ESC 0x1 b /* Define tecla de escape */

int xO,yO,zO,xl,yl,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6,x7,y7,z7,x8,y8,z8,x9,y9,z9; int ancholx,ancholy,ancho2x,ancho2y,Mancholx,Mancholy,Mancho2x,Mancho2y;

38

Page 42: Brazo mecanico

int Eyl,Ey2,Ey3,Ey4,Ey5,Ey6,Ey7,Ey8,Ey9,Eancholx,EanchoIy,Eancho2x,Eancho2y;

double fil,fi2,fi3,P,R,limiteinc,limiteinc2,limiteinc3;

int L,D,B,d,e,f,g,h,i;

int MxO,MyO,Mx1,Myl,Mx2,My2,Mx3,My3,Mx4,My4,Mx5,My5,Mx6,My6,Mx7,My7,Mx8,My8,Mx9,My9;

int auxXO,auxYO,auxXl,auxYl,auxX2,auxY2,auxX3,auxY3,auxX4,auxY4,auxX5,auxY5,auxX6,auxY6,auxX7,auxY7, auxX8, auxY8,auxX9,auxYS;

int desplaza1 ,desplaza2,desplaza3,desplaza4,desplaza5,pinza;

double senR,cosR,senP,cosP,senfil ,cosfil ,ox,oy,oz,ax,ay,az;

float x3ext,y3ext;

int z3ext,angulomano,angulopinza;

int finalx,finaly,finalz,Efinaly,Mfinalx,Mfinaly;

int realfi3,realP,limiteAng,norosa;

int tope,incremento,compensa,aprobado,incrernentofi2,CualSeMueve,SoltarSiAprisionara;

int lirnrealfi3,limrealP,tolerasigno,tecla;

char buf[4];

void IniciaGrafico(void)

{ I* autodetección */

int gdriver = DETECT, gmode, errorcode;

I* inicializa gráficos y variables locales */

initgraph(&gdriver, &gmode, "");

/* lee resultado de inicialización */

errorcode graphresult();

if (errorcode != grOk) I* si ocurrió un error *I

I printf("Graphics error: %s\n", grapherrorrnsg(errorcode));

printf("Presiona cualquier tecla para salir:");

getch0;

exit(1); /* termina con un código de error *I

1 I

//Calcula la componente X de algun vector.

int CalculaX(int rnagnitud,double angulol ,double angulo2)

{ int x ;

39

Page 43: Brazo mecanico

x=(magnitud*cos((angulol*3.1416)/180)*cos((angu102*3.1416)/180));

return(x);

1

//Calcula la componente Y de algún vector.

int CalculaY(int magnitud,double angulo1,double angulo2)

I int y;

y=(magnitud*sin((angulol*3.1416)/180)*cos((angulo2*3.1416)/180));

return(y);

1

//Calcula la componente Z de algún vector.

int CalculaZ(int magnitud,double angulol)

I in t z;

z=(magnitud*sin((angulol*3.1416)/180));

return(z);

1

//Dibuja componentes gráficos que permanecen estáticos mientras el brazo se mueve.

void Estatico(int Mx0,int MyO)

I setcolor(5);

line(233,308,402,308); //horizontales.

line(217,323,418,323);

line(200,340,435,340);

line(180,360,455,360);

line(l55,384,480,384);

line(125,413,510,413);

line(260,302,140,430); //verticales.

line(280,302,200,430);

line(300,302,260,430); line(320,302,320,430);

line(340,302,380,430);

line(360,302,440,430);

40

Page 44: Brazo mecanico

line(380,302,500,430);

setcolor(l4);

ellipse(320,360,0,360,2*h,2*(h/7));

setcolor(9);

Iine(320,360,MxO,MyO);

setcolor(l4);

circle(MxO,My0,4);

1

//Dibuja cada linea que conforma la estructura del brazo, dependiendo de las coordenadas que se le dan de entrada.

void DibujaLineas(int Mancholx,int Mancholy,int Mancho2xjnt Mancho2yjnt Mx3,int My3,int Mx4,int My4,int Mx5,

int My5,int Mx6,int My6,int Mx7,int My7,int Mx8,int My8,int Mx9,int My9,int Mfinalxjnt Mfinalyjnt color)

{ int colorl ,color2,color3,color4,color5;

if (color==O)

{colorl =0;color2=0;color3=0;color4=0;color5=0;}

else

{colorl=lO;color2=ll;color3=12;color4=13;color5=14;}

setcolor(color1);

line(Mancholx,Mancholy,Mancho2x,Mancho2y); //Brazo.

line(Mancholx,Mancholy,Mx6,My6);

line(Mancho2x,Mancho2y,Mx7,My7);

setcolor(color2);

line(Mx6,My6,Mx7,My7); //Antebrazo.

line(Mx6,My6,Mx8,My8);

line(Mx7,My7,MxS,MyS);

setcolor(color3);

line(Mx8,My8,MxS,MyS);

line(Mx8,My8,Mx3,My3);

line(MxS,MyS,Mx3,My3);

setcolor(color4);

line(Mx3,My3,Mx4,My4);

setcolor(color5);

//Muñeca.

//pinza.

41

Page 45: Brazo mecanico

line(Mx3,My3,Mx5,My5);

putpixel(Mfinalx,Mfinaly,colorl); //Punto final que indica la posición

1 //donde la pinza puede atrapar un objeto.

//Calcula cada coordenada de los puntos donde el brazo tiene una articulación

void HazMatematicas(void)

I x1 =xO+CalculaX(D,fil ,fi2); //Hombro.

yl=yO+CalculaY(D,fil,fi2);

zl=zO+CalculaZ(D,fi2);

x2=x1 +CalculaX(B,fil,fi3); //Codo.

y2=yl +CalculaY(B,fil,fi3);

z2=zl+CalculaZ(B,fi3);

x3=~2+CalculaX(d,fil ,P); //Muñeca.

y3=y2+CalculaY(d,fil ,P);

z3=~2+CalculaZ(d,P);

finalx=x2+CalculaX((d+i),fil,P); //Punto final del brazo.

finaly=y2+CalculaY((d+i),fil,P);

finalz=z2+CalculaZ((d+i),P);

senR=sin((R*3.1416)/180);

cosR=cos((R*3.1416)/180);

senP=sin((P*3.1416)/180);

cosP=cos((P*3.1416)/180);

senfil=sin((fil*3.1416)/180);

cosfi1=cos((fi1*3.1416)1180);

ox=(-(senR*cosfil"senP)-(senfil*cosR)); /hectores "o" y "a" que sirven

oy=(-(senR*senfil*senP)+(cosfil*cosR)); //para identificar la posición y

oz=cosP*senR; //orientación de la pinza.

ax=cosfil *cosP;

ay=senfil*cosP;

az=senP;

x4=~3t((e*ox)+(rax)); //Puntos para ambos dedos de la pinza

y4=y3+((e*oy)+(ray));

42

Page 46: Brazo mecanico

ancholx=xO+CalculaX(h,fil t90,O); //Define dos vectores anchol y ancho2

anchol y=yO+CalculaY(h,fil t90,O); //para el ancho del segmento del brazo.

ancho2x=x0+CalculaX(h,fil-90,0);

ancho2y=y0+CalculaY(h,fil-90,0);

x6=x1 +x0+CalculaX(h+(yl/l2),fi1+90,0); //Define dos vectores x6,y6,z6 y

y6=yl +yO+CalculaY(h+(yl/l2),fil +90,0); //x7,y7,z7 para el ancho del segmento

z6=zl; //del brazo, parte superior.

x7=x1+x0+CalculaX(h+(yl/12),fil-90,0);

y7=yl+yO+CalculaY(h+(yl/l2),fil-90,0); z7=zl;

x8=x2+x0+CalculaX(h+(y2/12),fi1+90,0); //Define dos vectores x8,y8,z8 y

y8=y2+y0+CalculaY(h+(y2/12),fi1+90,0); //x9,y9,z9 para el ancho del segmento

z8=z2; //del antebrazo, parte superior.

x9=x2+x0+CalculaX(h+(y2/12),fil-90,0);

y9=y2+y0+CalculaY(h+(y2/12),fil-90,0);

z9=z2;

1

//Después de haber hecho las matemáticas necesarias, esta función calcula los valores que deben tener las variables

//para representar gráficamente en el monitor un brazo de robot simulando un movimiento en 3D con perspectiva.

void CalculaCoordenadas(void)

I HazMatematicas();

Eyl=yl/7; //Calcula valores que representan movimiento elíptico.

Ey2=y2/7;

Ey3=y3/7;

Ey4=y4/7;

Ey5=y5/7;

Ey6=y6/7;

Ey7=y7/7;

Ey8=y8/7;

43

Page 47: Brazo mecanico

Ey9=y9/7;

Efinaly=finaly/7;

Eancholy=ancholy/7;

Eancho2y=ancho2y/7;

MxO=320; //Calcula valores para representar cada punto en el monitor.

My0=360-~0;

Mxl=320+xI ;

Myl=360+Eyl -zI ;

Mx2=320+x2;

My2=360+Ey2-~2;

Mx3=320+x3;

My3=360+Ey3-~3;

Mfinalx=320+finalx;

Mfinaly=360+Efinaly-finalz;

Mx4=320+x4;

My4=360+€~4-~4;

Mx5=320+x5;

My5=360+Ey5-~5;

Mx6=320+x6;

My6=360+€~6-~6;

Mx7=320+x7;

My7=360+Ey7-~7;

Mx8=320+x8;

My8=360+Ey8-~8;

Mx9=320+x9;

My9=360+Ey9-~9;

Mancholx=320+ancholx; //"Dibuja líneas" primero en color negro

Mancholy=360+Eancholy-~O; //para borrar la posicion anterior del brazo.

Mancho2x=320+ancho2x; //Después, con los colores correspondientes

Mancho2y=360+Eancho2y-~O; //para la nueva posición.

DibujaLineas(auxXO,auxYO,auxXl ,auxY1 ,auxX2,auxY2,auxX3,auxY3,auxX4,auxY4,auxX5,auxY5,auxX6,auxY6,auxX7, auxY7,auxX8,auxY8,auxX9,auxY9,0);

Estatico(Mx0,MyO);

44

Page 48: Brazo mecanico

DibujaLineas(Mancholx,Mancholy,Mancho2x,Mancho2y,Mx3,My3,Mx4,My4,Mx5,My5,Mx6,My6,Mx7,My7,Mx8,My8,Mx9,

MyS,Mfinalx,Mfinaly,l);

auxXO=Mancholx;

auxYO=Mancholy;

auxXl =Mancho2x;

auxYI=Mancho2y;

auxX2=Mx3;

auxY2=My3;

auxX3=Mx4;

auxY3=My4;

auxX4=Mx5;

auxY4=My5;

auxX5=Mx6;

auxYS=MyG;

auxX6=Mx7;

auxY6=My7;

auxX7=Mx8;

auxY7=My8;

auxX8=Mx9;

auxY8=My9;

auxXg=Mfinalx;

auxY9=Mfinaly;

1

//Determina si el punto final del brazo del robot se encuentra adelante, es decir, si se encuentra en el cuadrante definido

//por el ángulo de giro fi l .

int ManoAdelante(v0id)

I int resultado;

if ((fil>=O)&&(fi1<90))

{if (finalx>O) {resultado=l;} else {resultado=O;}}

if ((fil>=90)&&(fil480))

{if (finaly>O) {resultado=l;} else {resultado=O;}} if ((fil~=l8O)&&(fil~270))

{if (finalxc0) {resultado=l;} else {resultado=O;}}

if ((fil>=-90)&&(fil <O)) {if (finalyC0) {resultado=l;} else {resultado=O;}}

45

Page 49: Brazo mecanico

if (fil==270)

{if (finalyc0) {resultado=l;} else {resultado=O;}}

return(resultad0);

1

//Esta función checa que los dedos de la pinza no choquen con alguno de los segmentos del brazo de robot

int NoAtraviesa(void)

I int DondeEsta;

int decide=l;

i f ((CualSeMueve==l)~~(CualSeMueve==4)) //Si movemos el Antebrazo u hombro.

{ DondeEsta=ManoAdelante();

fi3=fi3+incremento;

P=P+incremento;

HazMatematicas();

if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante()))) {decide=O;}

fi3=fi3-incremento;

P=P-incremento;

1 if (CualSeMueve==2) //Si movemos la muñeca.

I DondeEsta=ManoAdelante();

P=P+incrernento;

realP=realP+incremento;

HazMatematicas();

if ((finalzc=L)&&(((finalx==O)&&(finaly==O))~~(DondeEsta!=ManoAdelante()))) {decide=O;}

P=P-incremento;

realP=realP-incremento;

if ((realfi3~=limiteinc2-180)&&(((realPc((90-Iimiteinc2)-180))&&(incremento==1))~~((realP~((90-limiteinc2)-180))

&&(reaIP~-45)&&(incremento==-l))))

{decide=O;}

if ((realfi3~=l80-limiteinc2)&&(((realP~(180-(90-limiteinc2)))&&(incremento==-l))((((realP~(l80-(90-limiteinc2)))

&&(realP>45)&&(incremento==l))))

{decide=O;}

1 if (CualSeMueve==3) //Si queremos girar la pinza.

46

Page 50: Brazo mecanico

{ if (((realfi3~=limiteinc2-180)&&(fi2~90))~~((realfi3~=180-limiteinc2)&&(fi2~90)))

{decide=O;}

if ((realP~=180-limiteinc3)~~(realP~=limiteinc3-180))

{decide=O;}

I return(decide);

//Este procedimiento mueve el ángulo "fi3", es decir, la articulación que corresponde al movimiento del codo,

//dependiendo del valor "desplaza3" que el usuario ingreso o que fue calculado en la función "CalculaAngulos"

void MueveBrazo(void)

I int fi3inicial=realfi3;

CualSeMueve=l ;

if (fi3-desplaza3!=fi3)

{

if (desplaza3<0) {incremento=-I;}

else {incremento=l;}

while ((fi3!=tope)&&(limiteAng==O)&&(NoAtraviesa()))

I while ((~2~=n0r0~a)~~(z3~=norosa)~~(z4~=norosa)~~(z5~=norosa)~J(f inalz~=norosa))

I if (ManoAdelanteO) {incrementofi2=1;} else {incrementofi2=-1;}

fi2=fi2+incrementofi2;

fi3=fi3+incrementofi2;

P=P+incrementofi2;

tope=tope+incrementofi2;

compensa=compensa+incrementofi2;

CalculaCoordenadas();

delay(1 O);

1 fi3=fi3+incremento;

P=P+incremento;

realfi3=realfi3+incremento;

if ((realfi3>limrealfi3)~~(realfi3~-limrealfi3)) {P=P-incremento;;fi3=fi3-incremento;realfi3=realfi3-incremento;limiteAng=l;}

41

Page 51: Brazo mecanico

CalculaCoordenadas();

delay( 1 O);

1 1 limiteAng=O;

desplaza3=desplaza3-(realfi3-fi3inicial);

1 J

//Este procedimiento mueve el ángulo "P", es decir, la articulación que corresponde al movimiento de la muñeca,

//dependiendo del valor "desplaza4" que el usuario ingreso o que fue calculado en la función "CalculaAngulos".

void MueveMuneca(v0id)

I int Pinicial=realP;

CualSeMueve=2;

if (P-desplaza4!=P)

I if (desplaza4<0) {incremento=-I;}

else {incremento=l;}

while ((P!=tope)&&(limiteAng==O)&&(NoAtraviesa()))

I while ((~3~=norosa)~~(z4~=norosa)~~(z5~=norosa)~~(f inalz~=norosa))

{

if (ManoAdelanteO) {incrementofi2=1;} else {incrementofi2=-1;}

fi2=fi2+incrementofi2;

fi3=fi3+incrementofi2;

P=P+incrementofi2;

tope=tope+incrementofi2;

compensa=compensa+incrementofi2;

CalculaCoordenadas();

delay( 1 O);

1 P=P+incremento;

realP=realP+incremento;

if ((realP~limrealP)~I(realP~-limrealP)) {P=P-incremento;realP=realP-incremento;limiteAng=l;}

CalculaCoordenadas();

delay( 1 O);

48

Page 52: Brazo mecanico

//Este procedimiento mueve el ángulo " R , es decir, la articulación que corresponde a la rotación de la pinza,

//dependiendo del valor "desplaza5" que el usuario ingreso o que fue calculado en la función "CalculaAngulos"

void GiraPinza(void)

{ int Rinicial=R;

CualSeMueve=3;

if (R-desplaza5!=R)

{ if (desplaza5<0) {incremento=-I;}

else {incremento=l;}

while ((R!=tope)&&(limiteAng==O)&&(NoAtraviesa()))

i while ((z4~=norosa)~~(z5~=norosa)~~(finalz~=norosa))

{ if (ManoAdelanteO) {incrementofi2=1;} else {incrementofi2=-1;)

fi2=fi2+incrementofi2;

fi3=fi3+incrementofi2;

P=P+incrementofi2;

compensa=compensa+incrementofi2;

CalculaCoordenadas();

delay( 1 O);

1 R=R+incremento;

if ((Rzl80)II(R<-180)) {R=R-incremento;limiteAng=l;}

CalculaCoordenadas();

delay( 1 O);

I 1 limiteAng=O;

desplaza5=desplaza5-(R-Rinicial);

49

Page 53: Brazo mecanico

//Este procedimiento mueve el ángulo "fi2", es decir, la articulación que corresponde al movimiento del hombro,

//dependiendo del valor "desplaza2 que el usuario ingreso o que fue calculado en la función "CalculaAngulos".

void MueveHombro(void)

I CualSeMueve=4;

if (fi2-desplaza2!=fi2)

{ if (desplaza2<0) {incremento=-I;}

else {incremento=l ;}

if ( (z2~=O)~~(z3~=O)~~(z4~=O)~~(z5~=O)~~( f ina lz~=O))

{if (((tope>fi2)&&(ManoAdelante()))ll((tope<fi2)&&(!ManoAdelante()))) {aprobado=l;}}

while (((fi2!=tope)&&(limiteAng==O)&&(NoAtraviesa()))~~(aprobado==l))

I fi2=fi2+incremento;

fi3=fi3+incremento;

P=P+incremento;

if ((fi2-1 ~-limiteinc)(((fi2+1zlimiteinc+l80)) {fi2=fi2-incremento;fi3=fi3-incremento;P=P-incremento;limiteAng=l;)

CalculaCoordenadas();

if ( ( z l ~ = O ) ~ ~ ( z 2 ~ = O ) ~ ~ ( z 3 ~ = O ) ~ ~ ( z 4 ~ = O ) ~ ~ ( z 5 ~ = O ) ~ ~ ( f i n a l z ~ = O ) ) {aprobado=O;lirniteAng=l;}

delay( 1 O);

}

1 limiteAng=O;

1

//Este procedimiento mueve el ángulo "fil", es decir, la articulación que corresponde a la rotación de la base,

//dependiendo del valor "desplazal" que el usuario ingreso o que fue calculado en la función "CalculaAngulos".

void GiraBase(void)

I if (fil-desplazal!=fil)

{ if (desplazal<O) {incremento=-I ;}

else {incremento=l;}

while ((fil!=tope)&&(limiteAng==O))

{

50

Page 54: Brazo mecanico

fil=fil+incremento;

if ((fi1>270)11(fil<-90)) {fil=fil-incremento;limiteAng=l;}

CalculaCoordenadas();

delay( 1 O);

1 1

1

//Este procedimiento cambia la posición de la pinza, es decir, pasa de abierta a cerrada o viceversa, dependiendo del

//valor de "pinza" que el usuario ingreso.

void SueltaAprisiona(void)

{ if ((pinza==l)&&(SoltarSiAprisionara==O)&&(e!=l)) //Aprisionar.

I while (e>l)

I e=e-2;

f=f+ 1 ;

CalculaCoordenadas();

delay(30);

1 1

if ((((pinza==O)&&(SoltarSiAprisionara==O))~~((pinza==l)&&(SoltarSiAprisionara==l)))&&(e!=g)) //Soltar

I while (ecg)

I e=e+2;

f=f-I ;

CalculaCoordenadas();

delay(30);

1 1

1

//Este procedimiento llama a los 6 anteriores para cambiar la posición total del brazo de robot según se requiera

void CambiaAngulos(void)

{

51

Page 55: Brazo mecanico

int NoMovioR=O;

int NoMovioP=O;

int NoMoviofi3=0;

compensa=O;

aprobado=O;

limiteAng=O;

SoltarSiAprisionara=l;

SueltaAprisiona(); //Cambia el estado de la pinza.

SoltarSiAprisionara=O;

tope=R+desplaza5; //Primero Gira la pinza, mueve la muñeca y

Girapinza(); //mueve el antebrazo si se requieren mover.

if (tope!=R) {NoMovioR=l;}

tope=P+desplaza4;

MueveMunecaO;

if (tope!=P) {NoMovioP=l;}

tope=fi3+desplaza3;

MueveBrazoo;

if (tope!=fi3) {NoMoviofi3=1;}

if (NoMovioR) //En caso de no haber podido girar la pinza se

{ tope=R+desplazafj; //le da otra oportunidad.

Girapinza();

if (tope!=R) {NoMovioR=l;} else {NoMovioR=O;}

1 if (NoMovioP) //En caso de no haber podido mover la muñeca se

{ tope=P+desplaza4; //le da otra oportunidad.

MueveMunecaO;}

if (NoMovioR) //En caso de no haber podido girar la pinza se

{ tope=R+desplaza5; //le da una última oportunidad.

Girapinza();}

desplaza2=desplaza2-compensa; //Mueve el ángulo que corresponde al hombro.

tope=fi2+desplaza2;

MueveHombro();

if (NoMoviofi3) //En caso de no haber podido mover el antebrazo se

52

Page 56: Brazo mecanico

{ tope=fi3+desplaza3; //le da otra oportunidad.

MueveBrazo();}

tope=fil tdesplazal; //Mueve el ángulo que corresponde a la base.

GiraBaseO;

SueltaAprisiona(); //Cambia el estado de la pinza.

I

//Convierte un número entero en una cadena de caracteres para poder ser desplegado en pantalla en modo gráfico.

char *Convierte(double Numero-temporal)

I char *Num-cadena;

int dec,sig,num-dig;

double cant-temp;

div-t x;

cant-temp=Numero-temporal;

num-dig=O;

x.quot=l;

while (x.quot!=O) //Se verifica la cantidad de caracteres en el número

{ num-dig=num-digtl; //de linea para hacer la conversión.

x = div(cant-temp,lO);

cant-temp=x.quot;

1 Num-cadena ecvt(Numero-tempora1,num-dig,&dec,&sig); //Convierte un valor numérico

//a una cadena de caracteres.

return (Num-cadena);

I

//Despliega en pantalla los valores de los ángulos y de la coordenada en x,y,z del punto final del brazo de robot, una vez

//que se ha dejado de mover.

void CoordFinal()

{ double temp;

char *cad-salida='\O';

temp=finalx; //Despliega coordenada en X.

strset(cad-salida,'\O); if (finalx<O)

53

Page 57: Brazo mecanico

{strcat(cad_salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(O,O,"Coordenada en eje X:");

outtextxy(l60,0,cad~salida);

temp=finaly; //Despliega coordenada en Y.

strset(cad_salida,'\0');

if (finaly<O)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp)):

outtextxy(0,20,"Coordenada en eje Y:");

outtextxy(l60,20,cad-salida);

temp=finalz; //Despliega coordenada en Z.

strset(cad-salida,'\O');

if (finalz<O)

{strcat(cad_salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(0,40,"Coordenada en eje Z:"); outtextxy( 160,40,cad-salida);

temp=fil; //Despliega valor del ángulo de la base.

strset(cad-salida,'\O');

if (filC0)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(0,60,"Ángulo fil:");

outtextxy(l40,6O,cad_salida);

temp=fi2; //Despliega valor del ángulo del hombro

strset(cad-salida,'\O);

if (fi2<0)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(0,80,"Ángulo fi2:");

outtextxy(l40,80,cad-~alida);

temp=fi3; //Despliega valor del ángulo del codo.

strset(cad-salida,'\O');

if (fi3<0)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

54

Page 58: Brazo mecanico

outtextxy(0,100,"Ángulo fi3:");

outtextxy(140,100,cad~salida);

temp=P; //Despliega valor del ángulo de la muñeca.

strset(cad-salida,'\O');

if (P<O)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(450,0,"Ángu10 P :'I);

outtextxy(590,0,cad-salida);

temp=R; //Despliega valor del ángulo de rotación de la pinza.

strset(cad-salida,'\O');

if (R<O)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(450,20,"Ángulo R :");

outtextxy(590,20,cad-salida); temp=realP; //Despliega valor del ángulo real de la muñeca.

strset(cad-salida,'\O');

if (realPc0)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(450,40,"Ángu10 realp:");

outtextxy(590,40,cad-salida);

temp=realfi3; //Despliega valor del ángulo real del codo.

strset(cad-salida,'\O');

if (realfi3~0)

{strcat(cad-salida,"-");}

strcat(cad-salida,Convierte(temp));

outtextxy(450,60,"Ángulo realfi3:");

outtextxy(590,60,cad-salida);

1

//Borra un sector de la pantalla donde se ha escrito texto para poder volver a escribir en ese mismo lugar los nuevos

//valores.

void BorraSector(void)

I

55

Page 59: Brazo mecanico

setf1llstyle(SOLID-FILL,5);

bar(0,0,190,110);

bar(445,0,680,70);

1

//Genera una pausa hasta que el usuario oprima cualquier tecla para continuar.

void Pausa(void)

{

outtextxy(250,O,”Presiona una tecla”);

int c;

c = getch(); I* Lee un carácter del teclado *I

if( ESC == c ){ I* El usuario desea salir? *I

closegraph(); I* Cambia a modo texto */

exit( 1 ); I* Regresa a MSDOS *I

1 if( o == c ){ I* Si el usuario no presiono una tecla ASCII ? */

c getch(); /* Lee código de rastreo del teclado *I

I setfillstyle(S0LID-FILL,O);

bar(250,0,393,8);

1

//Este procedimiento calcula los nuevos cambios en los ángulos de las extremidades del brazo de robot, una vez que el

//usuario ingresó las nuevas coordenadas del punto final hacia donde el brazo debe desplazarse.

void CalculaAngulos(float x3ext,float y3extjnt z3extjnt angulomano,int angulopinza,int modopinza)

I double filaux,filaux2,Paux,anguloxyz,C,A,angB,potc,c,Arad;

float div;

int x2ext,y2ext,z2ext;

double fin1 ,fin2,fin3,fin4;

if (x3ext==0) //Si este valor es cero el cálculo de f i l se indetermina

{ if (y3exPO) {filaux=SO;} //por eso se le dan estos valores

else if (y3extcO) {filaux=270;} //por default.

I else //En caso contrario puede calcularse normalmente.

{ div=y3extlx3ext;

56

Page 60: Brazo mecanico

filaux=(atan(div)*l80)/3.1416;

1 if (y3ext==0) //Si este valor es cero el cálculo de fil toma el mismo valor

{ if (x3ext>0) {filaux=O;} //para diferentes valores de x3ext, por eso se

else if (x3extcO) {filaux=180;} //le dan estos valores.

1

//Para estos valores de x3ext y y3ext el valor de fil debe recalcularse.

if (((x3ext~0)&&(y3ext~0))~~((x3ext~O)&&(y3ext~O))) {filaux=filaux+l80;}

Paux=anguIomano;

//Aquí se toman valores absolutos de x3ext y y3ext para trabajar en 2D. if (x3extcO) {x3ext=(-l)*x3ext;}

if (y3extcO) {y3ext=(-l)*y3ext;}

if (x3ext==0) {fil aux2=90;}

else

{ div=y3extlx3ext;

fi1aux2=(atan(div)*l80)/3.1416;}

if (y3ext==0) {fil aux2=0;}

//Se calculan las coordenadas del vector del punto donde se articula la muñeca.

x2ext=x3ext-((d+i)*cos((tilaux2*3.1416)/180)*cos((Paux*3.1416)/180)); y2ext=y3ext-((d+i)*sin((filaux2*3.1416)/180)*cos((Paux*3.1416)/180));

z2ext=z3ext-((d+i)*sin((Paux*3.1416)/180))-L;

//Se calcula el ángulo que forma el vector de las coordenadas anteriores con el sistema de coordenadas base.

if ((~2ext==O)&&(y2ext==O)) {anguloxyz=O;}

else

{anguloxyz=(atan(z2extl(sqrt(pow(x2ext,2)tpow(y2ext,2))))*180)/3.1416;}

//Para estos valores de x2ext, y2ext y z3ext el valor de "anguloxyz" debe recalcularse

if ((z2ext~0)&&((x2ext~O)~~(y2ext~O))) {anguloxyz=180-anguloxyz;}

//Se calcula la magnitud del vector.

potc=pow(x2ext,2)+pow(y2ext,2)+pow(z2ext,2);

c=sqrt(potc);

57

Page 61: Brazo mecanico

//Se calcula el ángulo que forma el segmento del brazo con el vector anterior.

if (c==O) {Arad=l.5708;}

else

{Arad=acos((-(pow(B,2))+pow(D,2)+potc)/(2*D*c));}

A=(Arad*180)/3.1416;

//Se calcula el ángulo que forma el segmento del antebrazo con el vector.

angB=(asin((D*sin(Arad))/B)*l80)/3.1416;

//Se calcula el ángulo que forma el brazo con el antebrazo.

C=180-A-angB;

//Se calculan los desplazamientos que deben tener los ángulos de las articulaciones para alcanzar el nuevo punto final.

finl=filaux;

fin2=A+anguloxyz;

fin3=C-180;

fin4=Paux-((A+anguloxyz)+(C-l80));

desplazal=finl-fil;

desplaza2=fin2-fi2;

desplaza3=fin3-(fi3-fi2);

desplaza4=fin4-(P-fi3);

desplaza5=angulopinza-R;

pinza=modopinza;

1

//Función que verifica si el carácter leído de la variable se trata de un número, regresa un cero si es algún otro carácter.

int DIGITO(char simbolo2)

I char digitos[l I ] "1234567890";

in t ap2;

int result2;

result2=0;

for (ap2=0; ap2<=9; ap2++)

{ if (digitos[ap2]!=simbolo2)

{result2=0;}

else

{result2=1;

58

Page 62: Brazo mecanico

ap2=1 O;

1 1

return(result2);

1

//Función que valida la cadena que el usuario introdujo desde el teclado, regresa un uno si la cadena es una serie de

//números y un cero en caso contrario.

int EsNumero(char buf[4])

{ int resultl=O;

int apl;

for (apl =O; apl cstrlen(buf); apl++)

{ if ((apl==O)&&(buf[apl]=='-')&&(tolerasigno)) //Verifica si es un

{resultl = I ;} //numero negativo.

else if (!DIGITO(buf[apl]))

{resultl =O;

break;}

else

{resultl=l;}

1 return(result1);

1

//Este procedimiento despliega mensajes en pantalla para pedir al usuario que ingrese los nuevos valores de las

//coordenadas del punto final, y después llama al procedimiento "CalculaAngulos".

void PideCoordenadas(void)

I clrscr();

tolerasigno=l;

do{ strset(buf,'\O');

gotoxy(30,10);

printf("coordenada x :

gotoxy(45,10);

scanf("%s",buf);}

while (!EsNumero(buf));

59

Page 63: Brazo mecanico

x3ext=atoi(buf);

do{ strset(buf,'\O');

gotoxy(30,10);

printf("coordenada y :

gotoxy(45,1 O);

scanf("%s",buf);}

while (!EsNumero(buf));

y3ext=atoi(buf);

tolerasigno=O;

do{ strset(buf,'\O');

gotoxy(30,10);

printf("coordenada z :

gotoxy(45,10);

scanf("%s",buf);}

while (!EsNumero(buf));

z3ext=atoi(buf);

tolerasigno=l;

do{ strset(buf,'\O');

gotoxy(30,1 O);

printf("ángu1o mano :

gotoxy(45,lO);

scanf("%s",buf);}

while (!EsNumero(buf));

angulomano=atoi(buf);

do{ strset(buf,'\O');

gotoxy(30,1 O);

printf("ángu1o pinza :

gotoxy(45,10);

scanf("%s",buf);}

while (!EsNumero(buf));

angulopinza=atoi(buf);

do{ gotoxy(30,10);

") ;

") ;

60

Page 64: Brazo mecanico

printf("Aprensar(1) o soltar(0): ");

gotoxy(55,10);

tecla getche(); //El usuario debe elegir una de las dos opciones.

if( '1' == tecla )

I pinza=l;

1 if( 'O' == tecla )

{ pinza=O;

} }while ((tecla!='l')&&(tecla!='O')); CalculaAngulos(x3ext,y3ext,z3ext,angulomano,angulopinza,pinza);

1

//Este procedimiento despliega mensajes en pantalla para pedir al usuario que ingrese los desplazamientos que debe

//hacer el brazo para cada uno de los ángulos de las articulaciones.

void PideAngulos(void)

{ clrscr();

tolerasigno=l;

do{ strset(buf,'\O');

gotoxy(30,10);

printf("primer ángulo: "1 ; gotoxy(45,l O);

scanf("%s",buf);}

while (!EsNumero(buf));

desplaza1 =atoi(buf);

do{ strset(buf,'\O');

gotoxy(30,10);

printf("segund0 ángulo: "1 ; gotoxy(45,10);

scanf("%s",buf);}

while (!EsNumero(buf));

desplaza2=atoi(buf);

61

Page 65: Brazo mecanico

do{ strset(buf,'\O');

gotoxy(30,10);

printf("tercer ángulo:

gotoxy(45,l O);

scanf("%s",buf);}

while (!EsNumero(buf));

desplaza3=atoi(buf);

do{ strset(buf,'\O');

gotoxy(30,10);

printf("cuart0 ángulo:

gotoxy(45,10);

scanf("%s",buf);}

while (!EsNumero(buf));

desplaza4=atoi(buf);

do{ strset(buf,'\O');

gotoxy(30,10);

printf("quint0 ángulo:

gotoxy(45,10);

scanf("%s",buf);}

while (!EsNumero(buf));

desplaza5=atoi(buf);

do{ gotoxy(30,1 O);

printf("Aprensar(1) o soltar(0): ");

gotoxy(55,l O);

tecla getche(); //El usuario debe elegir una de las dos opciones, if( '1' == tecla )

{

pinza=l;

1 if( 'O' == tecla )

I pinza=O;

1

") ;

") ;

62

Page 66: Brazo mecanico

}while ((tecla!='l')&&(tecla!='O'));

I

//Este procedimiento es la primer opción del menú principal donde el usuario debe introducir cambios en las

//articulaciones del brazo de robot.

void MedianteAngulos(void)

{ PideAngulos(); //El usuario ingresa valores.

IniciaGrafico();

CalculaCoordenadas(); //Dibuja posición inicial del brazo.

Pausa();

CambiaAngulos(); //Hace simulación del movimiento del brazo.

Borrasector(); //Borra un sector donde se escribió texto.

CoordFinal(); //Despliega los valores de ángulos y coordenadas.

Pausa();

closegraph();

}

//Este procedimiento es la segunda opción del menú principal donde el usuario debe introducir nuevas coordenadas para

//el punto final del brazo de robot.

void MedianteCoordenadas(void)

{

PideCoordenadas(); //El usuario ingresa nuevos valores, y el ordenador

IniciaGrafico(); //calcula los desplazamientos.

CalculaCoordenadas(); //Dibuja posición inicial del brazo.

Pausa();

CambiaAngulos(); //Hace simulación del movimiento del brazo.

Borrasector(); //Borra un sector donde se escribió texto.

CoordFinal(); //Despliega los valores de ángulos y coordenadas.

Pausa();

closegraph();

}

//Este procedimiento es la tercer opción del menú principal donde el usuario eligió realizar una secuencia de movimientos

//del brazo de robot previamente programada.

void TareaEspecifica(void)

I

63

Page 67: Brazo mecanico

IniciaGrafico();

CalculaCoordenadas(); //Dibuja posición inicial del brazo

Pausa();

CalculaAngulos(100,50,150,0,90,1)~ //Calcula los desplazamientos.

CambiaAngulos(); //Hace simulación del movimiento del brazo.

Borrasector(); //Borra un sector donde se escribió texto.

CoordFinal(); //Despliega los valores de ángulos y coordenadas.

CalculaAngulos(-100,-100,0,-90,0,0); //Calcula los desplazamientos.

CambiaAngulos(); //Hace simulación del movimiento del brazo.

Borrasector(); //Borra un sector donde se escribió texto.

CoordFinal(); //Despliega los valores de ángulos y coordenadas,

CalculaAngulos(100,50,150,0,90,1); //Calcula los desplazamientos.

CambiaAngulos(); //Hace simulación del movimiento del brazo.

Borrasector(); //Borra un sector donde se escribió texto.

CoordFinal(); //Despliega los valores de ángulos y coordenadas,

CalculaAngulos(-l00,l OO,O,-90,0,0); //Calcula los desplazamientos.

CambiaAngulos(); //Hace simulación del movimiento del brazo.

Borrasector(); //Borra un sector donde se escribió texto.

CoordFinal(); //Despliega los valores de ángulos y coordenadas,

Pausa();

closegraph();

I

//Procedimiento principal.

int main(void)

{ float divtempl ,divtemp2;

fi l =O; //Valores iniciales de Angulos fi2=0; fi3=0;

P=O;

R=O;

realfi3=0:

64

Page 68: Brazo mecanico

realP=O;

L=50; //Valores constantes de Magnitudes de los segmentos.

D=lOO;

B=lOO;

d=30;

h=15; //Ancho de cada segmento.

i=30; //Magnitud de las tenazas.

g=i/(sqrt(2)); //magnitud de los vectores "a" y "o" de la pinza.

e=g;

f=g;

norosa=lO;

xO=O; //Coordenadas del segmento base.

yo=o; zO=L;

divtempl=L; //Calcula límites de movimiento para las articulaciones

divtemp2=D; //dependiendo de las magnitudes de

divtempl=divtempl/divtemp2; //los segmentos.

limiteinc=(asin(divtempl)*180)/3.1416;;

divtempl=d+i;

divtemp2=B;

divtempl =divtempl/divtemp2;

limiteinc2=(asin(divtempl)*180)/3.1416;;

divtempl =i;

divtemp2=d;

divtempl =divtempl/divtemp2;

limiteinc3=(asin(divtempl)*180)/3.1416;;

limrealfi3=180; //Límites para el movimiento del antebrazo y

limrealP=l80; //la muñeca.

do

I clrscr(); //Despliega menú principal

gotoxy(30,5); printf("1ntroducir Angulos (I)");

gotoxy(30,1 O);

printf("1ntroducir Coordenadas (2)"); gotoxy(30,15); printf("Rea1izar Tarea Especifica (3)");

65

Page 69: Brazo mecanico

gotoxy(30,20);

printf("Salir (Esc)");

tecla = getche(); //El usuario debe elegir una de las tres opciones

if( '1' == tecla ) / / o la tecla Esc para salir del programa.

{ MedianteAngulos();

if( '2' == tecla )

I MedianteCoordenadasO;

1 if( '3' == tecla )

I TareaEspecifica();

1 }while (tecla!=ESC);

return O;

}

66

Page 70: Brazo mecanico

Conclusiones El diseño y la construcción del brazo mecánico, en este Proyecto, nos permitió aplicar, a la Robótica, las

herramientas que ofrecen ciencias como la Computación, la Electrónica y la Mecánica, así como percatarnos

de las ventajas (y desventajas) de estas herramientas.

El programa de control y simulación del brazo de robot se elaboró en base a un análisis de la

cinemática de un manipulador de seis grados de libertad y, así, enviar las secuencias de fases adecuadas a

los motores de pasos, para ejecutar los movimientos del brazo.

La interface entre los motores de pasos y la PC se diseñó tomando en cuenta las palabras de

control, enviadas a través del puerto paralelo de la computadora y generadas por el programa residente en

ésta.

En el circuito que constituyó esta interface se empleó un decodificador para interpretar los bits de

dirección y activar el motor seleccionado. Se utilizaron circuitos amplificadores ULN 2003 (para abastecer la

corriente indispensable a las bobinas de los motores) que redujeron considerablemente el número de

elementos del circuito electrónico y , por ende, las dimensiones de éste, debido a que, en diseños propuestos

por diversos autores, se había contemplado el empleo de transistores Darlington, resistencias y diodos. Una

vez amplificada en corriente la secuencia de pulsos, se produjo el movimiento paso a paso del motor

seleccionado.

En consecuencia, los motores movieron las partes mecánicas del brazo, ejecutando ciertas

maniobras determinadas por el software manejado por el usuario.

El uso de un programa de computadora facilitó la tarea de darle versatilidad a la forma de controlar

los movimientos del brazo, ya que se pudieron implementar algoritmos basados en ángulos o coordenadas,

además de ofrecer un manejo fácil del sistema.

Sin embargo, el sistema de control del brazo no tiene una línea de retroalimentación que pudiese

informar al programa la posición real del eje del motor, originando errores de posicionamiento al ejecutarse

cambios bruscos en los movimientos ordenados por el usuario.

Esto sugiere que se pueden realizar mejoras significativas al sistema, por ejemplo: dando al

manipulador la capacidad de captar su posición, empleando sensores localizados en sus articulaciones, que

67

Page 71: Brazo mecanico

pudieran medir los ángulos entre éstas, y proporcionar esta información al programa de la computadora para

que haga las rectificaciones necesarias.

Además, en las pruebas finales, tuvo que efectuarse un ajuste en los que se refiere a la parte

mecánica: se añadió un contrapeso a la articulación correspondiente a la unión hombro (cuerpo-brazo), con el

objeto de que al motor de pasos se le facilitara la tarea de mover el elemento brazo. A pesar de esto, cuando

algún motor ejecutaba su respectiva secuencia de pasos, se observaban vibraciones en el brazo.

En general, podemos decir que el sistema completo (software, computadora personal, circuito

electrónico, motores de pasos y partes mecánicas) se comportó de acuerdo a las expectativas de este

Proyecto.

68

Page 72: Brazo mecanico

Bibliografía

1.

2.

3.

4.

5.

6.

7 .

8.

9.

ANGULO, J. M.; Robótica frhctica. Tecnología y Aplicaciones; Ed. Paraninfo; España; 1992.

ANGULO, J. M.; Curso de Robótica; Ed. Paraninfo; España; 1989.

AUDí, D.; Cómo y cuándo aplicar un robof industrial; Ed. Marcombo; España; 1988.

SPONG, M.; Robot dinamics and control; Ed. John Wiley; USA; 1989.

KOIVO, A,; Fundamentals for controlof robotic manipulators; Ed. John Wiley; USA; 1989.

GRAY, C. B.; Máquinas eléctricas y sistemas accionadores; Ed. Alfaomega; México; 1993.

HUMPHRIES, J . ; lndusfrial Electronics; Ed. Delmar Publishers; USA; 1993.

URBIETA, R.; Diseiio y construcción de un controlador digital para motor de paso; Polibits.

Revista de Computación; CINTEC-IPN; México; 1990.

RAMAKANT, G.; Analog and Digital Control; Ed. Prentice-Hall; USA; 1988.

10. MANO, M.; Lógica digitaly diseAo de computadoras; Ed. Prentice-Hall; México; 1990.

11. TEXAS INSTRUMENTS; The TTL Data Book; USA; 1992.

12. SCHILDT, H.; Turbo C/C++; Ed. McGraw-Hill; Mexico; 1995.

13. http://www.eupmt.es/cra/robotica.htm

14. http://www.angelfire.com/ri/cocrow/index.html 15. http://www.geocities.com/ResearchTriangle/Fac~lity/9407/Robotica/robot.html

16. http://www.alek.pucp.edu.pe/ApoyoaEn/MaquinasEl/mpaso.htm

68