今天做了使用Arduino控制直流电机,其实就是对小车的基本控制,4个电机驱动小车的4个轮子,不过我只用了两路控制信号,即同侧的两个轮子用一路信号控制。
代码
int motor1=4; //右侧轮子I1
int motor2=7; //右侧轮子I2
int motor3=13; //左侧轮子I1
int motor4=12; //左侧轮子I2
int ena1=3; //右侧占空比
int ena2=5; //左侧占空比
void forward()
{
digitalWrite(motor1,HIGH);
digitalWrite(motor2,LOW);
digitalWrite(motor3,HIGH);
digitalWrite(motor4,LOW);
}
void backward()
{
digitalWrite(motor1,LOW);
digitalWrite(motor2,HIGH);
digitalWrite(motor3,LOW);
digitalWrite(motor4,HIGH);
}
void turnleft()
{
digitalWrite(motor1,HIGH);
digitalWrite(motor2,LOW);
digitalWrite(motor3,LOW);
digitalWrite(motor4,HIGH);
}
void turnright()
{
digitalWrite(motor1,LOW);
digitalWrite(motor2,HIGH);
digitalWrite(motor3,HIGH);
digitalWrite(motor4,LOW);
}
void setup() {
// put your setup code here, to run once:
pinMode(motor1,OUTPUT);
pinMode(motor2,OUTPUT);
pinMode(motor3,OUTPUT);
pinMode(motor4,OUTPUT);
pinMode(ena1,OUTPUT);
pinMode(ena2,OUTPUT);
Serial.begin(9600); //初始化端口波特率
}
char var;
char dir;
void loop() {
// put your main code here, to run repeatedly:
//Serial.println("hello");
//delay(1000);
while(Serial.available())
{
var=Serial.read();
Serial.println(var);
if(var=='w')
forward();
else if(var=='s')
backward();
else if(var=='a')
turnleft();
else if(var=='d')
turnright();
//dir=Serial.read();
else if(var=='1')
{
analogWrite(ena1,100);
analogWrite(ena2,100);
}
else if(var=='2')
{
analogWrite(ena1,200);
analogWrite(ena2,200);
}
else if(var=='3')
{
analogWrite(ena1,255);
analogWrite(ena2,255);
}
delay(500);
}
}
把代码烧入Arduino后打开串口监视器,输入指令控制小车的基本运动。w是前进,s是后退,a是左转,d是右转,我的转弯是通过两侧轮子反向转动实现的,也可通过调节两侧控制信号的占空比之差是两侧轮子转速不一样来实现转弯。小车速度有3档 ,分别由输入1、2、3控制,1档最慢,2档次之,3档最快。调节速度是通过调节占空比来实现的,设置占空比我直接用analogWrite函数,很方便,也可以自己结合digitalWrite和延时来实现占空比设置