机器人
返回首页

Arduino篇—直流电机控制在轮式机器人中的应用

2023-11-02 来源:X的创客课堂

课程目标

  • 最简小车的设计
  • 双车辆运动
  • 小车的多种运动形态实现

电路搭建

所需材料

UNO * 1
L298N驱动模块 * 1
直流 * 2
7~12V外接电源 * 1
杜邦线若干
小车组件

电路连接

程序编写

练习一:小车的循环运动

通过编写程序,循环实现小车的前进一秒、后退一秒、左转一秒、右转一秒、停止一秒功能。

图形化方式:

如果有同学发现,按照下面的程序上传后,小车的运动有问题,那么可以通过改变直流电机的接线或者修改数字输出引脚的高低电平即可。

代码方式:

/* 项目名称:循环控制小车运动
 * 项目时间:2022.03.28
 * 项目作者:MRX
 */
int IN1 = 4;   // IN1连接 D4
int IN2 = 5;   
int ENA = 9; 
int IN3 = 6;   // IN3连接D6
int IN4 = 7;   
int ENB = 10; 

unsigned long delayme = 1000;  //等待时间
int value = 100;   // 输出的值


//前进
void fward() {
  digitalWri(IN1,HIGH);
  digitalWrite(IN2,LOW);
  Write(ENA,value);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  analogWrite(ENB,value);
}


//后退
void bk() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,value);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENB,value);
}


//右转
void right() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,value);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENB,0);
}


//左转
void left() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,0);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENB,value);
}


// 停止
void stop() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
  analogWrite(ENA,0);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,LOW);
  analogWrite(ENB,0);
}


void setup(){
    for (int i = 4;i <= 10;i++){
      nMode(i, OUTPUT);
    }
}

void loop(){
    forward();
    delay(delaytime);
    forward();
    delay(delaytime);
    left();
    delay(delaytime);
    right();
    delay(delaytime);
    stop();
    delay(delaytime);
}

练习二:可调速的小车

通过读取可调的值,来实现车速的变化。

电路接线:

在上图的基础上,增加一个可调电位器连接到UNO的A0脚。

图形化方式:

代码方式:

/* 项目名称:电位器控制小车速度
 * 项目时间:2022.03.28
 * 项目作者:MRX
 */
int IN1 = 4;   // IN1 connected to pin 4
int IN2 = 5;   
int ENA = 9; 
int IN3 = 6;   // IN3 connected to pin 6
int IN4 = 7;   
int ENB = 10; 

unsigned long delaytime = 1000;  //delay time
int value = 0;   // the duty cycle


void forward() {
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  analogWrite(ENA,value);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  analogWrite(ENB,value);
}


void back() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,value);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENB,value);
}


void right() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,100);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENB,0);
}


void left() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,0);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  analogWrite(ENB,100);
}


void stop() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
  analogWrite(ENA,0);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,LOW);
  analogWrite(ENB,0);
}


void setup(){
    for (int i = 4;i <= 10;i++){
      pinMode(i, OUTPUT);
    }
    pinMode(A0,INPUT);
}

void loop(){
    value = (map(analogRe(A0), 0, 1023, 0, 255));
    forward();
}
进入机器人查看更多内容>>
相关视频
  • 财哥说钛丝

  • 直播回放: Keysight 小探头,大学问,别让探头拖累你的测试结果!

  • 控制系统仿真与CAD

  • MIT 6.622 Power Electronics

  • 直播回放:基于英飞凌AIROC™ CYW20829低功耗蓝牙芯片的无线组网解决方案

  • 直播回放:ADI & WT·世健MCU痛点问题探索季:MCU应用难题全力击破!

最新器件
精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 非常简单的150W功放电路图

  • 基于IC555的可变PWM振荡器电路

  • 如何使用LED驱动器LM3915制作振动计

  • 一个简单的立体声平衡指示器电路

  • 电谐波图形均衡器示意图

    相关电子头条文章