51智能小车的制作之蓝牙小车的制作: 制作日期:2017/6/23
声明:本人由于是一个学生,有什么错误的地方可以联系本人,同时也要理解,谢谢 本人想用这个蓝牙模块在51单片机方面应用,制作一辆属于自己的蓝牙小车。 第一步首先蓝牙模块手机跟电脑通信,学习单片机我们都会有一个属于自己的下载器,我们把下载器VCC跟3.3V用一个跳线帽连接,然后下载器5V的插针接到蓝牙模块的VCC,GND接到蓝牙模块的GND,TX接到蓝牙模块的RX,RX接到蓝牙模块的TX,接线工作完成。我们预先从网上下载一个叫BTClient这个软件,把接好线的下载器接到电脑的USB3.0口,打开串口调试助手,我们可以看到蓝牙模块的灯大概是以0.5s交替闪烁的,我们打开手机上的软件,按下连接的按钮,我们搜索到hc-05这个蓝牙,密码是1234,手机连接到蓝牙以后大概1.5s亮一下,证明连接上了,如下图:
这里要注意的是,波特率为9600,效验位:无,按上面设置就可以了。那我们现在已经完成了蓝牙模块跟电脑的通信了。接下来我们开始制作属于我们的蓝牙小车了。其实我们只是被蓝牙小车所迷惑(总感觉很高大上,其实小学生都可以制作)。
制作一辆智能小车到底需要一些什么东西?相信这个是很多电子初学者考虑的问题,然后怀疑到自己怀疑人生,我认真这是完全没有必要的,首先按我个人的经验来吧。一块主控芯片,这里可以选择单片机(STC89C51、430、stm32)等,还是FPGA,DSP等控制芯片,他们相当人类的大脑。在这里本人试着用过stm32跟FPGA制作过蓝牙小车,我觉得最简单的就是用51单片制作,其实我觉得除了STC89C51芯片以外,另外的几种芯片我都认为他们属于电子主控芯片的
主流,本人学FPGA感觉跟用51一样,一直卡在软核哪里,所以有兴趣的同学我们可以互相探讨。然后就是智能车的躯体,我们就是控制他的直流电机的正反转,快慢,我们明白以后就感觉前途一片光明。我们知道我们给一块干电池接电机的正负极就会转动,小时候感觉非常神奇。但是我们长大就是为了实现小时候自己的梦。但是我们直接接到单片的IO口,再赋值0跟1,为什么他不会转动,但是本人可以认真的跟你们说,完全是不可能转动,因为单片机IO只能最大输出10ma的电流而已,如果强行接电机一端vcc,再接单片机,那我只能说你的单片机肯定会烧掉,看都不看,所以我们应该设计一样东西的时候一定要多看芯片手册,那我们引进了一个电机驱动模块L298N电机驱动模块,还可以有其他方案,比如用三极管8550的饱和区做一个开关电路,那现在我们连智能小车肢体的硬件部分完全理清楚了。其实我们回头一想,蓝牙模块到底是什么鬼?我的回答是他只是手机跟单片机通信的工具,所以蓝牙小车很简单,那在这里我们应该下载一个APP,就是蓝牙小车专用的app,由于本人是一个学生,也知道学生要找资料都是去买或者百度,很多时候完全百度到的是完全不能用的资料,我就吃过很多苦头,在这里本人免费给你大家下载,网址http://pan.http://m.china-audit.com//s/1jIDoCfW
L298N电机驱动模块资料:http://pan.http://m.china-audit.com//s/1pKTdoRD 希望对蓝牙小车有兴趣的同学有帮助。 那我们说一下蓝牙小车的算法吧:
在这之前,本人说一下,蓝牙小车的单片机晶振一定要用11.0592M这个晶振,12M的晶振波特率9600有很大的误差。 小车前进:
电机1-0: 1 电机1-1: 0 电机2-0: 1 电机2-1: 0 小车停止:
电机1-0: 1(0) 电机1-1: 1(0) 电机2-0: 1(0) 电机2-1: 1(0) 小车右转:
电机1-0: 0 电机1-1: 1 电机2-0: 1 电机2-1: 0 小车左转:
电机1-0: 1 电机1-1: 0 电机2-0: 0 电机2-1: 1
因为是蓝牙小车,所以我们打开蓝牙小车的APP,我们把手机各个动作发送到电脑,app操作界面如下
他的前后左右的指令如下:
0x04,0x07,0x05,0x06这个要按着你电脑里面的来,可能你出现的是很奇怪的符号,这是不要慌,改一下串口调试助手,改成16进制显示,就可以看到了。如果有兴趣的同学可以参考一下下面的程序:
/***********************************************************/ //标题:蓝牙小车驱动程序 //日期:2017.6.23 //修改:2017.6.23 //软件:keil4
//芯片: STC89C51RC //作者:Grass
//说明:本人是一名学生,希望有什么错误的地方可以宽容一下,可以找 //本人私聊也可以,本人的所有程序都是教学用而已,qq:3369894057 /***********************************************************/ #include
sbit M1A=P0^0; //定义左侧电机驱动A端 sbit M1B=P0^1; //定义左侧电机驱动B端
sbit M2A=P0^2; //定义右侧电机驱动A端 sbit M2B=P0^3; //定义右侧电机驱动B端 void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us {
i=i/10; while(--i); }
void delay_nms(unsigned int n) //延时n ms
{
n=n+1;
while(--n)
delay_nus(900); //延时 1ms,同时进行补偿 }
void tingzhi() {
M1A=0; //将M1电机A端初始化为0 M1B=0; // M2A=0; // M2B=0; }
void qianjin() {
M2A=1; M2A=1; M1A=1; //M2A=1;
//delay_nms(20);
//M1A=1; //M1B=1; //M2A=1; M1B=0;
//delay_nms(20);
//M1B=1; M2B=0;
delay_nms(100); M1A = 0; M2A = 0;
delay_nms(50); }
void houtui() {
M1A=0; M1B=1; M2A=0; M2B=1;
delay_nms(75); M1B = 0; M2B = 0;
delay_nms(50);
将M1电机B端初始化为0 将M2电机A端初始化为0
相关推荐: