文章目录
- 前言
- 一、项目简介
-
- (一)功能概述
- (二)项目所用到的主要技术
- (三)本次项目的特点
- 二、材料选择
- 三、原理图设计
- 四、PCB设计
- 五、源码设计
- 六、安卓APP设计
- 七、成品展示
- 问题回复:
QQ交流群1:981140834
QQ交流群2:473982062
QQ交流群3:718245727
QQ交流群4:598455837
项目视频
哔哩哔哩视频链接: https://www.bilibili.com/video/BV1fL41177HZ/
项目资料
stm32f1智能门锁免费资料链接:
链接: https://pan.baidu.com/s/1_au_QM2-59dMhIj4_lP2vQ
提取码:wa4y
stm32f1智能门锁完整资料链接:
V1.2:https://download.csdn.net/download/mbs520/80301067
建议加QQ获取资源更优惠:2809786963
实物购买链接:https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail?wh_weex=true&wx_navbar_transparent=true&id=662981777123&ut_sk=1.YS8KcP50tCcDANBMdqHJmYUj_21407387_1639226039728.copy.detail.662981777123.2054314811&forceFlush=1
前言
1、由于很多同学反馈如今STM32F4价格昂贵,制作成本太高,于是我又花费了近一个月的空闲时间来研究用最低的成本制作拥有F4智能门锁一样甚至更多的功能
STM32F4版本智能门锁博客链接:STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)
一、项目简介
(一)功能概述
F4版本:
1、可通过指纹模块增删查改家庭成员的指纹信息,增删查改是否成功的相关信息显示在OLED屏幕上
2、在指纹匹配过程中,如果采集的指纹与指纹模块库相匹配,OLED显示匹配成功,并转动步进电机一圈
3、可通过按键设定智能门锁密码,密码可设置为两个(密码六位),如果匹配两个中的一个成功,即可开锁,也可通过按键修改密码,所有的操作过程显示于OLED中
4、实现RFID与手机解锁(蓝牙解锁)
5、扩展:虚位密码解锁(虚位密码:自己百度)
F1版本新增:
1、可录入10张卡片
2、开锁顺时针转动步进电机一圈,关锁逆时针
3、新增蜂鸣器提示
4、新增解锁错误提示
(二)项目所用到的主要技术
F4版本:
1、IIC协议、SPI协议、串口协议
2、外部flash驱动、SD卡驱动
3、FTAFS文件系统
4、RTC实时时钟
F1版本:
1、IIC协议、SPI协议、串口协议
2、GUI界面设计,汉字显示
3、RTC实时时钟
(三)本次项目的特点
1、选材根据经济
材料最贵的是指纹模块40元,单片机仅10元
2、减少不必要材料
比如外部FLASH,SD卡模块,单片机晶振
2、使用PCB,拒绝繁琐接线
制作更方便,学习更简便
3、功能强大
拥有4种解锁方式、汉化界面、有修改与录入操作、有手机APP控制
4、材料功能利用率高
单片机引脚(48pin)利用率>90%,单片机内存(64K)利用率>70%
5、代码精简方便,逻辑性强
Show_Str(12,13,128,12,"智能门锁系统hzc123",12,0); //显示汉字、字符一句搞定
二、材料选择
1、主控STM32F103C8T6 (可以用兼容产品CH32F103C8T6代替)
2、步进电机(带驱动模块)
型号:28BYJ4+ULN2003
3、4X4矩阵按键(不用买模块,此项目用的16个单独按键焊接到PCB)
4、指纹模块AS608(串口控制)
5、0.96寸OLED显示屏(IIC)
型号:7针
6、RFID RC522 射频模块(带一张卡片)
7、杜邦线、排针、电阻、电容、三极管、电位器等
8、PCB板子一块
三、原理图设计
采用最简的硬件电路,做更多的功能
(截图模糊,可下载资源查看)
四、PCB设计
采用最便宜的双层版,10cm*10cm设计
五、源码设计
源码为F4版本智能门锁移植而来,修改了一些不兼容的功能与增加了新功能
void DisUnLock(void )
{
OLED_Clear();
Show_Str(20,10,128,24,"解锁中...",24,0);
OLED_Refresh_Gram();//更新显示
Walkmotor_ON();
Show_Str(20,10,128,24,"已解锁!",24,0);
OLED_Refresh_Gram();//更新显示
delay_ms(1500);
}
void DisLock(void )
{
OLED_Clear();
Show_Str(30,20,128,16,"锁定中!",16,0);
OLED_Refresh_Gram();//更新显示
Walkmotor_OFF();
Show_Str(30,20,128,16,"已锁定!",16,0);
OLED_Show_Font(56,48,0);//锁
OLED_Refresh_Gram();//更新显示
delay_ms(1000);
}
int main(void)
{
u16 set=0;
int key_num;
int time1;
int time2; //锁屏时间
char arrow=0; //箭头位子
//SysHSI_Init();
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
printf("串口功能正常\r\n");
Button4_4_Init(); //初始化与按键连接的硬件接口
OLED_Init(); //显示初始化
Walkmotor_Init(); //步进电机初始化
BEEP_Init(); //蜂鸣器初始化
usart2_init(usart2_baund); //初始化指纹模块
PS_StaGPIO_Init();
OLED_Clear();
starting();//开机信息 logo
RTC_Init(); //RTC初始化
SysPartInit(); //系统参数初始化
while(1)
{
//锁屏界面
MAIN:
OLED_Clear();
OLED_Show_Font(56,48,0);//显示锁图标
while(1)
{
time1++;Display_Data();//时间显示:每1000ms更新一次显示数据
if(DisFlag == 1)
{
DisFlag = 0;
OLED_Fill(0,24,16,63,0);
OLED_Refresh_Gram();//更新显示
}
if((time1%100)==1)
{
//MFRC522解锁
time1=0;
MFRC522_Initializtion();
Error=MFRC522_lock();
if(Error==0)
{
goto MENU;
}
else
{
OLED_Show_Font(56,48,0);//锁
}
//手机蓝牙解锁密码1
Error=usart1_cherk((char*)sys.passwd1);
if(Error==0){
OLED_Clear_NOupdate();
Show_Str(12,13,128,20,"蓝牙密码1:正确",12,0);
OLED_Refresh_Gram();//更新显示
delay_ms(800);
DisUnLock();
goto MENU;
}
//手机蓝牙解锁密码2
Error=usart1_cherk((char*)sys.passwd2);
if(Error==0){
OLED_Clear_NOupdate();
Show_Str(12,13,128,12,"蓝牙密码2:正确",12,0);
OLED_Refresh_Gram();//更新显示
delay_ms(800);
DisUnLock();
goto MENU;
}
}
//指纹解锁
if(PS_Sta) //检测PS_Sta状态,如果有手指按下
{
while(PS_Sta){
Error=press_FR();//刷指纹
if(Error==0)
{
//DisUnLock();
goto MENU; //跳到解锁界面
}
else
{
OLED_Show_Font(56,48,0);//锁
}
}
}
//密码锁
key_num=Button4_4_Scan(); //按键扫描
if(key_num!=-1)
{
Error=password();//密码解锁函数
if(Error==0)
{
goto MENU; //跳到解锁界面
}
else
{
OLED_Show_Font(56,48,0);//锁
}
}
delay_ms(1);
}
/********************主界面**************************/
MENU:
OLED_Clear();
MENUNOCLR:
OLED_Fill(0,0,20,48,0);
//主页菜单显示
if(arrow<3){
Show_Str(5,arrow*16,128,16,"->",16,0);//显示箭头
set=0;}
else {
Show_Str(5,(arrow-3)*16,128,16,"->",16,0);
set=3;}
Show_Str(25,0,128,16,setup[set],16,0);
Show_Str(25,16,128,16,setup[set+1],16,0);
Show_Str(25,32,128,16,setup[set+2],16,0);
Show_Str(0,52,128,12,"上 下 确定",12,0);
OLED_Refresh_Gram();//更新显示
time2=0;
while(1)
{
//超时锁屏
time2++;
if(time2>10000 | key_num==4){
OLED_Clear();
DisLock();
if(time2>10000)beep_on_mode2();
time2 =0;
OLED_Clear();
goto MAIN;
}
//手机蓝牙锁定
if(memcmp(USART_RX_BUF,"LOCK",4)==0) {
DisLock();
goto MAIN;
}
//功能选项选择
key_num=Button4_4_Scan();
if(key_num)
{
if(key_num==13){
if(arrow>0)arrow--;
goto MENUNOCLR;
}
if(key_num==15){
if(arrow<5)arrow++;
goto MENUNOCLR;
}
if(key_num==16){
switch(arrow)
{
case 0:Add_FR(); break;//录指
case 1:Del_FR(); break;//删指纹
case 2:SetPassworld();break;//修改密码
case 3:Set_Time(); break; //设置时间
case 4:Add_Rfid(); break; //录入卡片
case 5:Massige(); break; //显示信息
}
goto MENU;
}
}delay_ms(1);
}
}
}
六、安卓APP设计
1、图标设计
2、主界面设计
使用方法:①进入APP,等待3-5秒,自动连接智能门锁
②左上角显示已连接后,输入密码,点击OK即可解锁
③无法自动连接时,点击连接按钮进入手动连接界面
3、连接界面
使用方法:双击进行连接操作 一般连接JDY-31
4、信息界面设计
七、成品展示
1、开机界面
在这里插入图片描述
2、锁屏显示时间
3、解锁显示菜单
问题回复:
1、杜邦线版本代码和PCB版本一样吗?
不一样,代码不兼容,需要修改引脚定义(本博客为PCB版本代码)
2、APP在资料里面
3、蓝牙APP有的手机连不上,是不兼容,需要在应用商店下载“蓝牙串口”APP,发送“123456:!”解锁
4、步进电机不转,检查6跟线都接好没有,4个灯能不能正常全亮
今天的文章智能门锁厂家_智能门锁安全吗[通俗易懂]分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/57953.html