大家好!这是小编第二次做小项目~

小编目前专业是电气自动化的,不搞点硬件方面的东西,不学点控制技术,有点对不起自己所学的专业。

小编这次打算做arduino多功能智能小车~

首先,为啥选择arduino电路板?

这个是由于小编还没学过单片机啊~还没有弄过其他的,比如stm32单片机。因为这些学习起来,对于初学者来说,比较困难,需要花时间。而arduino入门确实简单,特别适合初学者,而且arduino源码开源的,特别的人性化。其实,arduino也是单片机,但是它是经过二次开发的,有很多的库函数。

1.所需材料

底盘2个    电机4个    轮胎4个    arduino uno板1个

电机驱动板1个    杜邦线若干    电池盒1个    5号电池4节

USB数据线1根    蓝牙模块    USB 转TTL数据线

如果这是读者第一次做,没有什么DIY经验的话,可以自己在网上买套装元件,网上关于这些东西很多,可以满足我们的制作材料的要求。当然,对于有一定基础的读者,会设计原理图,完全可以用AltiumDesigner软件,绘制一个属于自己的PCB板,这样对于自己有很大的提高。我在网上看的意大利进口PCB板,感觉挺精致的,奈何出于经济原因,就买了套件。

2.编程软件

本人使用官方的免费IDE编程环境,下载地址与安装教程见官网

这个软件的详细教程参考地址arduino IDE教程

3.制作过程

首先,小编先介绍一下小车的结构:

1.电机驱动模块:这是控制小车电机转动的模块,在模块的电源部分,有VMS、VCC(5v)、GND3个接口。电源正极接VMS,电源负极接GND,这样就给电机驱动模块上电了。MotorA和MotorB的四个接口,分别接电机的线。ENA和ENB分别是使能端,接Arduino的PWM接口,用于电机的调速。IN1、IN2、IN3和IN4分别接Arduino的数字接口。

LN298电机驱动模块

2.Arduino单片机:可以说是智能小车的“大脑”,也就是说这是小车的核心。在后面,我们要将我们编好的程序导入到arduino中,就可以控制小车了~

arduino单片机

在我制作小车的时候,我在网上了解到arduino单片机供电方式,这里就不在阐述了 ,具体见网址:

3.蓝牙模块:这是通信模块,控制着手机与arduino单片机之间的通信。蓝牙模块上共有6个引脚,我们在这里要用到4个引脚,分别是RX、TX、VCC和GND,蓝牙模块的RX接arduino的TX,蓝牙模块的TX接arduino的RX,VCC接VCC,GND接GND。当然,蓝牙模块在使用之前,需要进行调试,我们需要下载串口调试助手,进行以下操作:(蓝牙模块的初始密码为1234)

HC-05蓝牙控制模块

给蓝牙模块命名,将串口波特率改成115200

然后根据指令,测试一下蓝牙的通信状况。

4.电源模块:其实就是四节电池,主要是给arduino单片机和电机驱动模块供电。

详见图片:

图片发自简书App

图片发自简书App

图片发自简书App

4.代码展示

首先,说一下编程思路:

setup()函数里主要配置一些小车的参数。

loop()函数里,先接收手机通过蓝牙发出的指令,并通过传参调用小车电机驱动函数,实现蓝牙控制功能。

#define STOP 0x03

#define FORWARD 0x02

#define BACKWARD 0x08

#define TURN_LEFT 0x06

#define TURN_RIGHT 0x07

int PWMLeft = 3;//左轮速度

int PWMRight = 5;//右轮速度

int MotorLeft1 = 7;//左前轮方向

int MotorLeft2 = 8;//左后轮方向

int MotorRight1 = 12;//右前轮方向

int MotorRight2 = 13;//右后轮方向

void setup()

{

Serial.begin(115200);

pinMode(PWMLeft, OUTPUT);

pinMode(PWMRight, OUTPUT);

pinMode(MotorLeft1, OUTPUT);

pinMode(MotorLeft2, OUTPUT);

pinMode(MotorRight1, OUTPUT);

pinMode(MotorRight2, OUTPUT);

delay(10);

}

void loop(){

if(Serial.available()>0)

{

char cmd=Serial.read();

Serial.print(cmd);

motorRun(cmd);

delay(10);

}

}

void motorRun(int cmd)

{

switch(cmd){

case FORWARD:

Serial.println("FORWARD");

analogWrite(PWMLeft, 180);  //PWM调速

analogWrite(PWMRight, 200);  //PWM调速

digitalWrite(MotorLeft1,HIGH);

digitalWrite(MotorLeft2,LOW);

digitalWrite(MotorRight1,LOW);

digitalWrite(MotorRight2,HIGH);

break;

case BACKWARD:

Serial.println("BACKWARD");

analogWrite(PWMLeft, 180);  //PWM调速

analogWrite(PWMRight, 200);  //PWM调速

digitalWrite(MotorLeft1,LOW);

digitalWrite(MotorLeft2,HIGH);

digitalWrite(MotorRight1,HIGH);

digitalWrite(MotorRight2,LOW);

break;

case TURN_LEFT:

Serial.println("TURN_LEFT");

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 240);  //PWM调速

digitalWrite(MotorRight1,LOW);

digitalWrite(MotorRight2,HIGH);

delay(500);

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

break;

case TURN_RIGHT:

Serial.println("TURN_RIGHT");

analogWrite(PWMLeft, 200);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

digitalWrite(MotorLeft1,HIGH);

digitalWrite(MotorLeft2,LOW);

delay(500);

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

break;

case STOP:

Serial.println("STOP");

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

}

}

5.功能演示

功能:通过蓝牙控制(手机APP)小车的前进、后退、左转、右转等相关指令的执行。

小车直行

蓝牙小车控制

这里,有点不好意思,我也不知道为啥格式工厂不好弄分辨率更大的视频转GIF功能,总是出错~

在这里,小编再推荐蓝牙控制手机APP软件,在应用市场里搜索蓝牙智能小车

蓝牙手机APP控制界面:

图片发自简书App

图片发自简书App

图片发自简书App

软件说明:

图片发自简书App

6.代码分析

电机驱动函数:

void motorRun(int cmd)

{

switch(cmd){

case FORWARD:

Serial.println("FORWARD");

analogWrite(PWMLeft, 180);  //PWM调速

analogWrite(PWMRight, 200);  //PWM调速

digitalWrite(MotorLeft1,HIGH);

digitalWrite(MotorLeft2,LOW);

digitalWrite(MotorRight1,LOW);

digitalWrite(MotorRight2,HIGH);

break;

case BACKWARD:

Serial.println("BACKWARD");

analogWrite(PWMLeft, 180);  //PWM调速

analogWrite(PWMRight, 200);  //PWM调速

digitalWrite(MotorLeft1,LOW);

digitalWrite(MotorLeft2,HIGH);

digitalWrite(MotorRight1,HIGH);

digitalWrite(MotorRight2,LOW);

break;

case TURN_LEFT:

Serial.println("TURN_LEFT");

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 240);  //PWM调速

digitalWrite(MotorRight1,LOW);

digitalWrite(MotorRight2,HIGH);

delay(500);

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

break;

case TURN_RIGHT:

Serial.println("TURN_RIGHT");

analogWrite(PWMLeft, 200);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

digitalWrite(MotorLeft1,HIGH);

digitalWrite(MotorLeft2,LOW);

delay(500);

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

break;

case STOP:

Serial.println("STOP");

analogWrite(PWMLeft, 0);  //PWM调速

analogWrite(PWMRight, 0);  //PWM调速

}

}

这里,小车前进、后退、左转、右转和停止分别用FORWARD、BACKWARD、TURN_LEFT、TURN_RIGHT和STOP来定义。用switch条件选择语句来表示小车的五种状态,这里小编以小车前进为例,加以分析。

Serial.println("FORWARD");这一句是将FORWARD打印在串口监视器上。我们在前期测试手机与蓝牙的通信时,如果测试结果正确地出现在串口监视器上,表明通信成功。

如何调节电机转速?

analogWrite(PWMLeft, 180);

analogWrite(PWMRight, 200);

这两句时PWM调速语句。何为PWM(脉冲宽度调制)?简单来说,就是改变脉冲方波的占空比,比如一个5V的电源,怎么获得3v的电压,传统的观点是我们串联1个可调电阻进行分压。但,我们现在可以在单位时间内,3/5的时间里输出高电平,2/5的时间里输出低电平,这样就可以得到3v的电压了~这里PWM数值取0~255之间。

有读者会问了,怎么左轮和右轮的PWM的数值不一样。这是因为,每个电机的性能有些差异,虽然都是一起买来的。大家可以根据实际情况调节小车的PWM的数值。

如何调节电机的转向?

digitalWrite(MotorLeft1,HIGH);

digitalWrite(MotorLeft2,LOW);

digitalWrite(MotorRight1,LOW);

digitalWrite(MotorRight2,HIGH);

这里,我还是要强调一下电机的接线,电机驱动模块有4个电机接口,每一个接口接其中一个电机的上面接口和另外一个电机的下面一个接口。这样只要通过1个电机驱动模块就可以控制四个电机了~如果你觉得这样不好,那你可以用两个电机驱动模块,来控制四个电机。

蓝牙部分:

if(Serial.available()>0)

{

char cmd=Serial.read();

Serial.print(cmd);

motorRun(cmd);

delay(10);

}

Serial.available() 的意思是:返回串口缓冲区中当前剩余的字符个数。一般用这个函数来判断串口的缓冲区有无数据,当Serial.available()>0时,说明串口接收到了数据,可以读取;

Serial.read()指从串口的缓冲区取出并读取一个Byte的数据,比如有设备通过串口向Arduino发送数据了,我们就可以用Serial.read()来读取发送的数据。

定义与初始化部分:

#define STOP 0x03

#define FORWARD 0x02

#define BACKWARD 0x08

#define TURN_LEFT 0x06

#define TURN_RIGHT 0x07

这个宏定义是为了蓝牙通信的,具体见手机APP说明,通过蓝牙发送1个字符,arduino就可以接收到相应的数据。

int PWMLeft = 3;//左轮速度

int PWMRight = 5;//右轮速度

int MotorLeft1 = 7;//左前轮方向

int MotorLeft2 = 8;//左后轮方向

int MotorRight1 = 12;//右前轮方向

int MotorRight2 = 13;//右后轮方向

这个是定义小车PWM调速端接口和电机接口的。arduino单片机上有"~"字样的接口是PWM信号接口,其他的是数字接口。

void setup()

{

Serial.begin(115200);

pinMode(PWMLeft, OUTPUT);

pinMode(PWMRight, OUTPUT);

pinMode(MotorLeft1, OUTPUT);

pinMode(MotorLeft2, OUTPUT);

pinMode(MotorRight1, OUTPUT);

pinMode(MotorRight2, OUTPUT);

delay(10);

}

蓝牙的串口波特率从初始值9600调整为115200,然后定义小车PWM调速端接口和电机接口为输出端。  delay(10);起缓冲作用。

7.制作小车过程中遇到的问题

在小车制作前,自己没有DIY经验,只知道一些电子元件方面的基础知识,在编程方面,自己在大学学过C语言的课程,仅此而已。以下小编将从组装,接线,编程3个方面来阐述制作过程中的问题:

在小车组装方面,我们要有安装的次序,首先应该先将电机的接线接线接好,然后再将电机固定在底盘上,这样电机上的线容易接。还有,我要提醒的是如果你想做其他功能的小车,例如避障小车,应该先将舵机固定在底盘上一层上,然后再安装,这样容易拧螺丝。arduino单片机和电机驱动模块都放在上面一层。自己当时没有经验,拆拆装装,挺耗时间的。

接线时,尽量排布整齐一些,这样既让接线变得清晰明了,又使得小车美观大方。而小编自己在排线方面也没有做到很好。

编程方面,其实arduino开源代码很多,可以借鉴性学习。当时,我的问题出在蓝牙接收数据方面,原因是蓝牙串口调试时,没有设置好波特率,总是接收不到数据。当然,后来找了实验室的学长,才弄好的。

arduino 蓝牙 android 小车,arduino智能蓝牙小车相关推荐

  1. 基于android的智能导航系统,基于Android系统的智能导航小车设计

    摘要: 智能移动机器人的主要作用是利用机器人的特性完成人类不易完成的工作,目前智能机器人除了用于探索未知区域,帮助人类执行危险任务以外,越来越多的民用机器人已经出现在我们的日常生活中.目标识别.路径规 ...

  2. delphi android 蓝牙,Android实例-Delphi开发蓝牙官方实例解析(XE10+小米2+小米5)

    [实例简介] 2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签"朱建强" 7.请下载,杀毒 ...

  3. 蓝牙MESH网关_智能蓝牙Mesh灯控,让你一机掌控亮与暗

    随着物联网在人们日常生活中的广泛应用和日益成熟,智能家居已然呈星星之火之势,智能照明作为智能家居的重要组成部分,现在市场上的智能照明产品也随处可见,如智能LED灯.而对于智能LED灯来说,一套好的智能 ...

  4. C51(蓝牙,红外)智能遥控小车

    目录 1模块准备 2实现功能 1模块准备 三轮小车底盘 l298n电机驱动模块 51最小系统开发板 ds1302时钟模块 蓝牙串口模块hc-06 18650电池盒和电池组三节,12v左右 ds18b2 ...

  5. 高手diy android控制的智能蓝牙led灯,高手DIY Android控制智能蓝牙LED灯

    刚开始编程时基本都是弹出"很抱歉,应用程序已停止运行",因为真不懂蓝牙开发.不过后来很幸运的,发现Android开发工具包里有一个蓝牙例程,果断学习改造,慢慢的,程序不弹出停止运行 ...

  6. 蓝牙的定位,智能蓝牙定位追踪-新导智能

    一.系统背景 针对老幼人员外出位置查询监护.政府企事业单位人员公务外勤综合管理.终端用户紧急报警求援救护等管理和服务需求,新导推出通过手机蓝牙定位将个人的位置信息传输到监管者的手机或显示在网站电子地图 ...

  7. android 显示附近蓝牙,Android 基础-搜索附近蓝牙

    1.打开蓝牙 private void initBluetooth() { // 判断是否打开蓝牙 if (!mBluetoothAdapter.isEnabled()) { //弹出对话框提示用户是 ...

  8. 智能搬运小车(自动抓取、循迹)

    智能搬运小车 目录 智能搬运小车 1 1.引言 1 1.1智能搬运小车研究的背景和目的: 1 1.2智能搬运小车的功能介绍: 1 2.总体方案及论证 1 2.1系统结构框图: 1 2.2具体设计: 2 ...

  9. 蓝牙路由器蓝牙点对多点组网蓝牙远程控制

    蓝牙路由器蓝牙点对多点组网蓝牙远程控制 BSP1000mini是华杰智控推出的一款点对多点的蓝牙路由器(蓝牙AP,蓝牙access point),华杰智控推出的BSP1000蓝牙路由器系列支持7到28 ...

最新文章

  1. Java后端:Linux的基本使用学习笔记
  2. 【找规律】HDU 4662——MU Puzzle
  3. DHH观点:为什么我偏爱Ruby?
  4. 浅谈工业机器人的运动停止
  5. php 利用http上传协议(表单提交上传图片 )
  6. .NET Core中Object Pool的简单使用
  7. Java的新项目学成在线笔记-day9(七)
  8. 如何使用CCRenderTexture创建动态纹理 Cocos2d-x 2 1 4
  9. virtualbox禁用硬件虚拟化_Mac版Virtualbox6.1开启嵌套虚拟化
  10. 捐款捐物捐技术,14 家科技巨头抗疫在行动!
  11. 麻将 (Standard IO)
  12. 本地自旋锁与信号量/多服务台自旋队列-spin wait风格的信号量
  13. 一文弄懂LogSumExp技巧
  14. 使电动机反转的matlab仿真图,基于simulink的Matlab仿真作业(电气工程专业)2
  15. html表格的冻结列
  16. ros打开笔记本电脑的摄像头
  17. 找零钱问题(C语言实现)——贪心算法应用(1)
  18. 安卓原生系统_手机用这个App,系统变得比原生安卓还干净
  19. Wireshark系列之6 数据流追踪
  20. 让程序员“#*...%#{4*”的瞬间:你是修电脑的吧?

热门文章

  1. 盘点中国联通2015年:工于谋国 拙于谋身
  2. 射频百科:什么是相位噪声?及其含义
  3. delphi操作png的单元pngimage.pas包括引用的ZlibExApi.pas和 PngLang.pas
  4. 奥哲·云枢:更低代码,更快数字化
  5. HTML中的head和body标签及作用
  6. C语言实现简单的飞机大战
  7. 微信小程序开发问题集锦
  8. 踏遍青山情未老 —— 九山顶重游记(五)
  9. MX视频播放器解码包(MX Player) v1.7.27 全机型解码器
  10. cad记忆口诀_CAD制图口诀,轻松掌握机械制图方法