Hi!
I have a project: omniwheel 4WD car with stepper motors. I use library AH_EasyDriver for controlling steppers. I want to control those motors with three parameters: X axis speed (Xm), Y axis speed (Ym) and rotating speed (fi).
#include <AH_EasyDriver.h>
#include <Math.h>
// AH_EasyDriver(int RES, int DIR, int STEP, int MS1, int MS2, int SLP);
AH_EasyDriver stepper1(200,2,3,4,5,6);
AH_EasyDriver stepper3(200,7,8,9,10,11);
AH_EasyDriver stepper2(200,22,23,24,25,26);
AH_EasyDriver stepper4(200,27,28,29,30,31);
void setup()
{
Serial.begin(57600);
Serial.println(stepper1.getVersion());
stepper1.setMicrostepping(0); // 0 -> full stepping 1 -> 1/2 stepping 2 -> 1/4 stepping 3 -> 1/8 stepping
Serial.println(stepper2.getVersion());
stepper2.setMicrostepping(0);
Serial.println(stepper3.getVersion());
stepper3.setMicrostepping(0);
Serial.println(stepper4.getVersion());
stepper4.setMicrostepping(0);
}
void loop()
{
//speed calculating
float Pi= 3.1416;
float Xm= 15.0; //speed X smer
float Ym= 0.0; //speed Y smer
float fi= 0.0; //rotating
int koraki = 200; //number of steps for one rpm
float r = 0.029; //wheel radius
float l = 0.09; //width
float d = 0.09; //length
float obseg= 2*r*Pi;
float v1= (Xm - Ym - (l+d)*fi)/sqrt(2); //1 motor speed
float v2= (Xm + Ym - (l+d)*fi)/sqrt(2); //2 motor speed
float v3= (Xm - Ym + (l+d)*fi)/sqrt(2); //3 motor
float v4= (Xm + Ym + (l+d)*fi)/sqrt(2); //4 motor
float obrati1 = v1 / obseg; //obrati prvega kolesa
float obrati2 = v2 / obseg; //obrati drugega kolesa
float obrati3 = v3 / obseg; //obrati tretjega kolesa
float obrati4 = v4 / obseg; //obrati četrtega kolesa
Serial.print(obrati1,4);
Serial.print("\t");
Serial.print(obrati2,4);
Serial.print("\t");
Serial.print(obrati3,4);
Serial.print("\t");
Serial.print(obrati4,4);
Serial.print("\n");
if(Xm==0.0 && Ym==0.0 && fi==0.0)
{
stepper1.sleepON();
stepper2.sleepON();
stepper3.sleepON();
stepper4.sleepON();
}
else if(Xm != 0.0 || Ym!=0.0 ||fi!=0.0)
{
stepper1.sleepOFF();
stepper2.sleepOFF();
stepper3.sleepOFF();
stepper4.sleepOFF();
}
//MOTOR1
if(obrati1<0)
{
stepper1.move(FORWARD);
}
else if (obrati1>0)
{
stepper1.move(-FORWARD);
}
stepper1.setSpeedRPM(obrati1); // RPM
///MOTOR2
if(obrati2<0)
{
stepper2.move(FORWARD);
}
else if (obrati2>0)
{
stepper2.move(-FORWARD);
}
stepper2.setSpeedRPM(obrati2); // RPM
//MOTOR3
if(obrati3<0)
{
stepper3.move(-FORWARD);
}
else if (obrati3>0)
{
stepper3.move(FORWARD);
}
stepper3.setSpeedRPM(obrati3); // RPM
//MOTOR4
if(obrati4<0)
{
stepper4.move(-FORWARD);
}
else if (obrati4>0)
{
stepper4.move(FORWARD);
}
stepper4.setSpeedRPM(obrati4); // RPM
}
In this code, every motor is individually controlled. But I get same speed on all wheels if I input more than one parameter. Any advice?