自己做了个蓝牙小车,小车前进后退都没有问题,但是转弯转不动,是电力问题,还是后面万向轮的问题,一直没想明白,请各位帮帮忙。
小车用的是网上购买的底盘,加了一个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电池,小车可以前后正常移动,但是转弯还是转不动,这是什么原因? |