我是从三天前开始入门adruino的,因为大一学的文化课中有c语言,所以趁着大二暑假寻找一些与我专业相关的内容进行学习,就这样我入门了arduino。
和大部分人一样,我选择做的第一个项目是一辆小车,所以我把完成一辆能够通过蓝牙控制的小车作为我的第一个作品,需要提出的是,本人的水平目前处于一个很基础的阶段,发表文章只是想分享一些我的心路历程和从有这个想法到将它变为现实的过程。
1.一块arduino UNO R3(nano应该也可以尝试)
4.电源(我使用的是18650 4.2V的锂电池两个与电池盒)
一.初期思路
提到初期的思路,不得不分享极客工坊这个网站,这个网站包含了很多arduino方面的设计与答疑,虽然如今很多内容的最后回帖时间都停留在2018甚至2016年,但其中包含的大量知识仍然让我受益匪浅。我的蓝牙小车的初期思路也近乎抄袭了坛中一位老哥的设计。首页 - 极客工坊 - Powered by Discuz! (geek-workshop.com)
二.需要用到的器件(包括获取方式)
1.一块arduino UNO R3(nano应该也可以尝试)
我认为一块能够烧录代码的UNO R3应该是这个设计中最重要的一部分,在调试下文提到的蓝牙模块时也离不开它,而在最终的蓝牙小车的成品中,它就相当于是大脑,控制着小车的运行。
我使用的UNO R3是在某宝上购买的“改进版”,对于我这种初学者来说,一块“改进版”足够我使用,不需要焊接就有杜邦线的母线接头,只需要使用公线就可以简单的进行连接,同时我也焊接了一批排针,来保证一个引脚能有公母两种接头。价格为20元左右。
2.一块L298N
在蓝牙小车的设计中,L298N充当着“执行者”的角色,它会根据收到的信号来对电机进行控制,它的价格也十分便宜。在某宝上价格为5.5元左右。
其有IN1-IN4四个引脚可以向内输入信号,而左右分布的OUT1-4则可以输出信号控制电机,假将电机正极连接在左边的OUT1,负极连接在左边的OUT2,当从IN1输入高电平,IN2输入低电平时,电机正转,反之反转,右侧的OUT3,OUT4也是如此,所以,L298N至少可以控制两个电机运动。这张图片是从知乎搬的,侵删。
3.两个电机与轮胎
轮胎和电机没有什么讲的内容,在此分享一下我在某宝上购买的价格,两个电机花了10元,两个轮胎花了5元。
4.电源(我使用的是18650 4.2V的锂电池两个与电池盒)
由于本人的知识储备不充分,所以细致地讲电源我也讲不明白,但是我提前购买了两种,一种是标题提到的,也是我更加推荐的,另一种是我放出来避雷的。即千万不要购买使用DC线的电池扣插进电源模块进行供电,能用的电池类型少是其一,第二是使用电源模块带动电机可能会出现问题。而使用18650的电池与电池盒供电更加方便,同时电池可以充电,在某宝上两个电池+电池盒+充电器共花费我24.2元,但是使用这种电池千万要注意安全!!!!!!
5.一个HC-05蓝牙模块
HC-05相当于蓝牙小车的神经中枢,我们可以通过手机连接它,发出信号来控制小车的运行。在某宝上购买HC-05价格大约在10元左右。需要注意的是,HC-05在接线时的TXD与RXD接口与UNO R3反着接,同时VCC连接3.3V,GND接地。
三.接线
大体来说,先用电源正极接L298N的12V接口,再将GND接到UNO R3的地,5V接到UNO R3的Vin,此时实现了L298N与UNO R3连接的同时,也保证了它们俩的供电和共地;接下来,将调试后的HC-05的接线按上文的介绍部分进行接线,HC-05和整体的调试将在下文中分享。
因为我的小车的板子略有些问题,排版和线非常乱,所以暂时不放实物图。
四.调试与代码
先来讲UNO R3的一些调试部分,首先保证电脑上安装了ch340驱动(直接搜索即可下载),其次在arduino上配置好,UNO R3的开发器管理不像stm32F103C那样复杂,只要简单的选择UNO和正确端口即可。
L298N的调试部分也很少,只需要在接上电机后将左侧的OUT1、2与OUT3、4分别接入高低电平,来判断电机能否按照要求旋转(记得判断方向!),而高低电平可以通过使用UNO R3的数字引脚配合digitalWrite来进行实现;除了电源之外分别将IN1-IN4四个管脚接入四个数字管脚,我的是IN1-IN4分别接到6、7、4、5。
HC-05的调试可能相对比较复杂,首先电源按照上文进行连接,TXD和RXD两个分别接入两个数字引脚进行调试,本人也是看到CSDN的帖子进行正确调试的,大家可以自行进行搜索(关键词:HC-05)。在蓝牙模块能够正常连接至手机的时候,我们还必须手机和它之间、它和UNO R3之间的通讯正确无误,在手机上我们可以通过e调试,配合电脑上的vofa+,使用Serial.print和Serial.read进行双向调试,如果信息能够正常在两个上位机之间传输,那说明蓝牙模块和它连接构成的系统都没有什么问题,这样也就可以通过蓝牙来给UNO R3传递信息达到控制蓝牙小车的效果;如果不能正确传输信息甚至不能传输信息,建议使用TTL转USB来逐步排查到底是哪个部分的连接存在问题。
在完成这三个部分的连接和调试后,我们可以开始着手为UNO R3编写一段足以控制小车的代码,由于本人还处于刚入门阶段,所以采用的也是最简单的两轮小车,代码如下:
将L298N的IN4-IN4接到6、7、4、5上并用0、1、2、3、4来定义我们想要达到小车状态的编码。其中默认状态也就是初始状态和STOP状态为P,UNO R3四个管脚都输出低电平,使电机保持静止状态;前进为G,在两侧电机分别接入高低电平,使得电机正向旋转向前滚动(这也是说为何调试的过程中一定要记得提前判断一下方向);后退为B,与前进完全相反,使得左右两侧电机都反向旋转向后滚动;左转为L,因为本人水平尚浅,所以使用的是最简单的转弯方式,同时也无法调速,想要调速的小伙伴们可以自行搜索(关键词:PWM调速),在这里我们保证左边电机不进行旋转,右边电机正向旋转使轮子向前滚动达到左转的效果;右转即R与左转完全相反,固定右轮不动,左轮向前滚动来达到右转效果。loop部分的函数十分简单,就是收集从蓝牙模块输入到UNO R3的数据并采用if结构进行判断,使用if函数,如果其='0','1','2','3','4'分别执行他们对应的函数来达到效果,而在本人使用的e调试中是可以快捷编写按钮命令的,例如将一个按钮按下设定为发送'1',松开设定为发送'0',那么只要一按小车就会向前,一松小车就会停下,非常方便快捷。
#include <Servo.h>
#define IN1 6
#define IN2 7//右。
#define IN3 4
#define IN4 5//左。
//轮子。
#define G '1'//前。
#define B '2'//后。
#define L '3'//左。
#define R '4'//右。
#define P '0'//停。
//编码。
void moren(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
//默认状态及停车。
void setup() {
Serial.begin(9600);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
moren();
}
//管脚1、2、3、4输出并置于低电平。
void go(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);//右轮向前滚动。
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);//左轮向前滚动。
}
//前进。
void back(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);//右轮向后滚动。
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);//左轮向后滚动。
}
//后退。
void turnleft(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);//左轮固定。
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);//右轮向前滚动。
}
//左转。
void turnright(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
//右转。
void stop(){
moren();
}
//停车。
void loop() {
if(Serial.available()>0){
char ch=Serial.read();
if(ch==G){
go();
Serial.println("GO");//前进。
}else if(ch==B){
back();
Serial.println("BACK");//后退。
}else if(ch==L){
turnleft();
Serial.println("LEFT");
}else if(ch==R){
turnright();
Serial.println("RIGHT");
}else if(ch==P){
stop();
Serial.println("STOP");
}
}
}
五.总结
本人也是初学者,写这篇文章只是想要分享一些我做这个小车的心路历程和收集资料的过程,还望大家多多包涵。