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

584a7f5419c6e.jpg

Video en acción

584a80b791f8b.jpg

584a81c658ce1.jpg

584a824781026.png

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 ![584a7f5419c6e.jpg](serve/attachment&path=584a7f5419c6e.jpg) [Video en acción](https://vimeo.com/194947375 "Vimeo") -- ![584a80b791f8b.jpg](serve/attachment&path=584a80b791f8b.jpg) ![584a81c658ce1.jpg](serve/attachment&path=584a81c658ce1.jpg) ![584a824781026.png](serve/attachment&path=584a824781026.png) 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
2.72k
vistas
0
respuestas
1
seguidores
vista previa (en vivo)
introduzca al menos un 10 caracteres
Advertencia: Mencionaste a %MENTIONS%, pero ellos no pueden ver el mensaje y no serán notificados
Guardando...
Guardado
Todos los posteos de este tema serán borrados ?
Borrador pendiente ... Click para continuar editando
Descartar borrador