资讯详情

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

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

制作教程:

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

材料(以下材料可在某宝中购买): 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板材用于制作外壳,直接加热需要弯曲的部分,然后弯曲) #舵机通电时不要用手旋转,否则会损坏舵机。事实上,尽量不要用手旋转。程序中可以修改舵机信号线连接的端口。 #舵机供电问题:数据线给单片机供电没问题,但是给舵机供电不好,舵机启动时电流会比较高,所以舵机需要单独的锂电池供电(3.7-4.2就可以)。方法:舵机有三条线,两条是供电(正负极),一条是控制线(接收)PWM信号),舵机的两条电源线分别连接一个锂电池,然后舵机的负极与电路板的负极连接形成电路。如果还不行就把舵机供电正极也接到最小系统板正极(注意舵机还是需要这个锂电池的,并非没有发挥作用,当舵机启动瞬间需要大电流时从这节锂电池中获得所需电流)。 #最小系统板记得插晶振动(无源晶振不分正负极),以下是:

#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--);

}

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

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

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

标签: 单片机应如何正确驱动继电器13p连接器mg643183连接器1连接器d连接器型号10075025连接器m20058

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台