软件-蹄飞 发表于 2013-4-23 21:40:23

APC通信 控制小车 程序怎么写?


玩arduino 也不久,就弄了个小车学习学习
我这个小车4电机单独控制4个轮子,我把左边的两个电机接在一起,右边也一样。
现在传感器还没安装。我的思路是:先用方向杆(见下图)控制它要行使的方向,油门杆来控制速度;但是结果和理想的不一样,请大家来看看


                                                            这是我小车的APC无线模块

                                                      我的小车
                                                                           
                                                                        
                                 小车前部的板子是用来保护传感器的

                                                                                 
                                                                      我自己做的遥控器其中中间红色的是http://image.geek-workshop.com/forum/201108/30/175610eeebcg8p7256iggm.jpg
                                                                        
http://image.geek-workshop.com/forum/201108/30/175611z8r833h3prlermo8.jpg
                                                            
                                                       遥控器的反面
小车的程序:
int Speed;
void goStraight(int Speed)
{
analogWrite(8,Speed);
digitalWrite(9,LOW);
analogWrite(10,Speed);
digitalWrite(11,LOW);
}
void turnLeft(int Speed)
{
analogWrite(8,Speed);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
analogWrite(11,Speed);
}
void turnRight(int Speed)
{
digitalWrite(8,LOW);
analogWrite(9,Speed);
digitalWrite(10,Speed);
analogWrite(11,LOW);
}
void Stop()
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
void goBreak(int Speed)
{
digitalWrite(8,LOW);
analogWrite(9,Speed);
digitalWrite(10,LOW);
analogWrite(11,Speed);
}
int comtemp;
void setup()
{
pinMode(8,OUTPUT);//定义控制小车行走管脚
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
Serial.begin(9600);
}
void loop()
{
if(Serial.available())
    {
      comtemp=Serial.read();
      switch(comtemp)
      {
      case 'g':
          {
            goStraight(comtemp);
            Serial.println("goStrigh");
            break;
          }
      case 'b':
          {
            goBreak(comtemp);
            Serial.println("goBack");
            break;
          }
      case's':
          {
            Stop();
             Serial.println("goStop");
            break;
          }
         case 'l':
         {
            turnLeft(comtemp);
             Serial.println("turnLeft");
            break;
            }
      case'r':
            {
            turnRight(comtemp);
             Serial.println("turnRigh");
            break;
            }
      }
    }
}

遥控器的程序:
int xpotPin = A4;
int ypotPin = A3;         
int gopotPin = A5;

int xval=0;
int yval=0;
int goval=0;


void setup()
{
   Serial.begin(9600);

}

void loop ()                     
{

xval = analogRead(xpotPin);
yval = analogRead(ypotPin);
goval = analogRead(gopotPin);

    if(xval<=500)
    {
    Serial.print("l");
    Serial.print(goval*0.225);
    }
    if(xval>=600)
    {
      Serial.print("r");
      Serial.print(goval*0.255);
    }
      if(yval<=500)
    {
    Serial.print("g");
    Serial.print(goval*0.225);
    }
    if(yval>=600)
    {
      Serial.print("b");
      Serial.print(goval*0.255);
    }
   }
         不知道为什么不能控制速度
       请大家看看,指点指点,感激不尽                                          
         


Fortware 发表于 2013-4-24 09:41:45

LZ有钱啊。。。。

darkorigin 发表于 2013-4-26 11:09:07

弱弱的告诉你说.其实,你的驱动方式都是错的
汽车的驱动方式有转向轮和驱动轮2部分组成
转向轮的2个轮子可以调整方向,驱动轮进行驱动
一般常见的轿车都是前轮驱动,前轮转向 (也就是说前轮可以左右各旋转60度)并且由于发动机前置通过传动轴将动力传导到前轮.
四驱车的方向调整相同,传动是分配到4个轮子.

darkorigin 发表于 2013-4-26 11:35:04

你实现的话,其实有一个简单的方式,就是把前面2个驱动电机通过机构安装在脱机上,9G的舵机基本上就能搞定.
这样程序也简单,至少你不需要计算什么左转需要右轮高于左轮多少的转速.

darkorigin 发表于 2013-4-26 11:35:43

转向也可以用线性的方式控制, 类似与真实的车辆的运转方式.

软件-蹄飞 发表于 2013-4-26 22:31:00

darkorigin 发表于 2013-4-26 11:09 static/image/common/back.gif
弱弱的告诉你说.其实,你的驱动方式都是错的
汽车的驱动方式有转向轮和驱动轮2部分组成
转向轮的2个轮子可 ...

我的这辆车。是4个电机独立的,一个电机控制一个轮。我是把左边的两个电机并联。右边的电机也是如此。就如坦克的运动原理是一样的。如果改用你的思路,那么在车体的结构上的改动太大了,感觉不是很划算,如果以坦克的运动方式的话,我用pwm控制左右电机的转速就可以实现“差速”转弯。我也这样试过了,效果还不错,如果采用现实中的车运动的话,可以采用想瑞萨,或是飞思卡尔的车模。他们是用舵机来控制前轮转向的,
不过还是谢谢你的建议
页: [1]
查看完整版本: APC通信 控制小车 程序怎么写?