Arduino控制直流电机

今天做了使用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和延时来实现占空比设置

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值