mybag1 发表于 2014-3-13 21:11:26

自己做的小车转弯有点问题

自己做了个蓝牙小车,小车前进后退都没有问题,但是转弯转不动,是电力问题,还是后面万向轮的问题,一直没想明白,请各位帮帮忙。

小车用的是网上购买的底盘,加了一个L298驱动模块,一个蓝牙模块,一个超声波模块。
连接方法:
arduino uno板子
1、L298:该模块的IN1、IN2、IN3、IN4分别连接arduino的12、11、10、9接口,电源12V口接arduino的5V,GND接地。
2、蓝牙模块:RXD接TX,TXD接RX,GND接地,VCC接5V。
3、超声波模块:VCC接5V,GND接地,trig接5口,Echo接6口。
代码:
char getstr;
int in1=12;
int in2=11;
int in3=10;
int in4=9;
//上面定义了板上的4个控制端,12一组,34一组
int TrigPin = 5;
int EchoPin = 6;
float cm;
int i=0;//记录测量次数,每5次取一下平均值
float cmsum;//计算5次总值
float cmeve;//计算5次平均值

void _mRun(int pin1,int pin2)//电机右转,电机到底是右转还是左转取决于电机端的接线和控制脚的顺序
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,LOW);
}
void _mBack(int pin1,int pin2)//同上
{
digitalWrite(pin1,LOW);
digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//紧急制动,实际就是将电机两个端短接了
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,HIGH);
}

void setup()
{
Serial.begin(9600);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
//下面程序开始时让控制端都为高电平,电机保持不动。
digitalWrite(in1,HIGH);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,HIGH);
}

void loop()
{
getstr=Serial.read();
delayMicroseconds(60);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(60);
digitalWrite(TrigPin, LOW);

cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数

if (i==5){//连接测5次,计算平均值,如果小于10厘米则紧急停车
    i=0;
    cmeve=cmsum/5;
    cmsum=0;
   
    if (cmeve<10 and cmeve>0) {
      Serial.println(cmeve);
      _mStop(in1,in2);
      _mStop(in3,in4);
    }
}
else {
    i=i+1;
    cmsum=cmsum+cm;
}


if(getstr=='f')
{
    Serial.println("go forward!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
    _mRun(in1,in2);
    _mRun(in3,in4);
}
else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(in1,in2);
    _mStop(in3,in4);
   
    _mBack(in1,in2);
    _mBack(in3,in4);
}
else if(getstr=='l'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4);
   
    _mRun(in1,in2);
    _mBack(in3,in4);
}
else if(getstr=='r'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4);
   
    _mRun(in3,in4);
    _mBack(in1,in2);
}
else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
}
}

电源这里开始用了四节5号电池,小车跑不动,又换了一个5V,500ma电池,也不行,后来直接换上5V,1A电池,小车可以前后正常移动,但是转弯还是转不动,这是什么原因?

fish6823 发表于 2014-3-13 21:47:48

本帖最后由 fish6823 于 2014-3-13 21:51 编辑

我的L298模块控制一个电机要用三个数字口的,两个脚控制电机正反转,一个脚控制电机速度,你的怎么只用两个脚?
还有你说的转不动是电机不动还是电机动了没转弯?

mxhhaixin 发表于 2014-3-14 23:17:36

增大电机的供电电压试试

swfzz 发表于 2014-3-15 10:29:42

有没有给占空比啊?

mybag1 发表于 2014-3-17 20:05:10

fish6823 发表于 2014-3-13 21:47 static/image/common/back.gif
我的L298模块控制一个电机要用三个数字口的,两个脚控制电机正反转,一个脚控制电机速度,你的怎么只用两个 ...

是电机动一下,然后就动不了了

mybag1 发表于 2014-3-17 20:05:36

swfzz 发表于 2014-3-15 10:29 static/image/common/back.gif
有没有给占空比啊?

占空比应该怎么给啊?

fish6823 发表于 2014-3-17 23:33:21

我给你个说明书吧,上面讲得很清楚,我也是按这个来接线的。
占空比就是PWM输出,你要接到有PWM输出的口上,用analogWrite函数设置,一般要设在100以上电机才会动。

mybag1 发表于 2014-3-23 20:34:04

fish6823 发表于 2014-3-17 23:33 static/image/common/back.gif
我给你个说明书吧,上面讲得很清楚,我也是按这个来接线的。
占空比就是PWM输出,你要接到有PWM输出的口上 ...

下载下来试试,谢谢:)
页: [1]
查看完整版本: 自己做的小车转弯有点问题