Arduino智能小车——测试篇

Arduino智能小车——测试篇

Arduino智能小车系列教程时空门:

  1. Arduino智能小车——拼装篇 点击跳转
  2. Arduino智能小车——测试篇 点击跳转
  3. Arduino智能小车——调速篇 点击跳转
  4. Arduino智能小车——超声波避障 点击跳转
  5. Arduino智能小车——蓝牙小车 点击跳转
  6. Arduino智能小车——循迹篇 点击跳转
  7. Arduino智能小车——小车测速 点击跳转

    上一章讲解了智能小车的拼装,但是还没有让小车动起来,这章我们将继续拼装,使得小车可以动起来。

驱动模块安装

    可能有些朋友会问到,驱动是干嘛的,为什么要驱动,小时候玩四驱车的时候直接装上电池小车就跑了,干嘛还要驱动模块。答案很简单,四驱车他只能朝着一个方向运动,而且永远都是以最大速度运行,我们所做的智能小车通常要控制小车电机的转速和运行方向,因此驱动是必不可少的模块。驱动模块的具体工作原理不在这里做详细的介绍,想了解的朋友可以自行查阅资料。

驱动模块用法简介

    一般拿到一个模块之后都要去对应的官网找到它的资料包,查看其详细用法,在某宝上买的模块一般店家都有整理好的资料包,所以某宝也是一个很好的资料库,大家一定要合理运用哦~

在此我们选用的是L298N模块,该模块引脚分配如下:

**+12V:**该引脚接的电压是驱动模块所能输出给电机的最大电压,一般 直接接电池。12V是由L298N芯片所能接受最大电压而定,一般介入5~12V电压。在此我们接入的电压为两节18650串联的电压,即3.7+3.7=7.4V;

GND: 在该项目中GND即为电源的负极,同时要保证Arduino开发板,驱动模块等所有模块的GND连在一起才可以正常工作。在某些复杂的项目中还需要区分数字地和模拟地,在此不做详细介绍。

+5V: L298N模块(注意不是L298N芯片)内含稳压电路(将高电压转换为低电压的电路),在模块内部将"+12V"引脚输入的电压转化为可供开发板使用的+5V电压,一般将次输出接入到开发板为开发板供电。

L298N有两路输出,所以可以控制小车前进、后退、转弯,其中:
ENA: 代表第一路输出的电压大小。驱动模块输出电压越高,电机转速越快。
1.当其输入为0V的时候,驱动模块输出对第一路电机输出电压为0V;
2.当其输入为3.3V的时候,驱动模块对第一路电机输出电压为"+12V"引脚的输入电压。
3.由于ENA输入电压的高低控制驱动对电机的输出电压,因此当我们需要对小车运动速度进行控制的时候,一般通过PWM对"ENA"引脚进行控制。

**IN1/IN2:**这两个引脚控制电机正反转方向。例:假如IN1输入高电平3.3V,IN2输入低电平0V,ENA为3.3V,电机正转,此时将IN1输入改为0V,IN2输入改为3.3V,其他条件不变,则电机将会反转。

**OUT1/OUT2:**这两个引脚分别接电机的两极。

**ENB,IN3/IN4,OUT3/OUT4引脚控制第二路输出,与上述ENB,IN3/IN4,OUT3/OUT4**功能相似。

驱动安装

    将准备好的驱动模块固定在小车,将从地盘电机延长出来的导线分左右两边分开,左边两个电机中每一个电机的其中一根线OUT1,另外一个接OUT2。同理,右边两个电机中每一个电机的其中一根线OUT3,另外一个接OUT4,并用螺丝刀将拧蓝色接线柱上方的螺丝拧紧。

电池座固定

    将电池固定在小车尾部,将电源的两根线链接到+12V和GND引脚,红色代表正极,接到+12V,黑色代表负极,接到GND(一般电路中默认红色为正,黑色为负),并拧紧螺丝固定。

Ardunio开发板安装

    将Arduno板子用螺丝固定在小车中部,由于小车运动中也需要对开发板供电,此时我们用两根公对公的杜邦线为其供电,红色(也可以为其他颜色)杜邦线一边插入Arduino板的"5V"引脚,一边插到L298N驱动的"+5V"引脚,黑色(也可以为其他颜色)杜邦线一边插入Arduino板的"GND"引脚,一边插到L298N驱动的"GND"引脚。
    为控制电机的正反转,此时我们需要拿四根公对母杜邦线,将L298N驱动的IN1/IN2/IN3/IN3引脚与Arduino板的4/5/6/7号引脚对应相连,最终拼装图如下:

抱歉,接线有点乱,大家可以用扎带或者皮筋将其捆好固定

    至此,我们的小车基本拼装完成,接下来就要开始写程序来控制小车运动咯,有没有很激动~

Ardunio程序编写

Arduino的程序编写一般使用Arduino IDE,该软件安装比较简单,大家可以自行安装,安装成功后打开IDE,在程序里写入下述代码:

//定义五中运动状态
#define STOP      0
#define FORWARD   1
#define BACKWARD  2
#define TURNLEFT  3
#define TURNRIGHT 4
//定义需要用到的引脚
int leftMotor1 = 4;
int leftMotor2 = 5;
int rightMotor1 = 6;
int rightMotor2 = 7;

void setup() {
  // put your setup code here, to run once:
  //设置控制电机的引脚为输出状态
  pinMode(leftMotor1, OUTPUT);
  pinMode(leftMotor2, OUTPUT);
  pinMode(rightMotor1, OUTPUT);
  pinMode(rightMotor2, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int cmd;
  for(cmd=0;cmd<5;cmd++)//依次执行向前、向后、向左、想有、停止四个运动状态
  {
    motorRun(cmd);  
    delay(2000);//每个命令执行2s 
  } 
}
//运动控制函数
void motorRun(int cmd)
{
  switch(cmd){
    case FORWARD:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case BACKWARD:
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     case TURNLEFT:
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case TURNRIGHT:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     default:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, LOW);
  }
}

代码详解

为方便代码的编写,提高代码的可读性,在此我们先定义出小车可能的运动状态

#define STOP      0	//停止
#define FORWARD   1	//前进
#define BACKWARD  2	//后退
#define TURNLEFT  3	//左转弯
#define TURNRIGHT 4	//右转弯

电机运动需要经过驱动模块驱动,而驱动模块的输出状态又取决去IN1/IN2/EN,IN3/IN4/ENB这两组引脚的控制。本实验只是简单控制电机的运动,不用控制电机的转速,因此ENA,ENB默认接入高电平(买过来模块的时候,你会发现这两个引脚都通过跳线帽和"+5V"的引脚相连,即输出最大电压),此时我们只需控制IN1/IN2,IN3/IN4两组引脚即可对小车的运动状态进行控制。因此我们在此定义以下四个引脚

//定义需要用到的引脚
int leftMotor1 = 4;
int leftMotor2 = 5;
int rightMotor1 = 6;
int rightMotor2 = 7;

当电机的两个输入端加入的电压有电压差,且电压差满足一定条件时电机才会转动,为控制L298N驱动OUT1/OUT2,OUT3/OUT4两路输出,我们需要了解该模块的使用方法。

下面两个表格为L298N的输入输出对应关系,其中H:高电平,L:低电平,ENA、ENB均为高电平

输入输出
IN1IN2OUT1OUT1
HLHL
LHLH

输入输出
IN3IN4OUT3OUT4
HLHL
LHLH

由上述表格可以清晰看出控制小车运动时,只需要将同一边的两个引脚设置成不同的输出电压即可,例如让小车向前运动时左右两边的IN1和IN2可以设置为

digitalWrite(leftMotor1, LOW);
digitalWrite(leftMotor2, HIGH);
digitalWrite(rightMotor1, LOW);
digitalWrite(rightMotor2, HIGH);

为了提高代码的执行效率,我们在此将小车的四种运动状态封装在函数里,方便调用。

void motorRun(int cmd)
{
  switch(cmd){
    case FORWARD:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case BACKWARD:
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     case TURNLEFT:
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case TURNRIGHT:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     default:
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, LOW);
  }
}

至此,小车应该便可以成功运动起来咯,快为自己庆祝下吧。接下来我们将在此基础上进项进一步的开发,大家再接再厉哦
##调试中可能出现的问题

问题1.

下载完程序,小车向前运动时,有些轮子向前,有些轮子运动方向相反:
将运动方向错误的电机的两根电源线在驱动上的接线位置对换。例如将本来接OUT1的电源线换到OUT2,将接OUT2的电源线换到OUT1。

问题2.

代码没变,但是电机一会儿动一会不动:
这样的情况一般是由于接触不良造成的,检查你的驱动输出到电机的电源线是否有松动或者接触不良的情况。

问题3.

向前运动时他向后,向后运动时他向前,向左运动时他向右:
解决方案1:按照 问题1 中那样的解决方案,一个一个换线
解决方案2:将void motorRun(int cmd)函数中,引脚输出状态反过来,例如解决向前运动时他向后这种错误状态

case FORWARD:	//原来的代码
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
case FORWARD:	//修改后的代码
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;

欢迎各位有兴趣的朋友加入Q群1:789127261点评、交流

  • 268
    点赞
  • 1197
    收藏
    觉得还不错? 一键收藏
  • 155
    评论
Arduino智能⼩车——拼装 Arduino智能⼩车——拼装 Arduino智能⼩车系列教程时空门: 1. Arduino智能⼩车——拼装 2. Arduino智能⼩车——测试 3. Arduino智能⼩车——调速 4. Arduino智能⼩车——超声波避障 5. Arduino智能⼩车——蓝⽛⼩车 6. Arduino智能⼩车——循迹 7. Arduino智能⼩车——⼩车速 ⽂章⽬录 简介 Arduino是⼀款便捷灵活、⽅便上⼿的开源电⼦原型平台,⽐较适合刚接触硬件的⼊门级开发者学习。在我⾝边有很多初学者都陷⼊了这么 ⼀种困境,已经将Arduino官⽹的教程全部跑完,然⽽还是没有太⼤的成就感,看到⽹上⼤神们基于Arduino各种各样的开发很羡慕,想动 ⼿⼩项⽬⼜不知从何下⼿。由于⽹上较少看到完整项⽬开发流程,作为⼀个有较多嵌⼊式开发经验的"⽼江湖",在此想⾃⼰综合⾃⼰的 多年的开发经验,为以后的新⼈铺⼀条路。 作为Arduino的第⼀个项⽬,我⽐较建议朋友们去⼀下智能⼩车。优点如下: 1.可以熟悉项⽬的⼤概流程,为以后的开发⽣涯奠定基础; 2.需要⾃⼰动⼿拼装制作,完成后有满满的成就感; 3.⼩车作为⼀个基本的开发平台,可以在上⾯搭建各种传感器,⾃定义功能; 4.相对于四旋翼等安全系数⾼,技术能⼒要求较低,适合初学者; 初学的朋友们⼊⼿⼀套智能⼩车套件,某宝上搜智能⼩车可以看到很多,再根据需要购买⼀些模块。 我们准备制作的⼩车终极 形态就类似这种,觉得很帅的话就快开始动⼿吧!!! 准备材料 智能⼩车的基本构成组件如下: ⼩车套件: 驱动模块:(在此我选⽤⽐较经典的驱动模块L298N,该驱动可以满⾜我们的需求,也可以把电池的⾼电压转换为我们需要的5V,3.3V电 压) 电池:(在此我选⽤的电池型号是18650) 电池座:(电池座⼀定要选取与电池型号相匹配) 当然Arduino板⼦也肯定必不可少,在此我使⽤的是Arduino UNO,其他版本的Arduino也可以参照该教程 项⽬开发肯定少不了电烙铁,焊锡,电源线,杜邦线,排针,排插这些基本⼯具。 ⾄此,所需的基本材料已经准备完毕,接下来就可以进⾏⼩车的拼装了。 拼装步骤 电机线的焊接 套件中的电机⼀般都是没有连线的,我们需要⾃⼰动⼿把准备好的电源线固定在电机上,⼀般不建议直接把电源线绑在电机上,这样会经常 导致⼩车的电机接触不良,因此我建议⼤家把电源线直接焊在电机上。 电机固定 将上图所⽰的电机固定架插⼊⼩车底盘底板中,⼀般⼩车有上下两个底板,任意拿⼀块即可当底板。 再将焊接好的电机配套另外⼀个固定架固定在底板上。 同样固定其他三个电机 安装背板⽀柱 安装背板 ⼀般套件都会提供六根铜柱,我们将其固定在⼩车的周围。 安装轮⼦ 总结 ⾄此⼩车的基本拼装已经完成,⼩车驱动、电池等其他模块的安装,以及⼩车的调试将在接下来的教程中为⼤家依次讲解。 欢迎各位朋友添加Q群交流:789127261
### 回答1: Arduino智能小车是一种基于Arduino控制板的小型智能车辆,它可以通过编程实现自主移动、避障、跟随等功能。一般来说,它主要由Arduino控制板、电机驱动模块、电机、传感器和外壳组成。 在制作Arduino智能小车时,可以通过编程控制电机的转动方向和速度,从而实现小车的前进、后退、左转、右转等运动方式。同时,可以通过超声波传感器等感知模块获取周围环境信息,从而实现避障、跟随等功能。 如果你想进一步了解如何制作Arduino智能小车,可以查看一些相关的教程和视频,了解所需硬件和软件,以及如何进行编程。 ### 回答2: Arduino智能小车是一种基于Arduino开发板的智能车辆,它结合了传感器、电机和编程控制,能够实现多种智能功能和自主导航。 首先,Arduino智能小车通过搭载各种传感器来感知周围环境。通常会使用红外线传感器、超声波传感器、灰度传感器等来检障碍物、距离和地面颜色等信息。这些传感器可以在遇到障碍物时及时发出信号,避免碰撞,并根据传感器数据出相应的动作。 其次,Arduino智能小车的动力系统通过电机来驱动。它通常配备直流电机和舵机,可以实现前进、后退、转弯等动作。借助编程控制,可以根据传感器的反馈信号,实现智能巡线、自动避障等功能。 最后,Arduino智能小车的核心是基于Arduino开发板的编程控制。使用Arduino编程语言,可以编写控制逻辑和算法,对小车的各个功能进行编程。通过编程,可以实现自动避障、巡线跟踪、遥控操控、声音和光线控制等多种智能功能。 总结来说,Arduino智能小车是一款结合了传感器、电机和编程控制的智能车辆。它具备感知周围环境、移动驱动和智能控制等功能。这种小车可以在教育、实验和娱乐等领域广泛应用,是学习和体验智能技术的绝佳平台。 ### 回答3: Arduino智能小车是一种基于Arduino控制板的智能机器人小车。它主要由车体、电机、传感器和Arduino板组成。通过编写程序,可以实现小车的自主避障、遥控驾驶、跟随等功能。 首先,小车的车体是由底盘、轮子和电机组成。电机通过Arduino板上的电机驱动模块控制。通过编写代码,可以实现小车的前进、后退、左转、右转等动作。 另外,小车上安装了各种传感器,如红外线传感器、超声波传感器和巡线传感器。红外线传感器可以用于检前方的障碍物,实现自主避障功能。超声波传感器可以小车与障碍物的距离,可以在遥控驾驶模式下帮助驾驶员避免碰撞。巡线传感器可以用于检地面上的黑线,实现小车的自动跟随功能。 在编写程序方面,可以利用Arduino开发环境进行编程。通过使用Arduino的库函数和API,可以轻松地控制小车的各种动作和功能。例如,使用Serial库可以实现小车与电脑的串口通信,通过模拟信号控制小车运动。 总之,Arduino智能小车是一个具有自主避障、遥控驾驶和跟随功能的智能机器人。通过编写合适的程序,可以轻松地实现各种有趣的操作和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 155
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值