有人用arduino 摇杆控制 小车边运动边转向吗?
本帖最后由 Iardly 于 2013-2-19 17:02 编辑如题。
在论坛里待了一个多月了,实在是安奈不住了,迫不及待的想自己弄个小车玩玩。
关于小车的控制想了很多,也查了很多。初步的方案是:4WD+摇杆。
参考了很多论坛关于摇杆的控制,有弘毅改造ps2的帖子,还有宜城老张的 “三轮慧鱼车”。
发现一个问题:大家在用摇杆进行控制的时候,方向和动力是分别控制的。即:要么前进,要么后退,要么左转,要么右转。
前、后、左、右几个动作是 时分的。
所以,我就想可不可以:把摇杆推向左前,或者是右后、左后、右前
从而通过一次控制实现 小车 向斜45°方向运行。
预想的实现:
定义:正右为X轴正方向,正前为Y轴正方向。
要求:摇杆推向左前,小车自动左转45度,而后直线前进
伪代码:
if(X<0 并且 Y>0 )
{
右侧两部电机以电压 A驱动;
左侧两粗电机以电压 B驱动; // A>B
delay(500); // 保证小车在前进的过程中,左转45°。
左右两侧四部电机以 相同 电压驱动;//保证小车向前直行。
}
当然具体的电压A 和 B以及delay的时间需要反复调整才能完成配合。
不知道摇杆究竟能否完成这个功能?请高人作答。谢谢先。 最近我也在做小车玩,我是这样实现的,ARDUINO接收电机的方向和速度,由控制端发送需要的参数,这样你想同时进行都可以。并不需要定死方向函数,我个人更喜欢把参数给ARDUINO 他只要去执行就OK. 你可以观察下4WD 的行走方式,原地转左轮和右轮方向相反行走转方向相同一快一慢就行 我个人琢磨的,你可以自己观察下 本帖最后由 wsy0315 于 2013-2-19 21:18 编辑
我给你个我编写的例子,你看看
我是利用调速实现的,
直接上代码吧:
int val1;
int val2;
int val11;
int val22;
int EN1 = 6;
int EN2 = 9;
void motor(char IN1, char IN2, char EN, char state, int val)
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(EN, OUTPUT);
if(state == 1)
{
analogWrite(EN, val);
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
}
else if(state == 2)
{
analogWrite(EN, val);
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
}
else if(state == 0)
{
analogWrite(EN, 0);
digitalWrite(IN1, 0);
digitalWrite(IN2, 0);
}
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
int val11 = analogRead(A1);
val11 = map(val11, 0, 1023, -254, 256);//适配Y轴,应该是255
int val22 = analogRead(A2);
val22 = map(val22, 0, 1023, -249, 261);//适配x轴
val1 = abs(val11) + val22;
val1 = constrain(val1, 0, 255);
val2 = abs(val11) - val22;
val2 = constrain(val2, 0, 255);
if (val1 > 4)//车轮方向转换
{
motor(4, 5, 6, 1, val1);//左轮电机
motor(7, 8, 9, 1, val2);//右轮电机
}
else if (val1 < 4)
{
motor(4, 5, 6, 2, val1);
motor(7, 8, 9, 2, val2);
}
else
{
motor(4, 5, 6, 0, val1);//左轮电机12,13,6
motor(7, 8, 9, 0, val2);//右轮电机7,8,5
}
analogWrite(EN1, val1);//车轮PWM
analogWrite(EN2, val2);
} 其实就是差速运动,可以参考下BOXZ的代码。其中255为全速,数越小速度越慢直至停止
http://www.geek-workshop.com/forum-73-1.html 如果你的小车轮不是通过转向轴控制(本身不能做角度变化),那么一直维持两侧差速转向,其轨迹就是一个圆弧。所以不可能一直沿着45度行进,只能是你把小车转向到大约45度后,仍然用直行的方式控制。
http://www.geek-workshop.com/thread-10868-1-1.html可以看看这个帖子
页:
[1]