Está en la página 1de 159

UNIVERSIDAD DE GUADALAJARA

COORDINACIÓN GENERAL ACADÉMICA


Coordinación de Bibliotecas
Biblioteca Digital

La presente tesis es publicada a texto completo en virtud de que el autor


ha dado su autorización por escrito para la incorporación del documento a la
Biblioteca Digital y al Repositorio Institucional de la Universidad de Guadalajara,
esto sin sufrir menoscabo sobre sus derechos como autor de la obra y los usos
que posteriormente quiera darle a la misma.

Av. Hidalgo 935, Colonia Centro, C.P. 44100, Guadalajara, Jalisco, México
bibliotecadigital@redudg.udg.mx - Tel. 31 34 22 77 ext. 11959
Universidad de Guadalajara
Centro Universitario de los Valles

Maestría en Ingeniería Mecatrónica

Memoria del proyecto:

Diseño y Control de un Robot SCARA de tres grados de


libertad.
Presentado por:
Juan Felipe Ramírez González

Director
Dr. Carlos Renato Vázquez Topete
Codirector
Dr. Yehoshua Aguilar Molina

Ameca, Jalisco, Abril del 2018


Agradecimientos.
Quiero agradecer a mis padres y hermanos que siempre han estado presentes para
apoyarme, aconsejarme y enseñarme que con esfuerzo se pueden llegar a cumplir todas las
metas que me proponga.
A todos mis compañeros de posgrado que siempre me brindaron su amistad y me
motivaron a completar la maestría.
A mi director de tesis el Dr. Carlos Renato Vázquez Topete por darme su apoyo en mi
preparación hasta culminar con mi tesis.
A mi Codirector de tesis el Dr. Yohoshua Aguilar Molina por brindarme el apoyo
necesario durante el desarrollo del posgrado.
Índice
Capítulo 1. Introducción .................................................................................................... 1
1.1.1 Justificación. ................................................................................................. 3
1.1.2 Objetivos. ...................................................................................................... 3
1.1.3 Requerimientos del robot. ............................................................................. 4
1.1.4 Contenido de la tesis. .................................................................................... 4
Capítulo 2. Modelado del robot SCARA ........................................................................... 5
2.1 Cálculo cinemático directo. .................................................................................. 5
2.2 Cálculo cinemático inverso. ................................................................................. 7
2.3 Cálculo cinemático diferencial. .......................................................................... 10
2.4 Simulación cinemática del robot. ....................................................................... 11
Capítulo 3. Diseño del Robot SCARA ............................................................................ 13
3.1 Especificaciones constructivas del robot SCARA. ............................................ 15
3.1.1 Diseño asistido por computadora (CAD). ...................................................... 16
3.1.2 Simulación y Análisis de esfuerzos del sistema mecánico. ............................ 19
3.1.3 Selección de actuadores. ................................................................................. 34
3.1.4 Selección de materiales para la fabricación de la estructura del robot y piezas
mecánicas adicionales. ...................................................................................................... 38
3.1.5 Fabricación de piezas mecánicas. ................................................................... 39
3.1.6 Ensamblaje de piezas mecánicas. ................................................................... 46
3.2 Diseño electrónico. ............................................................................................. 49
3.2.1 Módulo de alimentación. ................................................................................ 49
3.2.2 Módulo de adquisición de datos. .................................................................... 50
3.2.3 Módulo de potencia. ....................................................................................... 50
3.2.4 Módulo de comunicación Robot-PC. ............................................................. 56
3.2.5 Selección de sensores. .................................................................................... 56
3.2.6 Montaje de piezas electrónicas y eléctricas en el robot. ................................. 58
Capítulo 4. Control del robot SCARA ............................................................................. 59
4.1 Modelo dinámico del robot. ............................................................................... 59
4.2 Sistema de control. ............................................................................................. 65
4.3 Desarrollo del interfaz de control para el usuario. ............................................. 66
Capítulo 5. Pruebas y resultados ...................................................................................... 69
5.1 Resultados obtenidos. ............................................................................................. 69
5.1.1 Prueba de precisión de cinemática directa sin carga. .......................................... 69
5.1.2 Prueba de precisión de cinemática directa con carga. ......................................... 72
5.1.3 Prueba de precisión de cinemática inversa sin carga. .......................................... 75
5.1.4 Prueba de precisión de cinemática inversa con carga. ........................................ 77
5.1.5 Prueba de repetibilidad. ....................................................................................... 79
5.2 Costo del proyecto. ................................................................................................. 80
Capítulo 6. Conclusiones ................................................................................................. 82
...................................................................................................................................... 83
Referencias....................................................................................................................... 83
Apéndices......................................................................................................................... 85
Índice de figuras.
Fig. 2.1. A) Vista frontal SCARA, B) vista superior SCARA, C) espacio de trabajo
SCARA. .................................................................................................................................. 5
Fig. 2.2. Representación de los ejes por el método de Denavit-Hartenberg. ..................... 6
Fig. 2.3. Robot SCARA desde vista superior. ................................................................... 8
Fig. 2.4. Modelo de barras del robot SCARA desde vista superior. .................................. 8
Fig. 2.5. Simulación cinemática del robot SCARA: a) Vista 3D del robot, b) Vista X-Y
del robot. ............................................................................................................................... 12
Fig. 3.1. Explosión de piezas de la base principal. .......................................................... 13
Fig. 3.2. Explosión de piezas del eslabón 1. .................................................................... 14
Fig. 3.3. Explosión de piezas del eslabón 2 y 3. .............................................................. 15
Fig. 3.4. Espacio de trabajo del robot SCARA diseñado, en vista de planta. .................. 16
Fig. 3.5. Base del robot SCARA. ..................................................................................... 17
Fig. 3.6. Eslabón 1 del robot SCARA.............................................................................. 17
Fig. 3.7. Eslabón 2 del robot SCARA.............................................................................. 18
Fig. 3.8. Robot SCARA completo. .................................................................................. 19
Fig. 3.9. Centro de masa del robot SCARA..................................................................... 20
Fig. 3.10. Diagrama de cuerpo libre. ............................................................................... 20
Fig. 3.11. Diagrama de cuerpo libre general. ................................................................... 21
Fig. 3.12. Soporte del eslabón 1 (SCARA_P5): Análisis de tensión. .............................. 23
Fig. 3.13. Soporte del eslabón 1 (SCARA_P5): Análisis de desplazamiento. ................ 23
Fig. 3.14. Soporte del eslabón 1(SCARA_P5): Análisis de factor de seguridad. ............ 24
Fig. 3.15. Eslabón 1 (SCARA_P6): Análisis de tensión. ................................................ 25
Fig. 3.16. Eslabón 1 (SCARA_P6): Análisis de desplazamiento. ................................... 25
Fig. 3.17. Eslabón 1 (SCARA_P6): Análisis de factor de seguridad. ............................. 26
Fig. 3.18. Eje de unión 1 (SCARA_P9): Análisis de tensión. ......................................... 26
Fig. 3.19. Eje de unión 1 (SCARA_P9): Análisis de desplazamiento. ............................ 27
Fig. 3.20. Eje de unión 1 (SCARA_P9): Análisis de factor de seguridad. ...................... 27
Fig. 3.21. Base de sujeción (SCARA_P8): Análisis de tensión. ..................................... 28
Fig. 3.22. Base de sujeción (SCARA_P8): Análisis de desplazamiento. ........................ 28
Fig. 3.23. Base de sujeción (SCARA_P8): Análisis de factor de seguridad. .................. 29
Fig. 3.24. Eslabón 2 (SCARA_P10): Análisis de tensión. .............................................. 29
Fig. 3.25. Eslabón 2 (SCARA_P10): Análisis de desplazamiento. ................................. 30
Fig. 3.26. Eslabón 2 (SCARA_P10): Análisis de factor de seguridad. ........................... 30
Fig. 3.27. Eje de unión 2 (SCARA_P15): Análisis de tensión. ....................................... 31
Fig. 3.28. Eje de unión 2 (SCARA_P15): Análisis de desplazamiento. .......................... 31
Fig. 3.29. Eje de unión 2 (SCARA_P15): Análisis de factor de seguridad. .................... 32
Fig. 3.30. Análisis de tensión en el robot armado............................................................ 33
Fig. 3.31. Análisis de factor de seguridad en el robot armado. ....................................... 33
Fig. 3.32. Análisis de desplazamiento en el robot armado. ............................................. 34
Fig. 3.33. Esquema de un tornillo de potencia................................................................. 37
Fig. 3.34. Diagrama de los rodamientos utilizados.......................................................... 39
Fig. 3.35. Pieza SCARA_P1 fabricada. ........................................................................... 40
Fig. 3.36. Pieza SCARA_P2 fabricada. ........................................................................... 40
Fig. 3.37. Pieza SCARA_P3 fabricada. ........................................................................... 41
Fig. 3.38. Pieza SCARA_P5 fabricada. ........................................................................... 41
Fig. 3.39. Pieza SCARA_P6 fabricada. ........................................................................... 42
Fig. 3.40. Pieza SCARA_P7 fabricada. ........................................................................... 42
Fig. 3.41. Pieza SCARA_P9 fabricada. ........................................................................... 42
Fig. 3.42. Pieza SCARA_P8 fabricada. ........................................................................... 43
Fig. 3.43. Pieza SCARA_P10 fabricada. ......................................................................... 43
Fig. 3.44. Pieza SCARA_P11 fabricada. ......................................................................... 44
Fig. 3.45. Pieza SCARA_P12 fabricada. ......................................................................... 44
Fig. 3.46. Pieza SCARA_P13 fabricada. ......................................................................... 45
Fig. 3.47. Pieza SCARA_P14 fabricada. ......................................................................... 45
Fig. 3.48. Pieza SCARA_P15 fabricada. ......................................................................... 45
Fig. 3.49. Pieza SCARA_P16 fabricada. ......................................................................... 46
Fig. 3.50. Pieza SCARA_P17 fabricada. ......................................................................... 46
Fig. 3.51. Base del robot SCARA. ................................................................................... 46
Fig. 3.52. Eslabón 1 del robot SCARA............................................................................ 47
Fig. 3.53. Eslabón 2 y 3 del robot SCARA...................................................................... 47
Fig. 3.54. Robot SCARA final. ........................................................................................ 48
Fig. 3.55. Fuente de alimentación de motores. ................................................................ 49
Fig. 3.56. Fuente de alimentación de circuitería electrónica. .......................................... 50
Fig. 3.57. Arreglo típico de un puente H. ........................................................................ 51
Fig. 3.58. Diagrama esquemático del driver LMD18200. ............................................... 51
Fig. 3.59. Diagrama esquemático del driver L298. ......................................................... 52
Fig. 3.60. Esquema de conexión Drivers-Arduino. ......................................................... 54
Fig. 3.61. Esquema de conexión Encoder-Arduino. ........................................................ 55
Fig. 3.62. Esquema de conexión Sensores finales de carrera-Arduino............................ 55
Fig. 3.63. Comunicación MATLAB y Arduino............................................................... 56
Fig. 3.64. Esquema del Encoder incremental. ................................................................. 57
Fig. 3.65. Señales incrementales. ..................................................................................... 57
Fig. 3.66. Sensor final de carrera. .................................................................................... 58
Fig. 3.67. Sensores final de carrera montados en la pieza SCARA_P14. ....................... 58
Fig. 3.68. Interfaz gráfica del robot SCARA. .................................................................. 67
Fig. 3.69. Interfaz gráfica al introducir posiciones reales. ............................................... 68
Fig. 3.70. Valor medido de la articulación 1 en Arduino. ............................................... 71
Fig. 3.71. Ángulos y desplazamientos reales sin carga. .................................................. 71
Fig. 3.72. Convergencia a cero de los errores en 𝑞1, 𝑞2 y d real sin carga. .................... 72
Fig. 3.73. Ángulos y desplazamientos reales con carga. ................................................. 74
Fig. 3.74. Convergencia a cero de los errores en 𝑞1, 𝑞2 y d real con carga. ................... 75
Fig. 3.75. Posiciones Px, Py y Pz reales sin carga. .......................................................... 76
Fig. 3.76. Convergencia a cero de los errores en las posiciones Px, Py, Pz reales sin
perturbación. ......................................................................................................................... 77
Fig. 3.77. Posiciones Px, Py y Pz reales con carga. ......................................................... 78
Fig. 3.78. Convergencia a cero de los errores en las posiciones Px, Py, Pz reales con carga.
.............................................................................................................................................. 79
Índice de tablas.

Tabla 2.1. Parámetros de la cinemática del robot. ............................................................. 6


Tabla 3.1. Parámetros y dimensiones del robot SCARA a diseñar. ................................ 15
Tabla 3.2. Especificaciones de los parámetros en nuestro robot SCARA. ...................... 35
Tabla 3.3. Especificaciones de los motores utilizados en el robot SCARA. ................... 37
Tabla 3.4. Especificaciones de los motores utilizados en el robot SCARA. ................... 38
Tabla 3.5. Especificaciones de los motores utilizados en el robot SCARA. ................... 39
Tabla 3.6. Tabla de control LMD18200. ......................................................................... 53
Tabla 3.7. Tabla de control L298. .................................................................................... 53
Tabla 3.8. Especificaciones de los encoders incrementales en el robot SCARA. ........... 58
Tabla 5.1. Resultados de posicionamiento del robot SCARA sin perturbación. ............. 70
Tabla 5.2. Resultados de posicionamiento del robot SCARA con perturbación. ............ 73
Tabla 5.3. Resultados de posicionamiento del robot SCARA sin perturbación. ............. 76
Tabla 5.4. Resultados de posicionamiento del robot SCARA con perturbación. ............ 78
Tabla 5.5. Datos obtenidos de la prueba de repetibilidad. ............................................... 80
Tabla 5.6. Distribución de costos del robot SCARA. ...................................................... 81
Abreviaturas y acrónimos.
USD Dólar Estadounidense
SCARA Selective Compliance Assembly
Robot Arm
CAD Computer Aided Design
CAE Computer Aided Engineering
VCD Voltaje en Corriente Directa
PC Personal Computer
DOF Degree Of Freedom
D-H Denavit-Hartenberg
3-D Tres Dimensiones
FEA Finite Element Analysis
TTL Transistor-Transistor Logic
DAQ Data Acquisition
CD Corriente Directa
DMOS Double-Diffused MOS
PWM Pulse-Width Modulation
USB Universal Serial Bus
COM Puerto Serial
GUIDE Graphical User Interface Design And
Evaluation
IDE Integrated Development Enviroment
CPR Cycles Per Revolution
NO Normal Open
EC Energía Cinética
EP Energía Potencial
PID Proporcional Integral Derivativo
ISO International Organization For
Standardization
PyME Pequeña y Mediana Empresa
1

Capítulo 1. Introducción

En las últimas décadas, la automatización de procesos por medio de robots manipuladores


ha ido en aumento en todo el mundo, debido a las nuevas tecnologías aplicadas. El uso de
robots en las industrias manufacturas, como resultado, permiten la maquila y producción de
bienes de forma automática y versátil. Los robots industriales son el tipo de robots más
populares, debido a la importancia que ocupan en el sector industrial como herramientas
clave para la modernización de las empresas. Hoy en día, con la inclusión de robots
manipuladores, se generan grandes ventajas en la reducción de costos, el incremento de la
producción, la mejora en la calidad del producto; y la disminución de problemas de operación
en ambientes hostiles y peligrosos para el ser humano.
Las aplicaciones que llevan a cabo los robots industriales se están volviendo cada vez más
sofisticadas, sin embargo aún se da el caso como en el año 2000, donde aproximadamente el
78% de los robots instalados en América fueron robots para soldadura o manejo de materiales
[1]. En el 2015 las aplicaciones de robots manipuladores se encuentran en fábricas
ensambladoras automotrices, empresas textiles, procesos de soldadura de arco y de punto,
corte de materiales por láser, traslado y pintado de objetos, ensamble de productos
electrónicos, etc. Entre las compañías más importantes que diseñan y construyen robots
industriales se encuentran FANUC, ABB, KUKA, MOTOMAN, EPSON; cuentan con una
gran diversidad de modelos de robots para diferentes aplicaciones industriales [2].
Cada vez es mayor el número de robots industriales que se usan en las empresas en todo
el mundo; en particular las líneas de producción están automatizadas mediante robots
manipuladores. A partir del año 2000, se ha incrementado la tasa anual de crecimiento
sistemático de 25,000 robots, y los principales países usuarios de robots son Estados Unidos,
Japón, Alemania, Italia, Francia y China [3]. Para el año 2008 operaban en todo el mundo
más de un millón de robots industriales, por lo que en la actualidad esta cifra oscila en casi
el millón y medio.
En el año 2014 se presentó la cifra más alta de ventas de robots a nivel mundial, donde la
mayor parte de robots industriales fueron utilizados en la industria automotriz, seguida por
la industria eléctrica y electrónica. En el continente americano se estima que alrededor de
248,230 robots se encuentran en operación en la industria, en donde México, Canadá y
Estados Unidos conforman 236,891 del total de robots en operación [4].
De modo que se puede estimar que entre el 10 y 15% de esta cantidad en operación se
encuentra en México, de acuerdo a este porcentaje cada año se comercializan en el país 2000
robots en las diferentes plantas de manufactura [5], donde la mayoría de aplicaciones que
tienen estos robots se encuentran en la industria automotriz, ensambladoras eléctricas y
electrónicas y la industria metalúrgica, etc.
A pesar de que México es uno de los principales integradores de robots en el mundo, el
panorama nacional es muy adverso, debido a que la mayoría de robots son importados por
fabricantes extranjeros. Por lo general, los robots comerciales tienen un costo sumamente
2

alto que dependiendo sus características y aplicaciones oscilan en un precio de entre 50,000
y 100,000 USD, costo poco accesible para la mayoría de industrias locales y nacionales. En
México, existen alrededor de diez empresas dedicadas al desarrollo de tecnologías
innovadoras con máquinas y sistemas robóticos para PyMES (pequeñas y medianas
empresas) [6].

Actualmente, la industria nacional en el ámbito de la robótica es muy baja en contraste


con otros países del continente americano, como Estados unidos y Canadá, a pesar que se
encuentra en crecimiento. Con el objetivo de mantener y mejorar la competitividad en el
mercado mundial, es necesario el desarrollo de robots industriales que puedan ser accesibles
tanto en medianas como grandes empresas; generando con ello competitividad,
productividad, eficiencia y rentabilidad con respecto a los grandes fabricantes de robots.

Dado que la mayoría de robots industriales son de origen extranjero, cualquier empresa
del país necesitaría importar el robot en caso de ser necesario. Eso genera una desventaja en
la PyMES, debido a que no cuentan, en general, con el capital necesario para los gastos de
importación.

El presente trabajo se aborda en el desarrollo de un robot manipulador tipo SCARA


(Selective Compliance Assembly Robot Arm). Se describe el diseño y construcción de un
robot SCARA de tres grados de libertad, que cumpla con las expectativas de ser económico;
es decir que tenga un bajo costo de fabricación alrededor de $30,000 o $50,000. Siendo
fiable para que pueda mover una carga de 1 kg con una precisión de posicionamiento de
menos de 0.02 mm; y además eficiente, cumpliendo perfectamente con la repetibilidad de
movimiento de 0.015 mm.

En el proyecto se plantea el diseño detallado referente a la morfología del robot, así como
el análisis de elementos finitos en las piezas mecánicas por medio de herramientas CAD
(Computer Aided Design) y CAE (Computer Aided Engineering). Se describe el modelo
matemático de la cinemática directa, inversa y diferencial del robot, así como el estudio
dinámico del mismo. Se desarrollan técnicas de control aplicables en los motores CD del
robot que representan las articulaciones, se realiza la regulación y el seguimiento de
trayectorias previamente establecidas; todo esto mediante el uso de programación y de una
interfaz de usuario en la PC que puede comunicarse con el robot SCARA por medio de una
tarjeta de adquisición de datos.

El robot fabricado se realizó con el fin de adquirir conocimientos sobre el desarrollo de


robots industriales que sustenten procesos productivos en el país. Se decide enfocarse en el
robot manipulador SCARA; ya que permite ubicar el extremo final en cualquier ubicación
sobre el plano X, Y permitiendo manipulaciones simples de objetos con mayor precisión y
velocidad, ideal para tareas industriales como pick and place y embalaje. Considerando estas
tareas como una de las más utilizadas en la industria mexicana.

En la literatura es vasta la información sobre robots manipuladores que utilizan técnicas


diferentes de diseño y control, por lo cual se tomaron algunas investigaciones para ampliar
los conocimientos en este rubro. Para ello se contempla una investigación donde se realiza el
diseño y control de un robot SCARA de cuatro grados de libertad [7], la investigación
3

muestra de forma detallada como se diseñó y se controló el robot. A pesar de ser un trabajo
muy completo se omiten algunos aspectos importantes, por lo cual se consideran otras
investigaciones más recientes que muestran trabajos experimentales con robots, estas
investigaciones mencionan el control de un robot SCARA por medio de diferentes
controladores. Una de estas investigaciones, expresan que uno de los principales aspectos a
considerar en el robot es el controlador, ya que este nos permite mantener una estabilidad en
la posición y trayectoria deseada ante perturbaciones en el sistema [8].

1.1.1 Justificación.
Debido a las exigencias en los sistemas industriales del país y la falta de empresas
mexicanas que puedan sustentar estas exigencias, se propone el diseño y construcción de un
robot SCARA de tres grados de libertad, que cuente con una estructura ergonómica, es decir
que incluya con buena interacción humano-robot-ambiente, así como versátil, que se adapte
a las necesidades de sus tareas programadas al momento de realizar operaciones de
movimientos de objetos y ensamblaje en el plano horizontal. Se busca desarrollar un robot
que cumpla con el equilibrio de economía y rendimiento. Aunado a esto se necesita que el
robot tenga una interfaz gráfica amigable para el usuario y un desarrollo de control
susceptible a cualquier modificación de sus tareas programadas.
1.1.2 Objetivos.
Objetivo general
 Diseñar y construir un robot SCARA de tres grados de libertad capaz de seguir
trayectorias de referencia especificadas por el usuario mediante una interfaz
gráfica.
Objetivo particular
 Obtener el modelo cinemático directo e inverso y diferencial del robot SCARA
diseñado.
 Diseñar componentes mecánicos que cumplan con una ergonomía y versatilidad
idónea para el robot, con herramientas CAD.
 Simular y analizar la estructura del robot con herramientas CAE.
 Fabricar y ensamblar las piezas mecánicas del robot.
 Seleccionar sensores, actuadores y controladores adecuados para la operación del
robot.
 Diseñar e implementar el sistema eléctrico y electrónico del robot.
 Desarrollar el modelo dinámico del robot.
 Diseñar e implementar algoritmos de control, fiables y eficientes para el
seguimiento de trayectorias de referencia.
 Programar la interface de desarrollo para la operación del robot en PC.
 Realizar pruebas mecánicas y de control en el robot.
 Evaluar y analizar los resultados.
4

1.1.3 Requerimientos del robot.


En el diseño y control del robot SCARA considera los siguientes requerimientos
necesarios para operar:
 Dimensiones. El robot cuenta con una altura de 45 cm y con una extensión máxima
de su brazo de 35 cm.
 Capacidad de carga. El robot es capaz de mover objetos con un peso máximo de
1 kg.
 Velocidad de movimiento. El robot tiene rango de velocidades de 3 rad/seg y 4
rad/seg respecto a sus articulaciones rotacionales y un rango entre 0.5 m/s y 0.10
m/s en la articulación prismática.
 Alimentación eléctrica. En el robot se manejan dos alimentaciones eléctricas
diferentes, una alimentación de 12 VCD para la etapa de potencia y otra de 5 VCD
para el acondicionamiento de señales en el robot.
 Material de fabricación. El robot está fabricado en su mayoría con aluminio 6061.

1.1.4 Contenido de la tesis.


El presente trabajo de tesis se encuentra organizado de la siguiente forma:
En el capítulo 2 se describe el modelado cinemático del robot SCARA diseñado,
obteniendo un estudio del movimiento del robot sin considerar las fuerzas que originan dicho
movimiento.
En el capítulo 3 se aborda de forma detallada el diseño y construcción del robot SCARA,
se presenta el tipo de servomotor idóneo para cada articulación, los sensores utilizados, la
electrónica de potencia y los elementos encargados del acondicionamiento de señales
eléctricas.
En el capítulo 4 se detalla el movimiento del robot SCARA respecto a las fuerzas que
generan el movimiento utilizando la metodología de modelado Euler-Lagrange,
considerando las propiedades dinámicas del robot.
En el capítulo 5 se presentan los resultados experimentales del robot, analizando su
comportamiento ante la aplicación de diferentes esquemas de control.
En el capítulo 6 contiene, finalmente, las conclusiones del trabajo de tesis además de
posibles mejoras al robot presentado.
5

Capítulo 2. Modelado del robot SCARA

2.1 Cálculo cinemático directo.


La cinemática del robot estudia el movimiento del mismo con respecto a un sistema de
referencia. Así, la cinemática se interesa por la descripción analítica del movimiento espacial
del robot como una función del tiempo [9].
El estudio de la cinemática directa de robots manipuladores industriales proporciona
elementos para analizar y diseñar el desplazamiento de las articulaciones del robot, cuando
éste se mueve a lo largo de una trayectoria definida; además de la orientación de la
herramienta de trabajo.
En general, los robots SCARA tienen de 3 a 4 DOF (grados de libertad, del inglés) y se
pueden mover en cualquier coordenada (X-Y-Z) dentro de su espacio de trabajo. Los
movimientos en las direcciones X y Y se obtienen con dos uniones rotacionales de ejes
paralelos. El movimiento vertical usualmente es un eje lineal independiente que se encuentra
ya sea en el extremo del brazo o en la base del robot.

1Fig. 2.1. A) Vista frontal SCARA, B) vista superior SCARA, C) espacio de trabajo
SCARA.
La configuración SCARA representa una geometría especial de robot industrial, dado que
es un brazo planar antropomórfico con dos articulaciones rotacionales y una prismática o
lineal para manipular objetos. El robot SCARA propuesto para su diseño contiene 3 DOF y
se constituye de dos articulaciones tipo revolutas 𝑞1 y 𝑞2 , que permiten la rotación de los
eslabones (ver Fig. 2.1 A, B). La última articulación d es de tipo prismática, perpendicular al
movimiento de los eslabones anteriores como se muestra en la Fig. 2.1.A.
Para obtener el modelo geométrico directo del robot SCARA, se utiliza la metodología
Denavit-Hartenberg [10], que consiste en determinar una tabla de parámetros relacionados
con los eslabones del robot (ver Fig. 2.2). Estos parámetros permiten crear las matrices de
transformación homogéneas que involucran operaciones de rotación y translación dentro de
una matriz que estructura el modelo cinemático directo.
6

2Fig. 2.2. Representación de los ejes por el método de Denavit-Hartenberg.


De la representación de los ejes de la Fig. 2.2. es posible obtener los parámetros
relacionados con los eslabones, considerando 𝜃𝑖 como una variable articular de tipo
rotacional, prismática o lineal 𝑑𝑖 , la longitud del eslabón 𝑙𝑖 , el ángulo de separación entre los
ejes denotado por 𝛼𝑖 [11].
El sistema de referencia fijo es colocado en el piso, de tal forma que sobre el eje 𝑧0 la
articulación de la base del robot queda a una distancia 𝑙1, más el ancho del motor fijo en la
base y el espesor de la barra del eslabón 1. En esta ocasión se toma como 𝑙1 este conjunto y
sólo se considera el ancho del segundo motor definido como 𝐵1, el cual se observa en la
Tabla 2.1.
3Tabla 2.1. Parámetros de la cinemática del robot.
Parámetros D-H del Robot SCARA
Eslabón 𝒍𝒊 𝜶𝒊 𝒅𝒊 𝜽𝒊
0-1 𝑙2 0 𝑙1 + 𝐵1 𝑞1
1-2 𝑙3 180° 𝐵1 𝑞2
3-2 0 0 𝑑 0
De acuerdo con los datos obtenidos en la Tabla 2.1, se pueden obtener las matrices de
transformación homogéneas del robot SCARA [12]. Estas matrices quedan representadas
como:
𝐶𝑞1 −𝑆𝑞1 0 𝑙2 𝐶𝑞1
𝑙2 𝑆𝑞1
𝐻0 = [ 𝑆𝑞1
1 𝐶𝑞1 0 ]
0 0 1 𝑙1 (1
0 0 0 1

𝐶𝑞2 𝑆𝑞2 0 𝑙3 𝐶𝑞2


𝑙3 𝑆𝑞2
𝐻12 = [ 𝑆𝑞2 −𝐶𝑞2 0 ]
0 0 −1 𝐵1 (2
0 0 0 1
7

1 0 0 0
𝐻23 = [0 1 0 0]
0 0 1 𝑑 (3
0 0 0 1

De las matrices anteriores se simplifica “S” para mencionar seno y “C” por coseno. Para
obtener la última posición del robot es necesario multiplicar las matrices 𝐻01 𝐻12 = 𝐻02 , que al
multiplicarla por la matriz 𝐻23 se obtiene la matriz homogénea de la posición final del robot,
expresada como 𝐻03 como se aprecia a continuación:
𝐶𝑞1 𝐶𝑞2 − 𝑆𝑞1 𝑆𝑞2 𝐶𝑞1 𝑆𝑞2 + 𝑆𝑞1 𝐶𝑞2 0 𝑙2 𝐶𝑞1 + 𝑙3 𝐶𝑞2 𝐶𝑞1 + 𝑙3 𝑆𝑞2 𝑆𝑞1
𝑙2 𝑆𝑞1 + 𝑙3 𝑆𝑞1 𝐶𝑞2 + 𝑙3 𝐶𝑞1 𝑆𝑞2
𝐻0 = [𝑆𝑞1 𝐶𝑞2 + 𝐶𝑞1 𝑆𝑞2
2 𝑆𝑞1 𝑆𝑞2 − 𝐶𝑞1 𝐶𝑞2 0 ]
0 0 −1 𝐵1 + 𝑙1 (4
0 0 0 1

𝐶𝑞1 𝐶𝑞2 − 𝑆𝑞1 𝑆𝑞2 𝐶𝑞1 𝑆𝑞2 + 𝑆𝑞1 𝐶𝑞2 0 𝑙2 𝐶𝑞1 + 𝑙3 𝐶𝑞2 𝐶𝑞1 + 𝑙3 𝑆𝑞2 𝑆𝑞1
𝑙2 𝑆𝑞1 + 𝑙3 𝑆𝑞1 𝐶𝑞2 + 𝑙3 𝐶𝑞1 𝑆𝑞2
𝐻0 = [𝑆𝑞1 𝐶𝑞2 + 𝐶𝑞1 𝑆𝑞2
3 𝑆𝑞1 𝑆𝑞2 − 𝐶𝑞1 𝐶𝑞2 0 ]
0 0 −1 𝐵1 + 𝑙1 − 𝑑 (5
0 0 0 1

Al obtener la matriz de transformación homogénea 𝐻03 se obtiene el vector de traslación,


que indica las posiciones del robot en los ejes X, Y, Z, [13]. De modo que las posiciones del
robot son las siguientes:
𝑃𝑥 = 𝑙2 𝐶𝑞1 + 𝑙3 𝐶(𝑞1 +𝑞2 )
(6

𝑃𝑦 = 𝑙2 𝑆𝑞1 + 𝑙3 𝑆(𝑞1 +𝑞2 )


(7

𝑃𝑧 = 𝐵1 + 𝑙1 − 𝑑 (8
En donde Px es la posición en el eje X, Py es la posición en el eje Y, Pz para la posición
en el eje Z, determinadas mediante simplificaciones utilizando identidades trigonométricas
de suma de ángulos.

2.2 Cálculo cinemático inverso.


La cinemática inversa es la relación contraria a la cinemática directa, es decir, relaciona
una posición del espacio de trabajo a una configuración en el espacio de configuraciones del
manipulador. En otras palabras, dada la posición deseada para el robot y su efector final, a
través de la cinemática inversa es posible determinar los ángulos que deberán de adoptar las
articulaciones del dispositivo. La cinemática inversa es un problema no lineal que relaciona
las coordenadas articulares en función de las coordenadas cartesianas [14]. La cinemática
inversa, para el caso particular del robot SCARA, se calcula mediante un análisis geométrico
y matemático utilizando identidades trigonométricas.
8

Para el cálculo de la cinemática inversa del robot SCARA se utiliza la forma geométrica,
donde se consideran todas las variables independientes de la función cinemática inversa
como: (X, Y, Z, 𝜃 ), donde X, Y y Z son posiciones expresadas en metros y 𝜃 que es el ángulo
formado por los eslabones y esta dado en radianes. El primer análisis a realizar consiste en
observar el comportamiento de las 2 primeras articulaciones rotacionales, considerándose
una vista superior del robot. Como se observa en la Fig. 2.3, las variables 𝑞1 y 𝑞2 están en
función de las posiciones X y Y.

4Fig. 2.3. Robot SCARA desde vista superior.


Considerando que el robot tiene una configuración planar, el problema de la cinemática
inversa se puede desarrollar como un sistema de 2 DOF. El punto P(x,y) permite su
determinación mediante el teorema de coseno. Simplificando el modelo del robot a barras
como se observa en la Fig. 2.4 y utilizando geometría analítica además de identidades
trigonométricas, se analizan los triángulos formados por los brazos del robot y h (resultante
entre el origen y la posición Px y Py) con el fin de encontrar 𝑞2 (ángulo entre la articulación
1 y 2) [15].

5Fig. 2.4. Modelo de barras del robot SCARA desde vista superior.
Utilizando el teorema de Pitágoras se tiene que:
9

ℎ2 = 𝑃𝑥 2 + 𝑃𝑦 2
ℎ2 = 𝑙2 2 + 𝑙3 2 − 2𝑙2 𝑙3 (cos(𝜋 − 𝑞2 ))
𝑃𝑥 2 + 𝑃𝑦 2 = 𝑙2 2 + 𝑙3 2 + 2𝑙2 𝑙3 (cos(𝜋 − 𝑞2 ))
𝑃𝑥 2 +𝑃𝑦2 −𝑙2 2 −𝑙3 2
cos(𝑞2 ) = 2𝑙2 𝑙3

4𝑙2 2 𝑙3 2 − (𝑃𝑥 2 + 𝑃𝑦 2 − 𝑙2 2 − 𝑙3 2 )2
𝑠𝑒𝑛(𝑞2 ) = √
2𝑙2 𝑙3

√4𝑙2 2 𝑙3 2 −(𝑃𝑥 2 + 𝑃𝑦 2 − 𝑙2 2 − 𝑙3 2 )2
𝑞2 = 𝑡𝑎𝑛−1 (9
𝑃𝑥 2 + 𝑃𝑦 2 − 𝑙2 2 − 𝑙3 2

Del teorema de coseno se despeja 𝑐𝑜𝑠(𝑞2 ), se aplica la identidad de seno sen 𝑞


𝑠𝑒𝑛 𝑞
=√1 − 𝑐𝑜𝑠𝑞 2 y por último la identidad de tangente tan 𝑞 = cos 𝑞 , a fin de despejar 𝑞2 ; por
resultado obtenemos la ecuación (9).
Para encontrar 𝑞1 se analiza el triángulo formado por los lados 𝑥𝑐 , 𝑦𝑐 y h, del cual se
obtiene:
𝑞1 = 𝛽 − Ω

𝑃𝑦 𝑙3 𝑠𝑒𝑛(𝑞2 )
𝑞1 = 𝑡𝑎𝑛−1 ( ) − 𝑡𝑎𝑛−1 ( )
𝑃𝑥 𝑙2 +𝑙3 cos(𝑞2 ) ( 10

La Ec. (10) se encuentra en función de 𝑞2 , cuyo resultado puede ser negativo o positivo;
de acuerdo con la solución aplicada en la Ec. (10) el valor de 𝑞1 se modifica. Entonces 𝑞1 y
𝑞2 dependerán de los puntos asignados en el espacio (x, y).
Para el cálculo de la variable d no es necesario realizar análisis bidimensional, debido a
que el valor de la variable representa el desplazamiento en la articulación lineal sobre el eje
z del marco de referencia de la base, se desarrolla un cálculo directo sobre el valor de la
entrada del eje z. Al desarrollar el análisis en el eje z como se observa en la Fig. 2.2 se obtiene:

𝑑 = 𝐵1 + 𝑙1 − 𝑃𝑧
( 11
10

2.3 Cálculo cinemático diferencial.


Además de tratar con los problemas de posicionamiento estático, es conveniente analizar
los manipuladores en movimiento. Al realizar el análisis de velocidad de un mecanismo, se
define una matriz conocida como el Jacobiano del manipulador. El Jacobiano del
manipulador relaciona las velocidades articulares con las velocidades cartesianas del extremo
[16].
El Jacobiano es una de las entidades más importantes en el análisis y control de
mecanismos robóticos, ya que nos ayuda a encontrar configuraciones singulares
(determinante de su matriz Jacobiana se anula), analizar la redundancia, planeación y
ejecución de trayectorias, determinar la cinemática diferencial inversa, así como describir la
relación entre la fuerza aplicada y los pares resultantes del efector final. Es indispensable
para el análisis y diseño de algoritmos de control.
El Jacobiano del robot SCARA tiene una dimensión 6 x 3, esto debido a la representación
espacial y los 3 DOF del robot. Para obtener el Jacobiano de la velocidad angular w, es
necesario considerar que w es la velocidad angular con respecto a 𝜃, es decir el ángulo con
respecto al eje Z. De modo que los ángulos de Euler 𝜙 y 𝜓 son nulos ya que no se controlan
ni son afectados 𝑞1 , 𝑞2 y 𝑑. Al considerar lo anterior, el Jacobiano de la velocidad angular
esta expresado como:
0 0 0
𝐽𝑤 = [0 0 0]
1 1 0 ( 12

Dadas las posiciones Px, Py y Pz es posible determinar la velocidad (Jacobiano) a partir


𝑑
de 𝑑𝑡 [𝑥, 𝑦, 𝑧, 𝜃, 𝜙, 𝜓]𝑇 donde x, y, z son las posiciones y 𝜃, 𝜙, 𝜓 son los ángulos de Euler del
robot SCARA [17]:
𝜕𝑥
= −𝑙2 𝑆𝑞1 − 𝑙3 𝑆(𝑞1 +𝑞2 )
𝜕𝑞1
𝜕𝑦
= 𝑙2 𝐶𝑞1 + 𝑙3 𝐶(𝑞1 +𝑞2 )
𝜕𝑞1
𝜕𝑧
=0
𝜕𝑞1
𝜕𝑥
= −𝑙3 𝑆(𝑞1 +𝑞2 )
𝜕𝑞2
𝜕𝑦
= 𝑙3 𝐶(𝑞1 +𝑞2 )
𝜕𝑞2
𝜕𝑧
=0
𝜕𝑞1
𝜕𝑥
=0
𝜕𝑑
11

𝜕𝑦
=0
𝜕𝑑
𝜕𝑧
= −1
𝜕𝑑
Cuya representación matricial es:

−𝑙2 𝑆𝑞1 − 𝑙3 𝑆(𝑞1 +𝑞2 ) −𝑙3 𝑆(𝑞1 +𝑞2 ) 0


𝐽𝑣 = [ 𝑙2 𝐶𝑞1 + 𝑙3 𝐶(𝑞1 +𝑞2 ) 𝑙3 𝐶(𝑞1 +𝑞2 ) 0]
0 0 −1 ( 13

Finalmente, considerando las Ecs. (12) y (13), se obtiene el Jacobiano geométrico del
robot SCARA, el cual se observa en la Ec. (14). Este representa la matriz de transformación
del efector final visto desde la base del robot.
−𝑙2 𝑆𝑞1 − 𝑙3 𝑆(𝑞1 +𝑞2 ) −𝑙3 𝑆(𝑞1 +𝑞2 ) 0
𝑙2 𝐶𝑞1 + 𝑙3 𝐶(𝑞1 +𝑞2 ) 𝑙3 𝐶(𝑞1 +𝑞2 ) 0
0 0 −1
𝐽= 0
0 0 ( 14
0 0 0
[ 1 1 0]

Como se observa en la Ec. (14) la matriz jacobiana depende de las posiciones articulares,
en este caso 𝑞1 y 𝑞2 , al igual que el giro de la herramienta con respecto al eje X y Y son nulos
por consiguiente en estas direcciones el robot es fijo ya que sólo se desplaza la muñeca en el
eje Z.
La inversa de la matriz jacobiana se muestra en la Ec. (15), esta matriz permite encontrar
la velocidad de las articulaciones o la velocidad del efector final.

( 15

2.4 Simulación cinemática del robot.


Además de obtener una metodología numérica como lo es la cinemática del robot SCARA,
es de gran importancia disponer de una herramienta de visualización que permita comprobar
los resultados obtenidos, de manera que la detección de errores sea lo más acertada. Para
generar una simulación con el objetivo de proporcionar una vista preliminar de cómo se
apreciará el robot, se utilizan las ecuaciones obtenidas de la cinemática directa e inversa. Los
datos para la simulación serán ya sea posiciones (X, Y y Z) o ángulos obtenidos en conjunto
con el desplazamiento. Para simular la cinemática del robot se considera la forma directa,
con los siguientes valores articulares:
𝑞1 = 45°
𝑞2 = −80°
12

𝑑 = 40 𝑚𝑚

6Fig. 2.5. Simulación cinemática del robot SCARA: a) Vista 3D del robot, b) Vista X-Y
del robot.
Como se observa en la Fig. 2.5, la línea de color rojo corresponde a la base del robot, la
línea negra al eslabón 1, la línea verde al eslabón 2 y la línea amarilla al eslabón 3. Los
eslabones se mueven respecto a los ángulos proporcionados de modo que la cinemática
obtenida corresponde de forma correcta. Se aprecia cómo se mueven los 3 DOF y como se
genera la posición final del efector final.
13

Capítulo 3. Diseño del Robot SCARA

El objetivo de este capítulo es describir el diseño del robot SCARA, así como las
características y funcionamiento de sus componentes fundamentales: estructura física,
motores, sensores, fuente de alimentación y microcontrolador. El diseño del robot SCARA
abarca la iteración sinérgica de diferentes ingenierías para su desarrollo, en el cual la
experimentación puede estar sujeta a modificaciones permanentes. La metodología de diseño
a seguir consiste en tres partes fundamentales: modelamiento, simulación e integración. A lo
largo del desarrollo del robot serán seguidos estos procesos a fin de mejorar cada sección del
robot.

7Fig. 3.1. Explosión de piezas de la base principal.


En la Fig. 3.1 se muestra la explosión de piezas que conforman la base principal del robot.
Se indica la lista de materiales para no confundir el número de parte de cada pieza.
14

8Fig. 3.2. Explosión de piezas del eslabón 1.


La Fig. 3.2 presenta la explosión de piezas del eslabón 1, es fácil identificar cada pieza y
compararla con la lista de materiales. Se definen los tipos de tornillos para la sujeción de
todas las partes del robot.
Por último, en la Fig. 3.3 se describe la explosión del eslabón 2 y 3. Los planos de cada
pieza, señalados en las listas de materiales, se encuentran en el apéndice H de forma detallada.
15

9Fig. 3.3. Explosión de piezas del eslabón 2 y 3.

3.1 Especificaciones constructivas del robot SCARA.


El robot SCARA a diseñar cuenta con una altura aproximada de 450 mm, un alcance
máximo de la extensión de su brazo de 360 mm. Debe de contar con una capacidad de carga
de 1 kg, precisión de posicionamiento de menos de 0.02 mm y repetibilidad de movimiento
de 0.015 mm. Las dimensiones y parámetros del robot a diseñar se especifican en la Tabla
3.1.
10Tabla 3.1. Parámetros y dimensiones del robot SCARA a diseñar.
Parámetros y dimensiones del robot SCARA
Longitud
Tipo de Rango de giro / Rango de
Articulación Variable de
articulación desplazamiento velocidades
eslabones
1 Revoluta q1 120° y -120° 190 mm 4 𝑟𝑎𝑑⁄𝑠
2 Revoluta q2 90° y -90 170 mm 4 𝑟𝑎𝑑⁄𝑠
3 Prismática d -80 70 mm 0.5 − 0.10 𝑚⁄𝑠
Dados los parámetros de la Tabla 3.1, se puede definir el espacio de trabajo del robot
SCARA, tomando en cuenta las dimensiones de los eslabones E1 y E2 que conforman el
brazo y el antebrazo respectivamente y tomando en cuenta el giro de las articulaciones 𝑞1 y
𝑞2 con respecto a su ángulo máximo, como se observa en la Fig. 3.4.
16

11Fig. 3.4. Espacio de trabajo del robot SCARA diseñado, en vista de planta.

3.1.1 Diseño asistido por computadora (CAD).


Para el diseño mecánico de la estructura del robot SCARA es necesario realizar un estudio
estructural de tal manera que las dimensiones, materiales, componentes y demás elementos
del robot cumplan con las especificaciones constructivas.
Las piezas mecánicas se desarrollan en el software CAD SolidWorks 2016. Esta
herramienta permite el desarrollo del diseño de la forma tridimensional (3-D) a partir de los
cuales pueden producirse vistas ortográficas convencionales en dos dimensiones con
dimensionamiento automático [18].
Se utilizaron las dimensiones de los eslabones señalados en la tabla 3.1, donde se analizara
la creación de componentes y elementos óptimos para el robot, del modo que estos sean
fáciles de construir aplicando procesos de construcción comunes (rolado, corte, soldadura,
etc.).
En la Fig. 3.5 se puede observar el diseño de la base del robot SCARA, la base sirve de
soporte de todos los elementos de la estructura, así como del alojamiento del motor y
cableado. La base en general se compone de una base inferior fija (SCARA_P1), una base en
forma de tubo (SCARA_P3) y una base en la parte superior para fijar el motor del primer
eslabón (SCARA_P2) fabricadas con aluminio 6061.
17

12Fig. 3.5. Base del robot SCARA.


La base, de acuerdo a lo previamente mencionado, sostiene los eslabones y la carga total
que soportara nuestro robot. La Fig. 3.6 muestra, además, el eslabón 1 con el motor que
moverá el eslabón 2. El eslabón 1 estará fijo en el motor de la base permitiendo el giro en
revoluta de 120° y -120°, junto con el eslabón 2. El eslabón 1 (SCARA_P6) cuenta con un
soporte (SCARA_P5) fijo a un eje de unión (SCARA_P9) sobre el eje del motor de este, el
cual generara el movimiento en revoluta del eslabón 2 de 90° y -90°.

13Fig. 3.6. Eslabón 1 del robot SCARA.


La base sujeta del eslabón 1 fija al eslabón 2 y en conjunto generan los movimientos que
tendrá el robot en el espacio de trabajo. El eslabón 2 (SCARA_P10), como se aprecia en la
18

Fig. 3.7, se conforma a su vez de un tornillo de potencia (SCARA_P4) impulsado por un


motor para generar su movimiento. Este permite que la base del tornillo de potencia pueda
mover otra base de carga (SCARA_P13) que sujeta el tubo que subirá y bajará con la carga
que soportara el robot (SCARA_P17). El movimiento de la carga será de forma lineal
subiendo y bajando la carga 80 mm.

14Fig. 3.7. Eslabón 2 del robot SCARA.


Al unir la base, el eslabón 1 y el eslabón 2 se obtiene el robot SCARA completo,
moviéndose a lo largo del espacio de trabajo con o sin carga (ver Fig. 3.8).
19

15Fig. 3.8. Robot SCARA completo.

3.1.2 Simulación y Análisis de esfuerzos del sistema mecánico.


Dado el diseño de las piezas mecánicas del robot SCARA de la subsección 3.1.1, es
importante analizar el comportamiento de las piezas ante diferentes tipos de situaciones como
la aplicación de cargas o efectos térmicos. El robot sólo tendrá cargas que modifican la
resistencia y rigidez de las piezas diseñadas.
Aunado a esto, se analiza el comportamiento a los eslabones del robot con respecto a las
cargas máximas aplicadas, considerando a los eslabones en su forma extendida. Además, el
análisis debe indicar si el efector final podrá realizar sus operaciones y llegar a su posición
deseada.
Antes de iniciar con las simulaciones de las piezas mecánicas, es necesario realizar el
diagrama de cuerpo libre del robot a partir del cual es posible calcular las cargas máximas;
de tal modo que los eslabones se deben encontrar en su posición de máxima extensión, esto
es cuando 𝑞1 y 𝑞2 se encuentren en 0°. A continuación se presenta el diagrama de centros de
20

masa del robot SCARA a diseñar, donde la masa de la base y eslabones fueron obtenidos de
la simulación de las piezas; de tal forma que se considera la masa de los eslabones más la
masa de los motores a utilizar como se muestra en la Fig. 3.9.

16Fig. 3.9. Centro de masa del robot SCARA.


Para realizar el diseño de la estructura del robot, es necesario elaborar el diagrama de
cuerpo libre para analizar las cargas máximas en el robot. En la Fig. 3.10 se observa el
diagrama de cuerpo libre del robot.

17Fig. 3.10. Diagrama de cuerpo libre.


Las propiedades físicas de los elementos mecánicos tales como: masa, centro de gravedad
e inercias del robot fueron determinados mediante software CAD SolidWorks 2016 que toma
las dimensiones y tipo de materiales reales a fabricar. Del diagrama de cuerpo libre de la Fig.
3.10 se analiza que el peso (𝑝) de cada eslabón queda definido como:
𝑝1 = 𝑚1 ∗ 𝑔 = (1.26 𝑘𝑔) (9.81 𝑚⁄𝑠 2 ) = 12.36 𝑁
( 16

𝑝2 = 𝑚2 ∗ 𝑔 = (1.20 𝑘𝑔) (9.81 𝑚⁄𝑠 2 ) = 11.77 𝑁


( 17

𝑝 = (𝑚𝑎𝑠𝑎 𝑚á𝑥𝑖𝑚𝑎) ∗ 𝑔 = (1 𝑘𝑔) (9.81 𝑚⁄𝑠 2 ) = 9.81 𝑁 ( 18


21

De esta forma se encuentran los pesos 𝑝1 y 𝑝2 de los eslabones y un peso p que es el peso
máximo el cual el efector final sostendrá.
Ya que se conocen los pesos de los eslabones es posible obtener la sumatoria de fuerzas
de cada eslabón [19], como se muestra a continuación:

∑ 𝐹𝑦 = ∑ 𝐹𝑅
( 19

∑ 𝐹34 = 𝑝2 + 𝑝 = 11.77 𝑁 + 9.81 𝑁 = 21.58 𝑁


( 20

∑ 𝐹12 = 𝑝1 + 𝐹34 = 12.36 𝑁 + 21.58 𝑁 = 33.94 𝑁


( 21

Obtenidas las sumatorias es posible encontrar también el momento flector, ya sea del codo
o del hombro del robot considerando el centro de masa de cada eslabón, así como las medidas
de sus longitudes y pesos. Para obtener los momentos antes señalados, es necesario analizar
el siguiente diagrama de fuerzas de la Fig. 3.11.

18Fig. 3.11. Diagrama de cuerpo libre general.


Con el objetivo de calcular el flector 2 se considera los pesos de los últimos eslabones con
la carga máxima que sostendrá el robot como se aprecia en la Ec. (22) [20].
𝐿2
𝑀2 = 𝑝2 (𝐿1 + ) + 𝑝(𝐿1 + 𝐿2 )
2 ( 22

0.20 𝑚
𝑀2 = 11.77 𝑁 (0.15 𝑚 + ) + 9.81 𝑁(0.15 𝑚 + 0.20 𝑚) = 6.37 𝑁. 𝑚
2 ( 23
22

A fin de obtener el momento 2, se emplea, dado que mueve a toda la cadena cinemática
del robot SCARA, el momento 1; presentado en la siguiente ecuación:
𝐿1
𝑀1 = 𝑀2 + 𝑝1 ( )
2 ( 24

0.15 𝑚
𝑀1 = 6.37 𝑁. 𝑚 + 12.36 𝑁 ( ) = 7.3 𝑁. 𝑚
2 ( 25

Dado los momentos obtenidos en los eslabones, surge una idea más general de cómo
trabaja el robot bajo las cargas sometidas. Aunado a esto, los momentos brindan información
para seleccionar los motores del robot, lo que se verá en los capítulos próximos.
Para complementar el diseño del manipulador, es necesario hacer un análisis de cargas y
esfuerzos bajo condiciones estáticas con el fin de obtener la resistencia máxima en cada
elemento mecánico. En algunos componentes considerados como elementos críticos se
realizó un análisis de elementos finitos FEA (Finite Element Analysis), para evaluar el
comportamiento de éstos ante la aplicación de las cargas calculadas.
El software utilizado, SolidWorks genera un estudio estático que indica los
desplazamientos que tendrán las piezas ante tales fuerzas aplicadas, fuerzas de reacción,
deformaciones unitarias y distribución del factor de seguridad.
El software presenta como resultados la distribución del esfuerzo en la escala de Von
Mises (𝑁⁄𝑚2 ) para la deformación; la distribución del desplazamiento estático medido en
escala URES (mm) y analiza la deformación generada de forma gráfica y codificada en
colores que indican las zonas más vulnerables; esto es, el tono azul indica el límite mínimo
y rojo el límite máximo.
En la Fig. 3.12 se observa el estudio estático realizado al soporte del eslabón 1
(SCARA_P5), este soporte se une al eje del motor 1 que se encuentra en la base del robot
SCARA y que une también el eslabón 1 con su respectiva carga. La imagen muestra el
análisis de tensión en la pieza al aplicarse en ella una fuerza de 35N (Newtons), esta fuerza
es la total obtenida en la sumatoria anterior de las fuerzas en el robot. Se observa que al ser
aplicada la fuerza no se rompe el limite elástico de la pieza, considerando que el material de
esta pieza es aluminio lo cual tiene un límite elástico de 145 𝑁⁄𝑚2 .
23

19Fig. 3.12. Soporte del eslabón 1 (SCARA_P5): Análisis de tensión.


Otro estudio importante en la simulación de la pieza es el estudio de desplazamiento
estático, que al igual que estudio anterior se le aplica la misma fuerza de 35N y se selecciona
la parte que será fijada de la pieza. Tal como se observa en la Fig. 3.13 el desplazamiento en
la superficie de la pieza, este desplazamiento es relativamente muy pequeño el cual no afecta
el diseño.

20Fig. 3.13. Soporte del eslabón 1 (SCARA_P5): Análisis de desplazamiento.


24

Los estudios anteriores ayudan a conocer el comportamiento de la pieza ante una fuerza y
generan parámetros indispensables para su fabricación. El siguiente estudio realizado en la
pieza es el factor de seguridad, que ayuda a visualizar las incertidumbres que pueden ocurrir
cuando las cargas reales actúen sobre una pieza ya construida, dicho de otro modo es una
medida de seguridad relativa de un componente bajo la acción de una carga [21]. En la Fig.
3.14 se aprecia como la pieza diseñada no está por debajo del factor de seguridad de 2.5 el
cual indica que la pieza tiene la resistencia mecánica adecuada.

21Fig. 3.14. Soporte del eslabón 1(SCARA_P5): Análisis de factor de seguridad.


A continuación se realizan los estudios anteriores al eslabón 1 (SCARA_P6), esta pieza
es una de las más críticas ya que esta sostiene el peso del motor 2, así como el peso total del
eslabón 2 en conjunto con la carga total. En la Fig. 3.15 se analiza el estudio estático
realizado, se observa que en el análisis de tensión la pieza no rompe su límite elástico
considerando que el material de la pieza es aluminio.
25

22Fig. 3.15. Eslabón 1 (SCARA_P6): Análisis de tensión.


En el análisis de desplazamiento mostrado en la Fig. 3.16 se observa que aun aplicando
una fuerza de 35N esta no sufre tanto desplazamiento en su superficie, considerando el peso
que mantendrá esta pieza. El mayor desplazamiento se encuentra en la punta del eslabón ya
que es ahí donde se concentra el mayor peso.

23Fig. 3.16. Eslabón 1 (SCARA_P6): Análisis de desplazamiento.


Por último se analiza el factor de seguridad en la pieza, se observa en la Fig. 3.17 que la
pieza se encuentra en color azul lo cual está arriba del factor de seguridad seleccionado de
2.5, que significa que la pieza a pesar de la carga aplicada no sufrirá deformación y puede
ser utilizada sin problema.
26

24Fig. 3.17. Eslabón 1 (SCARA_P6): Análisis de factor de seguridad.


El siguiente estudio se realiza al eje de unión 1 (SCARA_P9), este eje se fija al eje del
motor para poder generar el movimiento del eslabón 2, en la parte inferior se une a una base
de sujeción y en conjunto mueven este eslabón con todo y la carga máxima. El análisis de
tensión en esta pieza se muestra en la Fig. 3.18, y se observa que este no rompe el límite
elástico considerando que es una pieza también de aluminio.

25Fig. 3.18. Eje de unión 1 (SCARA_P9): Análisis de tensión.


Al ser una pieza crítica es necesario conocer como es su desplazamiento, entonces al
aplicarse una fuerza de 35N, esta sufre un desplazamiento mínimo despreciable observado
en la Fig. 3.19. El cual puede ser usada esta pieza sin problema alguno.
27

26Fig. 3.19. Eje de unión 1 (SCARA_P9): Análisis de desplazamiento.


Para el análisis de factor de seguridad de esta pieza, se analiza cómo se encuentra en un
factor mayor se seguridad, su fabricación no generará alguna incertidumbre como se muestra
en la Fig. 3.20.

27Fig. 3.20. Eje de unión 1 (SCARA_P9): Análisis de factor de seguridad.


28

Para unir el eje (SCARA_P9) con el segundo eslabón, se utiliza una base de sujeción
(SCARA_P8). Es importante conocer si esta podrá soportar el peso del eslabón en conjunto
con la carga máxima y así poder generar el giro de movimiento del mismo eslabón. En la Fig.
3.21 se observa el análisis de tensión, que indica si la pieza no rompe el límite elástico,
conociendo que su material es el aluminio.

28Fig. 3.21. Base de sujeción (SCARA_P8): Análisis de tensión.


Al aplicar una fuerza de 35N, se observa en la Fig. 3.22 que su desplazamiento no es muy
grande, el cual no nos afecta en los movimientos que realice el robot.

29Fig. 3.22. Base de sujeción (SCARA_P8): Análisis de desplazamiento.


29

En la Fig. 3.23 se observa el análisis de factor de seguridad aplicado a la base de sujeción


e indica que la pieza tiene un factor de seguridad mayor al especificado. Se puede trabajar
sin problema con la pieza.

30Fig. 3.23. Base de sujeción (SCARA_P8): Análisis de factor de seguridad.


El siguiente estudio se realiza al eslabón 2 (SCARA_P10), esta pieza sostendrá la carga
máxima del robot por consiguiente es importante conocer su análisis estático, en la Fig. 3.24
se observa el análisis de tensión en la pieza que indica si la pieza no rompe el límite elástico,
conociendo que su material es el aluminio.

31Fig. 3.24. Eslabón 2 (SCARA_P10): Análisis de tensión.


30

Al aplicar una fuerza de 35N al eslabón 2, esta sufre un desplazamiento en su superficie,


el estudio de desplazamiento indica que la pieza ante dicha fuerza el desplazamiento no afecta
en los movimientos del robot (ver Fig. 3.25).

32Fig. 3.25. Eslabón 2 (SCARA_P10): Análisis de desplazamiento.


Para terminar el estudio del eslabón 2, se realiza el análisis del factor de seguridad, la Fig.
3.26 muestra los resultados obtenidos e indica que la pieza está por arriba del factor de
seguridad señalado que es 2.5.

33Fig. 3.26. Eslabón 2 (SCARA_P10): Análisis de factor de seguridad.


31

Por último se realiza el análisis estático al eje de unión 2 (SCARA_P15), este eje une al
tornillo de potencia con el eje del motor y así generar el movimiento que subirá y bajará la
carga máxima en el robot. De tal forma que el análisis de tensión mostrado en la Fig. 3.27
indica que no rompe el límite elástico de su material de fabricación el aluminio.

34Fig. 3.27. Eje de unión 2 (SCARA_P15): Análisis de tensión.


En la Fig. 3.28 se observa el análisis de desplazamiento en el eje de unión 2, esta pieza
tiene un desplazamiento mínimo ante la fuerza aplicada que no afecta en el robot.

35Fig. 3.28. Eje de unión 2 (SCARA_P15): Análisis de desplazamiento.


32

Por último se presenta el análisis de factor de seguridad, este es de 2.5 al visualizar el


resultado en la Fig. 3.29 se aprecia que la pieza está por arriba del factor, indicando que puede
ser utilizada sin problemas.

36Fig. 3.29. Eje de unión 2 (SCARA_P15): Análisis de factor de seguridad.


Las piezas anteriores pueden ser fabricadas sin que estas llegaran a dañarse con las cargas
suministradas. Otro aspecto muy importante dentro del análisis estático es la simulación del
robot completo, esto es con todas las piezas que lo conforman ya que es importante conocer
la deformación que este presentará ante las cargas de sus componentes y su carga máxima;
de modo que la deformación será una pérdida de precisión en el robot, misma que modifica
el desplazamiento del efector final a su posición deseada. Se considera para la simulación
que el robot se encuentra en extensión máxima de sus eslabones, ya que es cuando se genera
más tensión en los eslabones y puede perder más precisión el robot.
Para la simulación del robot armado, se considera el análisis de tensión de Von Mises
como se observa en la Fig. 3.30 donde se fijó la parte de la base y se aplicó una carga a cada
eslabón respecto a las que presentará en la vida real para analizar su deformación. Se
consideraron los eslabones en revoluta como vigas en voladizo y el prismático en tensión
pura. De esta forma se observa que ante las cargas presentadas, el robot no logra deformarse
y puede trabajar de forma normal.
33

37Fig. 3.30. Análisis de tensión en el robot armado.


El siguiente análisis presentado es el de factor de seguridad en el armado del robot, como
se observa en la Fig. 3.31 el factor de seguridad es mayor a 2.5, los componentes son los
adecuados para su fabricación.

38Fig. 3.31. Análisis de factor de seguridad en el robot armado.


Por último se realizó un análisis de desplazamiento, como se mencionó anteriormente nos
ayuda a visualizar como se desplazará la parte más crítica del robot, ya que todas las cargas
en los eslabones del robot ejercerán un deformación en el último eslabón. La carga máxima
puede sufrir un desvió a su posición deseada y el cual genere problemas a la hora de
posicionarse. En la Fig. 3.32 las fuerzas aplicadas son las que el robot sostendrá en la vida
34

real que son alrededor de 35N distribuidas en los eslabones, se aprecia como el último
eslabón se hunde a causa de las cargas presentadas al encontrarse en su posición extendida.

39Fig. 3.32. Análisis de desplazamiento en el robot armado.


El desplazamiento máximo que tendría el robot ante las cargas debe ser menor de 0.5 mm
aproximadamente, lo que permite que el robot pueda trabajar sin problemas y pueda llegar a
su posición deseada con precisión.

3.1.3 Selección de actuadores.


Para la selección de los actuadores de las articulaciones del robot SCARA es necesario
considerar las velocidades a las cual trabajará el robot, como se señalan en la Tabla 3.1 para
lograr un mejor control de posición y precisión en los movimientos. Los actuadores a utilizar
consistirán en la combinación de un servomotor con caja de engranajes, de modo que el
momento máximo proporcionado por el actuador llegue a vencer la gravedad más la carga
máxima y proporcione una aceleración adecuada. La aceleración máxima depende no sólo
de la selección del actuador, si no de las características mecánicas de la estructura.
Dicho lo anterior para obtener el par de los actuadores de las articulaciones rotacionales
en el robot SCARA, se considera la siguiente ecuación:
𝑡 = 𝐽𝑖𝛼𝑖 + 𝐶𝑓𝑟𝜔𝑖
( 26

En la Ec. (26), 𝛼𝑖 representa la aceleración angular, 𝜔𝑖 la velocidad angular y 𝐶𝑓𝑟 el


coeficiente de fricción. Donde 𝐽𝑖 se define como el momento de inercia de una cadena
cinemática y se obtiene descomponiendo la geometría de éste en masa, por lo tanto se denota:

𝐽𝑖 = ∑(𝑙𝑐𝑖 )2 (𝑚𝑖 ) ( 27
35

Se define 𝑙𝑐𝑖 como la distancia del eje de giro al centro de masa del eslabón i y 𝑚𝑖 , definida
como la masa del eslabón i. Para calcular el momento de inercia que experimenta cada
actuador del robot SCARA es importante considerar los parámetros mostrados en la Tabla
3.2, datos obtenidos por el software de diseño.
40Tabla 3.2. Especificaciones de los parámetros en nuestro robot SCARA.
PARAMETROS DEL ROBOT SCARA
𝑚1 6 kg
𝑚2 1.26 kg
𝑚3 2.2 kg
𝑙1 0.20 m
𝑙2 0.16 m
𝑙3 0.19 m
B1 0.05 m
𝑙𝑐11 0.07 m
𝑙𝑐12 0.25 m
𝑙𝑐13 0.34 m
𝑙𝑐𝑚2 0.15 m
𝑙𝑐22 0.08 m
𝑙𝑐23 0.17 m
𝑚𝑀2 0.400 kg
𝑚𝑀3 0.310 kg
Para obtener el momento de inercia del primer actuador, es importante considerar las
distancias desde el eje del actuador 1 hasta los centros de masa del eslabón 1
(𝑙𝑐11 ), el eslabón 2 (𝑙𝑐12 ), el actuador 2 (𝑙𝑐𝑚2 ) y el eslabón 3 (𝑙𝑐13 ). Así como las masas de
los eslabones en conjunto con el peso del actuador y la carga total a mover. De modo que el
momento de inercia para el actuador 1 queda expresado de la siguiente forma:

𝐽1 = ∑(𝑙𝑐11 )2 𝑚1 + (𝑙𝑐𝑚2 )2 𝑚𝑀2 + (𝑙𝑐12 )2 𝑚2 + (𝑙𝑐13 )2 𝑚3


( 28

𝐽1 = 0.37𝑘𝑔𝑚2 ( 29

Para el momento de inercia del segundo actuador sólo se considera la cadena cinemática
a partir del actuador 2, considerando solamente la distancia del eje del actuador 2 (𝑙𝑐22 ) al
centro de masa del eslabón 2 y el eslabón 3 (𝑙𝑐23 ), respectivamente. Se expresa entonces el
momento de inercia como:

𝐽2 = ∑(𝑙𝑐22 )2 𝑚2 + (𝑙𝑐23 )2 𝑚3
( 30
36

𝐽2 = 0.07164 𝑘𝑔𝑚2
( 31

Al obtener los momentos de inercia de los actuadores se puede continuar con el cálculo
del par de cada motor. Se considera la velocidad angular (𝜔𝑖 ) y la aceleración angular (𝛼𝑖 )
como valores de diseño, que indican que tan rápido girará el motor, en la Tabla 3.1 se muestra
la velocidad definida para el robot SCARA, así como la aceleración de 4 𝑟𝑎𝑑⁄𝑠 2 .
El coeficiente de fricción (Cfr) se obtiene dado el rodamiento SKF seleccionado en el
área de contacto con el motor. Este coeficiente es proporcionado por el fabricante [32], en
este caso para las dos articulaciones del robot el coeficiente es de 0.0018 𝑁𝑚/ (𝑟𝑎𝑑⁄𝑠)
considerando que los rodamientos son cónicos, para más detalles ir ala apéndice W.
Obtenidos los datos anteriores se sustituyen estos valores en la Ec. (26) para obtener los
pares 𝑡1 y 𝑡2 como se observa en las Ecs. (32) y (33):
𝑡1 = 0.37𝑚2 𝑘𝑔 ∗ 4 𝑟𝑎𝑑⁄𝑠 2 + 0.0018 ∗ 4 𝑟𝑎𝑑⁄𝑠 = 1.48 𝑁𝑚
( 32

𝑡2 = 0.071𝑚2 𝑘𝑔 ∗ 4 𝑟𝑎𝑑⁄𝑠 2 + 0.0018 ∗ 4 𝑟𝑎𝑑⁄𝑠 = 0.29 𝑁𝑚


( 33

Los pares obtenidos indican el par máximo requerido para mover los eslabones con la
carga de los demás componentes, de modo que tomando en cuenta la velocidad ya establecida
del robot se puede elegir los actuadores que cumplan con estos criterios en general.
Para la selección de los motores de las articulaciones rotacionales del robot SCARA, se
consideró utilizar el motor PITTMAN GM9000 para el movimiento de la primera
articulación y el motor PITTMAN GM8000 para el movimiento de la segunda articulación.
Estos motores pueden cumplir con el par requerido, así como la velocidad y aceleración
adecuada para los movimientos del robot. Se seleccionaron los motores de esta marca ya que
brindan un funcionamiento suave, son muy estables con su corriente y tensión y no generan
tanto ruido [22]. En la Tabla 3.4 se observa las características de los motores utilizados. Cabe
señalar que estos motores son de corriente continua e imán permanente, los pares máximos
de los motores son multiplicados por la caja de reducción incorporada en cada motor la cual
eleva al par y reducen la velocidad, de modo que los pares finales de estos son suficientes
para soportar las cargas en los eslabones. Las especificaciones de los motores se encuentran
en los apéndices P y Q.

Por otro lado para obtener el par de elevación y descenso de la carga que moverá el robot
SCARA se utilizará un tornillo de potencia que permite distribuir mejor la fuerza de empuje
sobre la base de apoyo, en la Fig. 3.33 se presenta el esquema de un mecanismo con tornillo
de potencia.
37

41Fig. 3.33. Esquema de un tornillo de potencia.


Para el diseño del tornillo de potencia se utilizará un tornillo de potencia con rosca ACME,
la carga normal esta inclinada respecto al eje en una cantidad 𝜃 (igual a la mitad del ángulo
de la rosca) y su efecto es incrementar la fuerza de rozamiento, para obtener el par de
elevación se utiliza la siguiente ecuación [20]:
𝐹𝑑𝑚 (𝑝 + 𝜋𝜇𝑑𝑚 𝑠𝑒𝑐𝜃)
𝑡𝑝 = ( )
2 (𝜋𝑑𝑚 − 𝜇𝑝𝑠𝑒𝑐𝜃) ( 34

Dónde:
F Valor de la carga a elevar por el tornillo.
p Paso o avance del tornillo.
𝒅𝒎 Diámetro medio del tornillo.
𝝁 Coeficiente de rozamiento de la rosca del tornillo y tuerca.
𝝷 Ángulo de la rosca.
El tornillo de potencia a utilizar es un tornillo embalado con las siguientes características
mostradas en la Tabla 3.3:
42Tabla 3.3. Especificaciones de los tornillos utilizados en el robot SCARA.

CARACTERISTICAS PRINCIPALES DEL TORNILLO DE POTENCIA A UTILIZAR


PASO O AVANCE DIAMETRO MEDIO COEFICIENTE DE ÁNGULO DE LA CARGA
DEL TORNILLO DEL TORNILLO ROZAMIENTO ROSCA MÁXIMA

5 mm 12 mm 0.1 29° 7 kg

Sustituyendo los valores de la Tabla 3.3 en la Ec. (34) y considerando que la carga máxima
que levantar nuestro robot SCARA es de 9.81 N se tiene que:
9.81 𝑁 ∗ 0.012 𝑚 (0.005 𝑚 + 3.1416𝑚 ∗ 0.1 ∗ 0.012 ∗ 𝑠𝑒𝑐29°)
𝑡𝑝 = ( )∗ ( 35
2 (3.1416 ∗ 0.012 − 0.1 ∗ 0.005 ∗ 𝑠𝑒𝑐29°)
38

1 𝑘𝑔 100 𝑐𝑚
𝑡𝑝 = 0.17𝑁. 𝑚 ( )( ) = 1.7 𝑘𝑔. 𝑐𝑚
9.81 1𝑚 ( 36

Con el par obtenido en la Ec. (36) se selecciona un actuador que pueda mover la carga
máxima del robot SCARA, de modo que la pueda subir y bajar en distintos puntos sin que
esta pueda descender bruscamente. Los datos sustituidos fueron tomados de tornillos de
potencia comerciales, con el fin de encontrarse más fácil en el mercado.
El motor para mover la carga máxima seleccionada, es el motor marca NAMIKI, dado
que ofrece una velocidad mayor para subir y bajar la carga del robot a diferencia de los
motores PITTMAN. En la Tabla 3.4 se observan las características principales de los motores
utilizados en el robot.
43Tabla 3.4. Especificaciones de los motores utilizados en el robot SCARA.
ESPECIFICACIONES DE MOTORES EN EL ROBOT SCARA
Hombro Codo Eje Z
Datos del motor
M1 M2 M3
Voltaje de alimentación (VDC) 24 12 12
Velocidad sin carga (𝑟𝑝𝑚/ 𝑟𝑎𝑑⁄𝑠) 236/24.7 75/7.85 120/12.56
Par máximo continuo (N-m) 1.1 0.8 0.5
Par pico al arranque (N-m) 6.1 2.3 1.6
Corriente al arranque (A) 9.64 1.41 1.8
Datos de la caja de engranes
Relación de reducción 19.7:1 10:1 80:1

3.1.4 Selección de materiales para la fabricación de la estructura del robot


y piezas mecánicas adicionales.
En la estructura de cualquier configuración robótica, es necesario tener un buen diseño
mecánico de todos los componentes para tener buen funcionamiento de este, así como
conocer el material ideal para el diseño de cada pieza.
Para la fabricación de las piezas mecánicas del robot SCARA, el material seleccionado
de todos los eslabones es aluminio 6061, teniendo este 10 mm de espesor, esto debido a que
el aluminio es un material ligero y muy resistente que cuenta con un peso específico de 2730
𝑘𝑔⁄𝑚3 . El aluminio, como comentario final, permite que el robot sea ligero y pueda mover
su carga máxima con facilidad, sin deformarse.
La base inferior del robot SCARA es la que soporta todo su peso, de modo que el material
seleccionado es el acero 1018 para mantener la estabilidad completa del robot y soporte el
peso completo de la cadena cinemática del robot. El acero 1018 es más sencillo trabajar en
acabados sencillos y es fácil de maquinar en operaciones de corte, soldado, barrenado, etc.
39

Además de considerar el material de las piezas a fabricar es importante mencionar las


piezas mecánicas adicionales en la estructura del robot, estas piezas mecánicas son los
rodamientos.
Los rodamientos se utilizan con la finalidad de dar apoyos a los ejes verticales de las
articulaciones de forma que estas giren libremente y se eliminen holguras o juegos. Estos
rodamientos estarán fijos de modo que deben soportará cargas radiales y axiales que pueden
aparecer sobre el eje.
En el robot SCARA se utilizarán rodamientos cónicos, considerando la capacidad de carga
estática y dinámica que tendrá el robot, así como su vida útil. Aunado a esto, se seleccionaron
contemplando la capacidad de carga y sus dimensiones internas y externas, ya que el
dimensionamiento permitirá tener tolerancias en el mecanizado del eje y de la cavidad de
alojamiento de todos los rodamientos a utilizar como se observa en la Fig. 3.34.

44Fig. 3.34. Diagrama de los rodamientos utilizados.


En la Tabla 3.5 se muestran las características de los rodamientos SKF [23] a utilizar.
Para una información detallada se puede consultar el apéndice S.
45Tabla 3.5. Especificaciones de los motores utilizados en el robot SCARA.

CARACTERISTICAS PRINCIPALES DE RODAMIENTOS UTILIZADOS


d D B CARGA CARGA VELOCIDAD
CODIGO
mm mm mm DINÁMICA kN ESTÁTICA kN r/min
30302 J2 15 42 7 22.4 20 13000
30203 J2 17 40 7 19 18.6 13000
32004 X/4 20 42 7 24.2 27 12000

3.1.5 Fabricación de piezas mecánicas.


Para la fabricación del robot SCARA se consideró aluminio 6061 como se mencionó en
el punto 3.1.1.
40

46Fig. 3.35. Pieza SCARA_P1 fabricada.


Como se observa en la Fig. 3.35, la pieza SCARA_P1 tiene un desbastado en el centro
para acomodar la pieza SCARA_P3 y fijar esta por medio de un opresor de 3/16 in. También
se puede percibir cuatro ranuras pasadas de 13/32 in. con el fin de adherir el robot en alguna
superficie.
En la Fig. 3.36 se contempla la pieza SCARA_P2, el cual incluye cuatro ranuras pasadas
de 5/32 in. que une al motor M1. Esta base a su vez se incrusta a la pieza SCARA_P3 por
medio de dos opresores de 3/16 in.

47Fig. 3.36. Pieza SCARA_P2 fabricada.


La Fig. 3.37 muestra a la pieza SCARA_P3, misma que describe una pieza en forma de
tubo; donde se fija la base inferior y superior por medio de opresores de 3/16 in. También
cuenta con un orificio de 1 in. por donde pasan los cables de control.
41

48Fig. 3.37. Pieza SCARA_P3 fabricada.


Se aprecia en la Fig. 3.38 la pieza SCARA_P5, esta posee cuatro ranuras roscadas para
tornillo de 7/32 in. con el fin de unirse con la pieza SCARA_P6, así como una perforación
central de 8 mm. en donde se fija el eje del motor M1 por medio de un opresor de 3/16 in.

49Fig. 3.38. Pieza SCARA_P5 fabricada.


Como se observa en la Fig. 3.39, el eslabón 1 cuenta con ocho ranuras pasadas de tornillo
7/32 in. para unirse con las piezas SCARA_P5 y SCARA_P7. Además de contar con una
perforación donde se monta el rodamiento SKF61804 y la pieza SCARA_P9.
42

50Fig. 3.39. Pieza SCARA_P6 fabricada.


En la Fig. 3.40 se encuentra la pieza SCARA_P7 con tres ranuras pasadas de 3/32 in. para
fijar el motor M2, así como cuatro ranuras pasadas para tornillo 7/32 in. en donde se une con
la pieza SCARA_P6.

51Fig. 3.40. Pieza SCARA_P7 fabricada.


La Fig. 3.41 se encuentra la pieza SCARA_P9 con varias perforaciones, mismas que se
utilizan para ubicar el eje del motor M2 e incrustarlo a él con dos opresores de 3/16 in.

52Fig. 3.41. Pieza SCARA_P9 fabricada.


43

Como se observa en la Fig. 3.42, la pieza SCARA_P8 posee un conducto por donde la
pieza SCARA_P9 se fija mediante un tornillo de 1/4 in. Además cuenta con cuatro ranuras
roscadas para tornillo 7/32 in. que se utilizan para unir al eslabón 2.

53Fig. 3.42. Pieza SCARA_P8 fabricada.


La Fig. 3.43 muestra el eslabón 2 del robot SCARA, que une a la pieza SCARA_P8 a
través de cuatro ranuras pasadas de 7/32 in. Por otra parte dispone de dos perforaciones
donde se colocan los rodamientos SKF61800 Y SKF61802. Asimismo en las partes laterales
incluye cuatro perforaciones de 7/32 in. que se utilizan para incrustar la pieza SCARA_P14.

54Fig. 3.43. Pieza SCARA_P10 fabricada.


En la Fig. 3.44 se contempla la pieza SCARA_P11 que incluye cuatro ranuras roscadas
de 7/32 in. en donde se adhiere a la pieza SCARA_P12. Además de contar con una
perforación para montar el rodamiento SKF61804 y la pieza SCARA_P15.
44

55Fig. 3.44. Pieza SCARA_P11 fabricada.


En la Fig. 3.45 se observa la pieza SCARA_P12 con cuatro ranuras pasadas para tornillo
de 7/32 in. para la unión con la pieza SCARA_P11, así como dos perforaciones de 2 mm. en
donde se fija el motor M3 por medio de tornillos 3/16 in.

56Fig. 3.45. Pieza SCARA_P12 fabricada.


Apreciando la Fig. 3.46 se encuentra un soporte que cuenta con seis perforaciones pasadas
de 1/8 in. de donde se sostiene la base del tornillo de potencia. Asimismo una penetración
donde se fija la pieza SCARA_P17 a través de dos opresores de 3/16 in.
45

57Fig. 3.46. Pieza SCARA_P13 fabricada.


Se muestra en la Fig. 3.47, una base lateral que cuenta con cuatro ranuras pasadas de 7/32
in. para la unión con las piezas SCARA_P10 y SCARA_P11.

58Fig. 3.47. Pieza SCARA_P14 fabricada.


Como se aprecia en la Fig. 3.48, la pieza SCARA_P15 presenta varias perforaciones;
mismas que se utilizan para ubicar el eje del motor M3 e incrustarlo a él con dos opresores
de 3/16 in.

59Fig. 3.48. Pieza SCARA_P15 fabricada.


En la Fig. 3.49 se presenta un cilindro completo que sirve de soporte para las piezas
SCARA_P11 y SCARA_P12.
46

60Fig. 3.49. Pieza SCARA_P16 fabricada.


La Fig. 3.50, finalmente, contempla un cilindro hueco de aluminio, mismo que se utiliza
para sostener la carga que mueve el robot.

61Fig. 3.50. Pieza SCARA_P17 fabricada.

3.1.6 Ensamblaje de piezas mecánicas.


Con las piezas fabricadas tal y como se muestra en el punto 3.1.5, es necesario llevar acabo
la unión de todas las piezas; es el caso de la Fig. 3.51 donde se observa la base principal del
robot SCARA ensamblada. Se puede apreciar del mismo modo que las piezas fabricadas
coinciden al fijarse, por el cual no se genera ninguna holgura entre ellas.

62Fig. 3.51. Base del robot SCARA.


47

63Fig. 3.52. Eslabón 1 del robot SCARA.


Para realizar la unión de todas las piezas del robot SCARA se considera el seccionado de
partes del mismo, en la Fig. 3.52 se contempla todo el eslabón 1 unido. El eslabón tiene fijas
todas sus piezas de aluminio, incluyendo el motor que realizará el giro del eslabón 2. Se
puede separar el eslabón 1 de la base ya que sólo se encuentran unidos por el eje del motor
M1 y la pieza SCARA_P5.
Por último se encuentra el ensamble del eslabón 2 y 3 del robot, como se observa en la
Fig. 3.53. Al igual que el ensamble del eslabón 1 y la base, las piezas no presentan holguras
el cual puede ser operado sin problema en sus tareas definidas.

64Fig. 3.53. Eslabón 2 y 3 del robot SCARA.


48

Al unir cada parte mencionada anteriormente, se realiza un ensamble final del robot
SCARA tal como se aprecia en la Fig. 3.54. Este acople de fracciones cuenta con todas las
piezas fijas por medio de tornillos u opresores. Del mismo modo, tal y como se encentra es
la forma en la que se utiliza para realizar todas las pruebas de control de posición y
estabilidad.

65Fig. 3.54. Robot SCARA final.


49

3.2 Diseño electrónico.


3.2.1 Módulo de alimentación.
El principal objetivo del módulo de alimentación, es proporcionar un valor de tensión
adecuado para el funcionamiento de cualquier dispositivo electrónico en el robot SCARA.
El módulo de alimentación se compone de una fuente de alimentación que se encarga de
convertir la entrada de tensión alterna del suministro en una o varias tensiones continúas.
Para la alimentación de los motores, es necesario una fuente independiente que genere la
alimentación correcta para cada uno, los motores serán alimentados con el mismo voltaje
dado que la mayoría trabaja con el mismo voltaje. Para proporcionar la alimentación
adecuada, se seleccionó una fuente fija de 12 VCD y 10 Amperes, que permitirá dar una
corriente suficiente para que los motores trabajen con carga sin problemas, dado que la
corriente total por los tres motores es 7 Amperes al arranque. La fuente se observa en la Fig.
3.55.
La otra fuente independiente proporcionara solo un voltaje de 5 VCD, el voltaje se
encargará de alimentar la parte electrónica de la circuitería utilizada como lo es la tarjeta de
control y las compuertas TTL, así como alimentar los encoders y los sensores de final de
carrera. La alimentación de control no demanda tanta corriente por lo que esta fuente
proporciona 2 amperes, con lo que puede trabajar perfectamente.

66Fig. 3.55. Fuente de alimentación de motores.


La fuente de alimentación de la electrónica de control y potencia así como los sensores se
observa en la Fig. 3.56, utiliza un transformador de 120/24V a 2A. Esta corriente es menor a
la de los motores ya que la parte electrónica se alimenta de corrientes pequeñas para funcionar
y los 2 A son suficientes.
50

67Fig. 3.56. Fuente de alimentación de circuitería electrónica.

3.2.2 Módulo de adquisición de datos.


El módulo de adquisición de datos tiene como objetivo capturar señales del mundo real
(analógico) para generar datos que puedan ser manipulados por un ordenador en tiempo real.
Se toman algunas señales físicas, estas son convertidas en tensiones eléctricas y se digitalizan
para poder ser leídas por computadora.
En este módulo se acondicionarán las señales provenientes de los sensores del robot
SCARA, de modo que esas puedan ser leídas por la computadora. De esta forma se seleccionó
la placa Arduino Mega como tarjeta de adquisición de datos (DAQ), el proceso de control se
realiza dentro de un programa diseñado en el software MATLAB que genera diferentes tareas
con estas señales obtenidas.
La tarjeta Arduino Mega se encarga de administrar las entradas y salidas, ya sean digitales
o analógicas provenientes de los actuadores o sensores en el robot, de modo que estas señales
puedan leerse e interpretarse y manipularse por el usuario por medio de una interfaz gráfica.
Las principales características de la placa Arduino Mega se encuentran en el apéndice T.

3.2.3 Módulo de potencia.


Para el módulo de potencia, es necesario realizar la conversión de potencia de una u otra
forma, y que las características de conmutación de los dispositivos permitan estas
conversiones. El módulo de potencia se compone de un sistema de potencia y otro de control.
La parte de potencia maneja la transferencia de energía de la entrada hasta la salida, y los
circuitos de control regulan la cantidad de energía deseada a la salida.
El sistema de control en el robot SCARA se encargará de recibir las órdenes del programa
del computador y manejar los actuadores del robot acorde con estas órdenes, así como la
información recibida por los sensores (encoders y finales de carrera). En su interior dispone
de una lógica electrónica capaz de transformar los comandos que llegan del ordenador, en
señales de potencia para mover cada una de las articulaciones.
Para realizar el control de los motores de CD se utiliza un circuito servoamplificador
basado en un puente H de potencia. Un puente H es un conjunto de cuatro elementos de
conmutación que se encuentran arreglados como se muestran en la Fig. 3.57. Toma un voltaje
de alimentación de CD y genera un control a la carga conectada entre dos pares de transistores
de potencia, permiten a la corriente fluir de forma bi-direccional a través del motor; el voltaje
en la carga y la dirección de la corriente a través de él puede ser en ambas polaridades [24].
51

Dicho de otro modo, el sentido de giro del motor depende de la polaridad que se le aplica a
sus terminales, en consecuencia, para cambiar el giro es necesario intercambiar las terminales
del motor o bien cambiar la polaridad de alimentación y es posible regular su velocidad
haciendo circular mayor o menor corriente.

68Fig. 3.57. Arreglo típico de un puente H.


Para selección del puente H ideal para los motores se consideró respecto al voltaje de
alimentación y la corriente demandada, por lo que se consideraron el puente H LMD18200
y LM298.
El puente H LMD18200 es un dispositivo que viene integrado en un circuito monolítico,
compuesto de cuatro transistores DMOS de potencia, con diodos en antiparalelo como se
observa en la Fig. 3.58.

69Fig. 3.58. Diagrama esquemático del driver LMD18200.


El driver LMD18200 soporta una corriente hasta de 3A continuos y 6A de pico, opera en
un rango de voltaje de 12 a 60 como se observa en la Tabla 3.6 y puede ser controlado
mediante modulación por ancho de pulso PWM (Pulse Width Modulation). Dado a sus
características es ideal para el control del motor M1 ya que es el que más demanda corriente
por ser el que mueve toda la cadena de eslabones junto con la carga máxima [28]. Para más
información sobre el dispositivo revisar el apéndice U.
52

70Tabla 3.6. Características principales del driver LM18200.


CARACTERÍSTICAS PRINCIPALES DEL DRIVER LM18200
Parámetro Valor
Voltaje Máximo 60V
Voltaje en los pines 3, 4, 5, 8 y 9 12V
Corriente máxima de salida 6A
Corriente continua de salida 3A
Disipación de potencia 25W
-40ºC a
Temperatura de almacenamiento
100ºC
El otro puente H utilizado L298 es un módulo de potencia diseñado para manejar diversos
tipos de cargas. Consta de 4 amplificadores de potencia que soportan 2 A y una capacidad de
control de potencia alrededor de los 120 W como se aprecia en la Tabla 3.7.
71Tabla 3.7. Características principales del driver L298.
CARACTERÍSTICAS PRINCIPALES DEL DRIVER L298
Parámetro Valor
Voltaje Máximo 7V
Voltaje de habilitación 3 a 5V
Corriente máxima de salida 3A
Corriente continua de salida 2A
Disipación de potencia 25W
-25ºC a
Temperatura de almacenamiento
100ºC
Cuenta con dos pines de control para el control de giro y un pin de habilitación, que se
puede usar una señal PWM para control de la posición [25]; como se observa en la Fig. 3.59.
Para más información se puede consultar el apéndice V.

72Fig. 3.59. Diagrama esquemático del driver L298.


Como se mencionó anteriormente el control de los motores se realiza por modulación de
PWM generada por la placa Arduino Mega, permitirá variar la tensión de salida de los pines
0 a 13 en un valor proporcional a la escala de 0 a 255, esto es 0 es 0V y 255 es igual a 5V.
53

Esto se consigue creando una onda cuadrada que conmuta constantemente entre 0 y 5 para
generar una tensión proporcional a la escala. Es importante considerar que si la frecuencia
del PWM es muy baja esta genera en el motor una vibración y por contrario si es muy alta el
motor se calentara.
Para el control del primer motor se toma en cuenta el driver LMD18200, este se alimenta
con 12 VCD y será el encargado de mover la primera articulación. Su control se basa en tres
partes importantes (dirección, break y PWM), los pines mencionados permitirán detener el
motor, girar el motor hacia la izquierda o hacia la derecha e incluso regular velocidad. En la
Tabla 3.8 se observa la forma de control con este driver, los estados de estos pines permitirán
el control vía software con Matlab.
73Tabla 3.8. Tabla de control LMD18200.

TABLA DE LA VERDAD LOGICA LMD18200


ENABLE DIRECCIÓN BREAK ESTADO

H H L Giro hacia la Derecha


H L L Giro hacia la Izquierda
L L L STOP
H=alto (1) y L=bajo(0)
Al igual que el driver LMD18200, el driver L298 se controla de forma similar ya que
cuenta con dos pines de dirección (IN1 y IN2); estos pines se seleccionan por medio de
software y eligen la dirección de giro del motor, en la Tabla 3.9 se muestra el control:
74Tabla 3.9. Tabla de control L298.

TABLA DE LA VERDAD LOGICA L298


ENABLE IN1 IN2 ESTADO

H H L Giro hacia la Derecha


H L H Giro hacia la Izquierda
L L L STOP
H=alto (1) y L=bajo(0)
Al analizar la tablas de control de los drivers, se desarrolla el control del hardware que
tendrá con forme a la placa Arduino, la placa Arduino MEGA se encargará por medio de sus
pines administrar el control de los tres motores, esto es proveer al driver la dirección que se
requiere y la posición final para cada motor. Las salidas PWM de la tarjeta Arduino son
filtradas por el integrado 74LS14 con el fin de omitir distorsiones por ruido u otros factores,
haciendo una señal más limpia para el driver. En la Fig. 3.60 se observa la conexión de los
drivers con la tarjeta Arduino, así como la indicación de los pines que se utilizarán para el
control.
54

75Fig. 3.60. Esquema de conexión Drivers-Arduino.


La alimentación de los drivers, es de 12 VCD que es la misma que alimenta a los motores
para su control, los bornes que se observan sin conectar son para cada uno de los motores el
cual la polaridad será ajustada de acuerdo el giro que se haya programado. La tarjeta Arduino
y la compuerta 74LS14 se alimentan con un voltaje de 5 VCD de una fuente independiente a
la fuente de 12VCD. La conexión con la fuente se aprecia en el apéndice Z.
Al igual que la conexión de los drives con la tarjeta Arduino, existen otras conexiones
importantes que se deben analizar, entre ellas están la conexión de los encoders de cada
motor, en el apéndice R se observa cómo se conecta el encoder de cada motor en donde se
puede apreciar que se alimenta de 5 VCD. El fabricante da una recomendación de conexión
de resistencias Pull-up de 2.7 k en cada canal del encoder, como se observa en la Fig. 3.63
de modo que estos canales brindan una señal en cuadratura es importante conectar filtros en
la señal para evitar señales parásitas ya que estas pueden afectar la lectura de la tarjeta
Arduino.
El diagrama de la Fig. 3.61 indica en cada bornera como se conectará el encoder de cada
motor, esto considerando que el encoder estará alejado de la tarjeta Arduino y puede llegar a
confundir las conexiones de los pines.
55

76Fig. 3.61. Esquema de conexión Encoder-Arduino.


En la estructura del robot se instalan sensores pulsadores, estos detienen al robot para que
no sobre pase el límite marcado de grados en cada articulación. Los interruptores mandan un
0 o un 1 lógico igual a 5 VCD a la tarjeta Arduino e indican si han sido pulsados o no, si
alguno de estos es pulsado por algún eslabón el robot se detendrá hasta que deje de ser
pulsado. En la Fig. 3.62 se observa su conexión con la tarjeta Arduino, tomando un
seguimiento en los pines de la tarjeta para no confundirlos con los otros pines ya utilizados.

77Fig. 3.62. Esquema de conexión Sensores finales de carrera-Arduino.


56

Dadas las conexiones anteriores, es importante considerar que la mayoría de las


conexiones llegan a borneras y no son conectadas directamente con la tarjeta Arduino, esto
se hace con la finalidad de separar las señales y llevar un mejor control con los pines
conectados.

3.2.4 Módulo de comunicación Robot-PC.


Una vez propuesto el sistema general, se describe el módulo de comunicación del robot
SCARA con la PC, el cual se diseña haciendo uso de MATLAB y Arduino por medio de su
puerto serial a la computadora, mediante USB (COM). MATLAB se utilizará como entorno
de la aplicación para el control y visualización del robot, mientras que Arduino Mega se
utiliza como hardware de control.
La elección de MATLAB como plataforma de desarrollo, se basa en la cantidad de
funciones y algoritmos que posee, y a las herramientas para diseño de interfaces gráficas
utilizadas por usuario (GUIDE). Permite modificar, mejorar, ampliar o adaptar el código
propuesto. Al integrar MATLAB con Arduino se trabaja con una plataforma de hardware
libre de forma dinámica.
Para realizar la comunicación entre MATLAB y Arduino se emplea una herramienta de
software desarrollada por Mathworks, Arduino IO Package [31]. Se trata de un paquete que
consta de dos partes como se observa en la Fig. 3.63, el cual consta de una interfaz de
aplicación de MATLAB que se ejecuta como cliente en una computadora y un programa
servidor que se desarrolla en la tarjeta Arduino. Al usar este paquete se permite que se realice
el envió de comandos a través del puerto USB. Para su inclusión en MATLAB se agrega el
archivo arduino.m como ruta de comando para el entorno. A través del IDE de Arduino se
carga a la tarjeta el archivo adios.pde.

78Fig. 3.63. Comunicación MATLAB y Arduino.

3.2.5 Selección de sensores.


En el robot es necesario conseguir información en su entorno y estado en el que se
encuentra con la finalidad de desarrollar determinadas tareas con un grado de precisión. Los
sensores proporcionan información referente al estado del robot, la posición, la velocidad,
aceleración y fuerza en las articulaciones son las variables más comunes en el sistema de
sensores. La capacidad de percepción del robot se mejora, a través de este sistema, que le
permite responder a su entorno de manera versátil y autónoma. Los sensores envían señales
detectadas a un decodificador, convertidor o amplificador que ajusta las señales de manera
que sean compatibles con los elementos de control y monitoreo.
El robot SCARA diseñado cuenta con sensores digitales ópticos que miden la posición y
velocidad como lo son los encoders y sensores mecánicos que indicán la posición límite de
57

cada articulación. Los encoders incrementales se encuentran fijos en los servomotores y


generan una salida en forma de pulso proporcional al ángulo de rotación como se observa en
la Fig. 3.64. Por cada fracción de desplazamiento rotacional en la flecha del servomotor, el
encoder incremental cambia su salida de bajo a alto o viceversa. La salida de este encoder
indica movimiento, para determinar posición los pulsos deben de ser acumulados en un
contador [26].

79Fig. 3.64. Esquema del Encoder incremental.


Los motores PITTMAN en el robot SCARA contienen encoders incrementales de 500
CPR (Cycles Per Revolution) o ciclos por revolución, esto quiere decir que por 1 vuelta que
gire el disco del encoder tiene 500 pulsos a la salida, así como una salida en cuadratura con
2 canales desfasados 90° eléctricos como se observa en la Fig. 3.65 y según la relación de
fase entre ellos se determina la dirección de movimiento. El motor NAMIKI, al igual que en
los motores PITTMAN, su encoder tiene una salida en cuadratura con 2 canales desfasados
90°, en donde a diferencia sólo consta de 2 CPR. Para más información del encoder revisar
el apéndice Q.

80Fig. 3.65. Señales incrementales.


La unidad de medida para definir la precisión de un encoder es el grado eléctrico, este
determina la división de un pulso generado por el encoder: en efecto, los 360° eléctricos
corresponden a la rotación mecánica del eje necesaria para hacer que se realice un ciclo o
pulso completo de la señal de salida [27]. Para saber a cuántos grados mecánicos
corresponden 360° eléctricos es suficiente con aplicar la formula siguiente:
360° 𝑚𝑒𝑐á𝑛𝑖𝑐𝑜𝑠
360° 𝑒𝑙é𝑐𝑡𝑟𝑖𝑐𝑜𝑠 =
𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 𝑝𝑢𝑙𝑠𝑜𝑠/𝑔𝑖𝑟𝑜 ( 37
58

Antes de aplicar la fórmula a los encoders de cada motor, es importante considerar que
estos cuentan con una caja reductora con relaciones de engranes diferentes, por consiguiente
se debe multiplicar las CPR por la relación reductora como se muestra en la Tabla 3.10.
81Tabla 3.8. Especificaciones de los encoders incrementales en el robot SCARA.
CONSIDERACIONES DE LOS ENCODERS INCREMENTALES DEL ROBOT SCARA
Relación de Pulso por cada revolución Grados Grados
Motor CRP
reducción con caja de engranes Mecánicos Eléctricos
M1 500 19.7:1 9850 pulsos 360° 0.0365°
M2 500 19.5:1 9750 pulsos 360° 0.0369°
M3 2 80:1 160 pulsos 360° 2.25°
Además de los encoders incrementales utilizados en el robot SCARA se utilizan sensores
de final de carrera. Estos sensores están ubicados cerca de cada articulación y se encargan de
producir una señal cuando el eslabón está llegando a su límite máximo. En el robot SCARA
se colocaran 2 sensores final de carrera por actuador, de modo que se limita a los
movimientos de las 3 articulaciones del robot.
El funcionamiento de los finales de carrera es muy sencillo, se conecta la parte común a
un voltaje de 5VCD y el contacto NO (normalmente abierto), en donde al detectar que el
eslabón llega al límite este cierra el contacto NO y manda una señal a la etapa de control para
generar determinada tarea, el diagrama interno se muestra en la figura 3.66.

82Fig. 3.66. Sensor final de carrera.

3.2.6 Montaje de piezas electrónicas y eléctricas en el robot.


En el robot se instalaron dos sensores de final de carrera para detener el movimiento del
tornillo de potencia, como se observa en la Fig. 3.67. Cabe mencionar que uno detecta cuando
se sobrepasa el movimiento de subida y el otro la bajada.

83Fig. 3.67. Sensores final de carrera montados en la pieza SCARA_P14.


59

Capítulo 4. Control del robot SCARA

4.1 Modelo dinámico del robot.


El modelo dinámico de un robot tiene por objetivo conocer la relación entre el movimiento
del robot y las fuerzas implicadas en el mismo. Aunado a esto, permite explicar todos los
efectos físicos que se encuentran en su estructura mecánica; tales efectos como, inerciales,
fuerzas centrípetas y de coriolis, par gravitacional y fricción de los cuales son fenómenos
físicos intrínsecos o propios de la naturaleza dinámica del robot.
El modelo dinámico de un robot manipulador de n DOF compuesto de eslabones rígidos
interconectados por uniones libres de fricción y elasticidad está dado por la siguiente
ecuación [28]:
𝜏 = 𝑀(𝑞)𝑞̈ + 𝐶(𝑞, 𝑞̇ )𝑞̇ + 𝑔(𝑞)
( 38

Esta ecuación es una forma compacta y con la notación más ampliamente utilizada en el
área de la robótica. Donde de la ecuación tenemos que 𝑞 = [𝑞1 , 𝑞2 . . , 𝑞𝑛 ]𝑇 ∈ ℝ𝑛 representa
el vector de posiciones articulares o coordenadas generalizadas, 𝑞̇ = [𝑞̇ 1 , 𝑞̇ 2 . . , 𝑞̇ 𝑛 ]𝑇 ∈ ℝ𝑛 es
el vector de velocidades articulares, 𝑞̈ = [𝑞̈ 1 , 𝑞̈ 2 . . , 𝑞̈ 𝑛 ]𝑇 ∈ ℝ𝑛 es el vector de aceleraciones
articulares, 𝑀(𝑞) ∈ ℝ𝑛𝑥𝑛 es la matriz de inercia que representa el cambio de estado de
movimiento del robot manipulador, la cual es simétrica y definida positiva, 𝐶(𝑞, 𝑞̇ ) ∈ ℝ𝑛𝑥𝑛
es la matriz de fuerzas centrípetas y de Coriolis, la fuerzas centrípetas son fuerzas radiales y
las fuerzas de Coriolis representan una desviación en el movimiento de traslación debido a
su componente de rotación, 𝑔(𝑞) ∈ ℝ𝑛 es el vector de fuerzas o pares gravitacionales
obtenido como el gradiente de la energía potencial y 𝜏 = [𝜏1 , 𝜏2 . . , 𝜏𝑛 ]𝑇 es el vector de pares
aplicados al robot.
Para lograr lo anterior se estudia y desarrollan las ecuaciones de la dinámica del robot
SCARA, para obtener la dinámica se utiliza el método de Euler-Lagrange, el cual está basado
en el balance de la energía cinética y potencial.
Para desarrollar la dinámica del robot SCARA se inicia con el estudio de la energía
potencial y cinética de cada uno de los eslabones del robot. Se define como formulación de
Lagrange o Lagrangiano a la diferencia entre la energía cinética EC y potencial EP [29].
ℒ = 𝐸𝐶 − 𝐸𝑃 = 1⁄2 𝑚𝑞̇ 2 − 𝑚𝑔𝑞
( 39

Al derivar la ecuación anterior respecto a las variables independientes de posición 𝑞 y


velocidad 𝑞̇ obtenemos:
𝜕ℒ 𝜕𝐸𝑃
=− ( 40
𝜕𝑞 𝜕𝑞
60

𝜕ℒ 𝜕𝐸𝐶
=
𝜕𝑞̇ 𝜕𝑞̇ ( 41

Remplazando las Ecs. (40) y (41) en la segunda ley de Newton para un cuerpo con energía
cinética y potencial se obtiene la siguiente ecuación general:
𝑑 𝜕ℒ 𝜕ℒ
[ ]− =𝜏
𝑑𝑡 𝜕𝑞̇ 𝜕𝑞 ( 42

La Ec. obtenida (42) se conoce como la ecuación Euler-Lagrange, la cual describe la


dinámica de movimiento de un sistema de un DOF donde interactúan fuerzas externas e
internas. En general para un manipulador de orden n, las ecuaciones de Euler-Lagrange darán
n ecuaciones diferenciales acopladas no lineales de segundo orden [30].
El orden del sistema n, lo definen las coordenadas generalizadas que describen la
evolución del sistema. Para desarrollar la dinámica del robot SCARA se inicia con el estudio
de la energía potencial y cinética de cada uno de los eslabones del robot, considerando las
Ecs. (39) y (42).
Se inicia con derivar las posiciones de cada uno de los eslabones obtenidas en el capítulo
2 y así encontrar la velocidad final para obtener su energía potencial y cinética.
Posiciones para analizar del eslabón 1 del robot SCARA:
𝑥1 = 𝑙2 𝐶𝑞1
𝑦1 = 𝑙2 𝑆𝑞1
𝑧1 = 𝑙1
𝑥1̇ = −𝑙2 𝑆𝑞1 𝑞1̇
𝑦1̇ = 𝑙2 𝐶𝑞1 𝑞1̇
𝑧̇1 = 0
Donde (𝑥1̇ , 𝑦1̇ y 𝑧̇1 ) son las derivadas de las posiciones del eslabón 1. Aunado a esto, se
calcula la energía cinética 𝐸𝐶 y la energía potencial 𝐸𝑃 de este mismo eslabón, de la Ec. (39)
se puede obtener que:
𝐸𝐶1 = 1⁄2 𝑚1 𝑙2 2 𝑞1̇ 2
( 43

𝐸𝑃1 = 𝑚1 𝑔𝑙1
( 44

Se realiza el mismo procedimiento para el eslabón 2:


𝑥2 = 𝑙2 𝐶𝑞1 + 𝑙3 𝐶(𝑞1 +𝑞2 )
61

𝑦2 = 𝑙2 𝑆𝑞1 − 𝑙3 𝑆(𝑞1 +𝑞2 )


𝑧2 = 𝐵1 + 𝑙1
𝑥2̇ = −𝑙2 𝑆𝑞1 𝑞1̇ − 𝑙3 𝑆(𝑞1 +𝑞2 )(𝑞1̇ +𝑞̇ 2 )
𝑦2̇ = 𝑙2 𝐶𝑞1 𝑞1̇ + 𝑙3 𝐶(𝑞1 +𝑞2 )(𝑞1̇ +𝑞̇ 2 )
𝑧̇2 = 0
𝑉2 2 = 𝑙2 2 𝑞1̇ 2 + 2𝑙2 𝑙3 𝑞1̇ (𝑞1̇ +𝑞̇ 2 )𝐶𝑞2 + 𝑙3 2 (𝑞1̇ +𝑞̇ 2 )2
( 45

𝐸𝐶2 = 1⁄2 𝑚2 (𝑙2 2 𝑞1̇ 2 + 2𝑙2 𝑙3 𝑞1̇ (𝑞1̇ +𝑞̇ 2 )𝐶𝑞2 + 𝑙3 2 (𝑞1̇ +𝑞̇ 2 )2 )
( 46

𝐸𝑃2 = 𝑚2 𝑔𝑙1
( 47

Se realizamos el mismo procedimiento para el eslabón 3:


𝑥3 = 𝑙2 𝐶𝑞1 + 𝑙3 𝐶(𝑞1 +𝑞2 )
𝑦3 = 𝑙2 𝑆𝑞1 − 𝑙3 𝑆(𝑞1 +𝑞2 )
𝑧3 = 𝐵1 + 𝑙1 − 𝑑
𝑥̇ 3 = −𝑙2 𝑆𝑞1 𝑞1̇ − 𝑙3 𝑆(𝑞1 +𝑞2 )(𝑞1̇ +𝑞̇ 2 )
𝑦̇ 3 = 𝑙2 𝐶𝑞1 𝑞1̇ + 𝑙3 𝐶(𝑞1 +𝑞2 )(𝑞1̇ +𝑞̇ 2 )
𝑧̇3 = −𝑑̇
𝑉3 2 = 𝑙2 2 𝑞1̇ 2 + 2𝑙2 𝑙3 𝑞1̇ (𝑞1̇ +𝑞̇ 2 )𝐶𝑞2 + 𝑙3 2 (𝑞1̇ +𝑞̇ 2 )2 + 𝑑̇ 2
( 48

𝐸𝐶3 = 1⁄2 𝑚3 (𝑙2 2 𝑞1̇ 2 + 2𝑙2 𝑙3 𝑞1̇ (𝑞1̇ +𝑞̇ 2 )𝐶𝑞2 + 𝑙3 2 (𝑞1̇ +𝑞̇ 2 )2 + 𝑑̇ 2 )
( 49

𝐸𝑃3 = 𝑚3 𝑔(𝐵1 + 𝑙1 − 𝑑)
( 50

Obtenidas cada tipo de energía potencial y cinética de cada eslabón es posible generar la
ecuación Lagrangiana, haciendo una sumatoria de energía potencial y cinética de la siguiente
forma:
ℒ = 𝐸𝐶1 + 𝐸𝐶2 +𝐸𝐶3 − 𝐸𝑃1 − 𝐸𝑃2 − 𝐸𝑃3
( 51

2
ℒ = 1⁄2 𝑚1 𝑙2 2 𝑞1̇ 2 + 1⁄2 𝑚2 (𝑙2 2 𝑞1̇ 2 + 2𝑙2 𝑙3 𝑞1̇ (𝑞1̇ +𝑞̇ 2 )𝐶𝑞2 + 𝑙3 2 (𝑞1̇ +𝑞̇ 2 ) )
2 2
+ 1⁄ 𝑚3 (𝑙2 2 𝑞 ̇ 2 + 2𝑙2 𝑙3 𝑞 ̇ (𝑞 ̇ +𝑞̇ )𝐶𝑞 + 𝑙3 2 (𝑞 ̇ +𝑞̇ ) + 𝑑̇ )
2 1 1 1 2 2 1 2
( 52
− 𝑚1 𝑔𝑙1 − 𝑚2 𝑔𝑙1 − 𝑚3 𝑔(𝐵1 + 𝑙1 − 𝑑)
62

Para calcular ahora el par en el robot se necesita seguir la Ec. (39), de la cual se obtienen
las siguientes ecuaciones:
𝜕ℒ
=0
𝜕𝑞1 ( 53

𝜕ℒ
= (𝑚1 + 𝑚2 + 𝑚3 )𝑙2 2 𝑞1̇ + (𝑚2 + 𝑚3 )𝑙3 2 (𝑞1̇ +𝑞̇ 2 )
𝜕𝑞1̇
( 54
+ (𝑚2 + 𝑚3 )𝑙2 𝑙3 (2𝑞̇ 1 +𝑞̇ 2 )𝐶𝑞2

𝑑 𝜕ℒ
[ ] = (𝑚1 + 𝑚2 + 𝑚3 )𝑙2 2 𝑞1̈ + (𝑚2 + 𝑚3 )𝑙3 2 (𝑞1̈ + 𝑞2̈ )
𝑑𝑡 𝜕𝑞1̇
( 55
+ (𝑚2 + 𝑚3 )2𝑙2 𝑙3 [𝐶𝑞2 (𝑞1̈ + 𝑞2̈ ) − (𝑞1̇ +𝑞̇ 2 )𝑆𝑞2 𝑞2̇ ]

Finalmente, utilizando la definición de la Ec. (42) y las expresiones obtenidas de las Ecs.
(53) y (55) se obtiene el par 1:
𝑑 𝜕ℒ 𝜕ℒ
𝜏1 = [ ]−
𝑑𝑡 𝜕𝑞1̇ 𝜕𝑞1
= [(𝑚1 + 𝑚2 + 𝑚3 )𝑙2 2 + (𝑚2 + 𝑚3 )𝑙3 2 + (𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝐶𝑞2 ]𝑞1̈
( 56
+ [(𝑚2 + 𝑚3 )𝑙3 2 + (𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝐶𝑞2 ]𝑞2̈ − (𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝑞1̇ 𝑆𝑞2 𝑞2̇
2
− (𝑚2 + 𝑚3 )2𝑙2 𝑙3 𝑆𝑞2 𝑞̇ 2

Ahora calculamos el par 2:


𝜕ℒ
=0
𝜕𝑞2 ( 57

𝜕ℒ
= (𝑚2 + 𝑚3 )𝑙2 𝑙3 𝐶𝑞2 𝑞1̇ + (𝑚2 + 𝑚3 )𝑙3 2 (𝑞1̇ +𝑞̇ 2 )
𝜕𝑞2̇ ( 58

𝑑 𝜕ℒ 2
[ ] = (𝑚2 + 𝑚3 )𝑙2 𝑙3 [𝐶𝑞2 𝑞̈ 1 − 𝑆𝑞2 𝑞2̇ 𝑞1̇ ] + (𝑚2 + 𝑚3 )𝑙3 (𝑞1̈ + 𝑞2̈ )
𝑑𝑡 𝜕𝑞2̇ ( 59
63

𝑑 𝜕ℒ 𝜕ℒ
𝜏2 = [ ]−
𝑑𝑡 𝜕𝑞2̇ 𝜕𝑞2
2
= [(𝑚2 + 𝑚3 )𝑙2 𝑙3 𝐶𝑞2 + (𝑚2 + 𝑚3 )𝑙3 ]𝑞̈ 1 + [(𝑚2 + 𝑚3 )𝑙3 2 ]𝑞2̈ ( 60
− (𝑚2 + 𝑚3 )𝑙2 𝑙3 𝑆𝑞2 𝑞2̇ 𝑞1̇

Ahora se obtiene la fuerza 𝐹3 :


𝜕ℒ
= 𝑚3 𝑔
𝜕𝑑 ( 61

𝜕ℒ
= 𝑚3 𝑑̇
𝜕𝑑̇ ( 62

𝑑 𝜕ℒ
[ ] = 𝑚3 𝑑̈
𝑑𝑡 𝜕𝑑̇ ( 63

𝑑 𝜕ℒ 𝜕ℒ
𝐹3 = [ ]− = 𝑚3 𝑑̈ − 𝑚3 𝑔
𝑑𝑡 𝜕𝑑̇ 𝜕𝑑 ( 64

Al encontrar los pares y la fuerza del robot SCARA, siendo[𝜏1 , 𝜏2 y 𝐹3 ]𝑇 los pares emitidos
por los actuadores que actúan en las articulaciones del robot. Las Ecs. (56), (60) y (64)
constituyen las ecuaciones diferenciales no lineales del robot.
Para los propósitos de control, es más práctico reescribir el modelo dinámico del robot de
las Ecs. (56), (60) y (64) en su forma compacta como se muestra en la Ec. (68). En la Ec.
(68) la matriz 𝑀(𝑞) multiplica al vector de aceleraciones 𝑞̈ , por lo tanto, de las Ecs. (56),
(60) y (64) se toman los términos en los cuales se tiene el término 𝑞̈ 1 , 𝑞̈ 2 y 𝑑̈ para obtener así
los elementos de la matriz de inercia 𝑀(𝑞) ∈ ℝ3𝑥3 que está en función de la posición articular
q. Una vez realizado este reordenamiento de términos se obtiene que los elementos de la
matriz 𝑀(𝑞) son:
𝑚11 (𝑞) = (𝑚1 + 𝑚2 + 𝑚3 )𝑙2 2 + (𝑚2 + 𝑚3 )𝑙3 2 + (𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝐶𝑞2
𝑚12 (𝑞) = (𝑚2 + 𝑚3 )𝑙3 2 + (𝑚2 + 𝑚3 )2𝑙2 𝑙3 𝐶𝑞2
𝑚13 (𝑞) = 0
𝑚21 (𝑞) = (𝑚2 + 𝑚3 )[𝑙2 𝑙3 𝐶𝑞2 + 𝑙3 2 ]
𝑚22 (𝑞) = (𝑚2 + 𝑚3 )𝑙3 2
𝑚23 (𝑞) = 0
𝑚31 (𝑞) = 0
𝑚32 (𝑞) = 0
64

𝑚33 (𝑞) = 𝑚3
La matriz 𝐶(𝑞, 𝑞̇ ) ∈ ℝ3𝑥3 llamada matriz de fuerzas centrifugas y de Coriolis puede no
ser única, pero el vector si 𝐶(𝑞, 𝑞̇ )𝑞̇ , para obtener 𝐶(𝑞, 𝑞̇ ) es a través de los coeficientes o
símbolos de Christoffel 𝑐𝑖𝑗𝑘 (𝑞) definidos como [12]:
1 𝜕𝑀𝑘𝑗 (𝑞) 𝜕𝑀𝑘𝑖 (𝑞) 𝜕𝑀𝑖𝑗 (𝑞)
𝑐𝑖𝑗𝑘 (𝑞) = [ + − ]
2 𝜕𝑞𝑖 𝜕𝑞𝑗 𝜕𝑞𝑘 ( 65

Donde 𝑀𝑖𝑗 (𝑞) denota 𝑖𝑗-esimo elemento de la matriz de inercia 𝑀(𝑞). De tal forma que
el 𝑘𝑗-esimo elemento de la matriz 𝐶(𝑞, 𝑞̇ ) puede obtenerse de:
𝑐1𝑗𝑘 (𝑞)
𝑐2𝑗𝑘 (𝑞)
𝑃𝑐𝑗𝑘 (𝑞, 𝑞̇ ) = .. 𝑞̇
( 66
[𝑐𝑛𝑗𝑘 (𝑞)]

Por lo tanto se calculan los coeficientes de Christoffel usando la Ec. (65) y los elementos
de la matriz de inercia obtenidos anteriormente con lo que se obtiene:
𝑐11 (𝑞, 𝑞̇ ) = −(𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝑆𝑞2
𝑐21 (𝑞, 𝑞̇ ) = −(𝑚2 + 𝑚3 )𝑙2 𝑙3 𝑆𝑞2
𝑐31 (𝑞, 𝑞̇ ) = 0
𝑐12 (𝑞, 𝑞̇ ) = −(𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝑆𝑞2 𝑞2̇
𝑐22 (𝑞, 𝑞̇ ) = 0
𝑐32 (𝑞, 𝑞̇ ) = 0
𝑐13 (𝑞, 𝑞̇ ) = 0
𝑐23 (𝑞, 𝑞̇ ) = 0
𝑐33 (𝑞, 𝑞̇ ) = 0
Cuando el robot se desplaza en el plano horizontal X-Y, la energía potencial resulta nula,
esto es 𝑃(𝑞) = 0, y ya que 𝑔(𝑞) = 𝜕𝑃(𝑞)⁄𝜕𝑞 , entonces 𝑔(𝑞) = 0. Por otro lado solo se
presenta la gravedad en el desplazamiento vertical para el par 𝜏3 , y queda expresado como:
𝑔1 = 0
𝑔2 = 0
𝑔3 = −𝑚3
Finalmente ya obtenidos los pares y la fuerza de los eslabones, expresar en forma matricial
el modelo del robot SCARA, este tiene la forma siguiente:
65

𝜏1 𝑚11 𝑚12 𝑚13 𝑞̈ 1 𝑐11 𝑐12 𝑐13 𝑞1̇ 𝑔1


[𝜏2 ] = [𝑚21 𝑚22 𝑚23 ] [𝑞2̈ ] + [𝑐21 𝑐22 𝑐23 ] [𝑞2̇ ] + [𝑔2 ] ∗ 𝑔
𝐹3 𝑚31 𝑚32 𝑚33 𝑑̈ 𝑐31 𝑐32 𝑐33 𝑑̇ 𝑔3 ( 67

𝜏1
[𝜏2 ]
𝐹3
(𝑚1 + 𝑚2 + 𝑚3 )𝑙2 2 + (𝑚2 + 𝑚3 )𝑙3 2 + (𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝐶𝑞2 (𝑚2 + 𝑚3 )𝑙3 2 + (𝑚2 + 𝑚3 )2𝑙2 𝑙3 𝐶𝑞2 0 𝑞̈1
=[ (𝑚2 + 𝑚3 )[𝑙2 𝑙3 𝐶𝑞2 + 𝑙3 2 ] (𝑚2 + 𝑚3 )𝑙3 2 0 ] [𝑞2̈ ]
0 0 𝑚3 𝑑̈
( 68
−(𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝑆𝑞2 −(𝑚2 + 𝑚3 )𝑙2 𝑙3 𝑆𝑞2 0 𝑞1̇ 0
+ [−(𝑚2 + 𝑚3 )𝑙2 𝑙3 2𝑆𝑞2 0 0] [𝑞2̇ ] + [ 0 ] ∗ 𝑔
0 0 0 𝑑̇ −𝑚3

4.2 Sistema de control.


Para llevar a cabo el control del robot es necesario generar un modelo matemático que se
ajuste a las características del sistema. De modo, que se necesita determinar la secuencia de
entradas articulares precisas para producir que el robot ejecute un movimiento deseado.
Las entradas articulares pueden ser fuerzas, pares, o bien entradas de actuadores, como
voltajes de entrada para motores. Aunado a esto, se requiere conocer las propiedades de los
motores empleados, la relación de engranajes usados y dimensiones; así como masas de los
eslabones.
Para resolver el problema de control en el robot SCARA se utiliza el control de posición
PID. El controlador PID se basa en un sistema de control en lazo cerrado, en donde se
alimenta con la señal de error de regulación, correspondiente a la diferencia entre la señal de
referencia y la señal de salida del sistema, a fin de reducir el error y llevar la salida del sistema
a un valor deseado.
La ley de control PID está dada por:

𝑢 = −𝐾𝑝 𝑞̃ − 𝐾𝑖 ∫ 𝑞̃ 𝑑𝑡 − 𝐾𝑑 𝑞̇
( 69

Donde 𝐾𝑝 , 𝐾𝑖 y 𝐾𝑑 son las ganancias positivas proporcional, integral y derivada que deben
sintonizarse. En la Ec. (69), 𝑞̃ se considera como el error de posición angular entrada al
controlador; definido como la posición actual en la que se encuentra el robot 𝑞(𝑡) menos la
posición 𝑞𝑑 (𝑡) ingresada por el usuario 𝑞̃(𝑡) = 𝑞(𝑡) − 𝑞𝑑 (𝑡). En el robot SCARA se
utilizaron los siguientes valores para estas ganancias:
𝐾𝑝1 = 0.06, 𝐾𝑖1 = 0.01 y 𝐾𝑑1 = 0.004 para la articulación 1, 𝐾𝑝2 = 0.06, 𝐾𝑖2 = 0.02 y
𝐾𝑑2 = 0.005 para la articulación 2 y 𝐾𝑝3 = 0.02, 𝐾𝑖3 = 0.01 y 𝐾𝑑3 = 0.005 para la
articulación 3.
Estos valores para las ganancias de control se sintonizaron al linealizar el sistema que se
esta analizando para llevarlo a la forma general de los sistemas lineales en el espacio de
66

estados, donde se utilizó MATLAB para los cálculos complejos. Por lo mismo no se plantean
en este punto.
Para controlar la posición de las articulaciones en el robot, se considera como entrada al
controlador el error de posición angular 𝑞̃(𝑡) y la salida del controlador es el voltaje a aplicar
al motor 𝑢. Así entonces, el controlador PID genera la señal a aplicar al motor como la suma
ponderada del error de posición, la integral del error de posición y la derivada de la posición
del error.
Se considera que la derivada de la posición del motor es igual a la velocidad del motor ν,
y que la derivada de la posición deseada es cero dado a ser constante, por tanto, la derivada
del error es igual a la velocidad. Para la implementación del controlador PID se utiliza una
discretización con tiempo de muestreo fijo Δt suficientemente pequeño, dicho tiempo la placa
Arduino mandará en unos de sus puertos de salida el voltaje efectivo calculado 𝑢, hasta que
un nuevo ciclo se ejecute y se recalcule la ley de control y se envié el dato obtenido por el
puerto.

4.3 Desarrollo del interfaz de control para el usuario.


La interfaz gráfica de usuario (GUI), consiste en un programa informático creado para
hacer más accesible la comunicación entre el usuario final y el software a ejecutar. Además,
contiene objetos gráficos de fácil manejo, por medio de los cuales se expone la información
y acciones disponibles [30].
El diseño de la interfaz gráfica del robot SCARA fue creada por el software MATLAB y
tiene una forma intuitiva y de fácil uso, hace posible la manipulación directa del robot.
Adicionalmente cada usuario puede apreciar el comportamiento del robot de manera
simulada, así como observar mediante gráficas su funcionamiento en tiempo real.
Las funciones que tiene la GUI del robot SCARA se muestran en las figs. 3.68 y 3.69 y
se detallan a continuación:
67

1 4

5 6

3 8

84Fig. 3.68. Interfaz gráfica del robot SCARA.


1. En este menú se encuentra la conexión y desconexión del puerto serial para enlazar
la placa Arduino con MATLAB o desconectarla según sea el caso.
2. Esta sección sólo es un cuadro estático que indica si está o no habilitado el puerto
serial.
3. Home. Cuando se presiona este botón el robot se va a una posición inicial que
utiliza como referencia para los próximos movimientos. El robot SCARA se
encuentra con sus eslabones extendidos y su última articulación contraída.
4. En este panel se puede seleccionar el tipo de tarea que realizará el robot; ya sea,
que se requiera controlar por medio de cinemática directa o inversa, así como
seguir una trayectoria. La idea es que el usuario sólo pueda seleccionar una tarea
a la vez para evitar errores en el seguimiento de órdenes del robot.
5. Para esta parte el usuario puede ingresar los ángulos y el desplazamiento que
seguirá el robot; al término del ingreso de datos se debe pulsar el botón mover,
mismo que ejecutará la orden indicada. Se resuelve la cinemática inversa y se
actualiza la interfaz.
6. Esta parte es similar a la anterior con la diferencia de que ahora se introduce la
cinemática inversa por medio de coordenadas del extremo de la herramienta en
centímetros. Al pulsar mover se resuelve la cinemática inversa y el robot se mueve
68

a la posición calculada con un movimiento eje a eje. También se resuelve la


cinemática directa y se actualiza la interfaz.
7. El botón señala una trayectoria guardada previamente que al ser pulsado el robot
sigue de forma automática.
8. Dentro de este cuadro estático se indican textos de tareas realizadas, es decir,
señala si el robot alcanzó una posición deseada o se encuentra en operación.
9. En este cuadro se muestra la gráfica del robot con los datos ingresados, el usuario
puede observar cómo se moverá el robot ya sea de forma directa o inversa.

85Fig. 3.69. Interfaz gráfica al introducir posiciones reales.


69

Capítulo 5. Pruebas y resultados

5.1 Resultados obtenidos.


Ya diseñados, construidos y ensamblados los diferentes módulos mecánicos, electrónicos
y de control; se tiene como objetivo evaluar el desempeño del robot SCARA por medio de
una serie de pruebas que indican la operación real del robot.
Para realizar pruebas a los robots manipuladores existen normas de carácter internacional
que establecen criterios específicos para analizar la realización de las tareas correspondientes
del robot. La norma ISO 9283: 1998 Manipulating robots- Performance criteria and related
test methods [31]; define características principales de funcionamiento, así como las pruebas
idóneas a realizar. Sin embargo, realizar este tipo de pruebas resulta muy inconveniente, ya
que son demasiado rigurosas y exhaustivas; de modo que requieren instrumentos de medición
complejos, mismos que no se cuentan con ellos.
Aunado a esto, se optó por el desarrollo de pruebas básicas para comprobar si se cumplen
los objetivos planteados en los capítulos anteriores. A continuación se describen las pruebas
a realizadas:
 Prueba de precisión de cinemática directa sin perturbación
 Prueba de precisión de cinemática directa con perturbación
 Prueba de precisión de cinemática inversa sin perturbación
 Prueba de precisión de cinemática inversa con perturbación
 Prueba de repetibilidad

5.1.1 Prueba de precisión de cinemática directa sin carga.


Esta prueba consiste en medir específicamente la diferencia entre el valor de la cinemática
del robot ingresado por el usuario y a la que se mueve el robot de forma real. Para realizar la
medición se colocó el robot a una posición inicial de 0º y se tomó el ángulo alcanzado en su
forma final. Los datos obtenidos se muestran en la Tabla 5.1.
70

86Tabla 5.1. Resultados de posicionamiento del robot SCARA sin carga.


ARTICULACIÓN 1 ARTICULACIÓN 2 ARTICULACIÓN 3
q1 q2
q1 real Error q2 real Error d Deseado d real Error
Deseado Deseado
(Grados) (Grados) (Grados) (Grados) (Grados) (Grados) (mm) (mm) (mm)
-120 -120,03 0,03 -90 -89,79 0,21 100 97 3
-110 -109,88 0,12 -80 -80,09 0,09 90 91 1
-100 -99,84 0,16 -70 -69,88 0,12 80 78,8 1,2
-90 -90,23 0,23 -60 -59,86 0,14 70 70,88 0,88
-80 -79,77 0,23 -50 -50,21 0,21 60 60,1 0,1
-70 -70,19 0,19 -40 -39,87 0,13 50 50,4 0,4
-60 -60,17 0,17 -30 -30,12 0,12 40 39,8 0,2
-50 -50,34 0,34 -20 -19,87 0,13 30 30,9 0,9
-40 -39,82 0,18 -10 -10,08 0,08 20 20,8 0,8
-30 -29,9 0,1 0 0,02 0,02 10 9,2 0,8
-20 -20,15 0,15 10 10,23 0,23 0 0 0
-10 -10,09 0,09 20 19,69 0,31
0 0 0 30 29,85 0,15
10 10,14 0,14 40 39,89 0,11
20 20,18 0,18 50 49,88 0,12
30 29,91 0,09 60 59,9 0,1
40 39,79 0,21 70 70,17 0,17
50 50,19 0,19 80 79,84 0,16
60 59,85 0,15 90 89,86 0,14
70 70,58 0,58
80 80,13 0,13
90 89,79 0,21
100 100,22 0,22
110 109,88 0,12
120 119,83 0,17
Error promedio: 0,1752 Error promedio: 0,144211 Error promedio: 0,8436
La tabla muestra cómo se alcanzaron los ángulos y desplazamientos de las articulaciones
con respecto a lo programado. Para esta prueba no se consideró la carga total que puede
sostener el robot, por consiguiente el error promedio en el robot es bajo. En la Fig. 3.70 se
muestra un valor medido de la articulación 1 por medido de la placa Arduino.
Cabe mencionar que la medición en la Fig. 3.70 se realizó sin tener abierto el puerto de la
placa Arduino con Matlab, debido a que esta medición no se puede llevar acabo si estuvieran
enlazados.
71

87Fig. 3.70. Valor medido de la articulación 1 en Arduino.


Para analizar el comportamiento que tienen los grados de libertad con respecto al tiempo,
se gráfica (𝑞1 , 𝑞2 y d); donde 𝑞1 = −45º, 𝑞2 = 80º y d=0.03m. Como se observa en la Fig.
3.71, tanto los ángulos como el desplazamiento parten de la posición cero y van en aumento
hasta alcanzar su posición deseada.

88Fig. 3.71. Ángulos y desplazamientos reales sin carga.


72

La siguiente gráfica muestra la convergencia a cero de los errores generados por 𝑞1 , 𝑞2 y


d real, con respecto al deseado.

89Fig. 3.72. Convergencia a cero de los errores en 𝑞1 , 𝑞2 y d real sin carga.

5.1.2 Prueba de precisión de cinemática directa con carga.


En la sección anterior se realizaron las pruebas de cinemática directa al robot; las cuales
no consideran ningún tipo de carga. En esta sección las pruebas realizadas contemplan la
carga máxima que sostiene el robot de 1 kg, contemplando los mismos ángulos y
desplazamientos como se aprecian en la tabla siguiente:
73

90Tabla 5.2. Resultados de posicionamiento del robot SCARA con carga.


ARTICULACIÓN 1 ARTICULACIÓN 2 ARTICULACIÓN 3
q1 d
q1 real Error q2 Deseado q2 real Error d Deseado Error
Deseado real
(Grados) (Grados) (Grados) (Grados) (Grados) (Grados) (mm) (mm) (mm)
-120 -120,22 0,22 -90 -89,55 0,45 100 95 5
-110 -109,83 0,17 -80 -80,36 0,36 90 92 2
-100 -99,77 0,23 -70 -69,66 0,34 80 78 2
-90 -89,82 0,18 -60 -59,48 0,52 70 73 3
-80 -79,54 0,46 -50 -50,57 0,57 60 61 1
-70 -70,22 0,22 -40 -39,44 0,56 50 50,4 0,4
-60 -60,11 0,11 -30 -30,55 0,55 40 39,8 0,2
-50 -50,33 0,33 -20 -19,72 0,28 30 30,9 0,9
-40 -39,69 0,31 -10 -10,39 0,39 20 20,8 0,8
-30 -29,89 0,11 0 0,02 0,02 10 9,2 0,8
-20 -20,36 0,36 10 10,33 0,33 0 0 0
-10 -10,44 0,44 20 19,69 0,31
0 0 0 30 29,71 0,29
10 10,35 0,35 40 39,54 0,46
20 19,72 0,28 50 49,61 0,39
30 29,79 0,21 60 59,77 0,23
40 39,56 0,44 70 70,49 0,49
50 50,49 0,49 80 79,51 0,49
60 59,66 0,34 90 89,76 0,24
70 70,58 0,58
80 80,45 0,45
90 89,73 0,27
100 100,37 0,37
110 109,56 0,44
120 119,49 0,51
Error promedio: 0,3148 Error promedio: 0,382632 Error promedio: 1,463636
Tal como se aprecia en la Tabla 5.2 el error promedio aumento debido a que la masa extra
se encuentra en el último eslabón; esto ocasiona mayor desvió en el movimiento, ocasionando
un error más grande comparado con el que no tiene carga.
Con el fin de hacer más ilustrativo el seguimiento que lleva el robot ante ángulos y
desplazamientos, en la Fig. 3.73 se pueden observar los ángulos y el desplazamiento
alcanzados por el robot, con respecto a los deseados por usuarios. Donde 𝑞1 = −45º, 𝑞2 =
80º y d=0.03m. .
74

91Fig. 3.73. Ángulos y desplazamientos reales con carga.


Se puede analizar en la Fig. 3.73 que existe un ligero aumento de grados en los ángulos
reales, comprobado que la masa extra aumenta la perturbación y por ende se aleja de la
deseada.
Los errores se tratan de minimizar pero por efectos de fuerzas de fricción, inerciales entre
otras, difieren con la respuesta para superar estas fuerzas por lo que no alcanza al 100% la
posición deseada del usuario; esto se observa en la Fig. 3.74, donde el error no es igual a cero
exactamente si no que oscila en ese rango.
75

92Fig. 3.74. Convergencia a cero de los errores en 𝑞1 , 𝑞2 y d real con carga.

5.1.3 Prueba de precisión de cinemática inversa sin carga.


Para la prueba de cinemática inversa se realiza el control de posición del robot, que
consiste en mover el extremo final del robot SCARA hacia una posición deseada constante.
Para realizar el cálculo de precisión en el robot; este debe partir del reposo, el efector final
está desplegado a lo largo del eje X en las coordenadas P(x, y, z) = (0.5, 0, 0.4) y la
orientación es colineal a los ejes X, Y y Z.
Para analizar el comportamiento del robot ante ciertas posiciones se realizó la Tabla 5.3
que muestra los datos obtenidos del desplazamiento en el robot SCARA sobre los ejes X, Y
y Z. Las posiciones son seguidas en metros y sólo se consideran posiciones que entran en la
zona de trabajo del robot.
76

93Tabla 5.3. Resultados de posicionamiento del robot SCARA sin carga.


ARTICULACIÓN 1 ARTICULACIÓN 2 ARTICULACIÓN 3
Px Py Pz
Px real Error Py real Error Pz real Error
Deseado Deseado Deseado
(m) (m) (m) (m) (m) (m) (m) (m) (m)
0,4286 0,428 0,0006 0,1532 0,1528 0,0004 0,37 0,3708 0,0008
0,2645 0,2638 0,0007 0,3898 0,3887 0,0011 0,35 0,355 0,005
0,1358 0,135 0,0008 -0,3638 -0,363 0,0008 0,4 0,402 0,002
0,3872 0,3867 0,0005 -0,0307 -0,0315 0,0008 0,4 0,405 0,005
0,0638 0,0631 0,0007 0,4312 0,431 0,0002 0,39 0,399 0,009
0,4233 0,4228 0,0005 0,244 0,249 0,005 0,38 0,388 0,008
0,2191 0,2199 0,0008 0,4312 0,43 0,0012 0,36 0,351 0,009
0,1 0,098 0,002 0,4732 0,4725 0,0007 0,35 0,355 0,005
0,0163 0,0168 0,0005 0,4834 0,4829 0,0005 0,34 0,349 0,009
-0,15 -0,145 0,005 0,4598 0,459 0,0008 0,33 0,322 0,008
Error promedio: 0,00121 Error promedio: 0,00115 Error promedio: 0,002432
Para analizar mejor esta prueba se observan las gráficas de la Fig. 3.75, donde se muestran
las posiciones deseadas del efector comparadas con las reales. Las posiciones deseadas son
P (x, y, z) = (0.38, -0.0032, 0.37).

94Fig. 3.75. Posiciones Px, Py y Pz reales sin carga.


77

Además de realizar el monitoreo de las posiciones, es importante también observar el


comportamiento de los errores en cada posición con el fin de interpretar si este es muy grande
o pequeño, con respecto a lo esperado. Para la prueba no se contempla la masa extra de 1 kg,
por lo cual el error debe de converger a cero sin tanto problema.

95Fig. 3.76. Convergencia a cero de los errores en las posiciones Px, Py, Pz reales sin
perturbación.

5.1.4 Prueba de precisión de cinemática inversa con carga.


Al igual que en la prueba del punto anterior anterior, en este se realiza considerando la
masa extra como la carga total que sostendrá el robot SCARA. Como ya se mencionó
anteriormente la masa extra afecta las posiciones del robot, en especial Px debido a que tiene
efecto directo con la carga, esto trae consigo un error en estado estacionario mayor.
Así pues, el comportamiento del robot ante posiciones diferentes y con la carga máxima
se describe en la Tabla 5.4.
78

96Tabla 5.4. Resultados de posicionamiento del robot SCARA con carga.


ARTICULACIÓN 1 ARTICULACIÓN 2 ARTICULACIÓN 3
Px Py Pz
Px real Error Py real Error Pz real Error
Deseado Deseado Deseado
(m) (m) (m) (m) (m) (m) (m) (m) (m)
0,4286 0,4278 0,0008 0,1532 0,1522 0,001 0,37 0,376 0,006
0,2645 0,2636 0,0009 0,3898 0,3882 0,0016 0,35 0,355 0,005
0,1358 0,1365 0,0007 -0,3638 -0,3645 0,0007 0,4 0,407 0,007
0,3872 0,3862 0,001 -0,0307 -0,0317 0,001 0,4 0,4088 0,0088
0,0638 0,0631 0,0007 0,4312 0,4307 0,0005 0,39 0,399 0,009
0,4233 0,4223 0,001 0,244 0,251 0,007 0,38 0,388 0,008
0,2191 0,2179 0,0012 0,4312 0,43 0,0012 0,36 0,351 0,009
0,1 0,095 0,005 0,4732 0,4727 0,0005 0,35 0,355 0,005
0,0163 0,0159 0,0004 0,4834 0,4822 0,0012 0,34 0,349 0,009
-0,15 -0,158 0,008 0,4598 0,459 0,0008 0,33 0,32 0,01
Error promedio: 0,00197 Error promedio: 0,00155 Error promedio: 0,003072
El anexar la masa extra modifica la dinámica de la estructura del robot ya que afecta el
comportamiento de los otros eslabones aumentando sus inercias y haciendo un poco más
esfuerzo para alcanzar el punto deseado, dentro de la Fig. 3.77 se aprecia este
comportamiento.

97Fig. 3.77. Posiciones Px, Py y Pz reales con carga.


79

Con la nueva carga aumenta en poco los errores, ya que se necesita un esfuerzo mayor en
el robot para alcanzar la posición deseada P (x, y, z) = (0.38, -0.0032, 0.37). En la Fig. 3.78
se observa como los errores tratan de llegar a cero sin alcanzarlo totalmente.

98Fig. 3.78. Convergencia a cero de los errores en las posiciones Px, Py, Pz reales con
carga.

5.1.5 Prueba de repetibilidad.


La repetibilidad consiste en la habilidad de un robot para regresar a la misma posición y
orientación en repetidas ocasiones; la exactitud es definida como la capacidad del robot de
moverse precisamente a una posición deseada en un plano tridimensional.
Para la prueba de repetibilidad del robot SCARA, se consideran dos puntos diferentes
dentro del espacio de trabajo, teniendo como referencia uno de estos, de este modo se ubicó
varias veces seguidas el extremo del efector final en ese mismo punto.
La fórmula para la obtención de la repetibilidad según la norma ISO 9283, se describe
como:
𝑅𝑃 = 𝐿̂ + 3𝑆𝑙
( 70
80

Donde 𝐿̂ es el promedio del error medio cuadrático de cada posición y 𝑆𝑙 es la desviación


estándar de las posiciones alcanzadas.
Los datos obtenidos por las coordenadas alcanzadas se observan en la Tabla 5.5, misma
que indica el error de posicionamiento y la repetibilidad.
99Tabla 5.5. Datos obtenidos de la prueba de repetibilidad.
Posición de referencia Posición alcanzada Error de

Px (mm) Py (mm) Px (mm) Py (mm) posicionamiento
1 16 10 15,87 10,07 0,147648231
2 16 10 15,69 9,89 0,328937684
3 16 10 16,07 9,77 0,240416306
4 16 10 15,66 9,86 0,367695526
5 16 10 16,21 10,06 0,218403297
6 16 10 15,99 9,78 0,220227155
7 16 10 15,68 10,14 0,349284984
8 16 10 15,87 10,16 0,206155281
9 16 10 15,84 9,94 0,170880075
10 16 10 16,17 10,05 0,177200451
11 16 10 15,88 10,13 0,17691806
12 16 10 15,79 9,87 0,246981781
13 16 10 16,11 9,89 0,155563492
14 16 10 15,05 9,79 0,972933708
15 16 10 16,14 9,72 0,313049517
Error promedio: 0,286153037
Desviación estándar: 0,203038806
Repetibilidad: 0,895269455
Como se observa en la Tabla 5.5 la repetibilidad es buena, ya que esta se aproxima mucho
a 1.

5.2 Costo del proyecto.


Con el fin de formarse una idea de cuánto puede costar la fabricación total de este tipo de
manipulador, en la Tabla 5.6 se muestran todas las partes que constituyen al robot SCARA,
considerando las piezas para su construcción, el material eléctrico y electrónico que realizan
el control; el costo de la mano de obra para la manufactura de algunas piezas y el costo de
ingeniería de las horas de trabajo efectivas que se invirtieron para el desarrollo del proyecto
en general.
81

100Tabla 5.6. Distribución de costos del robot SCARA.


PIEZAS MECÁNICAS Y DE CONSTRUCCIÓN
Precio
Cantidad Artículo Precio unitario
total
1 Aluminio 3600 3600
1 Tornillos varios 500 500
1 Tuercas varias 88 88
1 Tubo metálico 55 55
1 Tornillo de potencia 750 750
2 Rodamiento SKF 61800 96 192
2 Rodamiento SKF 61804 140 280
1 Rodamiento SKF 61802 110 110
2 Manguera 2" (metro) 50 100
Subtotal: $ 5675
MATERIAL ELÉCTRICO Y ELECTRÓNICO
1 Fuente conmutada 12V/8,5A 385 385
1 Placa Arduino mega 2560 460 460
2 Driver L298N 155 310
1 Motor Pittman GM9236S021 1700 1700
1 Motor Pittman GM8724S023 1100 1100
1 Motor Namikki 22CL-3501PG80:1 367 367
1 Resistencias varias 120 120
1 Capacitores varios 80 80
1 Conectores varios 380 380
5 Cable (metro) 40 200
2 Sensor final de carrera 30 60
1 Placa fenólica 85 85
1 Cloruro férrico 56 56
1 LM18200 387 387
1 74LS14 27 27
Subtotal: $ 5717
OTROS
1 Materiales Varios 150 150
1 Maquinado CNC 2200 2200
1 Torno 1600 1600
60 Horas de trabajo 150 9000
Subtotal: $ 12950
Total:$ 24342
82

Capítulo 6. Conclusiones

Al realizar esta tesis se logró cumplir con el objetivo principal, en donde se diseñó y
construyó un robot SCARA de tres grados de libertad, que es capaz de seguir trayectorias de
referencia especificadas por el usuario mediante una interfaz gráfica.
El prototipo construido es mecánicamente funcional y operacional, ya que tiene el
movimiento independiente de cada uno de sus motores; generando en cada articulación el
seguimiento de órdenes diferentes. Debido a que la mayoría de piezas son de aluminio 6061,
ninguna de estas ha llegado a deformarse por lo tanto puede ser sometido a tareas complejas.
El robot SCARA puede mover sin problema la carga máxima de 1kg, aunque se puede notar
un pequeño incremento en la cantidad de tiempo para realizar su tarea programada y en el
error debido a esta carga extra.
El robot desarrollado no cumplió satisfactoriamente con la precisión y la repetibilidad
buscada, ya que existen pequeñas fricciones entre las piezas que afectan el movimiento del
robot, así como un pequeño desacoplo mecánico entre los dos eslabones rotacionales
provocados por la estructura física de los motores utilizados, aun siendo estos los más aptos
para esta aplicación. La precisión de posicionamiento real en el robot está en el rango de ±1.1
mm aproximadamente y el error promedio en la repetibilidad de 0.28 mm, como se analizó
en el desarrollo del proyecto ambos resultados no coinciden con los valores señalados en las
características del robot; pero se pueden corregir modificando algunas piezas del robot y con
el uso de técnicas de control más sofisticadas.
El costo total del robot en general cumple con lo planteado en el proyecto, donde el costo
total es de $24,342 haciendo del mimo un robot accesible para empresas pequeñas, medianas
o grandes. Si consideramos la versatilidad que tiene el robot, se puede adaptar a diferentes
tareas que sean requeridas, siempre y cuando cumplan con las limitaciones en el robot, como
son el seguimiento de posiciones dentro del espacio de trabajo o mover objetos con un peso
menor a 1kg.
Algunas mejoras en el robot serián adecuación de una pinza en el efector final para tareas
de paletizado y agregar visión artificial para selección de objetos. Estas mejoras ayudarán al
robot a ampliar su campo de trabajo y lo hará más competitivo.
Por último, el presente trabajo generó grandes competencias en el diseño, construcción y
control de robots, mismas que pueden ser utilizadas no sólo en este tipo de robots, si no en
cualquier otro. Se tomaron en cuenta los detalles prácticos de fabricación y ensamblaje así
como la de control con el fin de no cometer errores futuros en próximos diseños con robots.
83

Referencias

[1] La Federación Internacional de Robotica y las Naciones Unidas, “Robótica mundial


2001”, Estadisticas, Análisis de Mercado,Proyecciones,Casos de Estudio y Rentabilidad de
la Inversión en Robots, Publicación de las Naciones Unidas, Nueva York y Ginebra, 2001.
[2] Eurobots. http://www.eurobots.com.mx/about-us-es.html
[3] IFR. International Federation of Robotics Statistical Department.
http://www.ifr.org/industrial-robots/statistics/
[4] H. Dominguez. (2013, Noviembre 27). La industria Mexicana se robotiza. [Online].
Available: http://www.manufactura.mx/tecnologia/2013/11/26/la-industria-mexicana-se-
robotiza
[5] J. Sánchez. (2014, Mayo 4). Róbotica en México, con pocos recursos y desarrolladores
[Online]. Available: http://eleconomista.com.mx/tecnociencia/2012/05/04/robotica-mexico-
pocos-recursos-desarrolladores
[6] E. Urbina. (2017, Agosto 28). Robots sí llegan a México pero a unas cuantas empresas
[Online]. Available: http://www.manufactura.mx/industria/2017/08/28/robots-si-llegan-a-
mexico-pero-a-unas-cuantas-empresas
[7] Ríos, O. (2007). DISEÑO Y CONSTRUCCIÓN DE UN BRAZO MANIPULADOR
SCARA. Universidad Michoacana de San Nicolás de Hidalgo.
[8] Zúñiga, G. (2016). CONTROL DE UN ROBOT SCARA BASADO EN PASIVIDAD.
Tecnológico Nacional de México.
[9] A. Barrientos. Fundamentos de robótica. Ed. McGraw Hill. Barcelona. 1997. pp. 93-103.
[10] J. Denavit y R.S. Hartenberg, “A Kinematic Notation for Lower-Pair Mechanisms Based
on Matrices”, Journal of Applied Mechanics, pp. 215-221, junio de 1955.
[11] F. Cortés, “Cinemática de robots manipuladores,” Control de robots manipuladores,1st
ed. México.
[12] S. Niku, “Differential Motions and Velocities,” Introduction to Robotics, 2 nd ed. US.
[13] M.W. Spong. Robot Modeling and Control. Ed. John Wiley and Sons. US. 2006. pp.
113–145.
[14] M. Hernandez, M. Ortiz, C. Calles y J. Rodríguez. Robótica: Análisis, modelado, control
e implementación. Ed. OmniaScience. Tamaulipas. 2015. pp. 78–83.
[15] H. Choset y K.M Lynch . Principles of Robot Motion: Theory, Algorithms and
Implementation. Cambridge, MA: MIT press, 2005.
84

[16] A. Ollero. Robótica, Manipuladores y robots móviles. Ed. Marcombo. Barcelona. 2001.
pp. 80–94.
[17] C. Rouff, “Fast Trigonometric Functions for Robot Control”, Robotics age, Noviembre
de 1981.
[18] S. Gómez. “Análisis estático,” SolidWorks Simulation, 1st. ed. México.
[19] R. Budynas y J. Nisbett. Diseño en ingeniería mecánia de Shigley. Ed. McGraw Hill.
México. 2008. pp. 4,137-147.
[20] R. Hibbeler. Dinámica. Ed. Pearson. México. 2010. pp. 395–412.
[21] R. Kelly and V. Santibáñez y A. Loría, Control of Robots Manipulators in Joint Space.
Springer-Verlag. Londres. 2005.
[22] Pittman DC Motor: http://www.pittman-motors.com/Gearboxes-Brakes-
Encoders/Encoders.aspx
[23] Tapared Roller Bearings: http://www.skf.com/mx/products/bearings-units-
housings/roller-bearings/tapered-roller-bearings/single-row-tapered-roller-bearings/single-
row/index.html
[24] J. Craig, “A Generic Motor Driver Design for Mobile Robotic Platform,”. M.S. thesis,
Dept. Electron. Eng., Waikato Univ., Hamilton, New Zealand, 2004.
[25] ST Dual Full-Bridge Driver:
https://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.pdf
[26] J. Heidenhain. (2014, Abril.). Manual de Aplicación de Encoders.West Instruments de
México.,DF. México. [Online]. Available: http://www.westmexico.com.mx/
[27] E. Silge (2012, Octubre.). Encoder Incremental Descripción General. Eltra., Buenos
Aires. Argentina. [Online]. Available: http://www.silge.com.ar/
[28] L. Sciavicco y B. Siciliano, Modelling and Control of Robot Manipulators.2da.ed
Springer-Verlag. Londres. 2000.
[29] W. Khalil y E. Dembre, “Modeling identification and control of robots”, Hermes Penton
Science. 2002. pp.347-376.
[30] J. J. Craig, “Robótica”, Prentice Hall Pearson, 3ra. Ed., 2006.
[31] Graphical User Interfaces MathWorks:http://www.mathworks.com/discovery/matlab-
gui.html?s_tid=srchtitle
[32] International Standard ISO 9283. (1998). “Manipulating industrial robots Performance
criteria and related test methods”. Second edition.
85

Apéndices

Apéndice A. Base principal inferior (SCARA_P1)


86

Apéndice B. Base principal superior (SCARA_P2)


87

Apéndice C. Base principal tubular (SCARA_P3)


88

Apéndice D. Tornillo de potencia (SCARA_P4)


89

Apéndice E. Soporte eslabón 1 (SCARA_P5)


90

Apéndice F. Eslabón 1 (SCARA_P6)


91

Apéndice G. Soporte de motor 2 (SCARA_P7)


92

Apéndice H. Base de sujeción (SCARA_P8)


93

Apéndice I. Eje de unión 1 (SCARA_P9)


94

Apéndice J. Eslabón 2 (SCARA_P10)


95

Apéndice K. Base lineal inferior (SCARA_P11)


96

Apéndice L. Base lineal superior (SCARA_P12)


97

Apéndice LL. Soporte de carga (SCARA_P13)


98

Apéndice M. Base lateral (SCARA_P14)


99

Apéndice N. Eje de unión 2 (SCARA_P15)


100

Apéndice Ñ. Tubo 1 (SCARA_P16)


101

Apéndice O. Tubo agarre (SCARA_P17)


102

Apéndice P. Motor PITTMAN GM9000


103

Apéndice Q. Motor PITTMAN GM8000


104

Apéndice R. Conexión de encoder incremental


105

Apéndice S. Selección de rodamientos SKF


106

Apéndice T. Características Arduino Mega 2560


107

Apéndice U. Características LMD18200


108

Apéndice V. Características LM298


109

Apéndice W. Tabla de fricciones de rodamientos SKF


110

Apéndice X. Código Arduino Mega


#include <EEPROM.h>
//Constantes para identificar pines entradas y salidas
// pines de encoder segun interrupcion
const int encoderXA = 2;
const int encoderXB = 4;
const int encoderXA2 = 19;
const int encoderXB2 = 7;
const int encoderXA3 = 20;
const int encoderXB3 = 6;
// pines de driver XP ES PWM Y XN ES IN1
const int motorXp = 10; //PWM
const int motorXn = 9; //in2
const int motorXnp = 8;//in1
const int motorXp2 = 13; // PWM
const int motorXn2 = 12;
const int motorXnp2 =11;
const int motorXp3 = 22; // PWM
const int motorXn3= 23;
const int motorXnp3= 24;
//Constantes para controlador PID
const float kp = 0.06;
const float ki = 0.02;
const float kd = 0.005;
const float kp2 = 0.06;
const float ki2 = 0.02;
const float kd2 = 0.005;
const float kp3 = 0.08;
const float ki3 = 0.04;
const float kd3 = 0.006;
//VARIABLES PARA EL CONTADOR DEL ENCODER
111

float contadorX = 0;
float contadorX2 = 0;
float contadorX3 = 0;
//VARIABLES DE POSICIONES REALES
float posX = 0;
float posX2 = 0;
float posX3 = 0;
//VARIABLES DE POSICIONES DESEADAS
float posDesX =0;
float posDesX2=0;
float posDesX3=0;
//VARIABLES DE POSICIONES ANTERIORES
float posant = 0;
float posant2 = 0;
float posant3 = 0;
// POSICION HOME
const int posH =-90;
//VARIABLES DE VELOCIDAD
float velx = 0;
float velx2 = 0;
float velx3 = 0;
float previous_error=0;
float previous_error2=0;
float previous_error3=0;
float velDesX = 0;
float velEstX=0;
float errorVelX = 0;
//VARIABLES ERROR DE POSICION
float errorPosX = 0;
float errorPosX2 = 0;
float errorPosX3 = 0;
float errorPosXerror = 0;
float intErrorPosX=0;
112

float voltMotorX = 0;
float intErrorPosXVelX=0;
//VARIABLES DE PWM
int pwm = 0;
int pwmm = 0;
int pwm2 = 0;
int pwm3 = 0;
//VARIABLES DE TIEMPO
float dt = 0.01; //Tiempo de muestreo para control y calculo de velocidades
float tiempoInicio = 0;
int bandera = 0;
int bandera2 = 0;
int band= 0;
int bando=0;
int bandito=0;
int iniciar1=0;
int iniciar2=0;
int k = 0;
//VARIABLES DE INTEGRACION
float integral1 = 0;
float integral2 = 0;
float integral3 = 0;
//VARIABLES DE PID
float PID =0;
float PID2 =0;
float PID3 =0;
//VARIABLES DE CONTROL
float x3 = 0;
float y3 = 0;
float z3 = 0;
//Variables para trayectorias de referencia
float x0 = 37;
float y0 = 0;
113

float x11 = 30;


float y11 = 0;
float x22 = 30;
float y22 = -7;
float x44 = 30;
float y44 = -7;
float velMax = 4.5;
float acelMax = 1.5;
float velMax2 = 4.5;
float acelMax2 = 1.5;
float velMax3 = 4.5;
float acelMax3 = 1.5;
float D = 0;
float D2 = 0;
float D3 = 0;
float velMaxY = 0;
float velMaxX = 0;
float velMaxY2 = 0;
float velMaxX2 = 0;
float velMaxY3 = 0;
float velMaxX3 = 0;
float P = 0;
float P2 = 0;
float P3 = 0;
float tiempoP = 0;
float tiempoP2 = 0;
float tiempoP3 = 0;
float acelMaxX = 0;
float acelMaxY = 0;
float acelMaxX2 = 0;
float acelMaxY2 = 0;
float acelMaxX3 = 0;
float acelMaxY3 = 0;
114

float x1 = 0;
float x2 = 0;
float tiempoConstante = 0;
float tiempoConstante2 = 0;
float tiempoConstante3 = 0;
float posXant = 0;
float posYant = 0;
float posY = 0;
float posDesY = 0;
float errorPosY = 0;
float intErrorPosY=0;
float voltMotorY = 0;
float PWMMotorY = 0;
float velEstY=0;
float vely = 0;
float velDesY = 0;
float velDesY2 = 0;
float velDesY3 = 0;
float velDesX2= 0;
float velDesX3= 0;
//Variables para transmision de datos
int s=0;
int s1=0;
int pinicio=0;
char b = '0';
int bz=0;
int bz2=0;
int bz3=0;
int dato = 0;
int signo = 1;
float u = 0;
float y = 0;
float z = 0;
115

int posantpositiva=0;
int posantpositiva2=0;
int posantpositiva3=0;
//Constantes para SENSORES
const int sensor1 = 26; // Pulsador
const int sensor2= 27;
const int sensor3 = 28;
const int sensor4= 29;
const int sensor5 = 30;
const int sensor6= 31;
//HOME
float val = 0; //val se emplea para almacenar el estado del boton
int valor = 0;
int val2 = 0;
int valor2 = 0;
int val3 = 0;
int old_val=0;
int old_val2=0;
int old_val3=0;
int state=0;
int state2=0;
//Variables para la memoria eeprom
byte ee_valor0;
byte ee_valor1;
byte ee_valor2;
byte ee_valor3;
byte ee_valor4;
byte ee_valor5;
int posantp=0;
int posantn=0;
//Rutinas para recibir datos y escribir
void recibir(){
if ((b>47)&&(b<58)){
116

dato=dato*10+b-48;
}
if (b=='-'){
signo=-1;
}
if (b=='x'){
x3=dato;
x3=x3/100*signo;
posDesX=x3;
dato=0;
signo=1;
}
if (b=='y'){
y3=dato;
y3=y3/100*signo;
posDesX2=y3;
dato=0;
signo=1;
}
if (b=='z'){
z3=dato;
z3=z3/100*signo;
posDesX3=z3;
dato=0;
signo=1;
}
}
void escribir(float variable){
if (variable<0){
Serial.print('-');
Serial.println(round(-1*variable*10),DEC);
}
else
117

{
Serial.println(round(variable*10),DEC);
}
}
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
//ASIGNACION DE INTERRUPCION
attachInterrupt( 0, IntEncoderX, RISING);
attachInterrupt( 4, IntEncoderX2, RISING);
attachInterrupt( 3, IntEncoderX3, RISING);
//ASIGNACION DE PINES DE INCODER
pinMode(encoderXA, INPUT);
pinMode(encoderXB, INPUT);
pinMode(encoderXA2, INPUT);
pinMode(encoderXB2, INPUT);
pinMode(encoderXA3, INPUT);
pinMode(encoderXB3, INPUT);
//ASIGNACION DE PINES DE PWM Y IN
pinMode(motorXp, OUTPUT);
pinMode(motorXn, OUTPUT);
pinMode(motorXnp, OUTPUT);
pinMode(motorXp2, OUTPUT);
pinMode(motorXn2, OUTPUT);
pinMode(motorXnp2, OUTPUT);
pinMode(motorXp3, OUTPUT);
pinMode(motorXn3, OUTPUT);
pinMode(motorXn3, OUTPUT);
//ASIGNACION DE PINES DE SENSORES
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
118

ee_valor0 = EEPROM.read(0);//Lee el valor de la memoria eeprom en la dirección 0 y es


asignado este valor a la variable ee_valor0
ee_valor1= EEPROM.read(1);//Lee el valor de la memoria eeprom en la dirección 1 y es
asignado este valor a la variable ee_valor0
ee_valor2 = EEPROM.read(0);//Lee el valor de la memoria eeprom en la dirección 2 y es
asignado este valor a la variable ee_valor0
ee_valor3= EEPROM.read(1);//Lee el valor de la memoria eeprom en la dirección 3 y es
asignado este valor a la variable ee_valor0
ee_valor4 = EEPROM.read(0);//Lee el valor de la memoria eeprom en la dirección 4 y es
asignado este valor a la variable ee_valor0
ee_valor5= EEPROM.read(1);//Lee el valor de la memoria eeprom en la dirección 5 y es
asignado este valor a la variable ee_valor0
}
void loop() {
val= digitalRead(sensor1); // lee el estado del Boton
val2= digitalRead(sensor2); // lee el estado del Boton
val3= digitalRead(sensor3); // lee el estado del Boton
//Escuchar al puerto serial
if (Serial.available() > 0){
b=Serial.read();
if (b=='P'){//Home
bandera=1;
iniciar1=1;
iniciar2=1;
analogWrite(motorXp,40);
digitalWrite(motorXn,HIGH);
digitalWrite(motorXnp,LOW);
analogWrite(motorXp2,50);
digitalWrite(motorXn2,HIGH);
digitalWrite(motorXnp2,LOW);
analogWrite(motorXp3,125);
digitalWrite(motorXn3,HIGH);
digitalWrite(motorXnp,LOW);
if (val3==1){
119

analogWrite(motorXp3,LOW);
digitalWrite (motorXn3,LOW);
digitalWrite (motorXnp,LOW);
}
if (ee_valor0>0){
posDesX=-1*(ee_valor0);
}
if (ee_valor1>0){
posDesX=ee_valor1;
}
if (ee_valor2>0){
posDesX2=-1*(ee_valor2);
}
if (ee_valor3>0){
posDesX2=ee_valor3;
}
if (ee_valor4>0){
posDesX3=-1*(ee_valor4);
}
if (ee_valor5>0){
posDesX3=ee_valor5;
}
}
if (b=='N'){//Motores desenergizados
analogWrite(motorXp,LOW);
digitalWrite(motorXn,LOW);
digitalWrite(motorXnp,LOW);
analogWrite(motorXp2,LOW);
digitalWrite(motorXn2,LOW);
digitalWrite(motorXnp2,LOW);
analogWrite(motorXp3,LOW);
digitalWrite(motorXn3,LOW);
digitalWrite(motorXnp3,LOW);
120

}
if (b=='O'){//Tray
x0=posX;
y0=posY;
x11=x11+x0;
y11=y11+y0;
x22=x22+x0;
y22=y22+y0;
x3=x3+x0;
y3=y3+y0;
x44=x44+x0;
y44=y44+y0;
posDesX=posX;
posDesY=posY;
posXant=posX;
posYant=posY;
intErrorPosX=0;
intErrorPosY=0;
velEstX=0;
velEstY=0;
D=sqrt((x3-x11)*(x3-x11)+(y3-y11)*(y3-y11)); //Distancia1
D2=sqrt((x3-x22)*(x3-x22)+(y3-y22)*(y3-y22)); //Distancia2
D3=sqrt((x3-x44)*(x3-x44)+(y3-y44)*(y3-y44)); //Distancia3
P= 0.5*velMax*velMax/acelMax;//Distancia de aceleración constante1
P2=0.5*velMax2*velMax2/acelMax2;//Distancia de aceleración constante2
P3=0.5*velMax3*velMax3/acelMax3;//Distancia de aceleración constante3
velMaxY=velMax/sqrt(1+((x3-x11)*(x3-x11)+(y3-y11)*(y3-y11)));
velMaxX=velMax/sqrt(1+((y3-y11)*(y3-y11)+(x3-x11)*(x3-x11)));
velMaxY2=velMax2/sqrt(1+((x3-x22)*(x3-x22)+(y3-y22)*(y3-y22)));
velMaxX2=velMax2/sqrt(1+((y3-y22)*(y3-y22))/((x3-x22)*(x3-x22)));
velMaxY3=velMax3/sqrt(1+((x3-x44)*(x3-x44))/((y3-y44)*(y3-y44)));
velMaxX3=velMax3/sqrt(1+((y3-y44)*(y3-y44))/((x3-x44)*(x3-x44)));
acelMaxX=0.5*velMaxX*velMaxX/abs(P*(x3-x11)/D);
121

acelMaxY=0.5*velMaxY*velMaxY/abs(P*(y3-y11)/D);
acelMaxX2=0.5*velMaxX2*velMaxX2/abs(P*(x3-x22)/D2);
acelMaxY2=0.5*velMaxY2*velMaxY2/abs(P*(y3-y22)/D2);
acelMaxX3=0.5*velMaxX3*velMaxX3/abs(P*(x3-x44)/D2);
acelMaxY3=0.5*velMaxY3*velMaxY3/abs(P*(y3-y44)/D2);
tiempoConstante=abs((x3-x11)*(1-2*P/D)/velMaxX);//Tiempo de velocidad constante
tiempoConstante2=abs((x3-x22)*(1-2*P2/D2)/velMaxX2);//Tiempo de velocidad
constante
tiempoConstante3=abs((x3-x44)*(1-2*P3/D3)/velMaxX3);//Tiempo de velocidad
constante
tiempoP=abs(velMaxX/acelMaxX); //Tiempo de aceleración constante
tiempoP2=abs(velMaxX2/acelMaxX2);
tiempoP3=abs(velMaxX3/acelMaxX3);
k=0;
s=0;
if ((x3-x11)<0){
velMaxX=velMaxX*(-1);
acelMaxX=acelMaxX*(-1);}
if ((y3-y11)<0){
velMaxY=velMaxY*(-1);
acelMaxY=acelMaxY*(-1);}

if ((x3-x22)<0){
velMaxX2=velMaxX2*(-1);
acelMaxX2=acelMaxX2*(-1);}
if ((y3-y22)<0){
velMaxY2=velMaxY2*(-1);
acelMaxY2=acelMaxY2*(-1);}
if ((x3-x44)<0){
velMaxX3=velMaxX3*(-1);
acelMaxX3=acelMaxX3*(-1);}
if ((y3-y44)<0){
velMaxY3=velMaxY3*(-1);
122

acelMaxY3=acelMaxY3*(-1);}
}
if (b=='F'){//Recibir datos
bandera2=1;
}
else {
recibir();
}
}
// Control de Posicion inicial
if ((iniciar1 == 1) && (old_val == LOW)){
analogWrite(motorXp,LOW);
digitalWrite (motorXn,LOW);
digitalWrite (motorXnp,LOW);

delay(1000);
}
if ((val == LOW) && (old_val == LOW)){
state=1-state;
delay(10);
}
old_val = val; // valor del antiguo estado
if (state==1){
//bandera=1;
valor=1;
posDesX=-90;
posX=0;
contadorX=0;
errorPosX=0;
velx=0;
integral1=0;
PID=0;
delay(100);
123

}
if ((iniciar2 == 1) && (old_val2 == LOW)){
analogWrite(motorXp2,LOW);
digitalWrite (motorXn2,LOW);
digitalWrite (motorXnp2,LOW);

delay(1000);
}
if ((val2 == LOW) && (old_val2 == LOW)){
state2=1-state2;
delay(10);
}
old_val2 = val2; // valor del antiguo estado
if (state2==1){
valor2=1;
posDesX2=-90;
posX2=0;
contadorX2=0;
errorPosX2=0;
velx2=0;
integral2=0;
PID2=0;
delay(100);
}
if ((valor==1) && (valor2==1)){
bandera=1;
}
else{
bandera=0;
}
//Control
while ((bandera==1) || (bandera2==1)){
tiempoInicio=millis();
124

k=k++;
//Calcular posicion y velocidad reales en mm a partir de encoders
posX=(contadorX*360)/9750; //Conversion a grados
posX2=(contadorX2*360)/9750; //Conversion a grados
posX3=(contadorX3*16/25.4); //Conversion lineal,vueltas por pulgadas
//CALCULO DE ERROR DE POSICION
errorPosX=posDesX-posX;
errorPosX2=posDesX2-posX2;
errorPosX3=posDesX3-posX3;
//CALCULO DE LA PARTE DERIVATIVA
velx=(errorPosX-previous_error)/dt; //VELOCIDAD ESTIMADA
velx2=(errorPosX2-previous_error2)/dt; //VELOCIDAD ESTIMADA
velx3=(errorPosX3-previous_error3)/dt; //VELOCIDAD ESTIMADA
//CALCULO DE LA PARTE INTEGRAL
integral1= integral1+(dt*errorPosX); //ERROR ACTUAL =integral del error
integral2= integral2+(dt*errorPosX2); //ERROR ACTUAL =integral del error
integral3= integral3+(dt*errorPosX3); //ERROR ACTUAL =integral del error
//velocidades de referencia
if (k*dt<tiempoP){
velDesX=acelMaxX*(k*dt);
velDesY=acelMaxY*(k*dt);
}
if ((k*dt>tiempoP)&(k*dt<tiempoP+tiempoConstante)){
velDesX=velMaxX;
velDesY=velMaxY;
}
if ((k*dt>tiempoP+tiempoConstante)&(k*dt<2*tiempoP+tiempoConstante)){
velDesX=velMaxX-(k*dt-tiempoP-tiempoConstante)*acelMaxX;
velDesY=velMaxY-(k*dt-tiempoP-tiempoConstante)*acelMaxY;
}
if (k*dt>(2*tiempoP+tiempoConstante)){
velDesX=0;
velDesY=0;
125

}
if (k*dt<tiempoP2){
velDesX2=acelMaxX2*(k*dt);
velDesY2=acelMaxY2*(k*dt);
}
if ((k*dt>tiempoP2)&(k*dt<tiempoP2+tiempoConstante2)){
velDesX2=velMaxX2;
velDesY2=velMaxY2;
}
if ((k*dt>tiempoP2+tiempoConstante2)&(k*dt<2*tiempoP2+tiempoConstante2)){
velDesX2=velMaxX2-(k*dt-tiempoP2-tiempoConstante2)*acelMaxX2;
velDesY2=velMaxY2-(k*dt-tiempoP2-tiempoConstante2)*acelMaxY2;
}
if (k*dt>(2*tiempoP2+tiempoConstante2)){
velDesX2=0;
velDesY2=0;
}
if (k*dt<tiempoP3){
velDesX3=acelMaxX3*(k*dt);
velDesY3=acelMaxY3*(k*dt);
}
if ((k*dt>tiempoP3)&(k*dt<tiempoP3+tiempoConstante3)){
velDesX3=velMaxX3;
velDesY3=velMaxY3;
}
if ((k*dt>tiempoP3+tiempoConstante3)&(k*dt<2*tiempoP3+tiempoConstante3)){
velDesX3=velMaxX3-(k*dt-tiempoP3-tiempoConstante3)*acelMaxX3;
velDesY3=velMaxY3-(k*dt-tiempoP3-tiempoConstante3)*acelMaxY3;
}
if (k*dt>(2*tiempoP3+tiempoConstante3)){
velDesX3=0;
velDesY3=0;
}
126

posDesX=posDesX+velDesX*dt;
posDesY=posDesY+velDesY*dt;
posDesX2=posDesX2+velDesX2*dt;
posDesY2=posDesY2+velDesY2*dt;
posDesX3=posDesX3+velDesX3*dt;
posDesY3=posDesY3+velDesY3*dt;

//CONTROLADOR PID
PID = (kp*errorPosX)+(ki*integral1)+(kd*velx);//CONTROLADOR PID1
PID2= (kp2*errorPosX2)+(ki2*integral2)+(kd2*velx2);//CONTROLADOR PID2
PID3= (kp3*errorPosX3)+(ki3*integral3)+(kd3*velx3);//CONTROLADOR PID3
//Control de PWMs
pwm=(abs(PID)*255)/11.96;
pwm2=(abs(PID2)*255)/11.96;
pwm3=(abs(PID3)*255)/11.96;
//Control a PWMs

//Control de giro de motor


if (PID>=0){//IZQ
analogWrite(motorXp,pwm);
digitalWrite(motorXn,HIGH);
digitalWrite(motorXnp,LOW);
}
if (PID<0){//DER
analogWrite(motorXp,pwm);
digitalWrite(motorXn,LOW);
digitalWrite(motorXnp,HIGH);
}
if (PID2>=0){//IZQ
analogWrite(motorXp2,pwm2);
digitalWrite(motorXn2,HIGH);
digitalWrite(motorXnp2,LOW);
}
127

if (PID2<0){//DER
analogWrite(motorXp2,pwm2);
digitalWrite(motorXn2,LOW);
digitalWrite(motorXnp2,HIGH);
}
if (PID3>=0){//IZQ
analogWrite(motorXp3,pwm3);
digitalWrite(motorXn3,HIGH);
digitalWrite(motorXnp3,LOW);
}
if (PID3<0){//DER
analogWrite(motorXp3,pwm3);
digitalWrite(motorXn3,LOW);
digitalWrite(motorXnp3,HIGH);
}
//Enviar info a puerto serial cada 7 dt
s++;
if (s==7){
escribir(posX);
escribir(posX2);
escribir(posX3);
escribir(errorPosX);
escribir(errorPosX2);
escribir(errorPosX3);
escribir(bandera);
s=0;
}
//Guardar posición anterior para calcular velocidad
posant=posX;
posant2=posX2;
posant3=posX3;
previous_error=errorPosX;
previous_error2=errorPosX2;
128

previous_error3=errorPosX3;
//Almacenamiento de posiciones
posantpositiva=abs(posant);
if (posant>0){
EEPROM.write(0, posant);
EEPROM.write(1, 0);
}
if (posant<0){
EEPROM.write(1, posantpositiva);
EEPROM.write(0, 0);
}
posantpositiva2=abs(posant2);
if (posant2>0){
EEPROM.write(2, posant2);
EEPROM.write(3, 0);
}
if (posant2<0){
EEPROM.write(2, posantpositiva2);
EEPROM.write(3, 0);
}
posantpositiva3=abs(posant3);
if (posant3>0){
EEPROM.write(4, posant2);
EEPROM.write(5, 0);
}
if (posant2<0){
EEPROM.write(4, posantpositiva2);
EEPROM.write(5, 0);
}
//Ajuste para tiempo de muestreo fijo
while((millis()-tiempoInicio)<(dt*1000)){
}
129

if ((abs(posDesX-posX)<0.1)&&(abs(posDesX2-posX2)<0.1)){
bandera=-1;

escribir(posX);
escribir(posX2);
escribir(posX3);
escribir(errorPosX);
escribir(errorPosX2);
escribir(errorPosX3);
escribir(bandera);
analogWrite(motorXp,LOW);
digitalWrite(motorXn,LOW);
digitalWrite(motorXnp,LOW);
analogWrite(motorXp2,LOW);
digitalWrite(motorXn2,LOW);
digitalWrite(motorXnp2,LOW);
analogWrite(motorXp3,LOW);
digitalWrite(motorXn3,LOW);
digitalWrite(motorXnp3,LOW);
}
}
}
//Interrupción encoder posición M1
void IntEncoderX()
{ if (digitalRead(encoderXA)==digitalRead(encoderXB)){
contadorX++ ;}
else{
contadorX-- ;}
}
//Interrupción encoder posición M2
void IntEncoderX2()
{ if (digitalRead(encoderXA2)==digitalRead(encoderXB2)){
contadorX2++ ;}
130

else{
contadorX2-- ;}
}
//Interrupción encoder posición M3
void IntEncoderX3()
{ if (digitalRead(encoderXA3)==digitalRead(encoderXB3)){
contadorX3++ ;}
else{
contadorX3-- ;}
}
131

Apéndice Y. Código de MATLAB 1


function varargout = SCARA_CONTROL_FINAL(varargin)
% SCARA_CONTROL_FINAL MATLAB code for SCARA_CONTROL_FINAL.fig
% SCARA_CONTROL_FINAL, by itself, creates a new SCARA_CONTROL_FINAL
or raises the existing
% singleton*.
%
% H = SCARA_CONTROL_FINAL returns the handle to a new
SCARA_CONTROL_FINAL or the handle to
% the existing singleton*.
%
% SCARA_CONTROL_FINAL('CALLBACK',hObject,eventData,handles,...)
calls the local
% function named CALLBACK in SCARA_CONTROL_FINAL.M with the given
input arguments.
%
% SCARA_CONTROL_FINAL('Property','Value',...) creates a new
SCARA_CONTROL_FINAL or raises the
% existing singleton*. Starting from the left, property value pairs
are
% applied to the GUI before SCARA_CONTROL_FINAL_OpeningFcn gets
called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to SCARA_CONTROL_FINAL_OpeningFcn via
varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help SCARA_CONTROL_FINAL

% Last Modified by GUIDE v2.5 05-Dec-2017 21:36:10

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @SCARA_CONTROL_FINAL_OpeningFcn, ...
'gui_OutputFcn', @SCARA_CONTROL_FINAL_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
132

% --- Executes just before SCARA_CONTROL_FINAL is made visible.


function SCARA_CONTROL_FINAL_OpeningFcn(hObject, eventdata, handles,
varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to SCARA_CONTROL_FINAL (see VARARGIN)

% Choose default command line output for SCARA_CONTROL_FINAL


handles.output = hObject;
%Se inicializan sin selecion los radiobutton
set(handles.radiobutton3,'value',0);
set(handles.radiobutton4,'value',0);
set(handles.radiobutton5,'value',0);
%Se inicializan todos los valores
set(handles.text34,'String','DESCONECTADO');
set(handles.text33,'String','');
%Indicar Logo UDG
%*-*-*-*-*-*-*-*-*-*-*-*-*-*
axes(handles.axes5)
background = imread('udg.png');
axis off;
imshow(background);
guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = SCARA_CONTROL_FINAL_OutputFcn(hObject, eventdata,
handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in pushbutton_ci.


function pushbutton_ci_Callback(hObject, eventdata, handles)
%Control de Cinematica Inversa
delete(instrfindall);
set(handles.text33,'String','');
global PS vposx vposy vposz vt ve1 ve2 ve3 bandera1
conectarArduino;
fwrite(PS,'N','uchar');
% Se crea un vector nulo de 3 elementos
p=[0 0 0];
l1=23;
l2=17;
l3=20;
l4=8;
a=1;
x=1;
y=1;
vposx=[];
vposy=[];
133

vposz=[];
ve1=[];
ve2=[];
ve3=[];
vt=[];
% Se guardan los datos introducidos en el vector
p(1) = str2double(get(handles.edit_p1, 'String'));
p(2) = str2double(get(handles.edit_p2, 'String'));
p(3) = str2double(get(handles.edit_p3, 'String'));
% Se resuelve el problema cinematico directo con los resultados
q=cinematicaInversa(p)
Px = p(1);
Py = p(2);
Pz = p(3);
% Se pasan los ángulos de radines a grados
q(2)=acos((Px*Px+Py*Py-l2*l2-l3*l3)/(2*l2*l3));
q2=q(2)*57.2958;
t1=(atan2(Py,Px))*180/pi;
A1(1)=t1-((atan2(-sqrt((4*l2^2*(Px^2+Py^2))-(Px^2+Py^2+l2^2-
l3^2)^2),(Px^2+Py^2+l2^2-l3^2)))*180/pi);
A1(2)=t1-((atan2(sqrt((4*l2^2*(Px^2+Py^2))-(Px^2+Py^2+l2^2-
l3^2)^2),(Px^2+Py^2+l2^2-l3^2)))*180/pi);
q3=l1-l4-Pz;
while(a)
x2=l2*cosd(A1(x));
y2=l2*sind(A1(x));
z2=l1;
x3=l3*cosd(A1(x)+A2(y))+l2*cosd(A1(x));
y3=l3*sind(A1(x)+A2(y))+l2*sind(A1(x));
z3=l1;
x3=round(x3);
y3=round(y3);
if (x3==Px)
a=0;
A1=A1(x);
q1=A1;
end
x=x+1;
if (x==3)
x=1;
end
end
G01(PS,q1,q2,q3);
%Se actualizan los datos de la cinemática directa
set(handles.text15,'String', q1);
set(handles.text16,'String', q2);
set(handles.text32,'String', q3);
if bandera<1;
set(handles.text33,'String','Posicionamiento realizado con exito!');
end
fclose(PS);
delete(PS);
clear PS;
instrreset
%Graficas de posiciones
figure(1)
134

subplot(3,1,1);plot(vt,vposx,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Px real'); hold on
plot(vt, p(1),'r-')
subplot(3,1,2);plot(vt,vposy,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Py real'); hold on;
plot(vt, p(2),'r-');
subplot(3,1,3);plot(vt,vposz,'b-');grid minor ;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Pz real');hold on;
plot(vt, p(3),'r-');
%Graficas de errores
figure(2)
subplot(3,1,1);plot(vt,ve1,'b-'); grid on;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Error en Px'); hold on;
subplot(3,1,2);plot(vt,ve2,'b-');grid on;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Error en Py'); hold on;
subplot(3,1,3);plot(vt,ve3,'b-');grid on;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Error en Pz'); hold on;

function edit_p5_Callback(hObject, eventdata, handles)


% hObject handle to edit_p5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_p5 as text
% str2double(get(hObject,'String')) returns contents of edit_p5 as
a double
% --- Executes during object creation, after setting all properties.
function edit_p5_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_p5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_p4_Callback(hObject, eventdata, handles)


% hObject handle to edit_p4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_p4 as text
% str2double(get(hObject,'String')) returns contents of edit_p4 as
a double
% --- Executes during object creation, after setting all properties.
function edit_p4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_p4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
135

end

function edit_p3_Callback(hObject, eventdata, handles)


% hObject handle to edit_p3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_p3 as text
% str2double(get(hObject,'String')) returns contents of edit_p3 as
a double
% --- Executes during object creation, after setting all properties.
function edit_p3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_p3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_p2_Callback(hObject, eventdata, handles)


% hObject handle to edit_p2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_p2 as text
% str2double(get(hObject,'String')) returns contents of edit_p2 as
a double
% --- Executes during object creation, after setting all properties.
function edit_p2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_p2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_p1_Callback(hObject, eventdata, handles)


% hObject handle to edit_p1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_p1 as text
% str2double(get(hObject,'String')) returns contents of edit_p1 as
a double
% --- Executes during object creation, after setting all properties.
function edit_p1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_p1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
136

% See ISPC and COMPUTER.


if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_q1_Callback(hObject, eventdata, handles)


% hObject handle to edit_q1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_q1 as text
% str2double(get(hObject,'String')) returns contents of edit_q1 as
a double
% --- Executes during object creation, after setting all properties.
function edit_q1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_q1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_q2_Callback(hObject, eventdata, handles)


% hObject handle to edit_q2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_q2 as text
% str2double(get(hObject,'String')) returns contents of edit_q2 as
a double
% --- Executes during object creation, after setting all properties.
function edit_q2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_q2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_q3_Callback(hObject, eventdata, handles)


% hObject handle to edit_q3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit_q3 as text
% str2double(get(hObject,'String')) returns contents of edit_q3 as
a double

% --- Executes during object creation, after setting all properties.


function edit_q3_CreateFcn(hObject, eventdata, handles)
137

% hObject handle to edit_q3 (see GCBO)


% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_q4_Callback(hObject, eventdata, handles)


% hObject handle to edit_q4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit_q4 as text


% str2double(get(hObject,'String')) returns contents of edit_q4 as
a double
% --- Executes during object creation, after setting all properties.
function edit_q4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_q4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_q5_Callback(hObject, eventdata, handles)


% hObject handle to edit_q5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit_q5 as text


% str2double(get(hObject,'String')) returns contents of edit_q5 as
a double
% --- Executes during object creation, after setting all properties.
function edit_q5_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit_q5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in pushbutton_cd.


function pushbutton_cd_Callback(hObject, eventdata, handles)
delete(instrfindall);
138

set(handles.text33,'String','');
global PS vposx vposy vposz vt ve1 a b c ve2 ve3 bandera1 aa bb cc
conectarArduino;
fwrite(PS,'N','uchar');
%Variables del robot
l1=0.23;
l2=0.17;
l3=0.20;
l4=0.08;
vposx=[];%Vector donde se almacena la posicion 1
vposy=[];%Vector donde se almacena la posicion 2
vposz=[];%Vector donde se almacena la posicion 3
ve1=[];%Vector donde se almacena el error 1
ve2=[];%Vector donde se almacena el error 2
ve3=[];%Vector donde se almacena el error 3
vt=[];%Vector donde se almacena el tiempo
%Se crea un vector nulo q de 3 elementos
q = [0 0 0];
% Se guardan los valores introducidos en el vector q
q(1) = str2double(get(handles.edit_q1, 'String'));
q(2) = str2double(get(handles.edit_q2, 'String'));
q(3) = str2double(get(handles.edit_q3, 'String'));
aa=q(1);
bb=q(2);
cc=q(3);
%Envió de datos ha arduino
G01(PS,q(1),q(2),q(3));
%Cinemática directa resuelta
Px=l3*cosd(q(1)+ q(2))+l2*cosd(q(1));
Py=l3*sind(q(1)+ q(2))+l2*sind(q(1));
Pz=l1-q(3)-l4;
set(handles.text9,'String',Px);
set(handles.text10,'String',Py);
set(handles.text31,'String',Pz);
% Se resuelve el problema cinemático directo del robot
T = cinematicaDirecta(q);
set(handles.text18,'String',a);
set(handles.text19,'String',b);
set(handles.text20,'String',c);
if bandera1<1;
set(handles.text33,'String','Posicionamiento realizado con exito!');
end
fclose(PS);
delete(PS);
clear PS;
instrreset
% graficas de Posición
figure(1)
subplot(3,1,1);plot(vt,vposx,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Ángulo (º)');title('q1 real');
hold on;plot(vt,aa,'r-');
subplot(3,1,2);plot(vt,vposy,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Ángulo (º)');title('q2 real');
hold on;plot(vt,bb,'r-');
subplot(3,1,3);plot(vt,vposz,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Desplazamiento (m)');title('d real');
hold on;plot(vt,cc,'r-');
139

% graficas de error
figure(2)
subplot(3,1,1);plot(vt,ve1,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Grados (º)');title('Error en q1'); hold on;
subplot(3,1,2);plot(vt,ve2,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Grados (º)');title('Error en q2'); hold on;
subplot(3,1,3);plot(vt,ve3,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('m');title('Eror en d'); hold on;

% --- Executes on button press in pushbutton_hh.


function pushbutton_hh_Callback(hObject, eventdata, handles)
instrreset
global PS bandera1% Cargar variable global
conectarArduino;
bandera=1;
fwrite(PS,'P','uchar'); %Instrucción para Arduino: iniciar secuencia de
control
% Se coloca el robot en la posición 0
q = [0 0 0];
q(1)=0;
q(2)=0;
q(2)=0;
if (bandera1<1)
set(handles.text33,'String','Posicionamiento realizado con exito!');
else
set(handles.text33,'String','');
end
fclose(PS);
delete(PS);
clear PS;

function conArduino_Callback(hObject, eventdata, handles)


global PS
delete(instrfind(('port'),('COM3')));%Eliminamos puerto si estaba abierto
PS=serial('COM5');% Seleccionamos el puerto COM5 para enviar y recibir
datos
set(PS,'Baudrate',9600); % se configura la velocidad a 9600 Baudios
set(PS,'StopBits',1); % se configura bit de parada a uno
set(PS,'DataBits',8); % se configura que el dato es de 8 bits, debe estar
entre 5 y 8
set(PS,'Parity','none'); % se configura sin paridad
set(PS,'Terminator','CR/LF');% “c” carácter con que finaliza el envío
set(PS,'OutputBufferSize',10); % ”n” es el número de bytes a enviar
set(PS,'InputBufferSize' ,10); % ”n” es el número de bytes a recibir
set(PS,'Timeout',5); % 5 segundos de tiempo de espera
fopen(PS);%Abrimos puerto serie para la transmisión de datos
pause(1)
set(handles.text34,'String','CONECTADO');%Indicar la conexión del puerto

function desconArduino_Callback(hObject, eventdata, handles)


fwrite(PS,'N','uchar');
fclose(PS);%Cerrar puerto
delete(PS)%Eliminar puerto existente
clear PS;
140

set(handles.text34,'String','DESCONECTADO');%Indicar la desconexión del


puerto

% --- Executes when selected object is changed in uibuttongroup1.


function uibuttongroup1_SelectionChangedFcn(hObject, eventdata, handles)
% hObject handle to the selected object in uibuttongroup1
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

blah=get(handles.uibuttongroup1,'SelectedObject');
selection=get(blah,'String');

switch selection
case 'CINEMATICA DIRECTA'
%encendido de texto
set(handles.text7,'Enable','On')
set(handles.pushbutton_cd, 'Enable', 'On');
set(handles.edit_q1,'Enable','On')
set(handles.edit_q2,'Enable','On')
set(handles.edit_q3,'Enable','On')
%apagado de texto
set(handles.text33,'String','');

set(handles.edit_p1,'Enable','Off')
set(handles.edit_p2,'Enable','Off')
set(handles.edit_p3,'Enable','Off')
set(handles.pushbutton_ci, 'Enable', 'Off');
set(handles.pushbutton4, 'Enable', 'Off');
case 'CINEMATICA INVERSA'
set(handles.text33,'String','');
set(handles.pushbutton_ci, 'Enable', 'On');
%apagado de texto
set(handles.edit_q1,'Enable','Off')
set(handles.edit_q2,'Enable','Off')
set(handles.edit_q3,'Enable','Off')
set(handles.pushbutton_cd, 'Enable', 'Off');
set(handles.pushbutton4, 'Enable', 'Off');
%encendido de texto
set(handles.edit_p1,'Enable','On')
set(handles.edit_p2,'Enable','On')
set(handles.edit_p3,'Enable','On')
case 'TRAYECTORIAS'
%apagado de texto
set(handles.pushbutton_cd, 'Enable', 'Off');
set(handles.pushbutton_ci, 'Enable', 'Off');
set(handles.edit_p1,'Enable','Off')
set(handles.edit_p2,'Enable','Off')
set(handles.edit_p3,'Enable','Off')
set(handles.edit_q1,'Enable','Off')
set(handles.edit_q2,'Enable','Off')
set(handles.edit_q3,'Enable','Off')
%encendido de texto
set(handles.pushbutton4, 'Enable', 'On');
end
guidata(hObject,handles); %Salvar datos de la aplicación
141

% --- Executes when uipanel1 is resized.


function uipanel1_SizeChangedFcn(hObject, eventdata, ~)
% hObject handle to uipanel1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes during object creation, after setting all properties.
function uipanel1_CreateFcn(hObject, eventdata, handles)
% hObject handle to uipanel1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% --- Executes during object creation, after setting all properties.
function uibuttongroup1_CreateFcn(hObject, eventdata, handles)
% hObject handle to uipanel1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns
called
% --- Executes on button press in radiobutton5.
function radiobutton5_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of radiobutton5

% --- Executes on button press in trayectoria.


function trayectoria_Callback(hObject, eventdata, handles)
% hObject handle to trayectoria (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Control de Cinematica Inversa
delete(instrfindall);
set(handles.text33,'String','');
global PS bandera1 vposx vposy vposz vt ve1 ve2 ve3
conectarArduino;
fwrite(PS,'O','uchar');
vposx=[];%Vector donde se almacena la posicion 1
vposy=[];%Vector donde se almacena la posicion 2
vposz=[];%Vector donde se almacena la posicion 3
ve1=[];%Vector donde se almacena el error 1
ve2=[];%Vector donde se almacena el error 2
ve3=[];%Vector donde se almacena el error 3
vt=[];%Vector donde se almacena el tiempo
if (bandera1<1)
set(handles.text33,'String','Posicionamiento realizado con exito!');
else
set(handles.text33,'String','');
end
fclose(PS);
delete(PS);
clear PS;
%Graficas de posiciones
figure(1)
subplot(3,1,1);plot(vt,vposx,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Px real'); hold on
plot(vt, p(1),'r-')
142

subplot(3,1,2);plot(vt,vposy,'b-');grid minor;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Py real'); hold on;
plot(vt, p(2),'r-');
subplot(3,1,3);plot(vt,vposz,'b-');grid minor ;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Pz real');hold on;
plot(vt, p(3),'r-');
%Graficas de errores
figure(2)
subplot(3,1,1);plot(vt,ve1,'b-'); grid on;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Error en Px'); hold on;
subplot(3,1,2);plot(vt,ve2,'b-');grid on;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Error en Py'); hold on;
subplot(3,1,3);plot(vt,ve3,'b-');grid on;xlabel('Tiempo
(s)');ylabel('Posición (m)');title('Error en Pz'); hold on;
143

Apéndice Z. Código de MATLAB 2


function T=cinematicaDirecta(q)
L1=20;
L2=17;
L3=20;
L4=8;
d=10;
h=0.01; %Incremento del tiempo
tsim=4*pi; %Tiempo de simulación
t=0:h:tsim; %Vector de tiempo de simulación
f=30; %Escalar que agiliza la simulación (entre + grande menos dura
sim)
T =[cos(q(1)+q(2)), sin(q(1)+q(2)), 0,
L2*cos(q(1))+L3*cos(q(1)+q(2));
sin(q(1)+q(2)), -cos(q(1)+q(2)), 0,
L2*sin(q(1))+L3*sin(q(1)+q(2));
0, 0, -1, L1-d;
0, 0, 0, 1];
for i=1:length(t)/f
% Variables articulares del brazo robot
q1 = q(1,1);
q2 = q(1,2);
q3 = q(1,3);
x2=L2*cosd(q1);
y2=L2*sind(q1);
z2=L1;
x3=L3*cosd(q1+q2)+L2*cosd(q1);
y3=L3*sind(q1+q2)+L2*sind(q1);
z3=L1;
x3=round(x3);
y3=round(y3);
%Cálculo de las posiciones de cada eslabón
%Grafica de eslabones
plot3([0 0],[0 0],[0 L1],'-r','LineWidth',4,'MarkerSize',20)
hold on
plot3([0 x2],[0 y2],[L1 z2],'-b','LineWidth',4,'MarkerSize',20)
plot3([x2 x3],[y2 y3],[z2 z3],'-g','LineWidth',4,'MarkerSize',20)
plot3([x3 x3],[y3 y3],[z3 L1-L4-q3*100],'-
y','LineWidth',4,'MarkerSize',20)
%Grafica de puntos de union
plot3(0,0,0,'*c','MarkerSize',50)
plot3(0,0,L1,'.k','MarkerSize',30)
plot3( x2,y2,z2,'.k','MarkerSize',30)
plot3( x3, y3, z3,'.k','MarkerSize',30)
plot3(x3, y3, L1-L4-q3*100,'vk','MarkerSize',10)
hold off;
grid on;
axis([-45 45 -45 45 0 45]);
title('Robot SCARA de 3 grados de libertad')
xlabel('X');
ylabel('Y');
zlabel('Z');
pause(0.001)
end
end
144

Apéndice AA. Código de MATLAB 3


function q=cinematicaInversa(p)
L1=23;
L2=17;
L3=20;
L4=8;
l1=23;
l2=17;
l3=20;
l4=8;
a=1;
x=1;
y=1;
d=10;
Px = p(1);
Py = p(2);
Pz = p(3);
% Se pasan los ángulos de radines a grados
A2(1)=(atan2(-sqrt(1-((Px^2+Py^2-L2^2-L3^2)/(2*L2*L3))^2),((Px^2+Py^2-
L2^2-L3^2)/(2*L2*L3))))*180/pi;
A2(2)=(atan2(sqrt(1-((Px^2+Py^2-L2^2-L3^2)/(2*L2*L3))^2),((Px^2+Py^2-
L2^2-L3^2)/(2*L2*L3))))*180/pi;
t1=(atan2(Py,Px))*180/pi;
A1(1)=t1-((atan2(-sqrt((4*l2^2*(Px^2+Py^2))-(Px^2+Py^2+l2^2-
l3^2)^2),(Px^2+Py^2+l2^2-l3^2)))*180/pi);
A1(2)=t1-((atan2(sqrt((4*l2^2*(Px^2+Py^2))-(Px^2+Py^2+l2^2-
l3^2)^2),(Px^2+Py^2+l2^2-l3^2)))*180/pi);
q3=l1-l4-Pz;
while(a)
x2=L2*cosd(A1(x));
y2=L2*sind(A1(x));
z2=L1;
x3=L3*cosd(A1(x)+A2(y))+L2*cosd(A1(x));
y3=L3*sind(A1(x)+A2(y))+L2*sind(A1(x));
z3=L1;
x3=round(x3);
y3=round(y3);
if (x3==Px)&&(y3==Py)
a=0;
A1=A1(x);
A2=A2(y);
%Grafica de eslabones
plot3([0 0],[0 0],[0 L1],'-r','LineWidth',4,'MarkerSize',20)
hold on
plot3([0 x2],[0 y2],[L1 z2],'-b','LineWidth',4,'MarkerSize',20)
plot3([x2 x3],[y2 y3],[z2 z3],'-g','LineWidth',4,'MarkerSize',20)
plot3([x3 x3],[y3 y3],[z3 L1-L4-q3],'-y','LineWidth',4,'MarkerSize',20)
%Grafica de puntos de unión
plot3(0,0,0,'*c','MarkerSize',50)
plot3(0,0,L1,'.k','MarkerSize',30)
plot3(x2,y2,z2,'.k','MarkerSize',30)
plot3(x3, y3, z3,'.k','MarkerSize',30)
plot3(x3, y3, L1-L4-q3,'vk','MarkerSize',10)
hold off;
grid;
axis([-45 45 -45 45 0 45]);
145

title('Robot SCARA de 3 grados de libertad')


xlabel('X');
ylabel('Y');
zlabel('Z');
end
x=x+1;
if (x==3)
x=1;
y=y+1;
if (y==3)
a=0;
y=2;
end
end
end

end
146

Apéndice AB. Código de MATLAB 4


function sal=G01(archivo,x3,y3,z3)
global vposx vposy vposz vt ve1 a b c e11 e22 e33 ve2 ve3 bandera1%Datos
globales
dt=0.05; %Periodo de muestreo
vposx=[];
vposy=[];
vposz=[];
ve1=[];
ve2=[];
ve3=[];
vt=[];
a=0;
b=0;
c=0;
e11=0;
e22=0;
e33=0;
%Envio de datos a arduino por medio del programa escribirArduino
escribirArduino(archivo,x3*10,1,'x');%Posición 1
escribirArduino(archivo,y3*10,1,'y');%Posición 2
escribirArduino(archivo,z3*10,1,'z');%Posición 3
fwrite(archivo,'F','uchar'); %Instrucción para arduino:iniciar secuencia
de control
n=400;%Numero de muestras
k=1;
i=1;
for i=1:n
%Apertura de puerto para recibir datos de arduino
a=fscanf(archivo,'%f')*(0.1); %Recibir dato de arduino Posicion 1,
arduino lo envía multiplicado por 10
b=fscanf(archivo,'%f')*(0.1); %Recibir dato de arduino Posicion 2,
arduino lo envía multiplicado por 10
c=fscanf(archivo,'%f')*(0.1); %Recibir dato de arduino Posicion 3,
arduino lo envía multiplicado por 10
e11=fscanf(archivo,'%f')*(0.1); %Recibir dato de arduino error 1, arduino
lo envía multiplicado por 10
e22=fscanf(archivo,'%f')*(0.1); %Recibir dato de arduino error 2, arduino
lo envía multiplicado por 10
e33=fscanf(archivo,'%f')*(0.1); %Recibir dato de arduino error 3, arduino
lo envía multiplicado por 10
bandera1=fscanf(archivo,'%f')*(0.1); %Recibir estatus de arduino
%Vectores donde se guardan los datos enviados de arduino
vposx=[vposx a];
vposy=[vposy b];
vposz=[vposz c];
ve1=[ve1 e11];
ve2=[ve2 e22];
ve3=[ve3 e33];
vt=[vt k*dt];%Vamos guardando en un vector los valores del tiempo
k=k+1;
end;
pause(0.01);
147

Apéndice AC. Código de MATLAB 5


function escribirArduino(archivo, dato, decimales, variable)
%Envio de datos a arduino con conversión y asignación de signo
datoe=round(dato*10^decimales);
if datoe<0
fwrite(archivo,'-','uchar');
datoe=abs(datoe);
end;
for i=1:length(datoe);
fwrite(archivo,num2str(datoe(i)),'uchar');
end;
fwrite(archivo,variable,'uchar');
end

También podría gustarte