STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式) 您所在的位置:网站首页 指纹锁原理结构图详解视频教程 STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)

STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)

2024-06-02 02:56| 来源: 网络整理| 查看: 265

文章目录 前言一、项目简介(一)功能概述(二)项目所用到的主要技术(三)本次项目的特点 二、材料选择三、原理图设计四、PCB设计五、源码设计六、安卓APP设计七、成品展示问题回复: QQ交流群1:981140834 QQ交流群2:473982062 QQ交流群3:718245727 QQ交流群4:598455837 项目视频 哔哩哔哩视频链接: https://www.bilibili.com/video/BV1fL41177HZ/ 项目资料

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版本智能门锁博客链接:https://blog.csdn.net/mbs520/article/details/106987758

一、项目简介 (一)功能概述

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 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 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个灯能不能正常全亮



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

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