PG 8428
PG 8428
FACULTAD DE INGENIERÍA
PROYECTO DE GRADO
ELECTRÓNICA
La Paz - Bolivia
2023
UNIVERSIDAD MAYOR DE SAN ANDRÉS
FACULTAD DE INGENIERIA
LICENCIA DE USO
Este trabajo lo dedico principalmente a Dios, por la salud, guía y fuerza en este
del proyecto.
AGRADECIMIENTOS
A Dios, por la salud, por las bendiciones de todos los días y la guía en la culminación
profesional.
A todas las personas que me han apoyado e hicieron que el trabajo se concluya con
por esta y varias razones es que el Internet de las cosas es un campo que toma cada vez
Brazo robótico del tipo SCARA en el entorno IoT, de esta forma mandar instrucciones al
Para el diseño del Brazo robot en el entorno IoT se utilizó la metodología en cascada, en
The internet has taken on a lot of importance today due to the need to interconnect, for
this and several reasons is that the Internet of Things is a field that takes more and more
This project addresses concepts of IoT and robotics to develop a robotic arm of the
SCARA type in the IoT environment, thus sending instructions to the robot from a
For the design of the robot arm in the IoT environment, the cascade methodology was
used, in which direct kinematics and motion transmission calculations were performed
1.1 Introducción........................................................................................................................... 1
Capítulo 2 ........................................................................................................................................ 7
2.5.1 Solidwoks...................................................................................................................... 16
2.8.3 ESP32............................................................................................................................ 55
Capítulo 3 ...................................................................................................................................... 75
IP Internet Protocol
STL Stereolithography
robotica/garra-aluminio-para-robot-compatible-mg995 ............................................................... 14
Figura 7: Diagrama de relación entre cinemática directa e inversa. Fuente: (Barrientos et al.,
2007) ............................................................................................................................................. 19
2007). ............................................................................................................................................ 30
Figura 11: Asignación de sistemas de referencia del Robot de 3 GDL de la Figura 10. Fuente:
paso-paso-bipolar?search=motor%20paso%20a%20paso ............................................................ 37
Figura 13: Modelo conceptual del Motor PAP unipolar Fuente: (Begle, 2013).......................... 39
Figura 14: Modelo conceptual del Motor PAP bipolar. Fuente: (Begle, 2013)........................... 40
Figura 15: Dimensiones para bridas de montaje. Fuente: (ICS, 2001) ....................................... 49
Figura 16: Dimensiones para bridas de montaje, motores con dimensiones en pulgadas. Fuente:
(ICS, 2001).................................................................................................................................... 50
Figura 19: Diagrama de aplicación Típica Driver A4988. Fuente: (MicroSystems, 2009) ........ 57
Figura 20: Ejemplo de Modelo de comunicación dispositivo a dispositivo. Fuente: (Karen Rose,
2015) ............................................................................................................................................. 61
Figura 21: Diagrama de Modelo de comunicación dispositivo a la nube. Fuente: (Karen Rose,
2015) ............................................................................................................................................. 62
Figura 22: Ejemplo de Modelo de comunicación dispositivo a puerta de enlace. Fuente: (Karen
Figura 23: Diagrama del Modelo de intercambio de datos a través del back-end. Fuente: (Karen
Figura 24: Arquitectura de publicación /suscripción MQTT. Fuente: (OASIS, mqtt, 2014) ...... 66
Figura 25: Estructura de cadenas codificadas en UTF-8. Fuente: (Banks et al., 2019) ............... 68
Figura 28: Modelo TCP/IP con algunos protocolos. Fuente: (Pearson, 2012) ............................ 70
Figura 29: Códigos de respuesta HTTP (parte 1). Fuente: (Primo, 2012) ................................... 72
Figura 30: Códigos de respuesta HTTP (parte 2). Fuente: (Primo, 2012) ................................... 73
Figura 32: Diagrama del sistema robot SCARA. Fuente: (Elaboración propia) ......................... 76
Figura 33: Robot Hibot 2442 SCARA. Fuente: (HITBOT, 2020) .............................................. 78
Figura 35: Cuerpo del robot SCARA en LibreCad. Fuente: (Elaboración propia) ..................... 82
Figura 36: Base del robot SCARA en LibreCad. Fuente: (Elaboración propia) ......................... 83
Figura 37: Soporte superior del robot SCARA en LibreCad. Fuente: (Elaboración propia) ....... 83
Figura 39: Primer eslabón del tipo revoluta robot SCARA en LibreCad. Fuente: (Elaboración
propia) ........................................................................................................................................... 85
Figura 40: Segundo eslabón del tipo revoluta robot SCARA en LibreCad. Fuente: (Elaboración
propia) ........................................................................................................................................... 86
identificaci%C3%B3n-rodamiento/dp/B07C4Y7P2C .................................................................. 88
aluminio-impresora-fresadora/dp/B09R12Q6J7 ........................................................................... 88
Acoplamientos-flexibles-impresora-unidades/dp/B01HBPHSII .................................................. 90
https://www.techlookelectronica.com/producto/nema-17-17hs4401-motor-paso-a-paso-12v-con-
cable/ ............................................................................................................................................. 91
ks42sth34-1504a-stepper-motor-1-5a-34mm/ .............................................................................. 92
impresora-tornillos-fijaci%C3%B3n-XIAOYING/dp/B08MPW5KG4 ....................................... 93
piezas-ancho-GT2/dp/B075GRJCSD ........................................................................................... 93
motor/goma-lateral-de-soporte-de-motor-johnson-evinrude-90-175-hp-328584/ ........................ 94
....................................................................................................................................................... 95
Figura 53: Transmisión de movimiento para la variable articular q2. Fuente: (Elaboración
propia) ........................................................................................................................................... 95
Figura 54: Transmisión de movimiento variable articular q3 Fuente: (Elaboración propia) ...... 96
Motor-Driver-Module/dp/B07VD86HVS?th=1 ........................................................................... 99
Figura 56: Diagrama de conexiones A4988. Fuente:
https://es.aliexpress.com/item/1005002253869295.html............................................................ 100
Printer-Stepper-Extension/dp/B01LWO9DI7............................................................................. 101
Figura 58: Asignación de pines BCM y BOARD (color gris) Raspberry pi. Fuente:
Figura 59: Escritorio del Sistema Operativo Raspberry pi OS. Fuente: (Elaboración propia) .. 103
Figura 60: Diagrama de conexiones del sistema. Fuente: (Elaboración propia) ....................... 104
https://es.aliexpress.com/item/32835858930.html...................................................................... 105
Figura 62: Esquema analítico para el método D-H. Fuente: (Elaboración propia) ................... 107
Figura 63: Diagrama ejes de revoluta robot SCARA. Fuente: (Elaboración propia) ................ 110
Figura 64: Diagrama ejes de revoluta robot SCARA (análisis geométrico). Fuente: (Elaboración
Figura 65: Área de trabajo del robot SCARA. Fuente: (Elaboración propia) ........................... 116
Figura 66: Datos obtenidos para el eje x con 2 decimales (robot SCARA). Fuente: (Elaboración
Figura 67: Datos obtenidos para el eje x con un decimal (robot SCARA). Fuente: (Elaboración
Figura 68: Cantidad de datos faltantes eje x con un decimal (robot SCARA). Fuente:
Figura 70: Datos obtenidos para el eje y con dos decimales (robot SCARA). Fuente:
Figura 71: Datos obtenidos para el eje y con un decimal (robot SCARA). Fuente: (Elaboración
Figura 72: Cantidad de datos faltantes eje y con un decimal (robot SCARA). Fuente:
Figura 73: Cantidad de datos faltantes eje y sin decimales (robot SCARA). Fuente: (Elaboración
Figura 74: Algoritmo general del sistema (robot SCARA). Fuente: (Elaboración propia) ....... 124
Figura 75: Proceso de Ajuste codo abajo o codo arriba (robot SCARA). Fuente: (Elaboración
Figura 76: Algoritmo de funcionamiento (robot SCARA). Fuente: (Elaboración propia) ........ 128
Figura 77: Algoritmo detallado (robot SCARA). Fuente: (Elaboración propia) ....................... 129
Figura 78: Primer eslabón del tipo revoluta impreso (robot SCARA). Fuente: (Elaboración
Figura 79: Segundo eslabón del tipo revoluta impreso (robot SCARA). Fuente: (Elaboración
Figura 80: Soporte superior y engranaje doble, ambos impresos (robot SCARA). Fuente:
Figura 82: Base del robot impreso más accesorios ensamblados (robot SCARA). Fuente:
Figura 83: Robot SCARA ensamblado completo. Fuente: (Elaboración propia) ...................... 134
Figura 84: Ajuste del Vref para el driver A4988. Fuente: (Elaboración propia) ....................... 135
Figura 85: Interfaz de usuario (imagen del área de trabajo). Fuente: (Elaboración propia) ...... 138
Figura 86: Interfaz de usuario (datos de entrada). Fuente: (Elaboración propia) ...................... 138
Figura 87: Algoritmo del área de trabajo (robot SCARA). Fuente: (Elaboración propia) ........ 140
Figura 88: Algoritmo de cálculo de valores de “y” para cada valor de “x” (robot SCARA).
Figura 89: Grafica Torque vs pulsos/s para el motor paso a paso. Fuente: (Kothari & Nagrath,
Figura 90: Iniciando el servidor (Robot SCARA). Fuente: (Elaboración propia) ..................... 148
Figura 91: Brazo Robot SCARA en funcionamiento. Fuente: (Elaboración propia) ................ 149
Figura 92: Usuario accediendo al servidor (robot SCARA). Fuente: (Elaboración propia) ...... 150
Figura 93: Usuario 2 accediendo al servidor (robot SCARA). Fuente: (Elaboración propia) ... 151
Figura 94: Cambios realizados en la interfaz del servidor (robot SCARA). Fuente: (Elaboración
Tabla 5: Secuencia de pasos para motores Unipolares (Secuencia de medio paso) .................... 42
Tabla 7: Designación de Diámetro del eje, de acuerdo al número de brida de un motor paso a
paso ............................................................................................................................................... 47
Tabla 10: Lista de elementos mecánicos y electromecánicos del robot SCARA .......................... 80
Tabla 11: Asignación de pines del driver A4988 y la placa electrónica Raspberry pi para cada
Tabla 12: Parámetros D-H del robot SCARA de la figura ......................................................... 108
Tabla 14: Prueba de funcionamiento de motor pap 17HS4401 (eje prismático robot SCARA). 136
Tabla 15: Errores relativos y absolutos para las variables de revoluta “q2” y “q3” (Robot
Tabla 16: Errores relativos y absolutos del eje prismático ........................................................ 147
Tabla 17: Lista de piezas del robot SCARA (parte mecánica).................................................... 153
Tabla 18: Lista de piezas del robot SCARA (parte electrónica). ................................................ 154
Tabla 19: Lista de costos mano de obra para el robot SCARA. ................................................. 155
1 Marco Referencial
1.1 Introducción
En 1999 se menciona el término de IoT1 (Internet of things) por primera vez por el británico
Kevin Ashton (Karen Rose, 2015), para describir a un sistema en el cual los objetos se puedan
conectar a internet, sin embargo, este concepto se refiere a que los dispositivos como
Empresas como Cisco estimaron que el tráfico generado por dispositivos que no son
computadoras personales aumentara un 70 % en 2019, por lo tanto, esto toma importancia hoy y
a futuro.
En cuanto a modelos de comunicación del internet de las cosas en marzo del 2015 el Comité de
Arquitectura de Internet (IAB) dio a conocer un documento informativo de guía para el diseño de
redes de objetos inteligentes (RFC 7452), que describe cuatro modelos de comunicación
comunes que utilizan los dispositivos del IoT (Karen Rose, 2015).
1
IoT: Internet de las cosas, concepto de la interconexión digital de objetos a internet.
1
Los robots se utilizan ampliamente en las industrias principalmente para acceder a sectores
Un robot se describe como una máquina para realizar una tarea específica o bien múltiples tareas,
el robot más común es el brazo robótico que generalmente se programa para realizar tareas
En el presente proyecto de grado se diseñará un brazo robótico del tipo SCARA, basado en un
de San Andrés en contribución académica para los estudiantes en las materias de programación,
mecánica aplicada, tecnología de los componentes e interacción hardware software con el fin de
afirmar sus conocimientos e incursionar en este concepto relativamente reciente del IoT.
1.2 Antecedentes
Este concepto reciente de IoT ha permitido que varias universidades realicen sus propuestas de
aplicación, como también empresas en todo el mundo, destacando las herramientas tecnológicas
Open-Source2 como la placa electrónica Raspberry Pi y Arduino entre otras; algunos de los
estado de ebriedad aplicando el internet de las cosas, esta propuesta sugiere el uso de tecnologías
2
Open-Source: Software de código abierto es un código diseñado de manera que sea accesible al público, cuyo
propietario de los derechos de autor permite a los usuarios utilizar, cambiar y redistribuir el software.
2
Open-Source para la implementación de un sistema embebido que analiza el grado alcohólico de
un conductor para notificarlo a sus parientes en caso de ser necesario. (Parisaca, 2016)
brazo robótico tipo SCARA que pueda ser controlado mediante IoT para aspectos académicos.
• Diseñar e implementar un brazo robótico del tipo SCARA, basado en IoT, para la Carrera
✓ Realizar un diseño factible de la estructura del brazo robótico tipo SCARA de acuerdo a un
diseño/modelo referencial.
✓ Realizar el procedimiento para Cinemática directa del brazo robótico por Denavit
3
Hartenberg3 (cálculo de la matriz de posición).
• Este proyecto tiene como objetivo ser de apoyo académico para carrera de Ingeniería
tecnología de IoT.
• Debido a que no hay muchos proyectos relacionados con IoT, el proyecto es de aporte
1.6.1 Alcances
referencial.
3
Parámetros de Denavit Hartenberg: También llamados parámetros DH son los cuatro parámetros que se utilizan
para hallar el modelo analítico de cambio de posición de un robot.
4
• Se realizará la programación con una placa electrónica Open Source, debido a la facilidad
de desarrollo.
1.6.2 Limites
etc.
5
Figura 1: Modelo en cascada. Fuente: (Onios, 2019)
6
Capítulo 2
2 Marco Teórico
de un brazo humano, las partes de estos están interconectados a través de articulaciones que
usados para aumentar la velocidad de producción y reducir el error humano en una Industria.
Los brazos robóticos que pertenecen al grupo de robots estacionarios, son llamados así debido a
que estos siempre realizan su secuencia de movimientos con respecto a una base fija. En la
industria existen varios tipos de robots estacionarios que se pueden diferenciar por su tamaño,
por la configuración de sus articulaciones, por sus grados de libertad, por el método de
programación, etc.
Estos se clasifican:
Esta clasificación describe la facultad que tiene un brazo robótico para realizar una tarea de
acuerdo al rango de movimiento y precisión que tengan sus articulaciones, vale recalcar que un
7
brazo robot solo puede tener máximo 6 grados de libertad para cumplir una tarea general, más
allá de los 6 grados de libertad se consideran robots redundantes, estos robots se pueden
Esta clasificación hace referencia al movimiento geométrico que realiza el brazo robótico,
• Robots cartesianos.
• Robots cilíndricos.
• Robots esféricos.
• Robots SCARA.
• Robots articulados.
• Robots paralelos.
Esta clasificación describe el tipo de accionamiento que permite al robot realizar sus
movimientos.
• Neumática.
8
• Hidráulica.
• Eléctrica.
Esta clase de brazo robótico cuya sigla significa (Selective Compliant Articulated Robot Arms),
que traducido al español es “brazo robótico articulado de obediencia selectiva”, lo cual describe
movimiento en el espacio, los robots SCARA son factibles en cuanto al diseño y fabricación si
comparamos con otro tipo de robots, debido a que la complejidad de su geometría depende del
están establecidos debido a que los robots SCARA son robots de tres y cuatro grados de libertad.
Los brazos robóticos SCARA son ampliamente usados en la industria en procesos de ensamble
que requieran mucha precisión, ya que su diseño de ejes paralelos les permite realizar
son de un tamaño pequeño debido a que trabajan a una gran velocidad para grandes cargas de
etc.
Universidad de Yamanashi en el año 1978 gracias al ingenio del profesor Hiroshi Makino, quien
propuso un prototipo de brazo robot que contaba con cuatros ejes de movimiento y una
considerable simplicidad en su diseño, porque poseía una limitada movilidad, pero gozaba de
9
Figura 2: Robot SCARA. Fuente: (Talavera et al., 2018)
Algunos de los elementos del brazo robótico se asemejan a las de un brazo humano como cadera,
hombro, codo y muñeca que corresponden a la posición que tiene cada uno de los elementos
Un brazo robótico está conformado por un conjunto de piezas y elementos, estas pueden ser
mecánicas o eléctricas, las cuales cumplen diferentes funciones establecidas, que están limitadas
No todos los brazos requieren de la misma cantidad de partes, ya que estas dependerán de los
grados de libertad (GDL o sus siglas en ingles DOF) y de la complejidad del entorno del brazo
10
robot, ya que este determina el tipo de movimiento que se generara para realizar las tareas
• Eslabones
• Articulaciones
• Base
• Actuadores
• Espacio de tarea
2.4.1 Eslabones
Los eslabones son los elementos rígidos de la parte de un brazo robot que se conectan mediante
juntas o articulaciones, las cuales permiten el movimiento relativo en cada par de eslabones
consecutivos.
2.4.2 Articulaciones.
También se conocidas como juntas, y son elementos que permiten realizar los movimientos
libertad (GDL) son los movimientos independientes que puede realizar cada articulación
11
Figura 3: Articulaciones para robots. Fuente: (Barrientos et al., 2007)
La articulación de revoluta produce un movimiento rotacional sobre un eje común entre dos
eslabones, y la localización relativa entre ambos se encuentra expresada por el ángulo que
12
Articulación prismática
articulación, su localización relativa está determinada por la distancia medida desde la base
También son denominados como efectores finales, los cuales permiten la interacción del brazo
robótico con su entorno, dentro de estos elementos se encuentran diferentes tipos de herramientas
de acuerdo a la aplicación que tengan entre los cuales se puede mencionar las siguientes:
• Pinzas.
• Soldadoras.
• Dispersores de pintura.
• Ventosas.
13
entre otros, de igual forma se pueden encontrar elementos de aprehensión o agarre como los
robotica/garra-aluminio-para-robot-compatible-mg995
2.4.4 Base
Es una estructura diseñada para mantener en una posición estable el brazo robótico mientras este
4Dripper: Es una pinza de agarre electromecánico, cuya función es el agarrar y sostener determinados
objetos.
14
2.4.5 Actuadores
Los actuadores son elementos que permiten ejecutar acción mecánica, mediante una energía que
es proporcionada por diferentes tipos de fuentes, y por consiguiente transmitir una fuerza que
Algunas de las características que se deben tomar en cuenta al momento de seleccionar los
Los actuadores se pueden clasificar en función de la fuente de alimentación que utilizan como se
menciona a continuación.
• Actuadores neumáticos.
• Actuadores hidráulicos.
• Actuadores eléctricos.
Son los componentes encargados del sistema de control, la conducción eléctrica para los otros
Mediante conexiones entre una placa de control, un ordenador y un codificador, el brazo robótico
robot, donde se reconocen localización, posición y orientación del efector final, generalmente
15
2.5 Software CAD para diseño mecánico
CAD o Diseño asistido por computadora, es una tecnología para diseño y documentación
A continuación, se expone algunos de los softwares más utilizados para diseño mecánico.
• Inventor
• SolidWorks
• Shapr3D
• FreeCAD
• LibreCAD
2.5.1 Solidwoks
Su primera versión fue lanzada al mercado en 1995 con el propósito de hacer la tecnología CAD
2.5.2 FreeCad
FreeCAD es una aplicación libre (Open-sourse) para diseño asistido por computadora en tres
16
Además del propio formato de archivo de FreeCAD, pueden manejarse los siguientes formatos
de archivos:
• DXF.
• STEP.
• IGES.
• STL (STereoLithography).
• OBJ (Wavefront).
• DAE (Collada).
• SCAD (OpenSCAD).
• IV (Inventor).
• IFC.
2.5.4 Meshmixer
Es un software para la edición de archivos STL, el cual nos ayuda a generar soportes a las piezas
que así lo requieran entre otras funciones como escalamiento de piezas, etc., se utiliza
diseño de prototipos, este formato se aproxima a la superficie solida por triángulos mientras más
17
Es el formato fue desarrollado originalmente para la impresión 3D por estereolitografía5, el
formato de archivo más aceptado en el ámbito de la impresión 3D. Almacena únicamente datos
Casi todos los sistemas CAD actuales pueden generar un archivo STL.
La cinemática es una rama de la física que estudia el movimiento en este caso particular el
movimiento del brazo robótico con respecto a su base sin tener en cuenta las fuerzas que este
mismo produce, este estudio principalmente se interesa por la descripción analítica del espacio
del efector final o los valores de las coordenadas articulares. Se utiliza el álgebra vectorial y
El modelo cinemático es una metodología que describe las relaciones estáticas entre las
efector final en un sistema de coordenadas teniendo como datos los parametros geometicos del
de coordenadas articulares debe adoptar para la posicion y orientacion que tomara el efector final
del robot.
Figura 7: Diagrama de relación entre cinemática directa e inversa. Fuente: (Barrientos et al.,
2007)
algebra vectorial y matricial para describir la posición del efector final del robot con respecto a
un sistema de referencia fijo, en este análisis el robot se considera como una cadena cinemática
Situando un sistema de referencia fijo en base del robot se puede especificar la posición de cada
denomina matriz T, esta matriz relaciona la posición y orientación del efector final con respecto
transformación homogénea.
Como el problema de la cinemática directa consiste en encontrar las relaciones que permite
conocer la posición del efector final del robot a partir de los valores de sus coordenadas
articulares, en este caso se considera las coordenadas cartesianas y los ángulos de Euler para las
siguiente:
𝑥 = 𝑓𝑥 (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 , 𝑞6 )
𝑦 = 𝑓𝑦 (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 , 𝑞6 )
𝑧 = 𝑓𝑧 (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 , 𝑞6 )
𝛼 = 𝑓𝛼 (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 , 𝑞6 )
𝛽 = 𝑓𝛽 (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 , 𝑞6 )
𝛾 = 𝑓𝛾 (𝑞1 , 𝑞2 , 𝑞3 , 𝑞4 , 𝑞5 , 𝑞6 )
Analizando de manera general un robot de n grados de libertad está conformado por n eslabones
unidos por n articulaciones, entonces cada par articulación – eslabón conforma un grado de
libertad luego a cada eslabón se puede asignar un sistema de referencia solidario, posteriormente
20
Para la notación, la matriz de transformación homogénea que representa la posición y orientación
relativa correspondiente a dos eslabones consecutivos del robot a la cual se asigna la notación de
𝐴𝑖−1/𝑖 , luego 𝐴0/1 describe la posición del primer eslabón con respecto al sistema de referencia
solidario (base fija del robot), posteriormente 𝐴1/2 la posición y orientación del segundo eslabón
con respecto al primero y es así que de manera general se puede denominar 𝐴0/𝑛 a la matriz
resultante del producto de matrices 𝐴𝑖−1/𝑖 donde i tiene valores de 1 hasta n y ∈ ℕ, vale aclarar
que es posible representar en forma parcial o total la cadena cinemática del robot
Si consideramos todos los grados de libertad, la matriz 𝐴0/𝑛 será la matriz T, entonces un robot
de n grados de libertad tendrá una posición y orientación de su efector final descrita por la matriz
T de la siguiente manera:
Jacques Denavit y Richard Hartenberg en el año 1995 propusieron un método matricial que nos
permite obtener de manera sistemática un sistema de coordenadas que se llamara {𝑆𝑖 } ligado a
cada eslabón 𝑖 en una cadena articulada luego posteriormente calcular las ecuaciones cinemáticas
de cada cadena.
La representación de Denavit y Hartenberg también conocido como D-H, indica que, escogiendo
adecuadamente los sistemas de coordenadas para cada eslabón del robot, se puede pasar de uno
de los eslabones.
21
Las trasformaciones básicas de las que se menciona consisten en una sucesión de rotaciones y
traslaciones los cuales nos permiten relacionar el sistema de referencia del elemento 𝑖 con el
elemento 𝑖 − 1, pero para este propósito de pasar del {𝑆𝑖−1 } al {𝑆𝑖 } mediante las 4
transformaciones será posible si los {𝑆𝑖−1 } y {𝑆𝑖 } son definidos de acuerdo a unas normas
𝐶𝜃𝑖 −𝑆𝜃𝑖 0 0 1 0 0 0 1 0 0 𝑎𝑖 1 0 0 0
𝑨𝒊−𝟏/𝒊
𝑆𝜃
=[ 𝑖
𝐶𝜃𝑖 0 0] [0 1 0 0 ] [0 1 0 0 ] [0 𝐶𝛼𝑖 −𝑆𝛼𝑖 0
]
0 0 1 0 0 0 1 𝑑𝑖 0 0 1 0 0 𝑆𝛼𝑖 𝐶𝛼𝑖 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1
22
Entonces, identificando los parámetros 𝜃𝑖 , 𝑎𝑖 , 𝑑𝑖 , 𝛼𝑖 (parámetros D-H) es suficiente para
obtener la matriz A y así obtener la relación de todos los eslabones del robot.
Como se indicó anteriormente para que la matriz 𝑨𝒊−𝟏/𝒊 relacione los sistemas {𝑆𝑖−1 } y {𝑆𝑖 } es
necesario regirse bajo unas determinadas normas, las normas y los 4 parámetros de D-H
cinemática directa.
D-H 1. Numerar los eslabones comenzando con 1 (primer eslabón móvil de la cadena) y
acabando con n (último eslabón móvil). Se numerará como eslabón 0 a la base fija del robot.
D-H 2. Numerar cada articulación comenzando por 1 (la correspondiente al primer grado de
libertad) y acabando en n.
D-H 3. Localizar el eje de cada articulación. Si esta es rotativa, el eje será su propio eje de giro.
D-H 5. Situar el origen del sistema de la base {𝑆0 } en cualquier punto del eje 𝒛𝟎 . Los ejes 𝒙𝟎 e
D-H 6. Para i de 1 a n-1, situar el sistema {𝑆𝑖 } (solidario al eslabón i) en la intersección del eje
𝒛𝒊 con la línea normal común a 𝒛𝒊−𝟏 y 𝒛𝒊 . Si ambos ejes se cortasen se situaría {𝑆𝑖 } en el punto
23
D-H 9. Situar el sistema {𝑆𝑛 } en el extremo del robot de modo que 𝒛𝒏 coincida con la dirección
D-H 10. Obtener 𝜃𝑖 como el ángulo que hay que girar en torno a 𝒛𝒊−𝟏 para que 𝒙𝒊−𝟏 y 𝒙𝒊 queden
paralelos.
D-H 11. Obtener 𝑑𝑖 como la distancia, medida a lo largo de 𝒛𝒊−𝟏 , que habría que desplazar
D-H 12. Obtener 𝑎𝑖 como la distancia medida a lo largo de 𝒙𝒊 (que ahora coincidiría con 𝒙𝒊−𝟏 )
que habría que desplazar el nuevo {𝑆𝑖−1 } para que su origen coincidiese con {𝑆𝑖 }.
D-H 13. Obtener 𝛼𝑖 como el ángulo que habría que girar en torno a 𝒙𝒊 (que ahora coincidiría
con 𝒙𝒊−𝟏 ), para que el nuevo {𝑆𝑖−1 } coincidiese totalmente con {𝑆𝑖 }.
D-H 15. Obtener la matriz de transformación que relaciona el sistema de la base con el del
Los parámetros D-H dependen solo de las características geométricas del eslabón y las
Una vez obtengamos los parámetros D-H el cálculo que relaciona los eslabones consecutivos del
robot es al instante, debido a que están dadas por las matrices 𝐴 que se calculan con la expresión
[2.3] ya expuesta anteriormente, luego la relación de eslabones que no sean consecutivos está
24
dada por las matrices 𝑇 que se calculan mediante el producto del conjunto de matrices 𝐴 como se
expuso anteriormente.
La cinemática inversa es un estudio en el que las ecuaciones son no lineales para los valores de
las articulaciones, por tanto, pueden existir diferentes soluciones, soluciones infinitas o no
encontrar solución para el problema en específico, en esencia consiste en encontrar por medio de
las articulaciones, siendo como dato la posición y orientación del efector final del robot, sin
embargo existen otros métodos como los métodos geométricos y por medio de cuaternios que
El objetivo del problema cinemático inverso consiste en que valores deben adoptar las
por medio de la utilización de las matrices de transformación homogéneas, sin importar como
Es posible por medio de procedimientos genéricos para la programación, llegar a una solución
del problema cinemático inverso por parámetros de Denavid-Heisenberg por ejemplo, y así
obtener los valores articulares para llegar a la posición y orientación establecido para el efector
final del robot, pero estos procedimientos requieren de métodos numéricos iterativos entonces la
convergencia de la solución no siempre está garantizada, por esta razón es más adecuado tener
25
una solución concreta para el problema cinemático inverso, esta solución debe tener una relación
matemático de la forma:
[𝑞1 , 𝑞2 , … , 𝑞𝑛 ]𝑇 que posicionan y orientan el extremo del robot del mismo modo. En estos
casos una solución cerrada permite incluir determinadas reglas o restricciones que
aseguren que la solución obtenida sea la más adecuada de entre las posibles (por
ejemplo, los límites en los recorridos articulares). (Barrientos et al., 2007, pág. 108)
A pesar de las distintas dificultades la mayoría de los robots tienen cinemáticas relativamente
sencillas, por lo que el facilitan la solución del problema cinemático inverso. Como ejemplo se
puede considerar los tres primeros grados de libertad en general de varios robots, los cuales
cuyos elementos generalmente están en un plano, a esto se conoce como estructura planar lo que
facilita la solución del problema, por otro lado en varios robots se da la situación que sus tres
últimos grados de libertad están dedicados a la orientación del efector final del robot, tienen giros
sobre ejes que se cortan en un punto, situación que nuevamente facilita el cálculo de
26
es posible establecer una pautas generales para resolver de manera sistemática el cinemático
Es normalmente utilizar los métodos geométricos para obtener los valores de las primeras
variables articulares que corresponden a la posición del robot (sin contar la orientación de efector
final), en este método se utilizan relaciones trigonométricas y geométricas de esta manera por el
continuación.
𝑛 𝑜 𝑎 𝑝
[ ] = [𝑡𝑖𝑗 ] [2.5]
0 0 0 1
Donde los elementos de 𝑡𝑖𝑗 están en función de las coordenadas articulares [𝑞1 , 𝑞2 , … , 𝑞𝑛 ]𝑇 ,
luego desde esta lógica se puede pensar que es posible despejar las 𝑛 variables articulares 𝑞𝑖 en
A continuación, se observa dos métodos para resolver el problema cinemático inverso con
Este método es adecuado para robots de pocos grados de libertad o para casos en donde se
27
Este procedimiento consiste encontrar relaciones geométricas suficientes de las coordenadas del
efector final del robot, coordenadas articulares y dimensiones físicas de los eslabones.
robot de 3 GDL que se muestra en la Figura 8, siendo esta una estructura típica articular donde el
dato de partida (px, py y pz) correspondientes al {𝑆0 } a las que vamos a posicionar el efector
Como se puede observar este robot tiene una estructura planar por lo que el ángulo del plano
queda definido por la primera variable articular 𝑞1 , este valor se obtiene de forma inmediata
28
𝑝𝑦
𝑞1 = arctan ( )
𝑝𝑥
Luego se puede observar que los elementos 2 y 3 están en otro plano, entonces por el teorema de
Esta expresión permite obtener 𝑞3 en función del vector posición, sin embargo, por conveniencia
Entonces:
±√1 − 𝑐𝑜𝑠 2 𝑞3
𝑞3 = 𝑎𝑟𝑐𝑡𝑔 ( )
cos 𝑞3
Se puede observar que se tiene dos posibles soluciones, signo negativo o positivo corresponden a
29
Figura 9: Elementos 2 y 3 contenidos en un plano de la Figura 8. Fuente: (Barrientos et al.,
2007).
𝑞2 = 𝛽 − 𝛼
𝑝𝑧
𝛽 = 𝑎𝑟𝑐𝑡𝑔 ( )
±√𝑝𝑥2 + 𝑝𝑦2
𝑙3 𝑠𝑒𝑛 𝑞3
𝛼 = 𝑎𝑟𝑐𝑡𝑔 ( )
𝑙2 + 𝑙3 𝑐𝑜𝑠 𝑞3
𝑝𝑧 𝑙3 𝑠𝑒𝑛 𝑞3
𝑞2 = 𝑎𝑟𝑐𝑡𝑔 ( ) − 𝑎𝑟𝑐𝑡𝑔 ( )
±√𝑝𝑥2 + 𝑝𝑦2 𝑙2 + 𝑙3 𝑐𝑜𝑠 𝑞3
Nuevamente el signo da lugar a dos posibles valores de 𝑞2 que corresponden al codo de la Figura
9.
homogénea
30
Se puede obtener el modelo cinemático inverso de un robot partiendo del modelo cinemático
directo, entonces teniendo conocidas las relaciones del valor de la posición y orientación del
efector final en función de las coordenadas articulares, a partir de ellas hallar las relaciones
inversas, esto en la práctica puede ser complejo, lo que significa que a veces obliga a desecharla.
Inicialmente para resolver el problema cinemático inverso se debe obtener la expresión de [2.5]
para este robot, naturalmente obtener la matriz T que relaciona {𝑆0 } (asociado a la base) con el
31
como posición inicial (𝑞1 = 𝑞2 = 0), luego en la Tabla 1 tenemos los valores correspondientes a
Figura 11: Asignación de sistemas de referencia del Robot de 3 GDL de la Figura 10. Fuente:
𝐶1 0 𝑆1 0 𝐶2 0 −𝑆2 0 1 0 0 0
𝑆 0 −𝐶1 0 𝑆2 0 𝐶2 0 0 1 0 0]
𝑻 = 𝑨𝟎/𝟑 =[ 1 ][ ][
0 1 0 𝑙1 0 −1 0 0 0 0 1 𝑞3
0 0 0 1 0 0 0 1 0 0 0 1
𝐶1 𝐶2 −𝑆1 −𝐶1 𝑆2 0
𝑆𝐶 𝐶1 −𝑆1 𝑆2 0
𝑨𝟎/𝟐 =[ 1 2 ]
𝑆2 1 𝐶2 𝑙1
0 0 0 1
32
𝐶1 𝐶2 −𝑆1 −𝐶1 𝑆2 −𝑞3 𝐶1 𝑆2
𝑆𝐶 𝐶1 −𝑆1 𝑆2 −𝑞3 𝑆1 𝑆2
𝑻 = 𝑨𝟎/𝟑 =[ 1 2 ]
𝑆2 0 𝐶2 𝑞3 𝐶2 + 𝑙1
0 0 0 1
Articulación Θ d A Α
1 𝑞1 𝑙1 0 90
2 𝑞2 0 0 -90
3 0 𝑞3 0 0
Una vez teniendo T en función de las coordenadas articulares (𝑞1 , 𝑞2 , 𝑞3 ), luego suponiendo una
dirección de destino del efector final dado por los vectores 𝑛, 𝑜, 𝑎 𝑦 𝑝, se pueden operar las 12
Por otro lado, este procedimiento directo es complejo, es por eso que es más adecuado aplicar el
siguiente procedimiento.
𝑛 𝑜 𝑎 𝑝
Como 𝑇 = [ ] es conocido, los miembros a la izquierda de las expresiones [2.6] son
0 0 0 1
función de las variables articulares (𝑞1 , . . , 𝑞𝑘 ) luego los miembros de la derecha son de las
33
Entonces de la primera expresión de [2.6] se obtiene a 𝑞1 aislado de las variables articulares con
Para poder aplicar este procedimiento, es necesario que en primer lugar obtener las inversas de
las matrices 𝑨𝒊−𝟏/𝒊 . Esto es sencillo si se considera que la inversa de una matriz de
𝑛𝑥 𝑛𝑦 𝑛𝑧 −𝑛𝑇 𝑝
𝑜𝑥 𝑜𝑦 𝑜𝑧 −𝑜𝑇 𝑝
𝑇 −1 =
𝑎𝑥 𝑎𝑦 𝑎𝑧 −𝑎𝑇 𝑝
[0 0 0 1 ]
𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑝𝑥 𝑛𝑥 𝑛𝑦 𝑛𝑧 −𝑛𝑇 𝑝
𝑜 𝑜𝑦 𝑜𝑧 𝑝𝑦 𝑜𝑥 𝑜𝑦 𝑜𝑧 −𝑜𝑇 𝑝
[𝑎𝑥 𝑎𝑦 ]=
𝑥 𝑎𝑧 𝑝𝑧 𝑎𝑥 𝑎𝑦 𝑎𝑧 −𝑎𝑇 𝑝
0 0 0 1 [0 0 0 1 ]
Luego se tiene:
𝐶1 0 𝑆1 0 −1 𝐶1 𝑆1 0 0
𝑆1 0 −𝐶1 0 1 −𝑙1
(𝑨𝟎/𝟏 )−𝟏 =[ ] =[ 0 0 ]
0 1 0 𝑙1 𝑆1 −𝑆1 0 0
0 0 0 1 0 0 0 1
𝐶2 0 −𝑆2 0 −1 𝐶2 𝑆2 0 0
𝑆2 0 𝐶2 0 −1 0]
(𝑨𝟏/𝟐 )−𝟏 =[ ] =[ 0 0
0 −1 0 0 −𝑆2 𝐶2 0 0
0 0 0 1 0 0 0 1
1 0 0 0 −1 1 0 0 0
(𝑨𝟐/𝟑 ) −𝟏
= [0 1 0 0 ] = [0 1 0 0 ]
0 0 1 𝑞3 0 0 1 −𝑞3
0 0 0 1 0 0 0 1
34
𝐶1 𝑆1 0 0 𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑝𝑥
1 −𝑙1 𝑜𝑥 𝑜𝑦 𝑜𝑧 𝑝𝑦
(𝑨𝟎/𝟏 )−𝟏 𝑻 = 𝑨𝟏/𝟐 𝑨𝟐/𝟑 =[ 0 0 ][ ]
𝑆1 −𝑆1 0 0 𝑎𝑥 𝑎𝑦 𝑎𝑧 𝑝𝑧
0 0 0 1 0 0 0 1
De las ecuaciones que se forman de [2.7] interesa las que tiene a 𝑞1 en función de constantes,
tomando 3,4:
𝑝𝑦 𝑝𝑦
𝑆1 𝑝𝑥 − 𝐶1 𝑝𝑦 = 0 → tan 𝑞1 = 𝑝𝑥
→ 𝑞1 = arctan (𝑝 ) [2.8]
𝑥
𝐶2 𝑆2 0 0 𝐶1 𝑆1 0 0 𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑝𝑥
−1 0] [ 0 0 1 −𝑙1 𝑜𝑥 𝑜𝑦 𝑜𝑧 𝑝𝑦
(𝑨𝟏/𝟐 )−𝟏 (𝑨𝟎/𝟏 )−𝟏 𝑻 = 𝑨𝟐/𝟑 =[ 0 0 ][
𝑝𝑧 ]
−𝑆2 𝐶2 0 0 𝑆1 −𝑆1 0 0 𝑎𝑥 𝑎𝑦 𝑎𝑧
0 0 0 1 0 0 0 1 0 0 0 1
1 0 0 0
= [0 1 0 0]
0 0 1 𝑞3
0 0 0 1
𝐶2 𝐶1 𝐶2 𝑆1 𝑆2 −𝑙1 𝑆2 𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑝𝑥 1 0 0 0
[
−𝑆1 𝐶1 0 0 ] [ 𝑜𝑥 𝑜𝑦 𝑜𝑧 𝑝𝑦 0 1 0 0]
𝑝𝑧 ] = [0
[2.9]
−𝑆2 𝑆1 −𝑆2 𝑆1 𝐶2 −𝐶2 𝑙1 𝑎𝑥 𝑎𝑦 𝑎𝑧 0 1 𝑞3
0 0 0 1 0 0 0 1 0 0 0 1
𝐶1 𝑝𝑥 + 𝑆1 𝑝𝑦
𝐶2 𝐶1 𝑝𝑥 + 𝐶2 𝑆1 𝑝𝑦 + 𝑆2 𝑝𝑍 − 𝑙1 𝑆2 = 0 → tan 𝑞2 = [2.10]
𝑝𝑍 − 𝑙1
2
𝑆1 𝑝𝑥 − 𝐶1 𝑝𝑦 = 0 → (𝑆1 𝑝𝑥 − 𝐶1 𝑝𝑦 ) = 0 → 𝐶1 𝑝𝑥 + 𝑆1 𝑝𝑦 = √𝑝𝑥2 + 𝑝𝑦2
35
Se obtiene:
√𝑝𝑥2 + 𝑝𝑦2
𝑞2 = arctan [2.11]
𝑙1 − 𝑝𝑧
Las expresiones dadas [2.8], [2.11] y [2.12] son la solución del problema cinemático inverso del
robot.
𝑝𝑦
𝑞1 = arctan ( )
𝑝𝑥
√𝑝𝑥2 + 𝑝𝑦2
𝑞2 = arctan
𝑙1 − 𝑝𝑧
mismo resultado.
El motor paso a paso permite transformar un impulso eléctrico en movimiento angular, este tipo
de motor es muy utilizado en los dispositivos donde se desea realizar un control de velocidad o
de posición, además de ser típico de los sistemas de posicionamiento, el uso más común que se
posicionamiento del cabezal de impresión y rotación del rodillo del porta papeles en las
36
impresoras matriciales, de margarita y de inyección de tinta, o bien en la rotación del rodillo
Los motores paso a paso del tipo nema son bastante utilizados en estas la apariencia de este tipo
paso-paso-bipolar?search=motor%20paso%20a%20paso
Los motores paso a paso no necesariamente se caracterizan por ser rápidos, esta familia de
Pero gracias a ese funcionamiento lento estos motores funcionan normalmente sin escobillas,
siendo que la mayoría de los motores paso a paso de buena calidad están mayormente equipados
por rodamientos de bolas, por lo tienen una duración de vida considerable, sin necesidad de
mantenimiento. Los motores paso a paso son aquellos que giran de acuerdo a los pulsos
eléctricos que reciben en sus bobinas, entonces el ángulo de rotación mínimo denominada “paso”
PAP es el número de pasos por cada vuelta, de los cuales los más comunes son 48, 100 o 200 por
cada vuelta.
• Motor unipolar.
• Motor bipolar.
Los motores unipolares tienen cinco o seis terminales de salida que depende de la conexión
interna del mismo, este tipo de motores suelen ser sencillos de controlar ya que sus devanados
son alimentados siempre en el mismo sentido por una tensión única del cual viene el nombre de
38
Figura 13: Modelo conceptual del Motor PAP unipolar Fuente: (Begle, 2013)
Los motores bipolares tienen generalmente 4 terminales de salida, estos requieren del cambio de
dirección de flujo de corriente a través de las bobinas en la secuencia apropiada para realizar un
movimiento, en un sentido crea un polo norte y en el otro un polo sur, de ahí su nombre de
39
Figura 14: Modelo conceptual del Motor PAP bipolar. Fuente: (Begle, 2013)
Como mencionamos, los motores bipolares necesitan de corriente en las bobinas con una
secuencia determinada, cada secuencia provoca el movimiento en un paso del motor, entonces la
secuencia seguida de pasos provocará le movimiento circular, luego el sentido de giro depende
A continuación, se observa la tabla con la secuencia necesaria para controlar motores paso a paso
Paso A B C D
1 1 0 1 0
40
2 1 0 0 1
3 0 1 0 1
4 0 1 1 0
Existen tres secuencias posibles para este tipo de motores, todas las secuencias comienzan
nuevamente por el paso 1 una vez alcanzado el paso final (4 u 8). Para revertir el sentido de giro,
La secuencia del tipo ware drive consiste en activar una sola bobina a la vez, en algunos motores
esto brinda un funcionamiento más suave, la deficiencia es que al estar solo una bobina activada
Paso A B C D
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
41
4 0 0 0 1
Secuencia Normal:
Esta secuencia es la más usada, también la que generalmente recomienda el fabricante, con esta
secuencia el motor avanza un paso por a la vez, entonces como siempre hay al menos dos
Paso A B C D
1 1 1 0 0
2 0 1 1 0
3 0 0 1 1
4 1 0 0 1
La secuencia a medio paso es la combinación de las dos secuencias anteriores, donde se enciende
una bobina intercalada con la activación de 2 bobinas, por lo que puede ser aplicado en
Paso A B C D
42
1 1 0 0 0
2 1 1 0 0
3 0 1 0 0
4 1 1 1 0
5 0 0 1 0
6 0 0 1 1
7 0 0 0 1
8 1 0 0 1
Por último, recalcar que como los motores paso a paso son dispositivos mecánicos deben vencer
ciertas inercias, lo que significa que el tiempo de duración y frecuencias de pulsos deben ser
considerados a la hora de utilizar los motores paso a paso, en este sentido los motores deben
frecuencia de pulso baja y gradualmente ir subiendo hasta la velocidad deseada sin superar la
máxima tolerada, el giro en reversa debería también ser realizado previamente bajando la
Si queremos invertir el giro del motor PAP, basta con aplicar las secuencias al revés (de ultimo a
primero).
La velocidad del motor paso a paso depende de la velocidad en la que se envían los pasos
entonces para aumentar o disminuir la velocidad del motor PAP, se debe programar al
controlador de esta manera, entre menos tiempo se tome enviando los pasos, más rápido se
Las siglas NEMA son de National Electric Manufactures Association, son los estándares
principales en los Estados Unidos y la Norma Nema MG1 dicta los estándares para la producción
de motores y generadores.
que se pueden obtener curvas de par velocidad con la modificación en la construcción del rotor,
la variación hace que se tenga varios valores de potencia para las diferentes aplicaciones, por esta
44
diseño en motores, cuya diferencia es la forma de las ranuras de las láminas de núcleo llamado
Los motores se pueden clasificar mediante determinadas clases según (Martínez, 2019) las cuales
detallamos a continuación.
Clase A
El motor clase A es aquel motor de jaula de ardilla estándar fabricado para usos a velocidad
constante, tiene áreas considerablemente grandes en las ranuras lo cual facilita la disipación del
alta, en el periodo de marcha la densidad de corriente disminuye, esta diferencia hace que se
tenga algo de resistencia y baja reactancia de arranque, por lo que se tiene un par de arranque de
entre 1.5 y 1.75 veces al nominal y corriente de arranque varie entre 5 y 7 veces la corriente
nominal normal.
Clase B
Los motores de clase B llamados también motores de propósito general, las ranuras del motor
están un poco más profundo que los motores de clase A, esta profundidad tiende a aumentar la
corriente de arranque, entonces las corrientes de arranque suelen variar de entre 4 y 5 veces la
sopladores.
Clase C
Los motores de clases C tiene doble jaula de ardilla, lo que ocasiona un alto par de arranque y
menor corriente de arranque, por lo que acelera rápidamente, pero cuando está sometido a
45
grandes cargas, la disipación térmica se encuentra limitada, en condiciones de arranque frecuente
Clase D
Los motores de clase D conocidas también como de alto par y resistencia, cuya relación de
resistencia a reactancia del rotor de arranque es mayor a los expuestos anteriormente, estos
motores son utilizados para aplicaciones de arranque pesado como cizallas o troqueles que
Clase F
Los motores de clase F también conocidos como de doble jaula y bajo par, están diseñados como
motores de baja corriente ya que necesitan la menor corriente de arranque en comparación con
las demás clases, este motor produce parres de arranque 1.25 veces el par nominal y bajas
46
D 2.5-3 3-8 5-8, 8-13 Alto par y alta
resistencia
Los motores clasificados por sus dimensiones se designan de acuerdo a número de brida7 que
Tipos de bridas: La brida tipo C tiene orificios de montaje roscados en el diámetro del círculo
primitivo M, la brida tipo D tiene orificios libres (orificios de paso) en el diámetro del círculo
primitivo M.
Números de eje: 019 a 113: estos números de 3 dígitos representan el diámetro del eje D, en
pulgadas x 100.
Si el número del eje no está incluido en la designación expuesta, el diámetro del eje por defecto
Tabla 7: Designación de Diámetro del eje, de acuerdo al número de brida de un motor paso a
paso
7
Brida: Es el elemento principal de un motor que para fijar este a una máquina para ejercer acción el cual cumple
con parámetro y estándares.
47
Número 17 23 34 42 48 56
de brida
de eje
del eje D
en
pulgadas
48
Figura 15: Dimensiones para bridas de montaje. Fuente: (ICS, 2001)
1) El contorno externo de la brida de montaje no puede ser circular, pero debe permanecer
dentro de los límites del diámetro P como se puede observar en la figura 2.1.
2) Se requiere acceso a la parte posterior de la brida de montaje para la brida tipo D y acceso
49
Figura 16: Dimensiones para bridas de montaje, motores con dimensiones en pulgadas.
50
2.8 Hardware libre para IoT
En general existes varias plataformas de hardware y software libre para aplicaciones IoT en el
• Raspberry pi
• Beaglebone
• Arduino Yun
• Esp32
2.8.1 Raspberry Pi
desarrollada por la fundación Raspberry Pi con sede en el Reino Unido con objetivos de
bits a 1,4 GHz, LAN inalámbrica de doble banda, bluetooth 4.2/BLE, ethernet más rápido y
8SBC: Ordenador de Placa Única, los cuales contiene todos o la mayor parte de los componentes de un
ordenador.
51
• Procesador: SoC Broadcom BCM2837B0, Cortex-A53 de 64 bits a 1,4 GHz
almacenamiento de datos
• Alimentación a través de Ethernet (PoE) habilitada (requiere PoE HAT por separado).
52
Figura 17: Raspberry pi 3 B+ Fuente: (Fundation, 2020)
2.8.2 Arduino
Arduino es una plataforma electrónica de código abierto basada en hardware y software libre
de fácil acceso.
como Windows, Macintosh OSX y Linux, siendo que la mayoría de los sistemas de
53
• Entorno de programación simple y claro: El software Arduino (IDE) es sencillo de
usar para principiantes, pero al mismo tiempo suficientemente flexible para que los
Processing.
herramientas de código abierto, lo que significa que están disponibles para su extensión
bibliotecas C++, por otro lado, las personas que deseen comprender los detalles
Arduino Yun
Atheros AR9331, el procesador Atheros admite una distribución de Linux basada en OpenWrt
llamada Linino OS, esta placa tiene soporte Ethernet y WiFi incorporado, un puerto USB-A,
ranura para tarjeta micro-SD, 20 pines de entrada/salida digital (7 de ellos pueden usarse como
salidas PWM y 12 como entradas analógicas), un cristal de 16 MHz oscilador, una conexión
con la distribución de Linux integrada, ofreciendo una buena computadora en red con la
facilidad de un Arduino, además de los comandos de Linux como cURL, permite escribir los
ATmega32u4, excepto que tiene Linux como Sistema Operativo, como tiene comunicación
54
A continuación, se muestra algunas de sus características:
• Flash: 16 MB
• Alimentación: 5 V
• OS: Linino OS
2.8.3 ESP32
ESP32 es la denominación de una familia de chips SoC de bajo consumo de energía, con
tecnología Wi-Fi y Bluetooth de 2.4 GHz diseñado con las tecnologías TSMC de ultra baja
55
potencia de 40 nm, con el objetivo de lograr el mejor rendimiento de potencia y RF, es robusta,
• Alimentación: 3.3 V
incorporado para una factible operación, este driver está diseñado para operar motores paso a
paso del tipo bipolar en modos de paso completo, medio, cuarto, octavo y decimosexto, con una
56
Figura 19: Diagrama de aplicación Típica Driver A4988. Fuente: (MicroSystems, 2009)
A continuación, se muestra la tabla de verdad para los terminales de entrada MS1, MS2, MS3.
observa en la tabla 8, los pines tienen una resistencia pull-down de 100kΩ para MS1 y MS3 y 50
𝑉𝑅𝐸𝐹
𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋 =
8 × 𝑅𝑆
Donde 𝑅𝑆 es la resistencia del resistor de detección en [Ω], 𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋 la corriente máxima del
motor paso a paso en [A] y 𝑉𝑅𝐸𝐹 es el voltaje de entrada en el pin VREF en [V].
La salida DAC reduce la salida 𝑉𝑅𝐸𝐹 al comparador de sentido actual en pasos precisos,
entonces:
%𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋
𝐼𝑇𝑟𝑖𝑝 = ( ) × 𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋
100
SENSE2.
Por ejemplo, el dato para pasos completos de %𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋 es 70.7 (ver Tabla 2 de Controlador de
micro pasos DMOS con traductor y protección contra sobre corriente A4988 en Anexos) luego la
58
Siendo 𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋 una constante acorde al motor que se utilizara y el valor de 0,1 Ω para 𝑅𝑆
Por lo general, el término internet de las cosas se refiere a escenarios en los que la conectividad
consuman datos con una mínima intervención humana. Sin embargo, no existe ninguna
definición única y universal aceptada para este término, por lo cual a continuación se verá
2012)
futuro cercano donde a miles de millones de objetos cotidianos se les asignará una dirección IP,
lo que permitirá a las personas interactuar con estos objetos a través de Internet y que los
Microsoft [Microsoft IoT], Cisco [Cisco IoT] y Google [Google IoT], solo por nombrar
algunas. Aunque los detalles de cómo se verá exactamente el IoT del futuro aún no están claros,
está claro que el IoT tiene el potencial de transformar la forma en que interactuamos con
nuestro mundo. Sin duda, hay una gran cantidad de desafíos técnicos, y el IEEE está
59
desempeñando un papel central en la coordinación y publicación de investigaciones de
El término “Internet de las Cosas” (IoT) denota una tendencia en que un gran número de
dispositivos embebidos utilizan los servicios de comunicación que ofrecen los protocolos de
directamente por un ser humano, sino que existen como componentes en edificios o vehículos o
Precisamente en marzo del 2015 el Comité de Arquitectura de Internet (IAB) dió a conocer un
documento informativo dado como guía para ingenieros en el diseño de redes de objetos
inteligentes (RFC 7452), el cual describe cuatro modelos de comunicación comunes que utilizan
pueden comunicar sobre varios tipos de redes, entre ellas se destaca las redes IP o Internet, pero
es más común para establecer comunicaciones directas dispositivo a dispositivo con protocolos
60
Figura 20: Ejemplo de Modelo de comunicación dispositivo a dispositivo. Fuente: (Karen Rose,
2015)
comunicación existentes como, por ejemplo, las conexiones Wi-Fi o Ethernet cableadas
tradicionales, para establecer una sólida conexión entre el dispositivo y la red IP, para
61
Figura 21: Diagrama de Modelo de comunicación dispositivo a la nube. Fuente: (Karen Rose,
2015)
El modelo dispositivo a puerta de enlace, consiste en que el dispositivo IoT se conecte a través
de un servidor ALG (puerta de enlace a nivel de aplicación) como forma de llegar a un servicio
en la nube, esto quiere decir que existe un software de aplicación corriendo en un dispositivo de
puerta de enlace local, actuando como intermediario entre el dispositivo y la nube que a su vez
da seguridad y otras funciones como traducir protocolos, por ejemplo, en la Figura 2.21 Se
observa el modelo.
62
Figura 22: Ejemplo de Modelo de comunicación dispositivo a puerta de enlace. Fuente: (Karen
Rose, 2015)
El modelo de intercambio de datos a través del back-end, consiste en la idea de que los usuarios
servicio en la nube comparando datos de otras fuentes, por lo que esta arquitectura permite que
otras personas tengan acceso a los datos subidos por los sensores, el modelo tiene un enfoque del
63
Figura 23: Diagrama del Modelo de intercambio de datos a través del back-end. Fuente: (Karen
Rose, 2015)
Los cuatro modelos básicos de comunicación expuestos muestran las estrategias de diseño
utilizadas para permitir el funcionamiento de los dispositivos IoT. De lo cual se puede recalcar la
tipo publicar/suscribir del servidor cliente, usado para la comunicación máquina a máquina
MQTT fue inventado por el Dr. Andy Stanford Clark de IBM y Arlen Nipper de Arcomen en
1999. Los principios de diseño son minimizar el ancho de banda de la red y los requisitos de
recursos del dispositivo al mismo tiempo que intentan garantizar la confiabilidad y cierto grado
aplicaciones.
desconexión irregular.
OASIS tiene comités técnicos trabajando en la IoT supervisando MQTT y otros dos estándares,
AMQP (Advanced Message Queuing Protocol) y oBIX (OASIS Open Building Information
sin fines de lucro que se orienta al desarrollo, la convergencia y la adopción de los estándares de comercio
electrónico y servicios web.
65
Figura 24: Arquitectura de publicación /suscripción MQTT. Fuente: (OASIS, mqtt, 2014)
2.11.1 Terminología
Conexión de red
• Existen los medios necesarios para enviar un flujo de bytes ordenado y sin pérdidas
Mensaje de la aplicación
Cuando los mensajes de aplicación MQTT son transportados, estos contienen datos de carga útil,
Cliente
66
• Puede publicar los mensajes de la aplicación que podrían interesar a otros
clientes.
recibir.
aplicación.
Servidor
En un programa o dispositivo que actúa como un intermediario entre clientes que publican
clientes.
clientes.
• Sesión.
• Suscripción.
• Suscripción compartida.
• Suscripción comodín.
67
• Nombre del tema.
• Filtro de tema.
• Paquete malformado.
• Error de protocolo.
• Mensaje de voluntad.
Las cadenas UTF-812 son una codificación eficiente basado en caracteres Unicode13 que mejora
la codificación de los caracteres ASCII con el fin de establecer comunicaciones basadas en texto,
cada cadena tiene como prefijo un campo de 2 bytes de longitud que provee el número de bytes
Figura 25: Estructura de cadenas codificadas en UTF-8. Fuente: (Banks et al., 2019)
12UTF-8: Es un formato de codificación de caracteres Unicode e ISO 10646 que utiliza símbolos de longitud
variable, está definido como estándar por la “RFC 3629” de la Internet Engineering Task Force (IETF).
13 Unicode: Es un estándar de codificación de caracteres utilizado para facilitar su tratamiento
informático.
68
2.12 Modelo de referencia TCP/IP
El modelo de referencia TCP/IP presenta 4 capas de las 7 capas del modelo de referencia OSI14,
Capa de enlace
La capa de enlace es la más baja en este modelo, esta capa se puede entender como una interfaz
Capa de interred
14OSI: Modelo de referencia lanzado por la organización Internacional de normas ISO, como un primer
paso para la estandarización de protocolos.
69
La capa de interred tiene como objetivo permitir que los hosts puedan enviar paquetes en
cualquier red y luego estos paquetes viajen de forma independiente a su determinado destino.
Capa de transporte.
Capa de aplicación.
La capa de aplicación contiene todos los protocolos de alto nivel entre los cuales podemos
Figura 28: Modelo TCP/IP con algunos protocolos. Fuente: (Pearson, 2012)
70
2.13. HTTP
servidor, que soporta los servicios de conexión del modelo de comunicación TCP/IP.
puerto 80, luego está en espera de las solicitudes de conexión de los clientes web, una vez
En la comunicación HTTP existen dos tipos de mensajes, los mensajes de petición y los
mensajes de respuesta.
Los mensajes de petición comienzan siempre con una cadena GET, POST o HEAD y terminan
con una línea que hace relación al retorno de carro y nueva línea.
La cantidad de líneas es variable pero mínimamente habrá una primera línea de petición donde
Método GET
El método GET nos devuelve como resultado el recurso que se identifica en la URL solicitada.
Método POST
El método POST indica al servidor que se disponga a recibir información del cliente, se usa
Método DELETE
determinada URL.
proporciona información de la solicitud realizada, por ejemplo, el código de mensaje 200 tiene
como significado “solicitud realizada exitosamente”, así cada código está ligado a un mensaje de
Figura 29: Códigos de respuesta HTTP (parte 1). Fuente: (Primo, 2012)
72
Figura 30: Códigos de respuesta HTTP (parte 2). Fuente: (Primo, 2012)
73
2.14. CoAP
del protocolo HTTP, entonces las solicitudes en COAP equivalen a las solicitudes en HTTP,
Este protocolo tiene el objetivo de ser útil en redes restringidas, por microcontroladores en
deficiencia en cuanto a memoria ROM y RAM, el protocolo está diseñado para aplicaciones
• Confirmable (CON).
• Non-Confirmable (NON).
• Acknowledgement (ACK).
• Reset (RST).
74
Capítulo 3
3 Marco práctico
En la ingeniería de proyecto, o marco práctico, se realizará mediante un método semejante al
modelo en cascada el cual tiene 5 pasos de los cuales se tomará 4 (Requerimientos, diseño,
3.1 Requerimientos
El robot del tipo SCARA bajo entorno IoT permitirá que dispositivos dentro de una misma red
puedan acceder a la mediante una interfaz de usuario, en el cual mediante datos requeridos el
usuario puede ejecutar una instrucción Pick & Place, los componentes que debe tener este
sistema son:
• Parte mecánica del robot tipo SCARA, la parte física es el que recibe las instrucciones
para el proceso de Pick & Place, tiene 3 grados de libertad, 3 motores, 2 eslabones con
el eje Z.
• Parte electrónica del robot SCARA, el cual consta de 3 drives, uno para cada motor, una
placa electrónica (Raspberry pi) con Wifi por el cual se envía las instrucciones para el
elemento ferromagnético.
75
• Interfaz de usuario, en el cual el usuario podrá ingresar instrucciones al robot SCARA
para el proceso Pick & Place, parámetros como posición 1 (donde se recogerá el objeto
Figura 32: Diagrama del sistema robot SCARA. Fuente: (Elaboración propia)
3.1.2 Requerimientos
Los requerimientos para este sistema se pueden dividir en 3 áreas, los cuales se detallan a
continuación.
1. Parte mecánica, que consta de 3 eslabones, 2 con ejes paralelos, 3 motores y un efector
2. Parte electrónica, que consta de 3 drivers y una placa electrónica open sourse con wifi.
3. Interfaz de usuario, en el cual se podrá mandar instrucciones de pick and place al robot.
76
3.1.3 Servidor web
Existes opciones muy viables para realizar un servidor web o bien servidores donde ofrecen el
almacenamiento de datos, unos que consumen más recursos que otras, entonces los principales
• Elegir una plataforma que consuma pocos recursos de hardware (para que funcione
3.2 Diseño
En la presente sección abordaremos la parte de diseño del robot SCARA pasando por la parte
Construir un robot tipo SCARA requiere de varios puntos como el estudio de materiales,
esfuerza de las piezas, tipo de movimiento, etc. Sin embargo, en esta parte se limita a construir el
77
Figura 33: Robot Hibot 2442 SCARA. Fuente: (HITBOT, 2020)
Las piezas fueron tomadas del canal educativo Mundo CNC con Arduino en YouTube, estas
Una vez analizando las piezas y ubicaciones correspondientes, se realizó las modificaciones
El software utilizado para lo expuesto fue LibreCad, debido a su factibilidad en uso y además de
78
Figura 34: Pantalla de LibreCad (Part). Fuente: (Elaboración propia)
Algunas de las herramientas de este software que podemos destacar son las que se utilizan para
diseño de piezas 2D y 3D como el unir sólidos, restar sólidos, hacer cilindros, cubos, extruir
sólidos, etc.
79
5 Eslabón 1 PLA Impresora 3D
3 8 Rodamientos
80
13 1 Perno M8, 1 tueca, 2 arandelas 6 cm
El cuerpo del robot es en el que se encuentra el primer grado de libertad para el movimiento
“prismático” en el eje Z, también donde se encuentra uno de los eslabones con ejes paralelos para
Como se puede apreciar este elemento debe soportar un peso determinado principalmente por
dos motores, una guía lineal, pernos y los eslabones para el plano XY, entonces la pieza debe ser
firme y a la vez de un peso relativamente bajo, en este caso se decidió que la pieza tenga un
81
Figura 35: Cuerpo del robot SCARA en LibreCad. Fuente: (Elaboración propia)
La base del robot es la encargada de soportar el peso del robot SCARA, de igual forma como en
82
Figura 36: Base del robot SCARA en LibreCad. Fuente: (Elaboración propia)
Soporte superior
Figura 37: Soporte superior del robot SCARA en LibreCad. Fuente: (Elaboración propia)
83
Engranaje doble
El engranaje doble será una pieza intermediaria para trasmitir movimiento al segundo eslabón de
revoluta, en este caso esta pieza tendrá un relleno del 20 % para no generará peso considerable al
Primer eslabón
El primer estabón de revoluta al igual que el engranaje doble tendrá un relleno del 20 % para no
generar peso considerable, pero al mismo tiempo tenga una firmeza adecuada para la aplicación.
84
Figura 39: Primer eslabón del tipo revoluta robot SCARA en LibreCad. Fuente: (Elaboración
propia)
Segundo eslabón
El segundo eslabón de revoluta al igual el anterior tendrá un relleno del 20 %, en la parte final de
este eslabón se encuentra el efector final que en este caso será un electroimán, este espacio se
85
Figura 40: Segundo eslabón del tipo revoluta robot SCARA en LibreCad. Fuente: (Elaboración
propia)
86
Elementos mecánicos
Rodamientos
Los rodamientos a utilizar serán 608ZZ de 8*22*7 [mm] para libre movilidad de los ejes de
Otro rodamiento a utilizar será el KFL08 que se utilizará en la parte superior del robot para la
fácil rotación del tornillo sin fin en el eje Z, pero fijo en el plano XY, a continuación, se observa
87
Figura 43: Rodamiento KFL08. Fuente: https://www.amazon.com/-/es/SYDIEN-KFL08-0-315-
identificaci%C3%B3n-rodamiento/dp/B07C4Y7P2C
Soporte metálico
El soporte metálico a utilizar será SHF08 de 8 [mm], para una sujeción efectiva de la varilla lisa,
este soporte se ubicará en la parte superior del robot SCARA, a continuación, una imagen de la
misma.
aluminio-impresora-fresadora/dp/B09R12Q6J7
88
Tornillos sin fin y tuerca
Los tornillos sin fin, también conocidos como husillos, se utiliza para la transmisión de
movimiento y conversión de movimiento rotacional a movimiento lineal en este caso para el eje
Acoplamiento
Los acoples se utilizan para unir la fuente de rotacion que es el motor y tornillo sin fin, en este
caso se utilizará el acople flexible de 5 [mm] a 8 [mm] para eje de motor nema 17.
89
Figura 46: Acople flexible 5-8 [mm]. Fuente: https://www.amazon.com/-/es/OctagonStar-
Acoplamientos-flexibles-impresora-unidades/dp/B01HBPHSII
Motores nema 17
Los motores nema 17 a utilizar son el motor pap 17HS4401 y el motor pap KS42STH34-1504A,
• Corriente/fase: 1,5 A
• Inductancia/fase: 2,8 mH
• Peso: 0,22 kg
90
Motor PAP 17HS4401
• Tipo: Bipolar.
• Voltaje: 12V.
• Corriente: 1.7A
• Torque: 4000g/cm.
• No. de Cables: 4.
https://www.techlookelectronica.com/producto/nema-17-17hs4401-motor-paso-a-paso-12v-con-
cable/
91
Figura 48: Motor PAP KS42STH34-1504A. Fuente: https://www.deltakit.net/product/nema17-
ks42sth34-1504a-stepper-motor-1-5a-34mm/
Las poleas se utilizan para trasmitir movimiento mediante las correas dentadas, en el mercado
existen varios tipos de poleas para distintos tipos de correas dependiendo de la aplicación, en este
caso las poleas a utilizar serán las GT2 o 2GT para de 5 [mm] 20 dientes, para correas 2GT
92
Figura 49: Polea GT2 20 dientes, 5 [mm]. Fuente: https://www.amazon.com/-/es/GT2-0-236-
impresora-tornillos-fijaci%C3%B3n-XIAOYING/dp/B08MPW5KG4
Correas dentadas
Las correas dentadas se utilizan con las poleas acopladas al motor para la transmicion de
movimiento a otro eje de rotacion, las correas que se utilizarán son 2GT de 160 y 300 mm.
piezas-ancho-GT2/dp/B075GRJCSD
93
Soporte de goma
La utilidad que se dará al soporte de goma será el de inhibidor de vibraciones, para evitar
motor/goma-lateral-de-soporte-de-motor-johnson-evinrude-90-175-hp-328584/
Módulo electroimán
El módulo electroimán se utilizará para proceso pick and place como efector final del robot para
elementos ferromagnéticos.
94
Figura 52: Módulo electroimán 5[V]. Fuente: https://es.aliexpress.com/item/32897489260.html/
Figura 53: Transmisión de movimiento para la variable articular q2. Fuente: (Elaboración
propia)
𝐷2 = 38.8 [𝑚𝑚]
𝜃2 = 𝜃3
Luego se tiene:
𝑉1 = 𝑉2
𝜔1 ∗ 𝐷1 = 𝜔2 ∗ 𝐷2
𝜃1 ∗ 𝐷1 = 𝜃2 ∗ 𝐷2
𝐷1
𝜃2 = ∗ 𝜃 = 0.3149 ∗ 𝜃1
𝐷2 1
96
𝜃3 = 𝜃4
𝐷3 se tiene:
𝜃2 = 𝜃3
𝐷1 = 12.22 [𝑚𝑚]
𝐷2 = 38.8 [𝑚𝑚]
Tenemos que:
𝑉1 = 𝑉2
𝜔1 ∗ 𝐷1 = 𝜔2 ∗ 𝐷2
𝜃1 ∗ 𝐷1 = 𝜃2 ∗ 𝐷2
𝐷1
𝜃2 = ∗ 𝜃 = 0.3149 ∗ 𝜃1
𝐷2 1
97
Para la correa entre 1 y 2 de la Figura 53 se tiene la siguiente ecuación de cálculo de correas:
𝜋 ∗ (𝐷 + 𝑑) (𝐷 − 𝑑)2
𝐿𝑃 = + +2∗𝑎
2 4∗𝑎
Donde:
𝐷1 = 12.22 [𝑚𝑚]
𝐷2 = 38.8 [𝑚𝑚]
𝑎 = 38 [𝑚𝑚]
𝐿𝑃 = 160 [𝑚𝑚]
Por tanto, para ambos casos de las Figura 53 y Figura 54 entre los 1 y 2 se tiene que las correas
Si: 𝐷 = 𝑑
Entonces:
98
𝐿𝑃 = 𝜋 ∗ 𝐷 + 2 ∗ 𝑎
𝐷 = 38.8 [𝑚𝑚]
𝑎 = 89.2 [𝑚𝑚]
𝐿𝑃 = 300 [𝑚𝑚]
Driver a4988
Motor-Driver-Module/dp/B07VD86HVS?th=1
99
El driver A4988 se utiliza para el control de pasos del motor pap, las configuraciones de los
terminales MS1, MS2 y MS3 son para la resolución del motor, pero también afectan al torque del
motor, en este caso los pines estarán en nivel bajo, lo que significa que la presión será de 1.8
https://es.aliexpress.com/item/1005002253869295.html
En el diagrama de la Figura 56 se observa las conexiones que se realizan para cada motor.
La placa de extensión para el driver a4988 facilita las conexiones del motor pap y el driver
además de ser practico para la configuración de los terminales MS1, MS2 y MS3.
100
Figura 57: Placa de extensión para el driver A4988. Fuente: https://www.amazon.com/LM-YN-
Printer-Stepper-Extension/dp/B01LWO9DI7
Raspberry pi
pines para cada motor que corresponden a los terminales STEP y DIR del driver A4988, también
Tabla 11: Asignación de pines del driver A4988 y la placa electrónica Raspberry pi para cada
motor PAP.
STEP 26
MOTOR q1
DIR 19
101
STEP 21
MOTOR q2
DIR 20
STEP 6
MOTOR q3
DIR 5
Es importante aclarar que los pines que se muestran en la Tabla 3.3 son correspondientes a la
Figura 58: Asignación de pines BCM y BOARD (color gris) Raspberry pi. Fuente:
https://www.prometec.net/usando-los-gpio-con-python/
102
Como se observa en la Figura 58, se puede ver la diferencia entre la asignación de pines BCM y
BOAD, la asignación de pines tipo BCM está diferenciada en varios colores, la asignación de
pines BOARD está en color gris (recuento progresivo desde la parte superior).
Raspberry pi es considerado una pequeña computadora, esta puede ser usada con diferentes
sistemas operativos que están disponibles en la página oficial, en este caso se usa el sistema
Figura 59: Escritorio del Sistema Operativo Raspberry pi OS. Fuente: (Elaboración propia)
103
Figura 60: Diagrama de conexiones del sistema. Fuente: (Elaboración propia)
Fuente de energía
corriente, en cambio para los motores paso a paso se utilizará una fuente de 12 V y 1 A.
104
Figura 61: Fuente de energía para Raspberry pi. Fuente:
https://es.aliexpress.com/item/32835858930.html
La posición 𝑃1(𝑥1, 𝑦1, 𝑧1) es donde se encuentra el elemento ferromagnético a mover para
luego colocar en una posición 𝑃2(𝑥2, 𝑦2, 𝑧2), todo el proceso inicia partiendo de una posición
objeto, entonces si el número de ciclos es 3, el robot moverá 3 objetos, luego finalmente el robot
105
La posición inicial 𝑃0(𝑥0, 𝑦0, 𝑧0) será 𝑃0(178.4,0,0), donde x0 es la suma del largo de los dos
eslabones de ejes paralelos de igual dimensión 𝑎 = 89.2, el usuario solo podrá ingresar datos
Para realizar una limitación de datos primeramente se considera los siguientes datos:
8 [𝑚𝑚] 𝑚𝑚
𝜏1 = 𝑝𝑟𝑒𝑠𝑖𝑐𝑖𝑜𝑛 = = 0.04 [ ]
200 [𝑝𝑎𝑠𝑜𝑠] 𝑝𝑎𝑠𝑜
Flask
Flask es un tipo de framework para Python que permite hacer páginas web, open sourse de libre
La ventaja principal de Flask es la de consumir pocos recursos de hardware debido a que cada
106
3.2.4 Programación
La cinemática directa consiste en llegar partiendo de las variables articulares del robot a las
las variables coordenadas llegar a un determinado valor de las variables articulares, en esta
aplicación es necesario tener ambas ya que nos será útil para estimar las posiciones que tomará el
Cinemática directa
Figura 62: Esquema analítico para el método D-H. Fuente: (Elaboración propia)
107
Tabla 12: Parámetros D-H del robot SCARA de la figura
Articulación Θ D a α
1 0 𝑞1 0 0
2 𝑞2 0 L1 0
3 𝑞2 − 𝑞3 0 L2 0
1 0 0 0
𝐴1/0 = [0 1 0 0]
0 0 1 𝑞1
0 0 0 1
108
𝐶(𝑞2 − 𝑞3 ) 𝑆(𝑞2 − 𝑞3 ) 0 𝐿2 ∗ 𝐶(𝑞2 − 𝑞3 )
−𝑆(𝑞2 − 𝑞3 ) 𝐶(𝑞2 − 𝑞3 ) 0 −𝐿2 ∗ 𝑆(𝑞2 − 𝑞3 )
𝐴3/2 =[ ]
0 0 1 0
0 0 0 1
Finalmente:
O bien:
Entonces:
𝑥 = 𝐿1 ∗ 𝐶𝑞2 + 𝐿2 ∗ 𝐶𝑞3
𝑦 = 𝐿1 ∗ 𝑆𝑞2 + 𝐿2 ∗ 𝑆𝑞3
𝑧 = 𝑞1
Método geométrico
Luego:
8 [𝑚𝑚] 1
𝑔𝑟𝑎𝑑𝑜𝑠 ∗ = [𝑚𝑚/𝑔𝑟𝑎𝑑𝑜𝑠]
360 [𝑔𝑟𝑎𝑑𝑜𝑠] 45
1 𝑞1
𝑧 = 𝑞1 ∗ =
45 45
109
Para los ejes de revoluta los eslabones tienen medidas de 𝐿1 y 𝐿2 con variables de 𝑞2 y
𝑞3 respectivamente.
Figura 63: Diagrama ejes de revoluta robot SCARA. Fuente: (Elaboración propia)
Observado la Figura 63 se puede llegar partiendo de la posición inicial 𝑃0 a la posición final del
𝑥1 = 𝐿1 ∗ cos(𝑞2 )
𝑦1 = 𝐿2 ∗ sen (𝑞2 )
𝑥2 = 𝐿1 ∗ cos(𝑞3 )
𝑦2 = 𝐿2 ∗ sen (𝑞3 )
𝑥 = 𝐿1 ∗ cos(𝑞2 ) + 𝐿1 ∗ cos(𝑞3 )
110
𝑦 = 𝐿2 ∗ sen(𝑞2 ) + 𝐿2 ∗ sen (𝑞3 )
Cinemática inversa
1 0 0 0 −1 1 0 0 0
(𝑨𝟎/𝟏 ) −𝟏
= [0 1 0 0 ] = [0 1 0 0 ]
0 0 1 𝑞1 0 0 1 −𝑞1
0 0 0 1 0 0 0 1
−1 −(𝑆𝑞2 )2 + 1
𝐶𝑞2 −𝑆𝑞2 0 𝐿1 ∗ 𝐶𝑞2 𝑆𝑞2 0 −𝐿1
𝑆𝑞 𝐶𝑞2 0 𝐿1 ∗ 𝑆𝑞2 𝐶𝑞2
(𝑨𝟏/𝟐 )−𝟏 =[ 2 ] = 0 0
0 0 1 0 −𝑆𝑞2 𝐶𝑞2
0 0 0 1 0 0 1 0
[ 0 0 0 1 ]
−(𝑆(𝑞2 − 𝑞3 ))2 + 1
−𝑆(𝑞2 − 𝑞3 ) 0 −𝐿2
𝐶(𝑞2 − 𝑞3 )
= 0 0
𝑆(𝑞2 − 𝑞3 ) 𝐶(𝑞2 − 𝑞3 )
0 0 1 0
[ 0 0 0 1 ]
Luego:
111
1 0 0 0 𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑥
(𝐴0/1 )−1 𝑇 = 𝐴1/2 𝐴2/3 = [0 1 0 0 ] [ 𝑜𝑥 𝑜𝑦 𝑜𝑧 𝑦
0 0 1 −𝑞1 𝑎𝑥 𝑎𝑦 𝑎𝑧 𝑧]
0 0 0 1 0 0 0 1
Tomando (3,4):
𝑞1 = 𝑧
−(𝑆𝑞2 )2 + 1
𝑆𝑞2 0 −𝐿1 1 0 0 0 𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑥
𝐶𝑞2 0 0 ] [ 𝑜𝑥 𝑜𝑦 𝑜𝑧 𝑦
= 0 0 [0 1
−𝑆𝑞2 𝐶𝑞2 0 0 1 −𝑞1 𝑎𝑥 𝑎𝑦 𝑎𝑧 𝑧]
0 0 1 0 0 0 0 1 0 0 0 1
[ 0 0 0 1 ]
112
(𝑨𝟐/𝟑 )−𝟏 (𝑨𝟏/𝟐 )−𝟏 (𝑨𝟎/𝟏 )−𝟏 𝑻 = 𝑰
𝑛𝑥 𝑛𝑦 𝑛𝑧 𝑥 1 0 0 0
𝑜 𝑜𝑦 𝑜𝑧 𝑦 0 1 0 0]
[𝑎𝑥
𝑥 𝑎𝑦 𝑎𝑧 𝑧 ] = [0 0 1 0
0 0 0 1 0 0 0 1
Pero:
Entonces:
𝑦 − 𝐿1 ∗ 𝑆𝑞2
𝑞3 = 𝑎𝑟𝑐𝑡𝑔( )
𝑥 − 𝐿1 ∗ 𝐶𝑞2
Ahora se tiene que hallar 𝑞2 en función de términos constantes, en este caso 𝑥 e 𝑦 se toman
como términos constantes, por facilidad realizaremos esto por consideraciones geométricas.
113
Figura 64: Diagrama ejes de revoluta robot SCARA (análisis geométrico). Fuente: (Elaboración
propia)
En la figura se observa que el ángulo 𝑞2 depende de dos ángulos formados por el triángulo
formado de color amarillo, un ángulo naranja que llamaremos 𝛼 y un ángulo verde que
llamaremos 𝛽.
𝑞2 = 𝛼 + 𝛽
𝑦
𝛼 = 𝑎𝑟𝑐𝑡𝑔( )
𝑥
𝐿12 + 𝑥 2 + 𝑦 2 − 𝐿22
D = cos(𝛽) =
2 ∗ 𝐿1 ∗ √𝑥 2 + 𝑦 2
114
Luego:
𝑠𝑒𝑛(𝛽) = ∓√1 − 𝐷2
De la 𝑡𝑎𝑛(𝛽) se despeja 𝛽:
∓√1 − 𝐷2
𝛽 = 𝑎𝑟𝑐𝑡𝑔( )
𝐷
𝑦 ∓√1 − 𝐷2
𝑞2 = 𝑎𝑟𝑐𝑡𝑔 ( ) + 𝑎𝑟𝑐𝑡𝑔( )
𝑥 𝐷
En la raíz cuadrada del ángulo 𝛽 tenemos dos signos, se toma el signo negativo cuando los
eslabones toman la posición de codo arriba y el signo positivo codo abajo ambos son solución
Es necesario aclarar que solo utilizando el método geométrico se hubiera llegado a los mismos
resultados.
89.2 [𝑚𝑚] y 𝐿2 = 89.2 [𝑚𝑚], es posible obtener el área de trabajo del robot tipo SCARA.
115
Figura 65: Área de trabajo del robot SCARA. Fuente: (Elaboración propia)
En la interfaz de usuario se utilizará HTML, en el cual las entradas input tipo numero
necesariamente requieren un atributo llamado step, que es la diferencia entre datos consecutivos,
entonces para cada variable de entrada los datos consecutivos son equidistantes, por lo cual se
realizará un análisis de datos para buscar solo datos equidistantes entre si para cada variable.
116
Análisis para el eje 𝒙
Figura 66: Datos obtenidos para el eje 𝑥 con 2 decimales (robot SCARA). Fuente: (Elaboración
propia)
Si se analiza los datos en el eje 𝑋 partiendo de 0, tomando una muestra de los primeros 48 datos
0.0, 0.04, 0.13, 0.18, 0.22, 0.31, 0.35, 0.39, 0.4, 0.48, 0.53, 0.57, 0.65, 0.66, 0.7, 0.74, 0.82, 0.88,
0.91, 0.92, 0.99, 1.05, 1.07, 1.1, 1.15, 1.18, 1.22, 1.23, 1.31, 1.39, 1.4, 1.44, 1.46, 1.54, 1.56,
1.58, 1.61, 1.68, 1.7, 1.73, 1.75, 1.82, 1.89, 1.9, 1.95, 1.96, 1.97, 2.01
0.04, 0.09, 0.05, 0.04, 0.09, 0.04, 0.01, 0.08, 0.05, 0.04, 0.08, 0.01, 0.04, 0.04, 0.08, 0.06, 0.03,
0.01, 0.07, 0.06, 0.02, 0.05, 0.03, 0.04, 0.01, 0.08, 0.08, 0.01, 0.04, 0.02, 0.08, 0.02, 0.02, 0.03,
0.07, 0.02, 0.03, 0.02, 0.07, 0.07, 0.01, 0.05, 0.01, 0.01, 0.04.
117
Claramente se observa que estos datos no son equidistantes, entonces se procede a realizar
redondeo a un decimal.
Figura 67: Datos obtenidos para el eje x con un decimal (robot SCARA). Fuente: (Elaboración
propia)
0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1,
2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3,
4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5,
6.6, 6.7, 6.9, 7.0, 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.8, 8.9,
9.0, 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8,
10.9, 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.7, 11.8, 11.9, 12.0, 12.2, 12.3, 12.4, 12.5, 12.6, 12.7,
12.8, 12.9, 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9, 14.0, 14.1, 14.2, 14.3, 14.4, 14.5,
118
14.7, 14.8, 14.9, 15.0, 15.1, 15.2, 15.3, 15.4, 15.5, 15.6, 15.7, 15.8, 15.9, 16.0, 16.1, 16.3, 16.4,
16.5, 16.6, 16.7, 16.8, 16.9, 17.0, 17.1, 17.2, 17.3, 17.5, 17.6, 17.7, 17.8, 17.9, 18.0
Con la diferencia entre términos es posible contar el número total de datos que faltan.
Figura 68: Cantidad de datos faltantes eje x con un decimal (robot SCARA). Fuente:
(Elaboración propia)
Como se observa en la Figura 68 en total faltan 494 datos para completar un rango de datos de
0.1 [mm] de paso, estos datos faltantes tienen una diferencia de entre 0.2 a 0.6 [mm].
De acuerdo al análisis realizado, se observa que con dos decimales no es posible obtener un
factor de proporcionalidad o algo semejante, debido a que la diferencia entre datos consecutivos
119
no es equidistante y consecuente, en el caso de un decimal la situación mejora sin embargo con
Figura 69: Cantidad de datos faltantes eje x sin decimales (robot SCARA). Fuente: (Elaboración
propia)
problema de datos faltantes, sin embargo, tenemos una penalización de perder el dato
120
Análisis para el eje 𝒚
Figura 70: Datos obtenidos para el eje y con dos decimales (robot SCARA). Fuente:
(Elaboración propia)
121
Figura 71: Datos obtenidos para el eje 𝑦 con un decimal (robot SCARA). Fuente: (Elaboración
propia)
Figura 72: Cantidad de datos faltantes eje 𝑦 con un decimal (robot SCARA). Fuente:
(Elaboración propia)
122
Obtenemos 674 datos faltantes 𝑦 la variación entre datos consecutivos es de 0.2 a 0.3 [𝑚𝑚].
Figura 73: Cantidad de datos faltantes eje 𝑦 sin decimales (robot SCARA). Fuente: (Elaboración
propia)
Finalmente se observa de manera similar al eje 𝑥 con redondeo a datos sin decimales se resuelve
el problema de datos faltantes con la penalidad de perder los datos −178.4 y 178.4 en el eje 𝑦.
123
Algoritmo de funcionamiento
Figura 74: Algoritmo general del sistema (robot SCARA). Fuente: (Elaboración propia)
124
Asignación de pines y variables
En la etapa de asignación de pines son las correspondientes a las expuestas en la sección 3.2.2,
ELECTROIMAN
STEP 26
MOTOR q1
DIR 19
STEP 21
MOTOR q2
DIR 20
STEP 6
MOTOR q3
DIR 5
ELECTROIMAN SIG 25
𝐿1 = 89.2
𝐿2 = 89.2
125
Cinemática inversa (cálculo de la variable D)
𝐿12 + 𝑥 2 + 𝑦 2 − 𝐿22
D = cos(𝛽) =
2 ∗ 𝐿1 ∗ √𝑥 2 + 𝑦 2
Con los datos recibidos y las constantes se calcula 𝐷 para cada punto.
Como se había visto anteriormente existen dos posibles soluciones para llegar a un determinado
punto en el plano 𝑋𝑌, codo abajo y codo arriba, estos casos dependen del signo de la expresión
(∓√1 − 𝐷2 ) en el cálculo de 𝑞2. Para aspectos prácticos se toma la decisión de que para datos
Figura 75: Proceso de Ajuste codo abajo o codo arriba (robot SCARA). Fuente: (Elaboración
propia)
𝑦 ∓√1 − 𝐷2
𝑞2 = 𝑎𝑟𝑐𝑡𝑔 ( ) + 𝑎𝑟𝑐𝑡𝑔( )
𝑥 𝐷
126
Cinemática inversa (cálculo de 𝒒𝟑)
Una vez obtenido 𝑞2 se procede calcular el valor de 𝑞3 que se encuentra en función de 𝑞2 como
se observa en la ecuación.
𝑦 − 𝐿1 ∗ 𝑆𝑞2
𝑞3 = 𝑎𝑟𝑐𝑡𝑔( )
𝑥 − 𝐿1 ∗ 𝐶𝑞2
Con las variables 𝑞1, 𝑞2 𝑦 𝑞3 se procede a realizar un ajuste convirtiendo primeramente a grados
𝑝1 = 𝑞1/1.8
𝑞2 = 𝑞2 ∗ 180/𝜋
𝑝2 = 𝑞1/1.8
𝑞3 = 𝑞3 ∗ 180/𝜋
𝑝3 = 𝑞3/1.8
Proceso de funcionamiento
127
Figura 76: Algoritmo de funcionamiento (robot SCARA). Fuente: (Elaboración propia)
128
Figura 77: Algoritmo detallado (robot SCARA). Fuente: (Elaboración propia)
129
Para llegar de la posición inicial 𝑃0 primeramente se realiza el movimiento en el plano 𝑋𝑌,
Se debe aclarar que los elementos a mover deben estar debajo del robot SCARA inicialmente.
En la Figura 76 se observa el proceso de funcionamiento del robot SCARA, como cada motor
y volver de 𝑃2 a 𝑃1.
para después “bajar” a la posición 𝑧2, caso contrario se necesita primero “subir” a 𝑧2, para luego
posición 𝑃2 para “volver” a la posición 𝑃1, ajustando la condición a 𝑧 < 𝑧2, luego si la
condición se cumple primero se realiza el movimiento en el plano 𝑋𝑌 para luego “bajar” a 𝑧1,
caso contrario primero “se sube” a 𝑧1 para luego moverse en el plano 𝑋𝑌 de esta manera volver
a la posición 𝑃1.
Este proceso se realiza hasta cumplir con el número de ciclos dado por el usuario, finalmente
3.3 Implementación
Las piezas en impresoras 3d poseen un pequeño error en debido a la dilatación del material PLA,
por lo que se tomó las previsiones correspondientes en la etapa de diseño, colocando alrededor
130
de 0.2 a 0.5 [mm] de más a las medidas donde se ajustan o unen piezas que es lo recomendable
Figura 78: Primer eslabón del tipo revoluta impreso (robot SCARA). Fuente: (Elaboración
propia)
Figura 79: Segundo eslabón del tipo revoluta impreso (robot SCARA). Fuente: (Elaboración
propia)
131
Figura 80: Soporte superior y engranaje doble, ambos impresos (robot SCARA). Fuente:
(Elaboración propia)
Figura 81: Cuerpo del robot impreso más accesorios ensamblados (robot SCARA). Fuente:
(Elaboración propia)
132
Figura 82: Base del robot impreso más accesorios ensamblados (robot SCARA). Fuente:
(Elaboración propia)
133
Figura 83: Robot SCARA ensamblado completo. Fuente: (Elaboración propia)
Para implementar el driver a4988 con el motor pap se necesita realizar un ajuste de voltaje de
134
El cual esta multiplicado por 0.707 correspondiente para pasos completos del motor pap que se
Despejando Vref:
Para diferentes valores de 𝐼𝑇𝑟𝑖𝑝𝑀𝐴𝑋 corriente del motor pap obtenemos los correspondientes
valores de 𝑉𝑅𝐸𝐹 y así observar el funcionamiento del motor pap, entonces una vez obtenido el
Figura 84: Ajuste del Vref para el driver A4988. Fuente: (Elaboración propia)
135
Tabla 14: Prueba de funcionamiento de motor pap 17HS4401 (eje prismático robot SCARA).
Luego la calibración correspondiente para los motores pap será para 1.1 [A] con lo que es
suficiente para el movimiento libre en los motores, el voltaje de referencia será de 0.62 [V].
136
• Z2, componente en z para la posición 2.
Rango de datos:
137
Figura 85: Interfaz de usuario (imagen del área de trabajo). Fuente: (Elaboración propia)
138
En la Figura 82 se observa una gráfica la cual representa el área de trabajo final del robot
SCARA, en este caso 𝑥 parte de 60 [mm] que es la posición en la cual el efector final no tiene
ningún obstáculo en moverse, para datos menores a 60[mm] existe un conflicto de movimiento
debido a la parte física del eje de revoluta y a las dimensiones del efector final.
Luego para dibujar el área de trabajo ejecutamos el siguiente algoritmo en el cual necesitaremos
L1 = 89.2
L2 = 89.2
x1=0
y1=0
x=[]
y=[]
#############################################
#grafica
for i in range(0,100): # media vuelta
for j in range(0,200): #una vuelta
q2 = i*1.8 - 90 # desde -90 hasta 90 para completar 2 cuadrantes
q3 = j*1.8 - 90
q2=q2*math.pi/180
q3=q3*math.pi/180
x1 = L1*math.cos(q2) + L2*math.cos(q3)
y1 = L1*math.sin(q2) + L2*math.sin(q3)
x1 = int(x1)
y1 = int(y1)
if x1 > 59:
x1=round(x1) #redondeo a un decimal
y1=round(y1) #redondeo a un decimal
x.append(x1) #colocar datos en lista
y.append(y1) #colocar datos en lista
#mostrar figura
fig = px.scatter(x=x,y=y)
fig.update_traces(marker_size=3)
139
Figura 87: Algoritmo del área de trabajo (robot SCARA). Fuente: (Elaboración propia)
Debido a que la variable 𝑦 depende la variable 𝑥 necesitamos un programa para realizar cambios
en y en función de los cambios en 𝑥 luego para cada valor de 𝑥 tendremos diferentes valores en 𝑦
df = [x,y]
df = np.asarray(df)
df1 = np.array(x)
#proceso de ver los valores repetidos
a = np.where(df1 == int(xv1)) #ver numero de datos repetidos y organizar por
ubicacion en una tupla de matrices a
a = np.asarray(a)# convertir una tupla en una matriz
tam = np.shape(a)# tamaño de la matriz de a
tam = np.asarray(tam) # ver numero de datos en y
140
#numero de datos repetidos
ndr = tam[1]
#######################
a2 = np.where(df1 == int(xv2))
a2 = np.asarray(a2)
tam2 = np.shape(a2)
tam2 = np.asarray(tam2)
ndr2 = tam2[1]
#######################
q=[]
q2=[]
for j in range(ndr2):
qwe = df[1,a2[0,j]]
q2.append(qwe)
q2 = set(q2)
q2 = sorted(q2)
#######################
for i in range(ndr):
qwe = df[1,a[0,i]]
q.append(qwe)
q = set(q)
q = sorted(q)
141
Figura 88: Algoritmo de cálculo de valores de “y” para cada valor de “x” (robot SCARA).
142
La interfaz lleva un botón llamado Iniciar, este botón inicia el proceso con los datos que el
Como aclaración la posición inicial 𝑃0(178,0,0) estará por defecto al comenzar el programa.
Las librerías utilizadas son correspondientes a Dash y Plotly principalmente el cual ayuda a
realizar el grafico interactivo, otras principales son las librerías math, time, numpy, que son las
que proporcionan las herramientas en las ecuaciones de cinemática directa e inversa manejar los
Las librerías GPIO, motorstep, para manipular los puertos del Raspberry Pi e interactuar con los
Def inicio, es la función encargada del proceso de obtención de datos de 𝑌 de acuerdo a los datos
ingresados en 𝑋.
@app.callback(
Output("output", "children"),
Input("xv1", "value"),
Input("xv2", "value"),
)
def inicio(xv1,xv2):
df = [x,y]
143
df = np.asarray(df)
df1 = np.array(x)
a = np.where(df1 == int(xv1))
a = np.asarray(a)
tam = np.shape(a)
tam = np.asarray(tam)
ndr = tam[1]
a2 = np.where(df1 == int(xv2))
a2 = np.asarray(a2)
tam2 = np.shape(a2)
tam2 = np.asarray(tam2)
ndr2 = tam2[1]
Def proceso, es la función que recopila los datos 𝑃1, 𝑃2 y Nro. de ciclos para ejecutar el
@app.callback(
Output("output1", "children"),
Input("xv1", "value"),
Input("xv2", "value"),
Input("yv1", "value"),
Input("yv2", "value"),
Input("zv1", "value"),
Input("zv2", "value"),
Input("ciclo", "value"),
Input("iniciar", "n_clicks"),
)
def proceso(xv1,xv2,yv1,yv2,zv1,zv2,ciclo,iniciar):
asd = ["PROCESO STAND BY"]
if "iniciar" == ctx.triggered_id:
#define GPIO pins
GPIO_pins = (14, 15, 18)
#variable articular q1 (z)
direction1 = 17
step1 = 27
#variable articular q2
direction2 = 20 # Direction -> GPIO Pin
step2 = 21 # Step -> GPIO Pin
#variable articular q3
direction3 = 5
step3 = 6
######################
#pin electroiman
ELE = 25
GPIO.setmode(GPIO.BCM)
GPIO.setup(ELE, GPIO.OUT)
#Inicializando en 0
GPIO.output(ELE, GPIO.LOW)
144
Velocidad de los motores pap
Para tomar un criterio adecuado en cuanto a la asignacion de la velocidad de los motores pap, se
requiere tomar en cuenta la siguiente grafica torque vs pulsos/s, la cual proporciona datos
relevantes para la asignacion de una determinada frecuencia (pusos por segundo) adecuada para
esta aplicación.
Figura 89: Grafica Torque vs pulsos/s para el motor paso a paso. Fuente: (Kothari & Nagrath,
2010, pág. 764)
145
3.4 Verificación
3.4.1 Mediciones
En esta etapa se muestra parámetros como el error y la repetibilidad del robot SCARA.
Tabla 15: Errores relativos y absolutos para las variables de revoluta “q2” y “q3” (Robot
SCARA).
(%) (%)
146
72 72.23 72.91 0.23 0.32 0.91 1.26
De los datos de la tabla 15 se puede obtener los errores relativos de las variables articulares de
Siendo así la exactitud la diferencia entre el valor de las variables articulares de revoluta en el
posición.
Tomando medidas para la precisión del husillo 360 [grados] = 8 [mm], y luego para los 5 [mm]
[mm]
147
8 7.8 0.2 2.5
operación, se muestra el puerto y la dirección IP por la que se puede acceder a la página, luego
una vez se tenga la dirección IP asignada por el router al Raspberry Pi, se accede a la página web
en la red LAN.
148
El usuario puede ingresar los datos correspondientes para luego presionando el botón iniciar para
realizaron pruebas con elementos ferromagnéticos pequeños como las tuercas de pernos 𝑚3, esto
también se puede visualizar en la cámara web que el usuario tiene disponible para ver el proceso
de funcionamiento.
149
Capítulo 4
4 Funcionamiento y Resultados
Cuando se accede al sistema en la red LAN, por medio de la dirección IP a la que ha sido
dirección IP que está solicitando la comunicación a través del puerto TCP 8050, luego el servidor
responde con un código de respuesta 200 para aceptar la comunicación, esto se puede observar
en la siguiente figura.
Figura 92: Usuario accediendo al servidor (robot SCARA). Fuente: (Elaboración propia)
150
Otro usuario podría acceder al servidor de manera semejante como se expuso anteriormente, de
igual manera en la línea de comandos del Raspberry Pi se mostrará la dirección IP del usuario el
Figura 93: Usuario 2 accediendo al servidor (robot SCARA). Fuente: (Elaboración propia)
Los usuarios si realizan cambios en la interfaz de usuario, como asignar nuevos valores para los
puntos 𝑃1 y 𝑃2, esto será notorio en la interfaz ya que actualizará los datos para ser visualizados,
entonces todo cambio realizado será notorio en la interfaz y es posible ver esto en la línea de
comandos del Raspberry pi, las acciones realizadas con el método POST el cual envía la
151
Figura 94: Cambios realizados en la interfaz del servidor (robot SCARA). Fuente: (Elaboración
propia)
Para los costos del proyecto se tomó en cuenta en la parte mecánica y electrónica componentes
que son posibles de encontrar en el país y no se incluyeron costo de softwares debido a que todos
152
Tabla 17: Lista de piezas del robot SCARA (parte mecánica).
2 8 Rodamientos 56
153
16 6 Perno M4, 1 tuerca, 1 arandela 15
27 4 Soporte de goma 8 mm 10
1 3 Driver A4988 45
154
2 3 Extensión drive A4988 45
5 1 Fuente de alimentación 5V – 3A 45
7 1 Electroimán 5 V – 1 kg 60
8 1 Cable 5m 7
9 1 Jumpers 40
10 1 Protoboard 35
155
remotas
156
Capítulo 5
5 Conclusiones y Recomendaciones
5.1. Conclusiones
pasos del modelo en cascada. El protocolo HTTP es adecuado para este caso sin embargo
debemos aclarar que este a su vez trabajo con la herramienta Flask de Python, el cual está
internet de las cosas independientemente del protocolo que se utilice, el documento RFC-
7452 nos proporciona una guía útil para los diferentes tipos de modelos de comunicación
• Se realizó un diseño factible de acuerdo a un modelo referencial del robot tipo SCARA,
cual fue necesario añadir un poco de pegamento para metal en los pernos de unión de
piezas.
157
el método geométrico, también fue necesario calcular el modelo de la cinemática inversa
• Se cumplió con los objetivos en la elección del hardware adecuado parta el robot SCARA
para este caso debido a que tiene la cantidad suficiente de puertos, wifi y la facilidad de
disponible. La programación del robot SCARA está diseñada con fines educativos para
• El robot SCARA cumplió con las pruebas vía remoto en la red LAN, sin embargo,
también es posible acceder al robot SCARA por internet, realizando previa configuración
detallando en anexos.
Se realizó el diseño del brazo robótico (SCARA) en un entorno IoT, en el cual el usuario puede
introducir los datos posición dentro del área de trabajo establecido en el robot y el número de
ciclos que vaya a ejecutar para aplicaciones en el cual se requiera mover objetos de un lugar a
otro.
5.4. Recomendaciones.
tomar en cuenta la seguridad del sistema en este caso, por la vulnerabilidad a ataques
externos.
158
• Por fines prácticos se requiere apagar la alimentación de los motores PAP primero antes
de apagar el Raspberry pi, para evitar que los motores tengan falsas entradas de pasos y
• El usuario puede acceder al raspberry pi por el protocolo ssh o bien por el software VNC,
159
Bibliografía
https://docs.arduino.cc/static/b0903a3777a34a4ee4ec5498babc6954/a207c/A000008_feat
ured_2.jpg
Banks, A., Briggs, E., Borgendale, K., & Gupta, R. (2019). Obtenido de MQTT Versión 5.0:
http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html
Barrientos, A., Peñin, L., Balaguer, C., & Aracil, R. (2007). Fundamentos de Róbotica.
http://fabacademy.org/archives/2014/students/begle.moritz/week13.html
https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/
Ingenieria Eelectrónica.
160
Martínez, J. R. (2019). stodocu. Obtenido de https://www.studocu.com/es-
mx/document/universidad-tecnologica-de-queretaro/fisica-de-semiconductores/nema-de-
motores-electricos/22213121
MicroSystems, A. (2009). A4988 DMOS Microstepping Driver with Translator And Overcurrent
Protection.
https://www.youtube.com/@mundoc.n.c.conarduino7293
https://www.oasis-open.org/committees/tc_cat.php?cat=iot
web/desarrollo-web/el-modelo-en-cascada/
Internet de las cosas”. Tesis de grado. Universidad Mayor de San Andres, Carrera de
Informatica.
161
TZI, U. B. (Junio de 2014). RFC. Obtenido de https://www.rfc-editor.org/rfc/rfc7252
https://www.comsoc.org/publications/ctn/internet-things-iot
162
Anexos
• Ver de forma práctica los conceptos de grados de libertad y los tipos que existen.
app = Dash(__name__)
#############################################
L1 = 89.2
L2 = 89.2
x1=0
y1=0
x=[]
y=[]
#############################################
163
#grafica
for i in range(0,100): # media vuelta
for j in range(0,200): #una vuelta
q2 = i*1.8 - 90 # desde -90 hasta 90 para completar 2 cuadrantes
q3 = j*1.8 - 90
q2=q2*math.pi/180
q3=q3*math.pi/180
x1 = L1*math.cos(q2) + L2*math.cos(q3)
y1 = L1*math.sin(q2) + L2*math.sin(q3)
x1 = int(x1)
y1 = int(y1)
if x1 > 59:
x1=round(x1) #redondeo a un decimal
y1=round(y1) #redondeo a un decimal
x.append(x1) #colocar datos en lista
y.append(y1) #colocar datos en lista
#mostrar figura
fig = px.scatter(x=x,y=y)
fig.update_traces(marker_size=3)
################################
app.layout = html.Div([
html.H3('ROBOT TIPO SCARA'),
dcc.Graph(id='Graph1',figure=fig,style={"width": "40%"}),
html.P("X1"),
dcc.Input(id="xv1", type="number", min="60", max="178", step="1",
value="178"),
html.P("X2"),
dcc.Input(id="xv2", type="number", min="60", max="178", step="1",
value="178"),
html.P("Nro de Ciclos:"),
dcc.Input(id="ciclo", type="number", min="1", max="5", step="1",
value="1"),
html.Button('INICIAR', id='iniciar', n_clicks=0),
html.Div(children="callback not executed", id="output"),
html.Div(children="callback not executed", id="output1"),
html.Div([
html.P("Y1"),
dcc.Dropdown(id='yv1',
options = [],
placeholder = "intr.. Y1",
multi = True,
value = [],
style={"width": "30%"}),
html.P("Y2"),
dcc.Dropdown(id='yv2',
options = [],
placeholder = "intr.. Y2",
multi = True,
value = [],
style={"width": "30%"}),
html.P("Z1"),
164
dcc.Input(id="zv1", type="number", min="-100", max="0", step="5",
value="0"),
html.P("Z2"),
dcc.Input(id="zv2", type="number", min="-100", max="0", step="5",
value="0"),
],style= {'display': 'none'})
])
@app.callback(
Output("output", "children"),
Input("xv1", "value"),
Input("xv2", "value"),
)
def inicio(xv1,xv2):
df = [x,y]
df = np.asarray(df)
df1 = np.array(x)
a = np.where(df1 == int(xv1))
a = np.asarray(a)
tam = np.shape(a)
tam = np.asarray(tam)
ndr = tam[1]
a2 = np.where(df1 == int(xv2))
a2 = np.asarray(a2)
tam2 = np.shape(a2)
tam2 = np.asarray(tam2)
ndr2 = tam2[1]
q=[]
q2=[]
for j in range(ndr2):
qwe = df[1,a2[0,j]]
q2.append(qwe)
q2 = set(q2)
q2 = sorted(q2)
for i in range(ndr):
qwe = df[1,a[0,i]]
q.append(qwe)
q = set(q)
q = sorted(q)
return html.Div([
html.P("Y1"),
dcc.Dropdown(id='yv1',
options = q ,
placeholder = "intr.. Y1",
value = q[0],
style={"width": "30%"}),
html.P("Y2"),
dcc.Dropdown(id='yv2',
165
options = q2 ,
placeholder = "intr.. Y2",
value = q2[0],
style={"width": "30%"}),
html.P("Z1"),
dcc.Input(id="zv1", type="number", min="-100", max="0", step="5",
value="0"),
html.P("Z2"),
dcc.Input(id="zv2", type="number", min="-100", max="0", step="5",
value="0"),
html.P(msg),
])
@app.callback(
Output("output1", "children"),
Input("xv1", "value"),
Input("xv2", "value"),
Input("yv1", "value"),
Input("yv2", "value"),
Input("zv1", "value"),
Input("zv2", "value"),
Input("ciclo", "value"),
Input("iniciar", "n_clicks"),
)
def proceso(xv1,xv2,yv1,yv2,zv1,zv2,ciclo,iniciar):
asd = ["PROCESO STAND BY"]
if "iniciar" == ctx.triggered_id:
#define GPIO pins
GPIO_pins = (14, 15, 18)
#variable articular q1 (z)
direction1 = 17
step1 = 27
#variable articular q2
direction2 = 20 # Direction -> GPIO Pin
step2 = 21 # Step -> GPIO Pin
#variable articular q3
direction3 = 5
step3 = 6
######################
#pin electroiman
ELE = 25
GPIO.setmode(GPIO.BCM)
GPIO.setup(ELE, GPIO.OUT)
#Inicializando en 0
GPIO.output(ELE, GPIO.LOW)
#datos y parametros del brazo
#dimensiones de los eslabones
L1 = 89.2 # eslabon 1 en mm
L2 = 89.2 # eslabon 2 en mm
###################################
mymotortest1 = RpiMotorLib.A4988Nema(direction1, step1, GPIO_pins,
"A4988")
mymotortest2 = RpiMotorLib.A4988Nema(direction2, step2, GPIO_pins,
"A4988")
166
mymotortest3 = RpiMotorLib.A4988Nema(direction3, step3, GPIO_pins,
"A4988")
################################
x = xv1
y = yv1
z = zv1
#como los datos llegan en tipo str convertimos a int para operar con
ellos
x = int(x)
y = int(y)
z = int(z)
#datos para p2
x2 = xv2
y2 = yv2
z2 = zv2
#como los datos llegan en tipo str convertimos a int para operar con
ellos
x2 = int(x2)
y2 = int(y2)
z2 = int(z2)
numerov = ciclo
print("x =",x)
print("y =",y)
print("z =",z)
print("x2 =",x2)
print("y2 =",y2)
print("z2 =",z2)
if (y>0):
q2 = math.atan2(y,x)-math.atan2(((1-D*D)**(1/2)),D)
else:
q2 = math.atan2(y,x)-math.atan2((-(1-D*D)**(1/2)),D)
q3 = math.atan2((y-L1*math.sin(q2)),(x-L1*math.cos(q2)))
##########################################
#calculos de parametros cinematica inversa
q1 = 45*z # 360 grdos/8 mm (husillo 8 mm por revolucion)
p1 = q1/1.8 # pasos del motor
#conversion de radianes a grados
q2 = q2*180/math.pi
p2 = q2/1.8 # pasos segundo parametro
#para la tercera varible articular
q3 = q3*180/math.pi
p3 = q3/1.8
167
#cinemtica directa para p2
#calculo de parametros del robot x y
D2 = (x2*x2+y2*y2+L1*L1-L2*L2)/(2*L1*(x2*x2+y2*y2)**(1/2))
if (y2>0):
q20 = math.atan2(y2,x2)-math.atan2(((1-D2*D2)**(1/2)),D2)
else:
q20 = math.atan2(y2,x2)-math.atan2((-(1-D2*D2)**(1/2)),D2)
q30 = math.atan2((y2-L1*math.sin(q20)),(x2-L1*math.cos(q20)))
##########################################
#calculos de parametros cinematica inversa
q10 = 45*z2 # 360 grdos/8 mm (husillo 8 mm por revolucion)
p10 = q10/1.8 # pasos del motor
#conversion de radianes a grados
q20 = q20*180/math.pi
p20 = q20/1.8 # pasos segundo parametro
#para la tercera varible articular
q30 = q30*180/math.pi
p30 = q30/1.8
if (p2>0):
#print("para P1 EJECUTANDO q2")
mymotortest2.motor_go(True, "Full" , round(p2/0.3149), .002, False,
.05)
else:
mymotortest2.motor_go(False, "Full" , round(abs(p2/0.3149)), .002,
False, .05)
#print("para P1 EJECUTANDO q2")
#tiempo entre eslabones
time.sleep(0.5)
#######################
if (p3>0):
mymotortest3.motor_go(False, "Full" , round(p3/0.3149), .002, False,
.05)
else:
mymotortest3.motor_go(True, "Full" , round(abs(p3/0.3149)), .002,
False, .05)
#tiempo entre eslabones
time.sleep(0.5)
if (p1>0):
mymotortest1.motor_go(True, "Full" , round(p1), .002, False, .05)
else:
mymotortest1.motor_go(False, "Full" , round(abs(p1)), .002, False,
.05)
168
for i in range(int(numerov)):
print("posicion P1")
time.sleep(0.7)
#activar el electroiman E = 1
GPIO.output(ELE, GPIO.HIGH)
#############################
time.sleep(0.7)
#time.sleep(0.5)
if (z > z2):
if (p200>0):
mymotortest2.motor_go(True, "Full" , round(p200/0.3149),
.002, False, .05)
else:
mymotortest2.motor_go(False, "Full" ,
round(abs(p200/0.3149)), .002, False, .05)
time.sleep(0.5)
if (p300>0):
mymotortest3.motor_go(False, "Full" , round(p300/0.3149),
.002, False, .05)
else:
mymotortest3.motor_go(True, "Full" ,
round(abs(p300/0.3149)), .002, False, .05)
time.sleep(0.5)
if (p100>0):
mymotortest1.motor_go(True, "Full" , round(p100), .002,
False, .05)
else:
mymotortest1.motor_go(False, "Full" , round(abs(p100)),
.002, False, .05)
else:
if (p100>0):
mymotortest1.motor_go(True, "Full" , round(p100), .002,
False, .05)
else:
mymotortest1.motor_go(False, "Full" , round(abs(p100)),
.002, False, .05)
time.sleep(0.5)
if (p200>0):
mymotortest2.motor_go(True, "Full" , round(p200/0.3149),
.002, False, .05)
169
else:
mymotortest2.motor_go(False, "Full" ,
round(abs(p200/0.3149)), .002, False, .05)
time.sleep(0.5)
if (p300>0):
mymotortest3.motor_go(False, "Full" , round(p300/0.3149),
.002, False, .05)
else:
mymotortest3.motor_go(True, "Full" ,
round(abs(p300/0.3149)), .002, False, .05)
print("posicion P2")
time.sleep(0.7)
#activar el electroiman E = 0
#print("electroiman desactivado")
GPIO.output(ELE, GPIO.LOW)
#############################
time.sleep(0.7)
if (i != int(numerov)-1):
#volviendo a P1
# -q100 ----> -q200 ----> -q300
if (z < z2):
if (p200>0):
mymotortest2.motor_go(False, "Full" ,
round(p200/0.3149), .002, False, .05)
else:
mymotortest2.motor_go(True, "Full" ,
round(abs(p200/0.3149)), .002, False, .05)
time.sleep(0.5)
if (p300>0):
mymotortest3.motor_go(True, "Full" ,
round(p300/0.3149), .002, False, .05)
else:
mymotortest3.motor_go(False, "Full" ,
round(abs(p300/0.3149)), .002, False, .05)
time.sleep(0.5)
if (p100>0):
mymotortest1.motor_go(False, "Full" , round(p100),
.002, False, .05)
else:
mymotortest1.motor_go(True, "Full" , round(abs(p100)),
.002, False, .05)
else:
if (p100>0):
mymotortest1.motor_go(False, "Full" , round(p100),
.002, False, .05)
else:
170
mymotortest1.motor_go(True, "Full" , round(abs(p100)),
.002, False, .05)
time.sleep(0.5)
if (p200>0):
mymotortest2.motor_go(False, "Full" ,
round(p200/0.3149), .002, False, .05)
else:
mymotortest2.motor_go(True, "Full" ,
round(abs(p200/0.3149)), .002, False, .05)
time.sleep(0.5)
if (p300>0):
mymotortest3.motor_go(True, "Full" ,
round(p300/0.3149), .002, False, .05)
else:
mymotortest3.motor_go(False, "Full" ,
round(abs(p300/0.3149)), .002, False, .05)
if (p10>0):
mymotortest1.motor_go(False, "Full" , round(p10), .002, False, .05)
else:
mymotortest1.motor_go(True, "Full" , round(abs(p10)), .002, False,
.05)
time.sleep(0.5)
if (p20>0):
mymotortest2.motor_go(False, "Full" , round(p20/0.3149), .002, False,
.05)
else:
mymotortest2.motor_go(True, "Full" , round(abs(p20/0.3149)), .002,
False, .05)
time.sleep(0.5)
if (p30>0):
mymotortest3.motor_go(True, "Full" , round(p30/0.3149), .002, False,
.05)
else:
mymotortest3.motor_go(False, "Full" , round(abs(p30/0.3149)), .002,
False, .05)
print("posicion inicial")
print("Proceso finalizado")
asd = ["P1","(",xv1,",",yv1,",",zv1,")","P2","(",xv2,",",yv2,",",zv2,")"]
return html.Div(asd)
if __name__ == '__main__':
app.debug = True
app.run_server(host="0.0.0.0")
171
Anexo C Vistas de las piezas del robot SCARA.
Vista superior
Vista de frente
Vista isométrica
172
Base del robot
Vista superior
Vista de frente
173
Vista lateral izquierda
Vista isométrica
174
Soporte superior
Vista superior
175
Vista lateral izquierda
Vista de frente
Vista isométrica
176
Engranaje doble
Vista superior
177
Vista de frente
Vista Isométrica
178
Primer eslabón
Vista superior
179
Vista de frente
Vista isométrica
180
Segundo eslabón
Vista superior
Vista inferior
181
Vista lateral izquierda
Vista de frente
182
Vista isométrica
Robot SCARA
Vista superior
183
Vista inferior
Vista frontal
184
Vista posterior
185
Vista lateral izquierda
Vista isométrica
186
Guía de Usuario
https://www.realvnc.com/es/connect/download/viewer/
jpcool)
ejecutara el servidor)
Acceder al servidor.
187
2. Introducir la dirección IP del Raspberry Pi seguido del puerto 8050 separado por dos
puntos. (IP:8050)
3. Presionar enter.
Interfaz de Usuario.
• El usuario puede modificar el valor de 𝑋1, 𝑋2, 𝑍1, 𝑍2 y el Número de Ciclos, subiendo o
bajado el cursor (el sistema solo te permite ingresar datos dentro del área de trabajo)
respectivamente, estos valores son los datos más bajos para los diferentes intervalos de
• Una vez teniendo todos los datos establecidos presionar el botón Iniciar (solo presionar
Para acceder desde internet se deben realizar algunas configuraciones en el router de la red.
188
4.5. Aceptar y aplicar
5. Redirección de puertos
189
Juan Pablo Albarez Flores
68167028