51单片机蓝牙小车_51单片机蓝牙智能小车 - CSDN
精华内容
参与话题
  • 51单片机蓝牙小车

    千次阅读 多人点赞 2020-07-30 08:58:28
    51单片机蓝牙小车(是我大二做的一个课程设计,小菜鸟一个,欢迎大家指正和参考。) 摘要 本次设计选择基于蓝牙遥控的多功能智能小车为对象。选用STC98C52RC单片机作为主控芯片,电机驱动采用L293N ,...

     

    51单片机蓝牙小车(是我大二做的一个课程设计,小菜鸟一个,欢迎大家指正和参考。)

     

    摘要   本次设计选择基于蓝牙遥控的多功能智能小车为对象。选用STC98C52RC单片机作为主控芯片,电机驱动采用L293N ,电源部分采用两节3.7V锂电池供电.采用C语言模块化编程,提高开发效率.蓝牙控制功能.用按键或遥控器来控制小车.

     

    关键词  

    51单片机

    L298N_电机驱动

    蓝牙遥控

     


    目 录
    1 前言 1
    11 系统研究背景 1
    12 系统研究的意义和目的 1
    2 系统概述 2
    21 系统的结构 2
    22 系统的功能 2
    23 开发环境 2
    3 系统实现 3
    31 传感器技术 3
    32 其它相关技术 3
    33 硬件实现 3
    34 软件实现 3
    35 系统测试 3
    4 系统使用说明 4
    5 总结 5
    6 参考文献 6


    1. 前言
    1.1.     系统研究背景
     

            蓝牙属于短距离内进行无线控制和收发的通信技术,伴随着科技的飞跃性发展,也让蓝牙找到了发展的空间,它可以代替和取代落后的数字化硬件设备之间繁琐的电缆连接。在蓝牙创造的初期,没有人预料到蓝牙会有如此大的潜力和前景,而现在的发展也是完全超出了我们的预期,因为蓝牙的安全性高,制造成本低廉和所消耗的功率也是同类产品中最低的,所以被很多人使用,越来越受到了广大消费者的欢迎,基于蓝牙技术的产品也在不断的更新和投入市场。

           蓝牙技术是近年来出现的新技术是一种短距离无线通信和信息传输的新型通讯科技,它使数据线的硬件设备接收更方便快捷。它可以广泛应用于世界各地,是一个蓝牙设置一个通用的范围,频率调制技术的使用,以防止外部干扰和多一些。低成本,低功耗和小辐射,和加密设置,让蓝牙的安全性更高;应用范围广,这些特点使得蓝牙技术被广泛的应用在我们日常生活中的蓝牙也支持一对一和一对多传输的通信连接,和多个蓝牙成为微网,也有网络的特点。

         在现在的智能时代,小车智能控制,方便了人们的使用。在51单片机的基础下,通过蓝牙来控制小车的驾驶。



    1.2. 系统研究的意义和目的

     

            因为无线技术的广泛使用,我们在研究无线和有线通信技术的方法中了解到蓝牙系统的小区域性有很大的技术突破,在国际上也得到了广泛的采纳,在市场上也有很大的需求。这也使蓝牙技术的发展成为了趋势之一,蓝牙可以发送和接受语音和数据,满足了大多数人的需求,它也融合了其他相关产品的特点,也是这样技术变得更多样性。然而,蓝牙的安全性不足,而且在小区域范围内的一点对多点的通信受到了很大的限制,这些都是其本身需要改进和完善的

          可以使人们更方便,更简单的控制小车。实现了无线控制小车,摆脱了有线控制的不方便,更智能。


    2. 系统概述2.1.  系统的结构

                                                                                         系统框图

     

     



    2.2.  系统的功能

    51单片机的基础下,通过蓝牙来控制驱动,此驱动能把5~12V的电压,一部分给小车轮子转动,一部分通过降压,稳压,最终降为5V来供给此驱动,单片机和传感器供电。

     

    2.3.  开发环境

    AT89C5RC单片机开发环境。

              AT89C52是一种8位单片机,它是在MCS-51单片机系列上加强了一些功能后升级得到的产物。它的作用基本上就是把外界的数据和命令在中断和时钟的帮助下,在自身内部储存器上把使用者的数据进行处理。AT89C52 由8位的内部处理器,内部数据储存器(RAM,有256个字节)内部储存器有8K的大小,输入和输出双向口有32个,16位的定时器和5个两级中断,全双工串行通信口一个和时钟电路组成。

             AT89C52能够自主地执行给它的指令,也就是你把所需要的指令写在单片机的内部储存器上,它会一步步执行。AT89C52可以在功耗特别低的情况下工作,就是设置成空闲选择和掉电模式两种状态来实现低功耗。

     

                                                                         AT89C52

     

           单片机与外界的通讯是依靠它自身的I/O 口进行的,对单片机I/O 口的控制就是对单片机的控制。I/O 口的存在不仅可以实现数据的传输,还可以改变电平和信号的性质,最重要的一点就是I/O 口可以实现与外部不同电路的连接来使单片机工作。

             AT89C52单片机上我们通常使用的是4个独立的双向通用I/O 口:P0口、P1口、P2和P3口。由于外部设备的工作速率比较慢或者很快的时候,我们可以采用同步传送的方式,而单片机存在的异步传送是为了更加简练的和硬件连接进行传出。也可以通过中断传送和DMA传送来完成。AT89C52单片机还可以实现外部接口单独的编址和外部端口和存储器的统一编制两种方式。AT89C52单片机上一共有32个I/O 口,不同的I/O 口实线的作用和运行的方式都有其自己的方式,我也要通过这次课程设计,更好地了解,更熟练的运用。


    3.  系统实现3.1. 相关技术技术

    蓝牙技术,驱动模块,

    3.2.  硬件实现

    HC-06蓝牙模块

    其TX接单片机的RX,RX接单片机的TX,VCC接5V(或3.3V),GND接单片机的地。HC-06蓝牙模块是通过一款手机APP(蓝牙串口助手)作为中间媒介,在蓝牙串口助手发送相关的数据到串口,串口再把相关信息送到蓝牙模块,蓝牙模块再把相关信号送到单片机中。

                                                                                  HC-06蓝牙模块


                                                          HC-06蓝牙模块和51单片机连接



     

    L298N电机驱动模块,

    该该电机可以驱动2路直流电机,使能端ENA,ENB,为高电频有效,

    通过单片机的输入信号给IN1和IN2来控制左轮,输入信号给IN3和IN4来控制右轮

    IN1和IN2,分别给0,1  :正转

     IN1和IN2,分别给1,0  :反转

    IN1和IN2,分别给1,1 :停止

    IN1和IN2,分别给0,0  :停止

    IN3和IN4,分别给0,1  :正转

    IN3和IN4,分别给1,0  :反转

    IN3和IN4,分别给1,1 :停止

    IN3和IN4,分别给0,0  :停止

     

    L298N的主要引脚功能如下:

    +5V:芯片电压5V;

    VCC:电机电压,最大可接50V;

    GND:共地接法;

    Output1—Output2:输出端,接电机1;

    Output3—Output4:输出端,接电机2;

    EN1、EN2:高电平有效,EN1、EN2分别为 IN1和IN2、IN3和IN4的使能端;

    Input1~ Input4:输入端,输入端电平和输出端电平是对应的;

      

                                                                      L298N




    3.3.  软件实现
                     

                                                                         程序流程图

     

                

     

    51单片机,源程序:

     

    sbit in1 = P1^0;//左电机

    sbit in2 = P1^1;//左电机

    sbit in3 = P1^2;//右电机

    sbit in4 = P1^3;//右电机

    char i;

    /*前进*/

    void forward()

    {

    in1=1;

    in2=0;

    in3=1;

    in4=0;

    }

    /*后退*/

    void back()

    {

    in1=0;

    in2=1;

    in3=0;

    in4=1;

    }

                                                                                                                                                                                                 

    /*左转*/

    void left()

    {

    in1=1;

    in2=1;

    in3=1;

    in4=0;

    }

    /*右转*/

    void right()

    {

    in1=1;

    in2=0;

    in3=1;

    in4=1;

    }

    /*停止*/

    void stop()

    {

    in1=1;

    in2=1;

    in3=1;

    in4=1;

    }

    void main (void)               

    {

    TMOD=0x20;                         //设置T1为工作方式2

          TH1=0xfd;                        //装入初值,比特率为9600bps

          TL1=0xfd;

          TR1=1;                              //开启T1

          REN=1;                             //接收允许

          SM0=0;                             //方式1

          SM1=1;

          EA=1;                               //开全局中断

          ES=1;                                //开串口中断

    while(1)

    {i=SBUF;//SBUF为单片机接收到的数据,单片机接收到的数据都存放在SBUF里;

    RI=0;

    if (i==0x02){forward();}     //如果蓝牙助手发送0x02,小车前进

    if (i==0x08){back();}        //如果蓝牙助手发送0x08,小车后退

    if (i==0x01){left();}         //如果蓝牙助手发送0x01,小车左转

    if (i==0x03){right();}        //如果蓝牙助手发送0x03,小车右转

    if (i==0x05){stop();}        //如果蓝牙助手发送0x05,小车停止

    }

    }

     

     

    3.4.  系统测试

    小车能实现基本功能,成功地用蓝牙控制小车。测试了一段时间,单片机工作稳定,蓝牙稳定的控制,小车较好的按照控制方向行走。

     


    4.  系统使用说明

    1.      为小车装上两节锂电池,来供电。

    2.     打开总开关,在手机端,打开一个蓝牙通讯助手(在手机应用商店可以找到下载),连接上此小车的蓝牙(HC-06),如图:

     

                                        蓝牙 HC-06模块

     

     



     

    3.     然后就可以在手机端按相应的前进,后退,左转,右转,停止等,如图:

     

                                            APP

     

    解析:前进,后退,左转,右转,停止,都对应着程序中相应的信息,如图;

    当手机端发送 0x02 给蓝牙模块,就会执行 forward()函数; 小车会向前走

    当手机端发送 0x08 给蓝牙模块,就会执行 back();函数;,小车会向后走

    当手机端发送 0x01 给蓝牙模块,就会执行 left();函数;,小车会向左走

    当手机端发送 0x03 给蓝牙模块,就会执行 right()函数;,小车会向右走

    当手机端发送 0x05 给蓝牙模块,就会执行stop()函数;,小车会停止

    具体的编辑如图:

                                              APP2

     

    最后这是小车的整体模型;

     

                                                         整体图

     

      注:上面有个RC522读卡器的,哪个是方便后面的课设,在这里,大家可以忽略哈。

    5.  总结

         本设计采用的是STC89C52RC单片机,这主要是因为该单片机的稳定性比较好和执行指令的速度很快。还可以采用其它系列的单片机。电机驱动采用L293N ,稳定电压,充足地向直流电机供电和稳定控制;电源部分采用两节3.7V锂电池供电,电压稳定,电流充足,还可以循环充电,节能环保。采用C语言模块化编程,提高开发效率.蓝牙控制功能.用按键或遥控器来控制小车,简单方便经过自己不断的搜索努力以及老师的耐心指导和热情帮助,本设计已经基本完成。

            过这次课程设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学两年的学习成果。虽然在这次设计中对于知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善。这两个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。  由于自身水平有限,设计中一定存在很多不足之处,敬请各位批评指正.


    6.  参考文献

    C语言程序设计 :清华大学出版社作者:谭浩强

    51单片机C语言教程:电子工业出版社 ,作者:郭天祥

     

    希望对你有帮助。

     

    为了大家方便,我上传了手机APP在网盘:https://pan.baidu.com/s/1UNjlUhUQa25K2RNW8hjwOQ

      提取码:wn7k 

     

     

     

    展开全文
  • 51单片机蓝牙小车(精要版)

    千次阅读 多人点赞 2020-03-09 11:25:44
    51单片机蓝牙小车(精要版) 实现:通过手机与小车的蓝牙通信,实现手机控制小车前后左右的移动。 这是博主学了51单片机第一次做的单片机项目,选择了许多人喜欢的蓝牙小车作为第一个项目。 准备材料: 1.小车亚克力...

    51单片机蓝牙小车(精要版)

    实现:通过手机与小车的蓝牙通信,实现手机控制小车前后左右的移动。

    这是博主学了51单片机第一次做的单片机项目,选择了许多人喜欢的蓝牙小车作为第一个项目。

    准备材料:

    1.小车亚克力底盘
    2.减速电机4个(网上搜索有很多)
    3.蓝牙 HC-06
    4.L298N
    5.7.2V电源(记得配好接口,我买的是大田宫的接口)
    6.杜邦线若干(公对公,母对母,公对母)
    8.89C52RC单片机最小系统板
    7.必要的话要用电焊铁

    在这里插入图片描述

    在这里插入图片描述

    第一:

    首先说蓝牙模块,蓝牙模块是比较重要的模块,通过接收手机的信号,把数据传送给单片机,单片机控制电平,使L298N步进电机驱动小车轮子。蓝牙买了HC-06型号,配置非常简单,教程在汇承官网(官网)
    具体步骤就不列举了,官网非常详细。单片机程序后面再列举出来。

    第二:

    说一下连线,连线的话呢单片机的TX,RX,5V,GND分别接蓝牙的 RX,TX,5V,GND
    7.2V电源接口连接L298N步进电机的12V,电源GND连接L298N步进电机GND,然后关键的地方来了L298N的一个5V输出口连接单片机给单片机供电,步进电机的GND连接单片机的GND.
    (之前用电源连接单片机,单片机再输出供电给L298N,减速电机很难动起来,一直以为是程序错误或者是杜邦线连接错误,搞了很久,后来知道是单片机输出的电流是不够大的,所以正确的连接是 : 电源供电L298N,L298N供电给单片机,L298N供电给四个减速电机
    步进电机的左右两边分别有两个口,分别为output1,output2,output3,output4.
    output1,output2分别连接减速电机的正负(一共连接两个减速电机)
    output3,output4分别连接减速电机的正负(一共连接两个减速电机)

    第三:

    手机控制端就下载SPP蓝牙串口,然后选择按钮。定义按钮输入要发送的字符就OK了。
    在这里插入图片描述
    在这里插入图片描述

    第四:

    代码部分

    #include<reg52.h>
    #include<intrins.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    
    sbit LF=P0^0;//左上
    sbit LB=P0^1;//左下
    sbit RF=P0^2;//右上
    sbit RB=P0^3;//右下
    
    /前进/
    void forward()
    {
    	LF=0;
    	LB=1;
    	RF=0;
    	RB=1;
    }
    
    /后退/
    void back()
    {
    	LF=1;
    	LB=0;
    	RF=1;
    	RB=0;	
    }
    
    /左/ 
    void left()
    {
    	LF=0;
    	LB=0;
    	RF=0;
    	RB=1;
    }
    
    /右/
    void right()
    {
    	LF=0;
    	LB=1;
    	RF=0;
    	RB=0;
    	
    }
    
    void UsartConfiguration();
    void Delay_1ms(uint i);
    
    
    
    void Com_Int(void) interrupt 4
    {
    
      uchar receive_data;
    	
      EA = 0;
    	
      if(RI == 1) 
    	{ 		
    		RI = 0;
    		
    		    LF=0;
    				RF=0;
    				LB=0;
    				RB=0;
    		receive_data = SBUF;
    			
    		if(receive_data == '1')	 
    		{
    				forward();
    		}
    		
    		else if(receive_data == '2')
    		{
    				back();
    		}
    		
    		
    			else if(receive_data == '3')
    		{
    			left();
    		}
    		
    		
    			else if(receive_data == '4')
    		{
    				right(); 
    		}
    		
    		
    		else if(receive_data == '0')
    		{
    				LF=0;
    				RF=0;
    				LB=0;
    				RB=0;
    		}
    		
    		
    }
    		
    		
    		EA = 1;
    }
    
    
    void main()
    {
    
    	UsartConfiguration();
    	
    	while(1);	
    }
    	
    
    void UsartConfiguration()
    {	
    	SCON=0X50;			
    	TMOD=0X20;			
    	PCON=0X00;		
    	TH1=0XFd;		    
    	TL1=0XFd;
    	TR1=1;					
    	ES = 1;        
      EA = 1;         
    }
    
    
    
    void Delay_1ms(uint i)
    {
      uchar x,j;
      
      for(j=0;j<i;j++)
        for(x=0;x<=148;x++);
    }
    

    第五:

    这次的单片机蓝牙小车项目让我知道了许多东西都是要不断试错不断踩坑才能完成,多查查互联网,多问问朋友,有助于解决问题。下一个项目想要用STM32F407和openmv做一个跟着人运动的小车,朋友说用树莓派会更快,但是我STM32还没学好,就不跳跃这么快,先来STM32。学习时间大概为3个月(STM32&& openmv && python)。做好了会继续写博客。希望这个能对你有一点点帮助。感谢~

    展开全文
  • 这是2016年底两周时间做的一个蓝牙小车,它分为上下两篇,本文是上篇。原本是发在了http://bbs.elecfans.com/ 的,不过由于我的博客都在CSDN上,因此我就把它们重新复制到这里来了。 原文地址:...

    1. 简介

    这是2016年底两周时间做的一个蓝牙小车,它分为上下两篇,本文是上篇。原本是发在了http://bbs.elecfans.com/ 的,不过由于我的博客都在CSDN上,因此我就把它们重新复制到这里来了。

    1.1 相关的博客和代码

    原文地址
    源代码地址
    小车手机端代码 — 下篇博客,此为后续版本,实现了手机端的蓝牙程序控制小车运动以及接收小车状态并展示。

    1.2 想法来源

    最初的想法是做一个红外遥控的装置,链接地址。只需要前进和停止,二路遥控,想使用模拟电路搭建,但最后也没能完成,这个想法依然在,现在只能留带以后是否有想法再做了。

    第二个想法是想做一个小车,小车的功能如下: 前进,后退,转弯,遥控控制,自主智能运转。 上某宝买了一个小车的底座(4驱动的,带电机), 买了两个L298N驱动模块用来驱动小车,买了蓝牙模块(HC05)用来充当遥控。

    2. 实践篇

    2.1 电路焊接

    首先根据51单片机的最小系统的电路图,焊接了一个最小系统板,使用的STC89c52的单片机(晶振6Mhz,带复位电路,复位指示灯显示),为了便于测试,又焊接了一个发光二极管连接一个I/O口,用于测试最小系统。

    2.2 最小系统测试

    开始测试最小系统,不过我很多年没有用过keil和下载器了,就上网寻找了一下关于这方面的帖子,并作了总结。要测试最小系统,首先需要编译代码的工具(我用的keil),下载代码到单片机的工具(stc-isp),usb转ttl硬件设备(某宝上2块多钱买的),串口调试助手(使用的是单片机多功能调试助手PortHelper.exe),于是从网上下载了keil4破解版本,stc-isp下载软件,单片机多功能调试助手三个软件。

    注意:
    下面的步骤2.2.1和2.2.2是用于测试USB转TTL设备,而2.2.3-2.2.5是用于单纯的最小系统测试。那为何需要用USB转TTL设备呢?在解释之前,先介绍我们的小车总体控制路径:

    空气
    手机端按下方向按钮
    手机发送命令到手机蓝牙
    单片机串口蓝牙设备
    从蓝牙串口读取
    单片机串口
    单片机处理程序接收到串口命令
    单片机处理命令

    可以看出,上述的路径无需USB转TTL的参与,我们之所以要使用USB转TTL是出于测试蓝牙的需要。考虑一种情况:蓝牙和单片机的串口连接之后,若单片机的控制程序无法驱动蓝牙正常工作,我们将无法判断是单片机方面的问题(例如代码或者连线等),还是蓝牙本身的问题。 因此,为了尽可能隔离错误域,我们可使用这个神奇的USB转TTL设备,使其直连蓝牙模块,并使用电脑的串口调试助手,驱动USB转TTL,进而驱动蓝牙模块,从而可确定蓝牙模块的好坏。其测试流程:

    USB口连接
    导线相连接
    电脑
    串口调试助手
    USB转TTL
    蓝牙串口模块

    不过要使用以上的方案,我们首先要测试USB转TTL模块是不是好的,好绕口。

    2.2.1 USB转TTL设备连接电脑端是否可识别

    测试usb转ttl是否可用(就444个引脚,5VGNDTXRX)
    打开串口调试助手,设置波特率,打开,发现打开失败,比较郁闷,为何呢? 极有可能是串口号不对,于是打开我的电脑-》管理-》设备管理器,找到串口的条目,查看它的串口号,我的串口号竟然是12,在串口调试助手中压根没有121212。于是电脑给设备重新设置串口号,重新打开,OK。 如何测试usb转ttl呢? 我的想法是如果发送数据的话,对应的tx引脚应该有信号,如果将TX和RX连接到一起,那么发送出去的应该自己可以接收到。我没有示波器,就简单的使用万用表量它的TX引脚的电压,点击发送按钮,发现TX引脚的电压有波动即可。

    2.2.2 USB转TTL与单片机连接

    将usb转ttl的四个引脚接入到单片机的对应引脚即可(其实就是VCC接VCC,GND接GND,TX接RX,RX接TX)。没有采用外部供电,直接利用usb转ttl进行的5v供电

    2.2.3 在keil中写代码,对单片机的某一个I/O进行翻转电平的操作

    代码如下

    sbit LED=P0^0;
    while(1){
        LED = !LED
        Delay10ms(100);
    }
    

    2.2.4 编译程序,生成HEX文件

    使用keil创建相应的51工程,加入上述代码以及头文件,并对程序进行编译,生成相应的hex文件。

    2.2.5 烧录程序

    打开stc-isp下载工具,选择单片机型号,hex程序位置,点击下载即可,如果识别了单片机的话,会出现给MCU重新上电的字样,这个时候只需要关闭再打开MCU的电源开关即可,就会出现烧写程序的过程。

    2.2.6 用万用表量P0^0口

    查看电压是否1秒一次变化即可

    2.3 最小系统测试篇遇到的问题,回忆篇

    51单片机的电源供电问题,忘了接单片机的VCC引脚了(如果是这方面的问题,就检查几个关键地方,vcc和地接好了吗,tx和rx接好了吗,晶振接好了吗,复位电路先不用管,我是使用的万用表一个个的量的)
    晶振的电路没焊好(万用表搞定)
    usb转ttl找不到串口(软件问题的话,容易解决,也有可能是usb转ttl硬件有问题,驱动没有安装成功,导致识别不了硬件)

    3. 蓝牙模块工作篇

    从某宝上花了17大洋买了一个HC05蓝牙主从模块,有6个引脚(VCC,GND,TX,RX,AT,STATUS),前4个引脚与usb转ttl的接法相同(注意RX,TX交叉接线接入到单片机),AT和STatus引脚是我自己命的名字。 AT引脚高电平有效,用于蓝牙模块进入AT状态(所谓AT状态,即是其他程序可以通过它的引脚向蓝牙模块发送AT控制命令,例如设置波特率,查看版本号,设置主从模式),AT引脚悬空默认为低电平。Status引脚用于显示配对的状态(配对成功输出高电平,未配对输出低电平)

    3.1 蓝牙模块测试篇

    第一步:蓝牙模块既然包含串口,那么它应该可以跟usb转ttl直接连接,使用电脑向蓝牙模块发送命令。于是连接蓝牙模块与usb转ttl的对应引脚。
    第二步:将AT引脚悬空,使用手机搜索周围的蓝牙设备,发现有HC05的蓝牙(因为这个蓝牙模块默认是从模块,可以被收到)
    第三步:将AT引脚拉高电平,使其进入AT状态(按照文档描述,如果上电之后再置位AT,指示灯无变化,依旧是,如果上电之前拉高AT,指示灯转为1秒一次),然后通过电脑串口发送AT+VERSION?(注意需要换行)查看版本号,使用AT+UART?查看波特率(默认9600,不带校验)
    此文档有用: ATK-HC05-V11用户手册_V1.0.pdf (请自行搜索)
    第四步:实验了一下,我的模块有问题,就是上电之前拉高AT,模块不接受AT命令,只有上电后拉高AT才有用,不过不影响使用。
    第五步:将蓝牙模块和usb转ttl连接后,AT保持悬空,即蓝牙模块为从模块,手机安装蓝牙串口助手,打开手机蓝牙,然后搜索HC05,配对,然后打开手机端的蓝牙串口助手软件,向HC05发送消息,如果蓝牙模块工作正常,那么电脑端的串口调试助手应该收到手机发送的消息。同样的也可以通过电脑端发送消息,到手机端。

    消息传递流程如下:
    手机端蓝牙串口助手 -> 手机蓝牙 ->空气 -> HC05蓝牙模块 -> USB转ttl模块 -> 电脑的串口调试助手,反过来也是可行的(注意线路连接方式都是RX与TX交叉连接)

    3.2 蓝牙模块与单片机集成调试篇

    上面的测试已经证明了蓝牙模块是可以发送接收手机端消息的,现在开始将蓝牙模块与单片机的TX,RX接口连接起来,通过程序控制蓝牙模块与手机蓝牙进行沟通,从而达到利用手机蓝牙进行遥控的目的。

    main函数如下,主要设置串口波特率,以及开启串口中断

    //PCON:SMOD位默认为0,串行口波特率加倍位
    PCON = 0x80;                //SMOD=1;
    
    TMOD=0x20;          //8位自动加载计数器
    //TH1=0xfd;  TL1=0xfd;   for 11.0592MHZ and SMOD=0, 
    TH1 = 0xf3;//2400bps
    TL1 = 0xf3;
    TR1=1;    // T1
    //SCON: 0x50=SM0=0, SM1=1,REN=1
    REN=1;   
    SM0=0;
    SM1=1; //串口
    EA=1; //中断
    ES=1; 
    
    串口中断函数
    void serial() interrupt 4
    {
             char sbuf;
             sbuf=SBUF;
             switch (sbuf)
             {
                     case 'f': direc=4; break;
                     case 'b': direc=5; break;
                     case 'l': direc=6; break;
                     case 'r': direc=7; break;
                     case 's': direc=-1; break;
                     default : LED = !LED; //LED为一个I/O引脚,控制发光二极管
             }
             RI=0;
    } 
    

    3.3 遇到的问题:

    利用手机给蓝牙HC05发送消息,如果不是switch中的几个case的话,那么LED灯会明暗变化,但是刚开始的测试却始终不如意。而后仔细查看了代码,并没有发现什么错误,后来怀疑是波特率的问题,因为我的晶振是6Mhz的,蓝牙模块的波特率是960096009600

    采用波特率倍频,我手动计算了一下: 6∗1000000∗2/12/32/9600=3.2556*1000000*2 / 12 / 32 / 9600 = 3.255610000002/12/32/9600=3.255若对其取整为333. 然后使用3反代入到此式子中,我们有
    6∗1000000∗2/12/32/3=10416.7 6*1000000*2 / 12 / 32 /3 = 10416.7 610000002/12/32/3=10416.7 它与960096009600的波特率相差140014001400多,这个似乎差距太大了。我又尝试了其他几个参数,像480048004800, 192001920019200, 384003840038400都相差挺大的,估计就是这个原因。于是继续尝试,发现240024002400的话,相差不多。
    6∗1000000∗2/12/32/2400=13.026*1000000*2/12/32/2400 = 13.02610000002/12/32/2400=13.02 ,然后使用131313代入进去,其波特率结果为2403.82403.82403.8,与240024002400的波特率相差很小,估计是可以用的,但是看蓝牙模块的文档,发现它说不支持240024002400的,我不甘心,就使用usb转ttl模块(有没有发现此模块是不是很有用?)设置了一下240024002400,没想到AT命令还真的返回OK了,单片机程序也可以正常工作了。

    4. 小车驱动篇

    将两个L298N模块与单片机的P2口直接相连(小车4轮驱动,每个电机需要两个输入引脚,以及一个使能引脚,那就是12个引脚,我刚开始并不想支持调速的功能,因此使能引脚直接高电平了,就连接了8个I/O口)。注意L298N的GND引脚一定要和单片机的GND共地。

    关于L298N: 它的EN引脚用于使能,EN为高电平,才使能。另外两个输入引脚IN1,IN2根据电平的组合变化会有4种情况(00,10,01,11),电机相应的在00和11停止(这个停止是带电的,类似于锁死的感觉),在10正转,01反转。可以直接使用单片机的VCC和GND连接L298N的IN1和IN2,同时将EN端接VCC,看电机转不转就可以测试L298N模块了。

    编写程序,控制轮子的正转,翻转,停止等。基本上就是以下的这种代码

    void wheelForward(uchar which)
    {
            switch(which)
            {
                    case 1:
                    {        
                            wheel_1_1 = 0;
                            wheel_1_2 = 1;
                            break;
                    }
                    case 2:
                    {
                            wheel_2_1 = 0;
                            wheel_2_2 = 1;
                            break;
                    }
                    case 3:
                    {
                            wheel_3_1 = 0;
                            wheel_3_2 = 1;
                            break;                
                    }
                    case 4:
                    {
                            wheel_4_1 = 0;
                            wheel_4_2 = 1;
                            break;
                    }
            }
    }
    

    4.2 遇到的问题

    问题1: 刚开始L298N直接连接P0口,死活不转,而直接引出高低电平到某一个电机的IN1,IN2口,电机正常运转。于是猜测是I/O有问题,使用万用表测量,发现P0的I/O在输出高电平的时候,根本不是高电平,而后发了帖子,询问了一下才知道P0口在高电平是呈现高阻态的,需要外部焊接电路加上拉电阻才可工作。我不想焊接过多的电路,就将其I/O换到P2口,可以正常工作,帖子链接地址

    问题2: 我使用的是路由器的9v直流电源,使用其带动两个L298N,同时将L298N的输出的一个5V高电平接到单片机上给单片机供电,启动4轮驱动,电机只会翁的一声,然后啥也没有,二轮驱动也不转。 上网查看了不少资料,基本上都是电源功率过低,需要将单片机与L298N分别供电才可以。 于是使用笔记本的usb口给单片机供电,使用9v直流电源给电机供电,比刚才好了一些,两轮可以转,但是4个轮子还是转不了。没办法,想到自己有一个小的卡片相机,有镍氢电池8节,然后上网买了一个电池盒,装上去,电机转的吼吼叫,同时L298N给单片机供电也没问题。

    问题3:关于L298N同时给单片机供电的问题,大家可以在启动轮子转动的时候量一量单片机的电源电压,会发现在电机启动的一刹那,单片机的电压有一个瞬时的拉低,这样单片机就会复位了。

    5. 蓝牙遥控小车汇总篇

    第一步:部署小车,L298N,镍氢电池盒,蓝牙模块组装到一起
    第二步:编写代码,本来可以使用EN口进行调速控制的,但是考虑到还需要使用额外的I/O口,就先不打算做了。

    代码完成的功能:

    小车前进,后退,停止,左转,右转
    小车单个轮子的转动(用于测试)
    小车当前状态的获取(用于后期给小车增加其他模块的时候,例如温度模块,就可以读取温度了)
    小车命令帮助
    

    代码思路:

    首先完成单个轮子的控制
    再完成小车的控制
    再加入串口接收中断,收到不同命令,设置方向变量
    main程序读取方向变量控制不同的方向
    

    6. 思路篇

    一些比较有特点的思路:
    思路1:一个棘手的问题想实现这样的功能: 用户按键,小车才走,用户松开按键,小车停止。
    我的想法如下: 小车使用一个定时器T0,控制定时器的延时时间为100ms,用户每发送一个前进信号,小车会前进100ms,但是这100ms内小车还需要能够响应外部的命令。例如如果用户在t=0ms发送前进命令,然后在t=50ms发送左转命令,小车能够立刻左转,而不是继续前进100ms,然后才执行左转的命令。基本的代码思路是用户的每一个命令,都会重置timer0,timer0的超时中断函数会将小车停止。这样用户只要以连续的小于100ms间隔发送前进命令,小车就会一直前进,也就是说timer0的中断没有执行,如果用户间隔100ms还没有发送命令,那么小车停止。 当前我使用的蓝牙串口助手它的按键不支持连续发送,只能按下松开手,才会发送消息,这样我现在就把时间间隔设置为1000ms,用户只要以小于1000ms的间隔连续按键,小车就会一直前进,如果不按键,小车会继续前进1000ms才会停止。 后期打算找到蓝牙串口调试助手的源代码,修改它的源代码,设置成如果用户按下不丢,小车前进命令能够一直发送。

    思路2: 既然有了手机蓝牙,那么小车再想展示一些状态信息,就没必要使用像1602,12864之类的东东了,直接定时发给手机蓝牙模块就OK了。我现在并没有实现定时发送,不过支持了命令获取的功能。 当用户发送命令h到单片机,单片机会返回一个帮助界面,告知如何控制小车,例如"f"控制小车前进,"b"控制小车后退,当用户发送命令i到单片机,单片机会返回小车的一些状态信息,我当前只返回了一些简单的变量状态(后面想加入距离,温度,光敏都是可行的)。

    思路3:有了蓝牙,这个小车就可以被我们随心所欲的控制了。你既可以推命令到单片机,控制它,你又可以把单片机内部的当前状态拉出来。单片机本身又可以定期将它的状态向你的手机进行推送。这个我感觉还是很好玩的,有了这个代码的基本框架,后面有可能的话像实现一个小车的扩展功能,加上红外对管让它不撞墙,加上超声波让它测距,加上麦克风让它向着声音跑,加上人体感应让它做一个跟屁虫,甚至于加上一个智能化点的程序,让它能够在一个屋子里随便的转悠,然后记录屋里的情况。还想做的是加入一个wifi模块,能将它的状态信息上传到路由器里面(手里有一个坏的路由器华为hg255d,正在修理中,还没有摸清楚如何修),这样远在千里之外都可以访问小车上面传感器的情况了。还想加的是一个摄像头模块,不过单片机的处理能力有限,摄像头的解码对它是个大问题,估计很难办到(手头有优龙fs2401开发板,刚修好它的电源模块,正在研究中,不过前天它突然bios引导不起来了,也不知道是什么问题,关于这种arm的东西,还没有接触过,完全不懂刷bios,uboot等等的东西,看情况是要重新刷bios了)。

    后记:
    修改于2018年12月24日午饭后。此博客原本是直接从电子爱好者中把自己写过的内容粘贴过来,也没使用markdown,文章内容显得很乱,今天突然看到了,就花了会简单调整一下,希望能给大家一些更好的阅读体验。

    展开全文
  • 基于51单片机蓝牙遥控小车
  • 基于51单片机蓝牙智能小车——《入门篇》

    万次阅读 多人点赞 2018-08-29 10:02:38
    我认为在制作小车前需要有心里准备,要充满自信、满怀激情,学会坚持,切忌三分钟热度,半途而废。...我们可以按着电路图先焊一个51单片机的最小系统出来,有一点需要注意的是需要引出更多的VCC,GND接口,以防...

    我认为在制作小车前需要有心里准备,要充满自信、满怀激情,学会坚持,切忌三分钟热度,半途而废。

    在上一篇文章中我已经提到了制作智能小车所需要的材料,如果大家已经准备好材料,或是想进一步了解智能小车的制作原理,接下来呢,我会对多个模块进行介绍,由零散的模块一步一步将我们的小车制作出来。

    我们可以按着电路图先焊一个51单片机的最小系统出来,有一点需要注意的是需要引出更多的VCC,GND接口,以防接口不够。

     

    一辆小车的基本功能就是让它能动起来,能通过手机蓝牙进行遥控,所以就需要用到L298N电机驱动模块HC-06蓝牙模块。下面就简单介绍一下这两个模块。

        一个L298N电机驱动模块能驱动2个马达,小车是四驱驱动,我们可以把两个L298N模块并联,并用12V电压供电,如果你的小车不需要调速,就不用考虑PWM问题,也就无需把使能端ENA、ENB的跳线帽拔掉,直接将IN1、IN2、IN3、IN4与单片机的端口相连,把OUT1、OUT2、OUT3、OUT4与马达相连即可。

        如果你的小车需要调速,则需要把ENA、ENB跳线帽拔掉,把使能端ENA、ENB分别接入单片机的不同端口,然后调速主要是程序的问题,这里用到T0定时器来制造不同的调制信号,说白了就是一定时间内使能端高电平所占的比例,比例越高,速度越快。

    void timer0() interrupt 1
    {                                
       TH0=(65536-50)/256;
       TL0=(65536-50)%256;
       PWMcntA++;        
       PWMcntB++;        
       PWMcntC++;        
       PWMcntD++;        
       if (PWMcntA>=230)
       {  PWMcntA=1;}
       if (PWMcntA<=cntPWMA)
       {   PWMa=1; }
       else
        {  PWMa=0; }
        .
        .
        .
        PWMb、PWMc、PWMd依此类推
    } 

    (程序仅供参考)

     

    电机驱动模块弄好后,离它能动就只有一步之遥了,我们需要用到HC-06蓝牙模块对小车进行控制

    蓝牙模块的TXD,RXD要分别与单片机的RXD、TXD相连,这样串口通信才能收发正常,然后软件设置串口。利用switch 函数,对蓝牙接收的数据进行处理,执行相应的运动。

     

    void service()
    {
    switch (BlueToothData)
    {
    case 'g':go_forward();
                   delay(1);
                   break;
    case 'b':go_back(); 
                   delay(1);
                   break;
    case 's':stop ();
                   delay(1);
                   break;
    .
    .
    依此类推
    }
    } 

    (程序仅供参考)

    如果上面的都弄好后,距离小车能动就只差半步了,这时候我们还需要一部手机,如果你会写上位机,你不妨可以自己做个APP来控制小车,如果不会开发手机APP,那也可以使用别人写好的蓝牙串口助手APP,在这里,我推荐SPP蓝牙助手,它是目前我试过的最好用的一款安卓蓝牙串口助手APP,它可以编辑你想要的按键功能,方便我们的个性化开发。

    做到这一步,恭喜你的小车已经可以动了,我认为你已经是一名合格的司机了,怎么样?系不系有点小激动?

    那就开车吧!

    展开全文
  • 基于51单片机蓝牙小车软件 包含上位机apk和单片机代码。。
  • 基于51单片机蓝牙遥控小车程序【硬软件部分】

    万次阅读 多人点赞 2020-03-07 12:55:20
    ****这是我写的第一篇博客,如果有问题欢迎指正...小车模型一个(直流电机一对) 电池18650一对 HC-08蓝牙模块 蓝牙模块主要要掌握其基本参数以及工作原理即可,附下图。 L298模块 l298内部包含4...
  • 这个是蓝牙小车的下篇,上篇的地址为:http://blog.csdn.net/lpstudy/article/details/78992038。 源代码: https://github.com/lpstudy/bluetooth-car 此帖子为昨天发的帖子...
  • 51单片机+电机驱动+蓝牙模块】

    千次阅读 2018-12-25 17:41:32
    1. 要完成的工作内容:  组装小车,完成线路规划。=======&gt;&gt; 完成任务,完成了小车的连线 ... 完成了 模块的测试,以及完成了 蓝牙控制小车前进 .....      2. 整个小车系统的...
  • 51超声波避障小车

    千次阅读 多人点赞 2018-12-26 13:24:11
    超声波避障小车 简介 本文小车的功能主要有两个:超声波测距避障,以及蓝牙遥控。主控芯片用的是STC89C52,电机驱动模块用的是L298N,超声波传感器HC-SR04,蓝牙模块使用的是HC-05,电机采用5V的直流电机。 总体设计...
  • 基于51单片机的寻迹小车制作(三)

    千次阅读 多人点赞 2017-10-11 12:44:56
    个人感觉寻迹小车与遥控小车的区别就是信号发送。 遥控小车是通过遥控器发送信号, 小车作出相应的动作; 而寻迹小车就是通过寻迹模块识别“线”, 发出相应的信号,  然后小车作出相应的动作(这里以白底黑线为例...
  • **51单片机智能小车(舵机云台超声波避障+循迹+蓝牙+红外跟随+遥控+TFT液晶显示屏) 本人由于使用的液晶显示屏,程序大于8K,所以更换为STC12C5A60S2芯片,与51芯片兼容。 功能比较多: 1舵机云台超声波避障 2....
  • 基于51单片机蓝牙智能小车——《加强篇》

    千次阅读 多人点赞 2018-08-29 10:02:29
    在前面的两篇文章中,我已经介绍了51智能小车的一些最基本功能,大家如果学习前两篇文章,我相信大家能够掌握了智能小车基本原理,并且完全已经有能力将小车制作出来并且实现小车的基本操作功能。但是呢,如果小车...
  • 请求智能小车的文档,有PCB,C语言源程序,其余的越多越好啦,作为新手,真诚恳请大神们施施援手
  •  很多热衷于玩单片机小车、机器人的童靴,往往也向往着有天能自己编写一个Android手机的遥控程序,通过自己的手机遥控小车单片机程序用C语言或者汇编什么的都可以容易完成,,无奈要写一个上位机的Android控制...
  • 此帖子现在有一个后续版本,实现了手机端的蓝牙程序控制小车运动以及接收小车状态并展示,链接地址:http://bbs.elecfans.com/forum.ph ... d&tid=544299&page=1 最初的想法是做一个红外遥控的装置,链接地址: ...
  • 51单片机制作蓝牙小车

    千次阅读 2018-06-11 20:48:04
    小车底盘,12v电源,驱动(L298N),万能板,具有pwm功能芯片(这里使用stc12c5608ad),排针至少两条,芯片底座,一个大电容(10μf),小电容(30pf),晶振(110592),两个1000Ω电阻,两个开关,一个LED,蓝牙...
  •  常见的单片机开发板搭载了一个小车的底盘,可以通过Android手机遥控、电脑遥控什么的,挺有意思,让使用者在学习单片机时能脱离枯燥的理论知识,在玩乐中获取单片机系统开发的能力。  板上资源也挺齐全,另外...
  • 【电赛优秀作品集】自动循迹小车制作方案

    千次阅读 多人点赞 2018-08-29 11:12:36
    简单来说自动循迹小车就是集光,机,电于一体的简易智能小车。参赛者通过论证,比较,实验之后,制作出了简易小车的循迹电路系统,整个系统基于普通玩具小车的机械结构,并利用了小车的底盘,前后轮电机及其自动复原...
  • 之前发的作品都是基于蓝牙控制的智能小车机器人,由于蓝牙的传输范围比较小,所以控制距离的局限性比较大,并且通过蓝牙传输视频会明显出现卡屏的现象。  而通过WiFi方式控制智能小车机器人能达到100米左右的...
1 2 3 4 5 ... 14
收藏数 265
精华内容 106
关键字:

51单片机蓝牙小车