Control de brazo robótico MeArm via Serial con programa en QT
Sebastian Wolter
16-10-2015
Buenos días con todos.
Este es mi primera publicación, por lo tanto es muy especial en ese sentido y por lo mismo espero ser claro en la explicación y poder ayudar a todos los aficionados a la robótica y programación que estén dando sus primeros pasos.
El dia de hoy les presento un sencillo programa realizado con el ide QT y programado con C++ para controlar via puerto serial el MeARM.
Las instrucciones de ensamblado del MeARM así como su fuente las pueden encontrar en:
Instructables - MeARM
Una vez armado y ajustado correctamente el brazo robotico, vamos a conectarlo a nuestra placa arduino, en mi caso, un arduino UNO.
La siguiente grafica muestra la conexion realizada entre el brazo y la placa:
El servo de la base se conecta al pin 11
El servo del lado izquierdo se conecta al pin 10
El servo del lado derecho se conecta al pin 9
El servo de la pinza se conecta al pin 6
También se puede hacer el uso de un sensor shield para el arduino, para facilitar la conexión, si es que lo disponen.
Una vez conectado todo, vamos a cargar el sketch a nuestro arduino, el código del sketch es el siguiente:
#include <Servo.h>
//MeArm HAS 4 SERVOS
Servo xServo; // create servo object, arm base servo - left right motion
Servo yServo; // create servo object, left side servo - forward backwards motion
Servo zServo; // create servo object, right side servo - forward backwards motion
Servo clawServo; // create servo object, end of arm srevo - open,close the claw hand
//servo positions values, expects 1-180 deg.
int xPos;
int yPos;
int zPos;
int clawPos;
//*************** INIT AT STARTUP *******************************************************************
void setup() { // the setup function runs once when you press reset or power the board
// assign servo to pin numbers
xServo.attach(11); // attaches the servo on pin 11 to the servo object
yServo.attach(10); // attaches the servo on pin 10 to the servo object
zServo.attach(9); // attaches the servo on pin 9 to the servo object
clawServo.attach(6); // attaches the servo on pin 6 to the servo object
// initialize serial port
Serial.begin(9600);
// Debug only send serial message to host com port terminal window in Arduino IDE
//Serial.print("*** MeCom Test V04 ***."); // send program name, uncomment for debug connection test
xServo.write(90);
yServo.write(90);
zServo.write(90);
clawServo.write(90);
}
// ******************************************************************************************************
// ********************************** MAIN PROGRAM LOOP START *******************************************
// ******************************************************************************************************
void loop() {
//serial in packet patern = xVal,yVal,zVal,clawVal + end of packet char 'x'
while (Serial.available() > 0) {
xPos = Serial.parseInt();
yPos = Serial.parseInt();
zPos = Serial.parseInt();
clawPos = Serial.parseInt();
if (Serial.read() == 'x') { // Detect end of packet char 'x', go ahead and update servo positions
// UPDATE SERVO POSITIONS
xServo.write(xPos);
yServo.write(yPos);
zServo.write(zPos);
clawServo.write(clawPos);
}
}
}
Enlace del sketch: sketch ino
El sketch de arduino no es de mi autoría y debo decirlo lo adquirí con un kit de brazo robótico MeARM comprado a través de amazon.
El programa espera recibir via serial una cadena conformada de la siguiente manera:
xPos,yPos,zPos,clawPosx
Que podría ser:
90,90,90,40x
El ultimo caracter 'x' indica al programa que es el fin de la cadena y que escriba los datos correspondientes a cada uno de los servos.
En mi caso, la pinza abre y cierra perfectamente entre 10 y 40 grados, es por ello, que podriamos modificar la siguiente linea del sketch:
clawServo.write(90);
Y ponerla de acuerdo a los limites de nuestro propio brazo asi:
clawServo.write(40);
En mi caso, 40 seria la posicion cerrada de la pinza. Los demas servos con un valor incicial de 90 (centro) estarian bien.
El paso final, es cargar el programa en el ide QT y compilarlo. Yo use el IDE QT con el compilador MinGW (gc++), la siguiente version:
que se lo pueden descargar de aqui ->
http://www.qt.io/download-open-source/#section-2
Una vez instalado QT, abrimos el proyecto:
codigo fuente proyecto QT
El programa tiene sliders para manejar la base, servos izquierdo y derecho asi como para la pinza.
Como mencione anteriormente, en mi caso particular, la pinza se abre y cierra completamente desde los 10 hasta los 40 grados de giro del servo, por lo tanto el programa esta con esos parámetros, pero pueden ser cambiados a gusto.
Una vez compilado el programa, al ejecutarlo:
Recuerden tener conectada la placa arduino via puerto serial al PC, el programa buscara ls puertos COM y se podra conectar a la placa arduino.
El programa esta aun en desarrollo, pero ya tiene completamente funcionales las opciones basicas de manejo del brazo robotico, ademas de poder guardar y abrir archivos con rutas de movimientos y reproducirlas en forma automatica.
Espero les sea de utilidad.......
Sebastian Wolter
Octubre 2015