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
Esta excelente el articulo. Sigue publicando mas.
ResponderBorrartodo excelente solo me marca un error al compilarlo ya que me dice que la versión no es la misma al programa
ResponderBorrarhola. cual programa te da error, el de arduino o el de qt? que error te da?... que version de QT/Arduino usas?....
Borrarsaludos
Este comentario ha sido eliminado por el autor.
ResponderBorrar