Hi, I've write this code for a robot arm with 4 stepper and 3 servo:
1 NEMA23
3 NEMA17
3 MG996R
All of these are connected with a 24V external PS and a 5V PS.
#include <MobaTools.h>
#include <Servo.h>
#include <AccelStepper.h>
#define dirPin 5
#define stepPin 2
#define motorInterfaceType 1
byte ang1A = 65;
byte ang2A = 50;
byte ang3A = 10;
byte ang1R = 140;
byte ang2R = 120;
byte ang3R = 105;
int time1 = 500;
int time2 = 200;
int val;
long steppos1 = 130;
long steppos2 = 500;
long steppos3 = 500;
long steppos4 = 500;
const byte enablePin = 8; // for my CNC shield stepper enable
const byte servoPin1 = 9;
const byte servoPin2 = 10;
const byte servoPin3 = 11;
// Define stepper motor
AccelStepper StepperX = AccelStepper(motorInterfaceType, stepPin, dirPin);
MoToStepper StepperY(steppos1, STEPDIR); //Braccio 2 rotazione
MoToStepper StepperZ(steppos2, STEPDIR); //braccio 2
MoToStepper StepperA(steppos3, STEPDIR); //Base
// MoToStepper StepperA(steppos, STEPDIR);
// DEFINISCO I SERVO
Servo servo1; //Servo pinza
Servo servo2; //Servo rotazione testina
Servo servo3; //Servo 180 iniziale
void setup() {
//Define Pin Stepper
pinMode(enablePin, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
//Define servo pin
servo1.attach(servoPin1);
servo2.attach(servoPin2);
servo3.attach(servoPin3);
//Define servo initial angle
servo1.write(ang1R);
servo2.write(ang2R);
servo3.write(ang3R);
//Define stepper motor
StepperY.attach(3, 6);
StepperZ.attach(4, 7);
StepperA.attach(12, 13);
StepperX.setMaxSpeed(50000);
StepperX.setAcceleration(1600);
StepperY.setSpeed(600);
StepperZ.setSpeed(600);
StepperA.setSpeed(600);
}
void loop() {
if (Serial.available()) {
val = Serial.read();
//ANDATA
if (val == 'y') {
Serial.println('y');
StepperX.moveTo(-steppos4);
StepperX.runToPosition();
StepperZ.doSteps(-steppos2);
StepperA.doSteps(steppos3);
delay(time1);
StepperY.doSteps(-steppos1);
delay(time2);
// SERVOMOTORI
servo2.write(ang2A);
delay(time1);
servo3.write(ang3A);
delay(time1);
servo1.write(ang1A);
delay(2000);
}
//RITORNO
if (val == 'b') {
Serial.println('y');
StepperX.moveTo(0);
StepperX.runToPosition();
StepperA.doSteps(-steppos3);
delay(time1);
StepperY.doSteps(steppos1);
delay(time2);
StepperZ.doSteps(steppos2);
// SERVOMOTORI
servo2.write(ang2R);
delay(time1);
servo3.write(ang3R);
delay(time1);
servo1.write(ang1R);
delay(time1);
}
}
}
My question is, can I move for example two of these motor simultaneos? Like while A motor go right B motor go left.
I drive that motor with an arduino 1 with a cnc shield V3.0, Driver DM556 for NEMA23 and A4988 for NEMA17.
Thank you so much