Documentos de Académico
Documentos de Profesional
Documentos de Cultura
θ d a α
1 Θ1 30 0 90º
2 Θ2 0 20 0
3 Θ3 0 15 0
TABLA 1. Parámetros DH del brazo robot.
Descrita la tabla de parámetros se puede
obtener las ecuaciones para θ de cada eslabón,
a continuación se mostrara las ecuaciones que
se introducirán al microcontrolador para el
control de movimiento de cada eslabón
FIGURA 14. Interfaz utilizada para el control
de movimiento del brazo.
Ecuación 1, para θ1:
Y
θ1 = tan−1 Como se muestra en la figura 14, se ingresaron
X
las coordenadas para que el brazo llegue a ese
Ecuación 2, para θ2: punto, las cuales son:
X=10
Z − 30
θ2 = sin−1 ( ) Y=20
15
Z=45
Ecuación 3, para θ3: Los valores de los ángulos los cuales debe
moverse cada eslabón son los siguientes:
−X Y Z − 30 θ1 = 63.43º
θ3 = tan−1 − tan−1 ( ) − sin−1 ( )
Y X 15 θ2 = 90º
θ3 = 180º
Donde X, Y, Z, es el punto en eje de
Dado estos puntos se observa en la figura 15
coordenadas deseado a donde debe llegar el
brazo que el brazo ha llegado a la posición deseada,
comprobando que funciona correctamente el
Obtenidas las ecuaciones se procede a realizar control del brazo
el algoritmo de programación, para el control
del movimiento del brazo, la cual se mostrara Se realizo la comprobación de los resultados
en ANEXOS.
obtenidos por medio del software de
MATLAB, donde se ingresaron las mismas
coordenadas y se observo que el brazo
modelado en Matlab alcanza la misma
posición.
6 RESULTADOS
7 CONCLUSIONES [3] A. Rodrigues, “Introducción a la
programación Disponible en:
http://isa.umh.es/arduino.pdf
La cinemática directa y el algoritmo
DENAVIT HARTENBERG resultan una
pieza importante para el Modelamiento de un ANEXOS
robot, pues este algoritmo alberga todas las
condiciones para la generación del robot en el
Programación realizada en ARDUINO
espacio, además de entregar información de
posición y orientación respecto a un sistema de #define pin3 3
referencia #define pin4 4
#define pin5 5
#define pin6 6
Es importante conocer los comandos
#define retardo 2
que posee el COSIROP para realizar la
programación de una manera más char caracter;
factible, ya que de esta manera se String cadena;
puede minimizar las líneas de código y float pasos = 0;
realizar grandes movimientos del int datos_serial = 0;
brazo.
void setup() {
Es necesario determinar la velocidad pinMode(pin3, OUTPUT);
adecuada en el controlador para que el pinMode(pin4, OUTPUT);
brazo realice el dibujo ya que de esta pinMode(pin5, OUTPUT);
manera se puede evitar colisiones con pinMode(pin6, OUTPUT);
partes externas al brazo, otra manera de Serial.begin(9600);
controlar la velocidad del brazo es en la }
programación con el comando SPD el
cual nos permite controlar la velocidad void loop() {
a la siguiente línea de código. while (Serial.available()) {
delay(3);
Es importante encontrar un valor en la char c = Serial.read();
posición de Z para que al momento de cadena += c;
realizar el dibujo no exista mucha }
fricción tanto con el esfero y la hoja de
papel, para que al dibujar el brazo no if (cadena.length() >0) {
tenga mucha complicación y no pueda
romper la hoja o en el peor de los casos Serial.println(cadena.toInt());
el esfero. datos_serial = cadena.toInt();
8 REFERENCIAS
}
[1] ref/ , “Software para la aplicacion de app while(datos_serial>pasos){
inventor”, Marzo-2009, Disponible en:
http://repositorio.ute.edu.ec/pdf atras();
delayMicroseconds(40);
[2] www.google, “Programming Software for pasos = pasos + 1;
Mitsubishi Industrial Robots”, Enero-2005
[En Línea], Disponible en: }
http://industrial.utp.edu.co/laboratorios/ while(datos_serial<pasos){
celda/robot.pdf
adelante();
delayMicroseconds(40); delay(retardo);
pasos = pasos - 1; }
} void atras(){
paso3();
if (cadena == "SET"){ delay(retardo);
pasos = 0; paso2();
datos_serial = 0; delay(retardo);
} paso1();
delay(retardo);
cadena=""; paso4();
} delay(retardo);
void paso1(){ }
digitalWrite(pin3, HIGH);
digitalWrite(pin4, HIGH);
digitalWrite(pin5, LOW); PROGRAMACION EN APP
digitalWrite(pin6, LOW); INVENTOR
}
void paso2(){
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
digitalWrite(pin5, HIGH);
digitalWrite(pin6, LOW);
}
void paso3(){
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, HIGH);
digitalWrite(pin6, HIGH);
}
void paso4(){
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin6, HIGH);
}
void pasoApagado(){
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin6, LOW);
}
void adelante(){
paso1();
delay(retardo);
paso2();
delay(retardo);
paso3();
delay(retardo);
paso4();