+-
使用Arduino UNO制作一款简单的蓝牙控制小车

我曾经发布过一篇视频,介绍蓝牙小车如何制作,现在再以文字的形式介绍一下小车如何制作。


... 蓝牙控制小车

1、器件选择

1、Arduino UNO开发板

主控板采用Arduino UNO,这块板卡基本上是最常见的Arduino板子了。Arduino是一系列控制板的总称,它的硬件和软件都是开源的,软件上有各种库,硬件上有各种传感器,再加上各种各样开源的制作项目,让它成为了世界范围内最受欢迎的开发控制板。

在我的文章《Arduino制作“小雷达”的详细步骤》中也介绍过Arduino UNO这块板卡,这里就不再详细说明了。

2、电机驱动模块(用来驱动4个电机)

直流电机驱动模块很多,常见的一般是采用H桥驱动芯片的,选择驱动模块时要注意它支持的电压范围和额定输出电流,这个电压范围和输出电流要与选择的直流电机配套,保证接入的电源在驱动模块和电机的承受范围之内。

常用的模块是L298N电机驱动模块,我手头没有这个模块,就使用了一个大功率的驱动模块,可以耐压27V,有点大材小用的意思了。

3、直流电机和配套轮子

直流电机和配套的轮子就不多介绍了,这个在网上也很容易买的到。一定要注意直流电机的工作电压和工作电流,本次使用的直流电机工作电压是3-6V。

4、蓝牙模块

常见的蓝牙模块为HC系列,它们的使用都很简单,一般有四个接口,其中两个连接电源,另外两个用于串口通信(一收一发),比较新的蓝牙模块一般都有低功耗模式(比如HC08\HC09等),如果不需要考虑功耗问题,选择哪种模块是区别不大的,本次使用了一块HC06模块。


... 蓝牙模块


5、电池

直流电机的驱动电压为3-6V,Arduino UNO输入电压的范围为6-20V(推荐7-12V),所以这次选择了4节5号碱性电池(4*1.5V)作为电源供电。

2、底盘制作

车体组装也很简单,首先将4个电机分别粘到木板的四个角上,然后安装上轮子就可以了。此时,还要在板子上合理布局各个模块,方便后面进行电路连接。

... 固定电机


... 固定轮子


... 小车底盘

3、电路连接

Arduino UNO作为控制器,需要控制电机驱动模块,进而控制小车的前进和转向。同时,又要通过蓝牙模块接收外部指令。所以电路连接可以说是围绕Arduino UNO开发板为中心进行的。

... 电路连接示意图

1、电机驱动的连接

1)与直流电机连接:4个电机分成左、右两组,分别连接到电机驱动的两个电机输出口上;

2)与Arduino UNO连接:在电机驱动的EN一直处于使能时,只需要用Arduino的4个数字接口就可以控制直流电机驱动模块了,也就说要用Arduino UNO的4个数字接口分别连接到电机驱动模块的4个控制端(其中2个为一组,分别对应控制连接到2个输出口上的电机);

3)电源连接:驱动板上接电机驱动的电源输入端需要连接6V电源。在L298N驱动模块上标注“12V”的输入端口接6V电池,同时,L298N驱动模块上还集成了一个5V的稳压模块,可以输出5V电源,将这个5V可以连接到Arduino UNO的vin接口作为供电输入。

我使用的电机驱动模块没有集成5V稳压芯片,所以需要将电池连接到Arduino UNO的电源接口。

2、蓝牙模块

前面已经讲到过,蓝牙模块有4个接口,分别是VCC、GND、RX、TX。他们与Arduino UNO的连接关系为:VCC连接Arduino UNO的5V输出口;GND连接Arduino UNO的GND口;RX连接Arduino UNO的数字接口1(TX口);TX连接Arduino UNO的数字接口0(RX口)。

3、共地连接

这里还要注意一点,电池的负极、电机驱动模块的GND、蓝牙模块的GND以及Arduino UNO的GND口一定要连接起来,这样是为了能够提供一个相同的基准“0V“。


... 电路连接完成的小车


4、程序编程

程序主要实现两个功能,一个是通过蓝牙模块接收指令;另一个是控制电机驱动模块,进而控制小车的运动。

1、接收蓝牙数据

蓝牙模块与Arduino UNO的串口连接,所以只需要在程序中开启串口,接收串口数据就可了。这里需要用到Serial语句。关于串口的介绍,可以在我主页里找一下这个视频《Arduino基础12—串口通信。如何实现电脑和Arduino“交流”?》。

2、控制电机驱动

控制电机就是通过端口不同的高低电平组合控制电机转动的方向。想学习如何控制直流电机,可以看一下我这个视频《什么样的电路可以驱动直流电机?如何控制它的速度和方向?》。

总体程序代码如下。

char t; void setup() { pinMode(13,OUTPUT); //左侧电机控制 pinMode(12,OUTPUT); //左侧电机控制 pinMode(11,OUTPUT); //右侧电机控制 pinMode(10,OUTPUT); //右侧电机控制 Serial.begin(9600); //开启串口 } void loop() { if(Serial.available()){ //判断串口是否有数据 t = Serial.read(); Serial.println(t); } if(t == 'F'){ //前进 digitalWrite(13,HIGH); digitalWrite(12,LOW); digitalWrite(11,HIGH); digitalWrite(10,LOW); } else if(t == 'B'){ //后退 digitalWrite(12,HIGH); digitalWrite(13,LOW); digitalWrite(10,HIGH); digitalWrite(11,LOW); } else if(t == 'L'){ //右转 digitalWrite(11,HIGH); digitalWrite(10,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); } else if(t == 'R'){ //左转 digitalWrite(13,HIGH); digitalWrite(12,LOW); digitalWrite(11,LOW); digitalWrite(10,LOW); } else if(t == 'S'){ //刹车 digitalWrite(13,LOW); digitalWrite(12,LOW); digitalWrite(11,LOW); digitalWrite(10,LOW); } delay(100); }

程序编写完成后,下载到Arduino UNO开发板中,上电之后连接手机APP就可以控制小车了。如果大家需要相关资料及手机APP,可以给我发私信。

... 蓝牙遥控小车