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

发布者:BlossomWhisper最新更新时间:2023-11-02 来源: X的创客课堂作者: Lemontree 手机看文章 扫描二维码
随时随地手机看文章

课程目标

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

电路搭建

所需材料

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();
}
引用地址:Arduino篇—直流电机控制在轮式机器人中的应用

上一篇:基于3D形状重建网络的机器人抓取规划方法
下一篇:机器人视觉伺服控制系统有哪些分类方式?

小广播
最新机器人文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关:

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved