Escolar Documentos
Profissional Documentos
Cultura Documentos
Concepto:
Un Brazo Robot está constituido por una serie de elementos o eslabones unidos mediante
articulaciones que permiten un movimiento relativo entre cada eslabón consecutivo. La
constitución física de gran parte de los brazos robot guarda cierta similitud con la anatomía del
brazo humano, es decir, que poseen ciertas características antropomórficas, por lo que en
ocasiones a los distintos elementos que componen el robot se les denomina en términos como
Base, Hombro, Codo, Brazo, Muñeca y Pinza.
Cada articulación provee al Dispositivo de al menos un grado de libertad, así que yo lo llamo a
cada uno de los movimientos independientes que puede realizar cada articulación con respecto
a la anterior, se denomina grado de libertad (GDL).
Brazo
Muñeca
Pinza Codo
Hombro
Base
Los Brazos robot de 6 grados de libertad trabajan con eficiencia, gracias a la combinación de
elementos mecánicos y servo motores, los cuales ofrecen una precisión y libertad de trabajo
en comparación a otros sistemas de trasmisión de potencia. Su estructura especial les permite
alcanzar estas distancias con rapidez: su escaso peso propio hace posible trabajar a elevada
velocidad y los convierte en idóneos para aplicaciones de recogida y colocación.
Cinemática de un robot:
“La cinemática de un robot estudia el movimiento del mismo con respecto a un sistema de
referencia sin tener en cuenta la causas que la producen"
Las variables que se utilizan en el modelo cinemático del robot SCARA de dos grados de
libertad (GDL), son las longitudes de cada uno de los eslabones, l1 y l2, las posiciones
articulares de cada eslabón, q1 y q2, que están tomados en referencia al sistema de
coordenadas con centro en la base del robot y la posición del órgano terminal del robot
indicada por las coordenadas del mismo en el sistema de referencia.
La medición de ángulos:
Los ángulos miden posiciones relativas de dos rectas en el plano. La medición de ángulos y,
por tanto, en trigonometría, se emplean tres unidades:
X= L * cos (ángulo)
Y= L * sen (ángulo)
Tenemos el mismo concepto pero aplicado a una extremidad con su propio Angulo y grado de
libertad.
Código:
int servoPinBrazo = 5;
int anguloHombro;
int valorPOTCodo;
void setup() { valorPOTBase = analogRead(POTBase);
Serial.begin(9600); anguloBase =
map(valorPOTBase,0,1023,0,180);
pinMode(Grabar, INPUT);
Base.write(anguloBase);
pinMode(Reproducir, INPUT);
valorPOTHombro =
pinMode(Resetear, INPUT); analogRead(POTHombro);
anguloHombro =
map(valorPOTHombro,110,890,0,180);
pinMode(POTBase, INPUT);
Hombro.write(anguloHombro);
pinMode(POTHombro, INPUT);
valorPOTCodo =
pinMode(POTCodo, INPUT);
analogRead(POTCodo);
pinMode(POTBrazo, INPUT);
anguloCodo =
pinMode(POTMuneca, INPUT); map(valorPOTCodo,110,890,0,180);
valorPOTPinza =
analogRead(POTPinza);
Base.attach(servoPinBase);
anguloPinza =
Hombro.attach(servoPinHombro); map(valorPOTPinza,110,890,0,180);
Codo.attach(servoPinCodo); Pinza.write(anguloPinza);
Pinza.attach(servoPinPinza); valorPOTBrazo =
analogRead(POTBrazo);
Brazo.attach(servoPinBrazo);
anguloBrazo =
Muneca.attach(servoPinMuneca); map(valorPOTBrazo,110,890,0,180);
Brazo.write(anguloBrazo);
}
if(digitalRead(Resetear) == HIGH)
void loop()
{ Serial.println("Borrando, espere...");
{ if(digitalRead(Reproducir) == LOW)
delay(100);
{
for(i=0; i<20; i++)
{ for(j=0; j<6; j++) {
MovGuardado[iGrabar][jGrabar]=anguloCo
MovGuardado[i][j]=0; do;
} Serial.println("Codo guardado");
iGrabar=0; MovGuardado[iGrabar][jGrabar]=anguloBra
zo;
ultimaFila=0; }
Serial.println("Brazo guardado");
delay(300); }
if ((digitalRead(Grabar) ==
HIGH)&&(ultimaFila!=19)) if(jGrabar==4) {
{ Serial.println("Grabando posicion");
MovGuardado[iGrabar][jGrabar]=anguloMu
delay(100);
neca;
for(iGrabar; iGrabar<=ultimaFila;
Serial.println("Muneca guardado");
iGrabar++)
delay(300);
{ for(jGrabar=0; jGrabar<6;
jGrabar++) } if(jGrabar==5) {
{
MovGuardado[iGrabar][jGrabar]=anguloPin
if(jGrabar==0)
za;
{
Serial.println("Pinza guardada");
MovGuardado[iGrabar][jGrabar]=anguloBas
e; delay(300); }
Serial.println("Base guardada"); }
delay(300); }
} ultimaFila+=1;
if(jGrabar==1) if(ultimaFila==19)
{ { Serial.println("Maximo de
posiciones guardadas, no se pueden añadir
mas posiciones");
MovGuardado[iGrabar][jGrabar]=anguloHo
mbro; } }
} Serial.print("Reproduciendo base
posicion: "); Serial.println(iReproducir);
if (digitalRead(Reproducir) == HIGH)
{ Serial.println("Reproduciendo if(angulo1>MovGuardado[iReproducir][jRep
posicion"); roducir])
delay(100); {
angulo1=anguloBase; for(anguloBaseRep=angulo1;
anguloBaseRep >=
angulo2=anguloHombro; MovGuardado[iReproducir][jReproducir];
anguloBaseRep --)
angulo3=anguloCodo;
{
angulo4=anguloBrazo;
Base.write(anguloBaseRep);
angulo5=anguloMuneca;
delay(15);
angulo6=anguloPinza;
angulo1=anguloBaseRep;
} } }
for(iReproducir=0; iReproducir<iGrabar;
iReproducir++) if(jReproducir==1)
{ for(jReproducir=0; jReproducir<6; {
jReproducir++)
delay(100);
{ delay(100);
Serial.print("Reproduciendo Hombro
if(jReproducir==0) posicion: "); Serial.println(iReproducir);
{ delay(100);
if(angulo2<MovGuardado[iReproducir][jRep
Serial.print("Reproduciendo base
roducir])
posicion: "); Serial.println(iReproducir);
{
if(angulo1<MovGuardado[iReproducir][jRep for(anguloHombroRep=angulo2;
roducir]) anguloHombroRep <=
MovGuardado[iReproducir][jReproducir];
{
anguloHombroRep ++)
for(anguloBaseRep=angulo1;
{
anguloBaseRep <=
MovGuardado[iReproducir][jReproducir]; Hombro.write(anguloHombroRep);
anguloBaseRep ++)
delay(15);
{
angulo2=anguloHombroRep;
Base.write(anguloBaseRep);
}
delay(15);
}
if(angulo3>MovGuardado[iReproducir][jRep
Serial.print("Reproduciendo Hombro roducir])
posicion: "); Serial.println(iReproducir);
{
if(angulo2>MovGuardado[iReproducir][jRep for(anguloCodoRep=angulo3;
roducir]) anguloCodoRep >=
MovGuardado[iReproducir][jReproducir];
{ anguloCodoRep --)
for(anguloHombroRep=angulo2; {
anguloHombroRep >=
MovGuardado[iReproducir][jReproducir]; Codo.write(anguloCodoRep);
anguloHombroRep --)
delay(15);
{
angulo3=anguloCodoRep;
Hombro.write(anguloHombroRep);
} } }
delay(15);
if(jReproducir==3)
angulo2=anguloHombroRep;
{
} } }
delay(100);
if(jReproducir==2)
Serial.print("Reproduciendo Brazo
{ delay(100); posicion: "); Serial.println(iReproducir);
Serial.print("Reproduciendo Codo
posicion: "); Serial.println(iReproducir); if(angulo4<MovGuardado[iReproducir][jRep
roducir])
if(angulo3<MovGuardado[iReproducir][jRep {
roducir])
for(anguloBrazoRep=angulo4;
{ anguloBrazoRep <=
MovGuardado[iReproducir][jReproducir];
for(anguloCodoRep=angulo3; anguloBrazoRep ++)
anguloCodoRep <=
MovGuardado[iReproducir][jReproducir]; {
anguloCodoRep ++)
Brazo.write(anguloBrazoRep);
{
delay(15);
Codo.write(anguloCodoRep);
angulo4=anguloBrazoRep;
delay(15);
} }
angulo3=anguloCodoRep;
Serial.print("Reproduciendo Brazo
} } posicion: "); Serial.println(iReproducir);
Serial.print("Reproduciendo Codo
posicion: "); Serial.println(iReproducir); if(angulo4>MovGuardado[iReproducir][jRep
roducir])
{ for(anguloMunecaRep=angulo5;
anguloMunecaRep >=
for(anguloBrazoRep=angulo4; MovGuardado[iReproducir][jReproducir];
anguloBrazoRep >= anguloMunecaRep --)
MovGuardado[iReproducir][jReproducir];
anguloBrazoRep --) {
{ Muneca.write(anguloMunecaRep);
Brazo.write(anguloBrazoRep); delay(15);
delay(15); angulo5=anguloMunecaRep;
angulo4=anguloBrazoRep; } } }
} } } if(jReproducir==5)
if(jReproducir==4) {
{ delay(100);
{ for(anguloPinzaRep=angulo6;
anguloPinzaRep <=
for(anguloMunecaRep=angulo5; MovGuardado[iReproducir][jReproducir];
anguloMunecaRep <= anguloPinzaRep ++)
MovGuardado[iReproducir][jReproducir];
anguloMunecaRep ++) {
{ Pinza.write(anguloPinzaRep);
Muneca.write(anguloMunecaRep); delay(15);
delay(15); angulo6=anguloPinzaRep;
angulo5=anguloMunecaRep; } }
} } Serial.print("Reproduciendo Pinza
posicion: "); Serial.println(iReproducir);
Serial.print("Reproduciendo Muneca
posicion: "); Serial.println(iReproducir);
if(angulo6>MovGuardado[iReproducir][jRep
roducir])
if(angulo5>MovGuardado[iReproducir][jRep
roducir]) {
{ for(anguloPinzaRep=angulo6;
anguloPinzaRep >=
MovGuardado[iReproducir][jReproducir];
anguloPinzaRep --)
{
Pinza.write(anguloPinzaRep); Hombro.write(angulo2);
delay(15); delay(15);
angulo6=anguloPinzaRep; } }
} } } if(anguloHombro<angulo2)
} } {
Serial.println("posicion inicial {
Hombro");
Codo.write(angulo3);
for(angulo2; angulo2 <=
anguloHombro; angulo2 ++) delay(15);
{
} } Serial.println("posicion inicial
Muneca");
if(anguloBrazo>angulo4)
for(angulo5; angulo5 >=
{ anguloMuneca; angulo5 --)
{ {
Serial.println("posicion inicial Pinza.write(angulo6);
Muneca");
delay(15);
for(angulo5; angulo5 <=
anguloMuneca; angulo5 ++) }
{ } }
Muneca.write(angulo5); }
delay(15);
} }
if(anguloMuneca<angulo5)