2019-02-25 20:41:23 qq_41204464 阅读数 3728
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4006 人正在学习 去看看 朱有鹏

 

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 

 

 

 

2019-11-24 23:10:34 itszok 阅读数 339
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4006 人正在学习 去看看 朱有鹏

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,然后关键的地方来了步进电机的一个5V输出口连接单片机给单片机供电,步进电机的GND连接单片机的GND.
(之前用电源连接单片机,单片机再输出供电给步进电机,减速电机很难动起来,一直以为是程序错误或者是杜邦线连接错误,搞了很久,后来知道是单片机输出的电流是不够大的,所以正确的连接是 : 电源供电步进电机,步进电机供电给单片机,步进电机供电给四个减速电机
步进电机的左右两边分别有两个口,分别为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)。做好了会继续写博客。希望这个能对你有一点点帮助。感谢~

2019-06-30 16:43:54 yesterdai 阅读数 780
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4006 人正在学习 去看看 朱有鹏

51单片机红外遥控小车

目录

1.红外模块
2.电源模块
3.电动机驱动模块
4.代码
5.总结

1.红外模块
小车采用的红外模块是hx1838模块,采用NEC编码,其时序图如下:时序图
模块时序图
2.电源模块
电源模块采用了两节3.7v的锂电池,由于单片机正常工作的电压在4.5~5.5伏之间,因此采用L7805模块将电压稳定在5伏,给单片机供电。对于四个电动机直接采用7.4伏电压供电。
3.电动机驱动模块
小车的驱动电机采用的是直流电机,根据现有的材料采用的是uln2003模块,使用PWM脉宽调制实现小车的加减速,但无法实现电机的正反转。
4.代码
github
5.总结
这个小车目前功能比较简单,以后会继续改进,emmm,代码也不够完善,要是有朋友能帮我完善就好了,嗯。

2019-04-28 11:38:33 weixin_41241397 阅读数 3271
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4006 人正在学习 去看看 朱有鹏

51单片机控制红外避障小车

产品图片在这里插入图片描述
具体制作步骤如下:

1、 材料准备:
L298N电机驱动模块 1个
红外避障模块 2个
马达 2个
车轮子 2个
电池 8个
51单片机最小系统 1个
STC89C52RC 2个
前轮转向轮子 1个

2、 电路连接图
在这里插入图片描述
3、 对STC89C52RC芯片进行编程

#include <reg52.h>

//下面的是连接l298n模块的引脚与单片机引脚相连
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;

//红外避障模块
sbit out1 = P2^0;
sbit out2 = P1^6;


/*函数声明*/
void go();			//前进
void back();		//后退
void left();		//向左
void right();		//向右
void stop();		//停止


void main()
{
	
	while(1)
	{
		if(out2 == 0)											//检测到右边有障碍物时,向左移动
		{
			left();
		}
		else if(out1 == 0)								//检测到左边边有障碍物时,向右移动
		{
			right();
		}
		else if(out1 == 1 && out2 == 1)		//检测到都没有有障碍物时,向前移动
		{
			go();
		}
	}
}

//前进
void go()
{
	IN1=1; 
	IN2=0; 
	IN3=1; 
	IN4=0;
}

//后退
void back()
{
	IN1=0; 
	IN2=1; 
	IN3=0; 
	IN4=1;
}

//向左
void left()
{
	IN1=0; 
	IN2=0; 
	IN3=0; 
	IN4=1;
}

//向右
void right()
{
	IN1=1; 
	IN2=1; 
	IN3=1; 
	IN4=0;
}

//停止
void stop()
{
	IN1=0; 
	IN2=0; 
	IN3=0; 
	IN4=0;
}

2016-09-16 18:01:27 Doraemon___ 阅读数 2693
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4006 人正在学习 去看看 朱有鹏

■PWM(Pulse Width Modulation)控制就是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。


■面积等效原理
    ◆是PWM控制技术的重要理论基础。 
    ◆原理内容:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。
        ☞冲量即指窄脉冲的面积。 
        ☞效果基本相同,是指环节的输出响应波形基本相同。 
        ☞如果把各输出波形用傅里叶变换分析,则其低频段非常接近,仅在高频段略有差异。 

■用PWM波代替正弦半波
   ◆将正弦半波看成是由N个彼此相连的脉冲宽度为/N,但幅值顶部是曲线且大小按正弦规律变化的脉冲序列组成的。
   ◆把上述脉冲序列利用相同数量的等幅而不等宽的矩形脉冲代替,使矩形脉冲的中点和相应正弦波部分的中点重合,且使矩形脉冲和相应的正弦波部分面积(冲量)相等,这就是PWM波形。
   ◆对于正弦波的负半周,也可以用同样的方法得到PWM波形。 
   ◆脉冲的宽度按正弦规律变化而和正弦波等效的PWM波形,也称SPWM(Sinusoidal PWM)波形。 
■PWM波形可分为等幅PWM波和不等幅PWM波两种,由直流电源产生的PWM波通常是等幅PWM波。
■基于等效面积原理,PWM波形还可以等效成其他所需要的波形,如等效所需要的非正弦交流波形等。  


■载波频率fc与调制信号频率fr之比N= fc/fr称为载波比,根据载波和信号波是否同步及载波比的变化情况,PWM调制方式可分为异步调制和同步调制两种。  
■异步调制 
    ◆载波信号和调制信号不保持同步的调制方式称为异步调制。 
    ◆通常保持载波频率fc固定不变,因而当信号波频率fr变化时,载波比N是变化的。 
    ◆在信号波的半个周期内,PWM波的脉冲个数不固定,相位也不固定,正负半周期的脉冲不对称,半周期内前后1/4周期的脉冲也不对称。 
    ◆当fr较低时,N较大,一周期内脉冲数较多,脉冲不对称产生的不利影响都较小,PWM波形接近正弦波。 
    ◆当fr增高时,N减小,一周期内的脉冲数减少,PWM脉冲不对称的影响就变大,输出PWM波和正弦波的差异变大,对于三相PWM型逆变电路来说,三相输出的对称性也变差。
    ◆在采用异步调制方式时,希望采用较高的载波频率,以使在信号波频率较高时仍能保持较大的载波比。 

■PWM控制技术的地位
   ◆PWM控制技术是在电力电子领域有着广泛的应用,并对电力电子技术产生了十分深远影响的一项技术。
■PWM技术与器件的关系
   ◆IGBT、电力MOSFET等为代表的全控型器件的不断完善给PWM控制技术提供了强大的物质基础。
■PWM控制技术用于直流斩波电路
   ◆直流斩波电路实际上就是直流PWM电路,是PWM控制技术应用较早也成熟较早的一类电路,应用于直流电动机调速系统就构成广泛应用的直流脉宽调速系统。
■PWM控制技术用于交流—交流变流电路
   ◆斩控式交流调压电路和矩阵式变频电路是PWM控制技术在这类电路中应用的代表。
   ◆目前其应用都还不多,但矩阵式变频电路因其容易实现集成化,可望有良好的发展前景。

  ◆以PWM控制技术为代表的斩波控制技术正在越来越占据着主导地位。
    
    ◆相位控制和斩波控制分别简称相控和斩控。
    


没有更多推荐了,返回首页