control de un brazo robotico SCORBOT ER-III a traves de bluetooth con un dispositivo android.
Revision 4:ceef4dee8284, committed 2017-09-04
- Comitter:
- javierjsp
- Date:
- Mon Sep 04 17:57:54 2017 +0000
- Parent:
- 3:0b3d5b1850aa
- Child:
- 5:ae0bdb3aad14
- Commit message:
- version final presentada con posiciones guardadas y la cinta, la sonda y el calefactor incluidos.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Jun 16 17:06:29 2017 +0000
+++ b/main.cpp Mon Sep 04 17:57:54 2017 +0000
@@ -25,10 +25,14 @@
DigitalIn mp3(PB_10, PullUp);
DigitalIn mp4(PB_4, PullUp);
DigitalIn mp5(PB_5, PullUp);
+
+// Declaramos los pines del sensor, la sonda y el calefactor
DigitalIn sensor(PB_3, PullUp);
+AnalogIn sonda(PF_10);
+PwmOut calef(PE_10);
// declaramos el bluetooth
-Serial bt(PA_2, PA_3); // (RX, TX) (puerto serial 2)
+Serial bt(PA_2, PA_3); // (TX, RX) (puerto serial 2)
// declaramos otras variables que utilizaremos
Ticker ticker1; // iniciamos un ticker
@@ -36,10 +40,13 @@
DigitalOut led2 (LED2); // declaramos el LED2
DigitalOut led3 (LED3); // declaramos el LED3
int pulsos[6]={0,0,0,0,0,0}; // iniciamos el array pulsos
-int posiciones[10][6]={{0,0,0,0,0,0},{0,250,50,1004,80,100},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}, // sustituye aqui los valores por los de los encoders y deja el primer valor de cada posicion a 0
- {0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}}; // declaramos los arrays de posiciones
+int posiciones[20][6]={{0,0,0,0,0,0},{0,-3200,0,0,0,0},{0,-3200,1820,1396,0,0},{0,0,1661,1117,0,0},{0,3000,2050,1200,0,0}, // declaramos los arrays de posiciones
+ {0,3000,0,0,0,0},{0,5200,0,0,0,0},{0,5200,2100,2000,0,0},{0,0,0,0,0,0},{0,-1988,-900,-400,396,-395}, // sustituye aqui los valores por los de los encoders
+ {0,-1700,737,819,-53,-835},{0,-713,1690,1616,180,-955},{0,240,953,-2014,-1540,-2247},{0,950,65,-3970,863,-2050},{0,2200,1040,240,-348,-836}, // y deja el primer valor de cada posicion a 0
+ {0,2150,1370,-2066,-200,-980},{0,3150,1370,-2066,1893,1116},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
char dato=0;
float V=1;
+float t=0;
// declaramos el prototipo de las funciones que utilizaremos
void enviar_bt(); // prototipo de la funcion que ejecutara el ticker1
@@ -49,21 +56,26 @@
void frenar(int); // prototipo de la funcion que frenara cada motor
void pinza(int); // prototipo de la funcion que abrira (-1) o cerrara (1) la pinza
void movCinta(); // prototipo de la funcion que avanzara la cinta hasta detectar un objeto
+void calefactor(); // prototipo de la funcion que controlara el calefactor
float map(float,float,float,float,float); // prototipo de la funcion que hace una redimension de los parametros
int main()
{
- m1.period(0.001); // establece el periodo del PWM, equivalente a una frecuencia de 1KHz.
+ m1.period(0.001); // establece el periodo del PWM de los motores, equivalente a una frecuencia de 1KHz.
m2.period(0.001);
m3.period(0.001);
m4.period(0.001);
m5.period(0.001);
m6.period(0.001);
+ calef.period(1); // establece el periodo del PWM
+ calef.write(0.05); // establece el ciclo de trabajo al 10%
+
bt.baud(9600); // velocidad de transmision del bluetooth a 9600 baudios
- ticker1.attach(&enviar_bt, 0.5); // asignamos la funcion "enviar_bt" al protocolo de interrupcion del "ticker1" y le damos un intervalo de 0.2s
-
+ ticker1.attach(&enviar_bt, 0.5); // asignamos la funcion "enviar_bt" al protocolo de interrupcion del "ticker1" y le damos un intervalo de 0.5s
+
+ wait(5);
sethome(); // establecemos la posicion de referencia
while(1)
@@ -148,16 +160,46 @@
posicion(4);
break;
case 'R': // si el caracter es R se mueve a la posicion 5
- posicion(5);
+ sethome();
break;
case 'S': // si el caracter es S se mueve a la posicion 6
- posicion(6);
+ posicion(1);
+ posicion(2);
+ pinza(1);
+ posicion(0);
+ posicion(3);
+ pinza(-1);
+ posicion(0);
break;
case 'T': // si el caracter es T se mueve a la posicion 7
+ posicion(1);
+ posicion(2);
+ pinza(1);
+ posicion(0);
+ posicion(5);
+ posicion(4);
+ calefactor();
+ posicion(5);
+ posicion(6);
posicion(7);
+ pinza(-1);
+ posicion(6);
+ posicion(0);
break;
case 'U': // si el caracter es U se mueve a la posicion 8
- posicion(8);
+ posicion(9);
+ posicion(10);
+ posicion(11);
+ posicion(12);
+ pinza(1);
+ posicion(13);
+ posicion(14);
+ pinza(-1);
+ posicion(15);
+ posicion(16);
+ pinza(1);
+ posicion(0);
+ pinza(-1);
break;
case 'V': // si el caracter es V se mueve a la posicion 9
posicion(9);
@@ -179,27 +221,29 @@
pulsos[3]=enc3.getPulses();
pulsos[4]=enc4.getPulses();
pulsos[5]=enc5.getPulses();
- bt.printf(" pulsos encoder 1:%d\n pulsos encoder 2:%d\n pulsos encoder 3:%d\n pulsos encoder 4:%d\n pulsos encoder 5:%d\n", pulsos[1],pulsos[2],pulsos[3],pulsos[4],pulsos[5]); // envia los valores del array "pulsos" por bluetooth
+ t= map(sonda.read(),0,1,-10,50);
+ bt.printf(" pulsos encoder 1:%d\n pulsos encoder 2:%d\n pulsos encoder 3:%d\n pulsos encoder 4:%d\n pulsos encoder 5:%d\n temperatura de la sonda:%.2f\n ", pulsos[1],pulsos[2],pulsos[3],pulsos[4],pulsos[5],t); // envia los valores del array "pulsos" por bluetooth
}
void sethome()
{
led2=1;
+
// posicionar base
int enc=0;
int dir=-1; // mover primero hacia delante
while (mp1==1) // Mientras no se pulse el microswitch
{
enc=enc1.getPulses(); // leemos el contador del encoder
- mover(1,dir,1); // movemos el motor en la dirección inicial
- wait(0.01); // esperamos 0.01s
+ mover(1,dir,1); // movemos el motor en la dirección inicial
+ wait(0.05); // esperamos 0.01s
if (enc==enc1.getPulses()) // Si el contador no se ha incrementado, hemos llegado al extremo
{
if (dir==-1)
dir=1; // cambiamos la dirección
else if (dir==1)
dir=-1;
- } // se cambia la dirección del motor
+ } // se cambia la dirección del motor
}
frenar(1); // el motor ha llegado a la posicion adecuada y se frena
@@ -208,13 +252,13 @@
while (dir==-1) // mientras la direccion sea hacia delante:
{
while (mp2==0) // Mientras se mantenga pulsado el boton
- mover(2,dir,1); // se seguira moviendo el motor en la direccion inicial
+ mover(2,dir,1); // se seguira moviendo el motor en la direccion inicial
dir=1; // se cambia a direccion
while (mp2==1) // Mientras el MP esté sin pulsar:
{
enc=enc2.getPulses(); // leemos el valor de los encoders
- mover(2,dir,1); // movemos el motor
- wait(0.01); // esperamos 0.01s
+ mover(2,dir,1); // movemos el motor
+ wait(0.05); // esperamos 0.01s
if(enc==enc2.getPulses()) // Si el contador no ha cambiado
{
if (dir==-1)
@@ -227,16 +271,16 @@
frenar(2); // el motor ha llegado a la posicion adecuada y se frena
// posicionar antebrazo
- dir=-1; // mover primero hacia delante
- while (dir==-1) // mientras la direccion sea hacia delante:
+ dir=-1; // mover primero hacia delante
+ while (dir==-1) // mientras la direccion sea hacia delante:
{
while (mp3==0) // Mientras se mantenga pulsado el boton
- mover(3,dir,1); // se seguira moviendo el motor en la direccion inicial
- dir=1; // se cambia a direccion
+ mover(3,dir,1); // se seguira moviendo el motor en la direccion inicial
+ dir=1; // se cambia a direccion
while (mp3==1) // Mientras el MP esté sin pulsar:
{
enc=enc3.getPulses(); // leemos el valor de los encoders
- mover(3,dir,1); // movemos el motor
+ mover(3,dir,1); // movemos el motor
wait(0.01); // esperamos 0.01s
if(enc==enc3.getPulses()) // Si el contador no ha cambiado
{
@@ -250,16 +294,16 @@
frenar(3); // el motor ha llegado a la posicion adecuada y se frena
// posicionamiento del giro de la muñeca
- dir=-1; // mover primero hacia delante
- while (dir==-1) // Mientras que la dirección del motor sea 1:
+ dir=-1; // mover primero hacia delante
+ while (dir==-1) // Mientras que la dirección del motor sea 1:
{
while (mp4==0) // Mientras el MP esté pulsado
- mover(14,dir,1); // movemos los motores 4 y 5
+ mover(14,dir,1); // movemos los motores 4 y 5
dir=1;
while (mp4==1) // Mientras el MP esté sin pulsar:
{
enc=enc5.getPulses(); // leemos el valor del los encoders
- mover(14,dir,1); // movemos los motores
+ mover(14,dir,1); // movemos los motores
wait(0.01); // esperamos 0.01s
if(enc==enc5.getPulses()) // Si el contador no ha cambiado
{
@@ -270,15 +314,18 @@
}
}
}
- frenar(14); // la muñeca ha llegado a la posicion adecuada y se frenan los motores
+ frenar(14); // la muñeca ha llegado a la posicion adecuada y se frenan los motores
// posicionamiento de la rotacion de la muñeca
while (mp5==1) // Mientras no se pulse el MS
{
- mover(15,1,1); // se mueven los motores 4 y 5
+ mover(15,1,1); // se mueven los motores 4 y 5
wait(0.01); // esperamos 0.01s
}
- frenar(15); // frenamos los motores
+ frenar(15); // frenamos los motores
+ mover(15,1,1); // giramos la pinza para que quede perpendicular al eje
+ wait(0.25);
+ frenar(15);
pinza(-1); // abrimos la pinza
@@ -372,11 +419,11 @@
case 6: // en caso de que el valor sea 6 movemos el motor 6 (pinza)
m6.speed(dir*v);
break;
- case 14: // en caso de que el valor sea 14 movemos el motor 4 en un sentido y el 5 en el otro (girar muñeca)
+ case 14: // en caso de que el valor sea 14 movemos el motor 4 en un sentido y el 5 en el otro (girar muñeca)
m4.speed((-1)*dir*v);
m5.speed(dir*v);
break;
- case 15: // en caso de que el valor sea 15 movemos los motores 4 y 5 en el mismo sentido (rotar muñeca)
+ case 15: // en caso de que el valor sea 15 movemos los motores 4 y 5 en el mismo sentido (rotar muñeca)
m4.speed(dir*v);
m5.speed(dir*v);
}
@@ -431,11 +478,11 @@
case 6: // en caso de que el valor sea 6 frenamos el motor 6
m6.brake();
break;
- case 14: // en caso de que el valor sea 4 frenamos los motores 4 y 5
+ case 14: // en caso de que el valor sea 4 frenamos los motores 4 y 5
m4.brake();
m5.brake();
break;
- case 15: // en caso de que el valor sea 5 frenamos los motores 4 y 5
+ case 15: // en caso de que el valor sea 5 frenamos los motores 4 y 5
m4.brake();
m5.brake();
}
@@ -445,4 +492,12 @@
while (sensor==1) // mientras el sensor no se active:
cinta.speed(1); // avanza la cinta
cinta.brake(); // cuando se ectiva la cinta se para el sensor
-}
\ No newline at end of file
+}
+
+void calefactor()
+{
+ while (map(sonda.read(),0,1,-10,50) > 40)
+ calef.write(1);
+ calef.write(0);
+}
+