手机蓝牙连接51单片机自动开门

** 大学宿舍因为大家都睡在上铺,有时候舍友没带钥匙需要下去开门,非常的费劲,如果能通过手机控制自动开门就方便多了。**

制作教程:

材料:
在这里插入图片描述
成品:
成品
成品
效果演示:
演示效果
控制led:
控制led演示效果
控制开门:
开门演示效果
开门演示效果
#舵机是通过绳子连接到锁栓上的,绳子和锁栓用热熔胶固定,整个装置也是用热熔胶固定在门上的。如果你的门锁拉不开,试试给锁栓缝隙上润滑油,同时调整舵机的力矩。
#自动开门效果演示视频
#app、烧录程序、hex代码资源下载连接
#资源下载备用链接

1.材料清单和说明:
材料(以下材料都可以在某宝中买到):
51单片机或52单片机x1
(51单片机和52单片机是同一个系列,完全可以通用)
51最小系统板x1
STC单片机下载器
HC-06蓝牙模块
(此型号比较贵,可以用其它的蓝牙模块代替)
金属齿轮舵机(MG90S) x1
(为保证舵机的力量足够大需要选择金属齿轮舵机,推荐MG90S)
5V升压板x1
(这个可以不要,18650锂电池4.2v也能带动板子和舵机)
18650电池x2
18650电池壳x2
导线若干
ABS板(热可塑塑料板)x2
(ABS板用于制作外壳,直接加热需要弯曲的部位然后弯折)
2.电路连接图:
电路连接图
#舵机通电时不要用手转动,否则会损坏舵机,其实不通电也尽量不要用手转动。舵机信号线连接的端口可以在程序中修改。
#舵机供电问题:数据线给单片机供电没问题,但是给舵机供电不行,舵机启动瞬间电流会比较高,因此舵机需要单独的锂电池供电(3.7-4.2就可以)。方法:舵机有3根线,两根是供电(正负极),一根是控制线(接收PWM信号),舵机的两条电源线单独接一块锂电池,然后舵机供电的负极和电路板供电的负极接起来构成回路。如果还不行就把舵机供电正极也接到最小系统板正极(注意舵机还是需要这个锂电池的,并非没有发挥作用,当舵机启动瞬间需要大电流时从这节锂电池中获得所需电流)。
#最小系统板记得插晶振(无源晶振不分正负极),下面这个:
晶振插口
晶振
3.源程序:

#include <reg52.h>
#define uint unsigned int   
unsigned char data;
sbit M=P3^5;//此引脚接舵机信号线
sbit N=P2^0;//或此引脚接舵机信号线
sbit led=P3^6;
void delayms(uint);//延时函数

void UsartInit()//串口初始化
{
  TMOD=0X20;//工作方式控制寄存器
  TH1=0xF4;//Timer寄存器的高八位
  TL1=0xF4;//低八位
  PCON=0x80;//PCON 电源管理寄存器
  TR1=1;//T1计数器控制位
  SCON=0x50;//串行口控制寄存器
  ES=1;//串口中断开关
  EA=1;//中断总开关
}

void main()
{
  UsartInit();//调用串口初始化
  while(1);//等待串口中断
}

void Usart() interrupt 4 //中断处理函数,中断号为4
{  
   data=SBUF;//发送接收数据缓存空间
   RI=0;//接收中断标志位
   SBUF=data;//原样返回接收的数
   while(!TI);//如果发送了数据则继续向后运行
   TI=0;//发送中断标志位
   
   if(data=='D')//(door)如果接收到数据D,让舵机转动
  { 
            int b=0;//用于控制产生的pwm信号段长度,每个不同的pwm段对应一个舵机角度,因此控制了舵机在某角度停留的时长
            while(b<30)//产生pwm信号,控制舵机转动到起始角度
            {
				 M=1,N=1;
	             delayms(1);
	             M=0,N=0;
	             delayms(19);
	             b++;
            }
			 	 b=0;
            while(b<200)//产生pwm信号,控制舵机转动到中间角度并保持2s
            {
				 M=1,N=1;
	             delayms(2);
	             M=0,N=0;
	             delayms(18);
	             b++;
            }
				 b=0;
			 while(b<30)//产生pwm信号,控制舵机回到初始位置
            {
				 M=1,N=1;
	             delayms(1);
	             M=0,N=0;
	             delayms(19);
	             b++;
            }
   }
  	
   if(data=='L')//(led)如果接收到的数据L,让LED反转
   {
     led=~led;
   }
}  

void delayms(uint xms)//延时函数,参数为X毫秒
{
uint i,j;
for(i=xms;i>0;i--)
   for(j=110;j>0;j--);

}

4.将程序烧录到单片机:
#下载器USB端插电脑,TTL端连接单片机最小系统板,Vcc(正极)连板子Vcc,GND(负极)连板子GND,RXD连接板子TXD,RXD连接板子TXD。打开烧录程序:
插上下载器就会识别到串口号(如果识别不到则需要安装驱动)
插上下载器就会识别到串口号(如果识别不到则需要安装驱动)
STC89C52单片机就选这两种,一个不行就试下另一个
STC89C52单片机就选这两种,一个不行就试下另一个
波特率选下载器对应的波特率,我的下载器默认波特率为9600
波特率选下载器对应的波特率,我的下载器默认波特率为9600
打开“要烧录的程序.hex”,点击程序下载,成功效果如上图所示
打开“要烧录的程序.hex”,点击程序下载,成功效果如上图所示

#hex文件是源程序.c文件在软件keil4中编译后生成的,是单片机能读取的格式。(如果资源链接失效则需要下载keil4对.c源程序进行编译生成.hex文件。下载keil4和编译生成hex教程
5.调试效果
#首先在我后面的资源链接中或者去应用市场中搜索下载这款蓝牙串口app,其他的蓝牙串口app也是可以的。
蓝牙串口app
#程序烧录到单片机了,电路也连接好了,下一步就可以打开app连接我们的蓝牙模块进行调试了。蓝牙模块要设置密码和波特率,波特率保证和手机app的正确通信,密码保证开门的安全。HC06模块设置方法:hc06模块设置密码和波特率方法。HC06模块的默认密码为1234,默认波特率为9800。
#蓝牙串口APP通过HC06模块和单片机正确通信示例(单片机将收到消息返回):
单片机将收到消息返回
#程序中写了将收到的信息返回回去的代码,用来测试蓝牙模块和单片机中的程序是否正常工作。发送L为开关灯,发送D为开门,如果收到单片机通过蓝牙传回相同的信息,则系统工作正常,如上图所示。
#如果什么都不返回,则需要检查蓝牙模块的连线是否正确,TXD和RXD是否连反了,还有就是程序是否成功烧录。如果有返回值但返回的是乱码,则是app发射信息的波特率和蓝牙模块设置的波特率不相符的原因,需要更改蓝牙模块的波特率,建议改为4800或9600,我这里测试时蓝牙模块设置的波特率是4800。
#连接好舵机的情况下发送D舵机就会转到90度角,3秒后复位(用来给人推门进入的时间)。舵机臂通过绳子连接到门栓就可以开门了。

6.扩展:
#如果想用手机控制led灯,则led的正极接Vcc,负极接板子的P3.6接口(程序中可以修改)。(如果想让单片机控制一个台灯亮灭,则用Vcc和P3.6接一个电磁继电器,再用继电器连接台灯电路)
# 如果是其他类型的门锁,例如需要拧把手的门锁,可以尝试买下面这种带齿轮组小电机代替舵机,有更强的拉力并可以持续旋转,需要自己改下程序和电路连接。
带齿轮组的小电机
#改进后的版本:
放弃了5v升压板,使用更小的最小系统板,供电改用USB-DC电源线方式,体积和成本大大减小:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
觉得不错的话请点个赞吧,感谢!

  • 13
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值