Brazo robótico giratorio con 3 motores paso a paso, uno mueve el eje, los otros dos mueven la pluma en cuyo extremo hay una garra controlada por un servo. Un joystick maneja la pluma y el eje, y un potenciometro la garra.
El montaje esta basado en el que aparece en Openlab de Makeblock con alguna pequeña modificación. http://openlab.makeblock.com/topic/57b183382049f5a661751fc3

Video en acción



Se incluye el código para quien pueda ser de interés:
#include "MeMegaPi.h"
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
MeStepperOnBoard Eje(SLOT_1);
MeStepperOnBoard Motor_a(SLOT_2);
MeStepperOnBoard Motor_b(SLOT_3);
MeJoystick joystick(PORT_6);
MePotentiometer Potenciometro (PORT_7);
MePort port(PORT_8);
Servo servo;
int servo_pin = port.pin1(); //controlado por el SLOT1 del PORT8
int x = 0; // variable para el valor X del Joystick
int y = 0; // variable para el valor Y del Joystick
int garra; // lectura del potenciometro
//==================================
void setup() {
Serial.begin(9600);
Motor_a.setMaxSpeed(6000);Motor_b.setMaxSpeed(6000);
Eje.setMaxSpeed(8000);
Motor_a.setAcceleration(3000);Motor_b.setAcceleration(3000);
Eje.setAcceleration(8000);
Motor_a.setCurrentPosition(0);Motor_b.setCurrentPosition(0);
Eje.setCurrentPosition(0);
Motor_a.enableOutputs();Motor_b.enableOutputs();
Eje.enableOutputs();
Motor_a.setMicroStep(4); //(8) como HHL en el driver, para mas precisión (HHH) poner 16
Motor_b.setMicroStep(4);
Eje.setMicroStep(8);
servo.attach(servo_pin);
servo.write(160); // pinza cerrada
delay(500);
servo.write(30); // pinza abierta
delay(500);
servo.write(160); // pinza cerrada
}
//==================================
void loop() {
// --------------- Control del eje
x = joystick.readX();
if(x>350){
Eje.move(-10);
}
else if(x<-350){
Eje.move(10);
}
Eje.run();
// --------------- Control de altura del brazo
y = joystick.readY();
if(y>350){
Motor_a.move(5);
Motor_b.move(-5);
}
else if(y<-350){
Motor_a.move(-5);
Motor_b.move(5);
}
Motor_a.run();
Motor_b.run();
// --------------- Control de la pinza
garra = Potenciometro.read();
if (garra>850){
servo.write(50);
}
else if (garra<150){
servo.write(180);
}
}
Brazo robótico giratorio con 3 motores paso a paso, uno mueve el eje, los otros dos mueven la pluma en cuyo extremo hay una garra controlada por un servo. Un joystick maneja la pluma y el eje, y un potenciometro la garra.
El montaje esta basado en el que aparece en Openlab de Makeblock con alguna pequeña modificación. http://openlab.makeblock.com/topic/57b183382049f5a661751fc3

[Video en acción](https://vimeo.com/194947375 "Vimeo")
--



Se incluye el código para quien pueda ser de interés:
````
#include "MeMegaPi.h"
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
MeStepperOnBoard Eje(SLOT_1);
MeStepperOnBoard Motor_a(SLOT_2);
MeStepperOnBoard Motor_b(SLOT_3);
MeJoystick joystick(PORT_6);
MePotentiometer Potenciometro (PORT_7);
MePort port(PORT_8);
Servo servo;
int servo_pin = port.pin1(); //controlado por el SLOT1 del PORT8
int x = 0; // variable para el valor X del Joystick
int y = 0; // variable para el valor Y del Joystick
int garra; // lectura del potenciometro
//==================================
void setup() {
Serial.begin(9600);
Motor_a.setMaxSpeed(6000);Motor_b.setMaxSpeed(6000);
Eje.setMaxSpeed(8000);
Motor_a.setAcceleration(3000);Motor_b.setAcceleration(3000);
Eje.setAcceleration(8000);
Motor_a.setCurrentPosition(0);Motor_b.setCurrentPosition(0);
Eje.setCurrentPosition(0);
Motor_a.enableOutputs();Motor_b.enableOutputs();
Eje.enableOutputs();
Motor_a.setMicroStep(4); //(8) como HHL en el driver, para mas precisión (HHH) poner 16
Motor_b.setMicroStep(4);
Eje.setMicroStep(8);
servo.attach(servo_pin);
servo.write(160); // pinza cerrada
delay(500);
servo.write(30); // pinza abierta
delay(500);
servo.write(160); // pinza cerrada
}
//==================================
void loop() {
// --------------- Control del eje
x = joystick.readX();
if(x>350){
Eje.move(-10);
}
else if(x<-350){
Eje.move(10);
}
Eje.run();
// --------------- Control de altura del brazo
y = joystick.readY();
if(y>350){
Motor_a.move(5);
Motor_b.move(-5);
}
else if(y<-350){
Motor_a.move(-5);
Motor_b.move(5);
}
Motor_a.run();
Motor_b.run();
// --------------- Control de la pinza
garra = Potenciometro.read();
if (garra>850){
servo.write(50);
}
else if (garra<150){
servo.write(180);
}
}````
editado 9 Dec '16 a las 12:54 pm