门禁锁加装指纹及联网控制功能 您所在的位置:网站首页 门禁指纹接线图片高清版 门禁锁加装指纹及联网控制功能

门禁锁加装指纹及联网控制功能

2024-06-29 15:04| 来源: 网络整理| 查看: 265

设计说明 指纹锁在原先的基础上再增加联网控制功能,可以用手机来控制开锁。 相比原先的方案,电路方面有两个较大的改变。 1、 第一个就是把执行开锁程序的主控由STC15w204s换成ESP12F(ESP8266) WIFI芯片,ESP8266内部集成了主控,可以对其进行编程写入程序,来控制相关GPIO引脚。从而实现开锁关锁的功能。 2、 第二就是电路加入了3.3V和3.73V稳压,因为门锁的直接供电电压是8.35V,所以通过AMS1117-3.3来给ESP8266供电,并使用AMS1117-ADJ调出3.7V左右的电压给指纹模块和STC15w204s供电。 3.7V的电压直接接到指纹模块的电池接口,而不是接到5V的充电口,这样指纹模块在没有检测到手指时就进入低功耗待机状态。 3、 其次指纹模块里的单片机代码也进行了修改,增加了掉电功能,并通过中断唤醒,在没有开锁指令时就单片机就进入低功耗掉电模式,使总体功耗降低,并减少了发热量。 物联网方案采用了蓝灯科技的接口进行通信,代码采用Arduino安装ESP8266库和Blinker库进行编写。 电路连接是用AD画的STC15最小系统板进行连接。当然也可以采用洞洞板或搭焊的方式进行连接。 本装置安全性不高,仅用于技术学习,若您使用本装置造成了经济损失,后果自负。 总体电路连接图。 其他相关可以参考我之前发的文章门禁锁加装指纹功能 在这里插入图片描述

我是将元件焊接在PCB板上再进行连接。 ESP8266相关,采用电灯科技的方案,并且添加了小爱同学控制,有关小爱同学详情见https://diandeng.tech/doc/xiaoai

ESP8266程序代码

#define BLINKER_MIOT_LIGHT #define BLINKER_WIFI #define AB 0x00 //设置密码第一位 #define BB 0x00 //设置密码第二位 #define CB 0x00 //设置密码第三位 #define DB 0x00 //设置密码第四位 #define EB 0x00 //设置密码第五位 #define FB 0x00 //设置密码第六位 #include char auth[] = "******"; //设备key,打开点灯app,添加设备,选择arduino设备,选择wifi接入,这里就会获得一个密钥,把密钥填写在这里。 char ssid[] = "*******"; //路由器wifi ssid char pswd[] = "*******"; //路由器wifi 密码 int a; int i; int GPIO=12;//定义GPIO口用于控制电机驱动 int GPIO2=13; #define BUTTON_1 "ButtonKey" BlinkerButton Button1("key1");//这里需要根据自己在BLINKER里面设置的名字进行更改 char mima[6]; char num[1]; void kaisuo() //开锁函数 { digitalWrite(GPIO, HIGH); digitalWrite(GPIO2, LOW); Blinker.delay(210); digitalWrite(GPIO, LOW); digitalWrite(GPIO2, LOW); Blinker.delay(4500); digitalWrite(GPIO, LOW); digitalWrite(GPIO2, HIGH); Blinker.delay(210); digitalWrite(GPIO, LOW); digitalWrite(GPIO2, LOW); } void passclean(void) //密码清除函数 { i = 0; for (i = 0; i BLINKER_LOG("get button state: ", state); if (state == BLINKER_CMD_ON) { kaisuo(); BlinkerMIOT.powerState("on"); BlinkerMIOT.print(); } } void miotPowerState(const String & state) //小米小爱同学控制响应函数 { BLINKER_LOG("need set power state: ",state); if (state == BLINKER_CMD_ON) { kaisuo(); BlinkerMIOT.powerState("on"); BlinkerMIOT.print(); } } void setup() { Serial.begin(9600); pinMode(GPIO,OUTPUT); pinMode(GPIO2,OUTPUT); digitalWrite(GPIO2,LOW); digitalWrite(GPIO,LOW); Blinker.begin(auth, ssid, pswd); Button1.attach(button1_callback); BlinkerMIOT.attachPowerState(miotPowerState);//这段代码一定要加,不加小爱同学控制不了,务必在回调函数中反馈该控制状态 } void loop() { Blinker.run(); while(Serial.available()>0){ num[1]=Serial.read(); Serial.println(mima[a]); if(num[1]==AB){ //判断接受到的数据是否符合密码A位,若符合,则将密码放入到pass数组第一位里。 mima[0] = num[1]; //以下同理 } else if(num[1]==BB){ mima[1]= num[1]; } else if(num[1]==CB){ mima[2]= num[1]; } else if(num[1]==DB){ mima[3]= num[1]; } else if(num[1]==EB){ mima[4]= num[1]; } else if(num[1]==FB){ mima[5]= num[1]; } else { passclean(); //清空已接收的密码。 } if((mima[0] == AB)&&(mima[1]==BB)&&(mima[2]==CB)&&(mima[3]==DB)&&(mima[4]==EB)&&(mima[5]==FB)){ //若密码符合则清空已接收的密码并执行开锁函数 Serial.println("ok"); passclean(); kaisuo(); } } }

STC15W204S程序

//使用了STC的资料及范例程序 #include #include "intrins.h" sbit key = P3^3; sbit INT1 = 0xB3; //bit FLAG; //1:上升沿中断 0:下降沿中断 #define A 0x00 //设置密码第一位 十六进制数,比如0x22,0x89,0xEF,0x3F #define B 0x00 //设置密码第二位 #define C 0x00 //设置密码第三位 #define D 0x00 //设置密码第四位 #define E 0x00 //设置密码第五位 #define F 0x00 //设置密码第六位 unsigned char code tab[]={A,B,C,D,E,F}; //密码 void send(unsigned char dat) //数据发送程序 一次发送8位,比如0x22,对应的8位二进制为00010110 { SBUF=dat; //将要发送的数据存入发送缓冲器中 while(TI==0); //若发送中断标志位没有置1(正在发送数据),就等待 TI=0; //若发送完成,TI自动置1,这里把它清零 } void delay(unsigned int ms) //延时函数 { unsigned int i,j; for(i=ms;i>0;i--) for(j=892;j>0;j--); } void exint1() interrupt 1 //INT1中断入口 { unsigned int k; if(key==1) { delay(10); if(key==1) { for(k=0;k TMOD=0x20; //定时器T工作于方式2(可自动重装的8位定时器) SCON=0x40; //串口工作方式1,不允许接收 PCON=0x00; AUXR |=0X01; //启动定时器T2 AUXR |=0X04; //波特率不倍增 T2L =0xE0; //波特率为9600b/s T2H =0xFE; AUXR |= 0X10; key = 0; P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P6M0 = 0x00; P6M1 = 0x00; P7M0 = 0x00; P7M1 = 0x00; IT1 = 0; //设置INT1的中断类型为上升沿和下降沿,上升沿和下降沿均可唤醒 // IT1 = 1; //设置INT1的中断类型为仅下降沿,下降沿唤醒 EX1 = 1; //使能INT1中断 EA = 1; while(1) { PCON = 0x02; //MCU进入掉电模式 _nop_(); //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序 _nop_(); } }

电机驱动我采用的是MX608E芯片相关电路如下 在这里插入图片描述 STC15W204S最小系统PCB板相关 相关PCB文件放在帖子最后。 当PCB板焊接上AMS1117-ADJ后电阻R3不用焊接。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

和SOP8引脚的一样,当接入AMS1117后,R1电阻不用焊接。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

参考文章 基于arduino用esp8266和继电器实现小爱同学开关灯 ESP8266-12F引脚接法 关联文章门禁锁加装指纹功能 点击此处下载STC15最小系统板 个人网站文章

--------------------------------本教程由光阴似水1204原创,转载请附上本文网址。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有