DIY robot Omni hjul (7 / 8 steg)
Steg 7: Arduino koden
Koden kan kopieras direkt från här:
/*********************************************************************/
Författare: DFRobot-kod-Kelvin
Kontroll-protokoll: x 100-y100-w100
X Direction:100 mm/s
Y riktning: 100 mm/s
rotation till vänster: 100 mm/s
/*********************************************************************/
#include
Double AcceleratedSpeed = 400, whieelAcceleratedSpeed = 500. / /
Dubbelrum Step=0.03;//15*3.14/200/16
int xPul = 25,
xDir = 23,
xEnable = 27,
yPul = 31,
yDir = 33,
yEnable = 29,
zPul = 37,
zDir = 39,
zEnable = 35,
km_1 = 8;
Metro _Serial_=Metro(20);
dubbla xspeed, yspeed, zspeed;
statiska dubbel xSpeed, ySpeed, hjul.
långa x_t, y_t, z_t;
void setup() {
sätta din installation kod här, om du vill köra en gång:
Serial3.BEGIN(115200);
pinMode(8,OUTPUT);
pinMode(xPul,OUTPUT);
pinMode(xDir,OUTPUT);
pinMode(yPul,OUTPUT);
pinMode(yDir,OUTPUT);
pinMode(zPul,OUTPUT);
pinMode(zDir,OUTPUT);
pinMode(xEnable,OUTPUT);
pinMode(yEnable,OUTPUT);
pinMode(zEnable,OUTPUT);
digitalWrite(xEnable,LOW);
digitalWrite(yEnable,LOW);
digitalWrite(zEnable,LOW);
digitalWrite(km_1,HIGH);
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
statiska lång t;
IF(_Serial_.check()==1)
{
Serial();
Speed(xSpeed,ySpeed,AcceleratedSpeed);
Wheel(Wheel);
IF(xspeed!=0)
x_t=int(Step/ABS(xspeed)*1000000);
IF(yspeed!=0)
y_t=int(Step/ABS(yspeed)*1000000);
IF(zspeed!=0)
z_t=int(Step/ABS(zspeed)*1000000);
IF(xspeed>0)
digitalWrite(xDir,HIGH);
annat
digitalWrite(xDir,LOW);
IF(yspeed>0)
digitalWrite(yDir,HIGH);
annat
digitalWrite(yDir,LOW);
IF(zspeed>0)
digitalWrite(zDir,LOW);
annat
digitalWrite(zDir,HIGH);
}
xMove(xspeed);
yMove(yspeed);
zMove(zspeed);
}
void serial()
{
IF(Serial3.available()==0) avkastning.
char buf=Serial3.read();
Switch(BUF)
{
fall 120: / / x
xSpeed=Serial3.parseInt();
bryta;
fall 121: / / y
ySpeed=Serial3.parseInt();
bryta;
mål 119: / / w
Wheel=Serial3.ParseDouble();
bryta;
}
}
Annullera hastighet (dubbel XSpeed, dubbla YSpeed, dubbla en)
{
statiska dubbel S_XSpeed = 0, S_YSpeed = 0;
om (XSpeed > S_XSpeed)
{
S_XSpeed = S_XSpeed + en * 0,02;
IF(S_XSpeed>XSpeed)
{
S_XSpeed = XSpeed;
}
}
annat {
S_XSpeed = S_XSpeed-en * 0,02;
IF(S_XSpeedS_YSpeed)
{
S_YSpeed = S_YSpeed + en * 0,02;
IF(S_YSpeed>YSpeed)
{
S_YSpeed = YSpeed;
}
}
annat {
S_YSpeed = S_YSpeed-en * 0,02;
IF(S_YSpeedwheelspeed)
{
wheelspeed = wheelspeed + whieelAcceleratedSpeed * 0,02;
IF(_wheelwheelspeed)
{
wheelspeed = _wheel;
}
}
xspeed = xspeed + wheelspeed;
yspeed = yspeed + wheelspeed;
zspeed = zspeed-wheelspeed;
}
void xMove(double xs)
{
statiska lång x_time=micros();
IF(XS!=0)
{
om (micros ()-x_time > = x_t)
{
digitalWrite(xPul,HIGH);
digitalWrite(xPul,LOW);
x_time=Micros();
}
}
}
void yMove(double ys)
{
statiska lång y_time=micros();
IF(ys!=0)
{
om (micros ()-y_time > = y_t)
{
digitalWrite(yPul,HIGH);
digitalWrite(yPul,LOW);
y_time=Micros();
}
}
}
void zMove(double zs)
{
statiska lång z_time=micros();
IF(ZS!=0)
{
om (micros ()-z_time > = z_t)
{
digitalWrite(zPul,HIGH);
digitalWrite(zPul,LOW);
z_time=Micros();
}
}
}