Iardly 发表于 2013-2-19 16:59:01

有人用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的时间需要反复调整才能完成配合。

不知道摇杆究竟能否完成这个功能?请高人作答。谢谢先。

quqianghao 发表于 2013-2-19 20:06:59

最近我也在做小车玩,我是这样实现的,ARDUINO接收电机的方向和速度,由控制端发送需要的参数,这样你想同时进行都可以。并不需要定死方向函数,我个人更喜欢把参数给ARDUINO 他只要去执行就OK.

quqianghao 发表于 2013-2-19 20:09:46

你可以观察下4WD 的行走方式,原地转左轮和右轮方向相反行走转方向相同一快一慢就行 我个人琢磨的,你可以自己观察下

wsy0315 发表于 2013-2-19 21:13:30

本帖最后由 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);
}

幻生幻灭 发表于 2013-2-20 08:34:11

其实就是差速运动,可以参考下BOXZ的代码。其中255为全速,数越小速度越慢直至停止
http://www.geek-workshop.com/forum-73-1.html

沧海笑1122 发表于 2014-4-14 10:56:22

如果你的小车轮不是通过转向轴控制(本身不能做角度变化),那么一直维持两侧差速转向,其轨迹就是一个圆弧。所以不可能一直沿着45度行进,只能是你把小车转向到大约45度后,仍然用直行的方式控制。

冰风 发表于 2014-9-2 09:50:36

http://www.geek-workshop.com/thread-10868-1-1.html可以看看这个帖子
页: [1]
查看完整版本: 有人用arduino 摇杆控制 小车边运动边转向吗?