基于单片机的人脸识别的智能门禁系统设计

news/2024/9/18 14:57:48/ 标签: 单片机, mongodb, nosql

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 功能介绍
  • 设计清单
  • 核心代码
  • 具体实现截图
  • 参考文献
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

普遍来讲门禁管理系统的主要在以下的范围使用:职员办公室、数据中心、实验室、社区出入口、高档宾馆房间门等重要场所。如今,门禁控制大多是机械结构的,由于机械门禁系统中缺乏电子设备,因此相对可靠。可以说,这是一种带有密码的机械密码门禁。机械门禁的内部结构非常简单,但安全系数很低,这也导致了时常会发生盗窃事件。
在当前的技术背景下,本文精心打造了一款前沿的视频识别门禁控制系统。该系统以STM32F103C8T6作为核心控制单元,用SG90作为舵机驱动开关门,TFT彩屏可以显示具体信息。该系统不仅支持传统的键盘手动输入方式,更融合了先进的人脸识别技术,为用户提供了更为便捷、智能的开门体验。这款智能门禁系统凭借其卓越的性能,展现了多个显著优势。首先,其高度灵敏的识别能力确保了用户操作的即时响应;其次,强大的保密性设计使得系统能够抵御各类非法入侵,保障用户安全;再者,高安全系数的设计使得系统更加稳定可靠,为用户提供了持久的安全保障。此外,系统内部活动部件的稀少或不存在,极大地减少了磨损,从而延长了使用寿命,为用户带来了更加经济实惠的选择。本文所设计的视频识别门禁控制系统,以其卓越的性能、便捷的操作体验和长久的使用寿命,无疑将成为未来门禁系统发展的新标杆。

功能介绍

本次设计的人脸识别的门禁控制系统其硬件部分是以STM32F103C8T6为核心的单片机,采用0V2640摄像头对人员的人脸识别,采用矩阵按键对系统的操作以及密码的输入,使用蜂鸣器来作为报警模块,开门装置是电子锁控制,显示设备采用OLED液晶显示,无线模块在一番思索后选择了蓝牙模块传输。[5]系统框图如图2.1所示:
在这里插入图片描述

图2.1 系统框图
要求达到功能如下:
(1)可从键盘进行相关设定和功能选择等;
(2)实现对到访人员人脸的视频检测功能,能够对用户人脸信息进行录入、删除、修改、识别等功能;
(3)能够实现键盘密码输入、在密码正确时解门禁,三次输入密码错误时,在一定时间内禁止密码输入并且蜂鸣器报警;
(4)LCD12864液晶可对相关信息进行显示;相关的报警信息会使用蓝牙模块发送到手机APP,可以使用手机APP远程对门禁的开启操作。

设计清单

步进电机元件清单
1.7*9万用板
2.四位一体共阳.36数码管
3.STC89C51
4.步进电机

核心代码

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key_m.h"
#include "lcd1602toOLED.h"
#include "buzzer.h"	
#include "stmflash.h"
#include "password.h"
#include "IOout.h"
#include "usart.h"
#include "usart2.h"
u8 err=0;
//u8 error = 0;
enum MODE_e{OPENDOOR=0,//搜索授权LOGIN_IC,//注册IC卡LOGOUT_IC,//注销IC卡LOGIN_FG,//注册指纹LOGOUT_FG,//注销指纹RESET_PW //重置密码   
};
//刷卡用
u8 ICbuf[4]={0};//IC缓存
char str[]="0123456789abcdef";
u8 refresh = 1;
u8 sta;
u8 error = 0;
u8 consgOK=0;
u8 size[4];
const u8 cmd1[]={0xEF,0xAA,0x12,0x00,0x00,0x00,0x00,0x12};//识别指令
const u8 cmd2[]={0xEF,0xAA,0x13,0x00,0x00,0x00,0x00,0x13};// 注册指令
void Relay(u8 _sta);
//显示函数
void DisIC_hex(void);
void Dis_LOGIN_IC(void);
void Dis_LOGOUT_IC(void);void sendAPP(void);void OPEN_THE_DOOR(u8 id)
{char str2[50];err = 0;LCD_GotoXY(3,1);//"0123456789abcdef"LCD_Print("授 权 进 入");switch (id){case 0://密码开锁sprintf(str2,"密码正确.-->已开锁\r\n");break;case 1://IC卡开锁sprintf(str2,"IC%02X%02X%02X%02X-->已开锁\r\n", ICbuf[0],ICbuf[1],ICbuf[2],ICbuf[3]);           break;case 2://指纹开锁sprintf(str2,"人脸识别正确-->已开锁\r\n");break;case 3:sprintf(str2,"wifi ctrl-->已开锁\r\n");//printf()break;default:break;}APPsendValue(str2,"","",0,0,0);delay_ms(1000);RelaySW(1);delay_ms(2000);RelaySW(0);   APPsendValue(" "," ","",0,0,0);	
}
extern void SaveFlash(void);
extern void ReadFlash(void);  
char str1[50];
int main(void)
{u8 cnt;u8 key;u8 sta;u8 mode=OPENDOOR;s8 i;u8 errCnt;//使用内部高速晶振HSI RC(8Mz)//配置SYSCLK->36MHz,HCLK->36MHz //APB1->36MHz,APB2->36MHz,ADC1,2->18MHzsysClockHSI_Config();MY_NVIC_PriorityGroupConfig(2);        delay_Init(SysClockFreq/1000000);uart_init(SysClockFreq/1000000,9600);USART2_Init(36,115200);	LED_Init();delay_ms(50);LCD_Init();Buzzer_Init();KeyM_Init();RelaySW(0);ReadFlash();LCD_GotoXY(0,1);
//    LCD_Print(str); delay_ms(1000);   Beep(200);
Start:      mode=OPENDOOR;LCD_Clear();LCD_GotoTitle(20);LCD_Print(" 人脸识别密码锁");disHome(); APPsendLable0("信息","提示","","","","");while(1){delay_ms(1);cnt++;if(cnt>200){cnt = 0;LED = !LED;//人脸识别成功if(consgOK==1){LCD_GotoXY(0,1);LCD_Print("  face id   ok  ");	SetBeep(1);delay_ms(1000);LCD_GotoXY(0,1);LCD_Print("    --------    ");SetBeep(0);consgOK = 0;Clr_InputPW();buzzer=1;LCD_GotoXY(0,0);LCD_Print("Authorization OK");LCD_GotoXY(0,3);LCD_Print(" Open The Door  ");delay_ms(600);buzzer=0;delay_ms(900);OPEN_THE_DOOR(2);error=0;delay_ms(500);goto Start;}//人脸识别失败else if(consgOK==2){LCD_GotoXY(0,1);LCD_Print("  face id   err ");SetBeep(1);	delay_ms(1000);LCD_GotoXY(0,3);LCD_Print("    --------    ");SetBeep(0);consgOK = 0;LCD_GotoXY(0,1);LCD_Print(" password error!");Beep(100);Beep(100);Beep(100);error++;if(error>=3){while(1){Beep(100);}}delay_ms(800);goto Start;}//sendAPP();if(err>=3){errCnt = 0;while(errCnt<50)//锁机时间{errCnt++;Beep(200);while(1){Beep(200);}}err = 0;}            }key = Key_Map(KeyScan(0));//扫描矩阵按键if(key==0){if(keyUSART){key = keyUSART;keyUSART = 0;}}if(key){Beep(200);              if(key=='C')//人脸注册{for(i=0;i<8;i++)Send_Char_Com2(cmd2[i]);		LCD_GotoXY(0,1);LCD_Print(" reg face  id   ");				delay_ms(1000);LCD_GotoXY(0,1);LCD_Print("    --------    ");			}else if(key=='D')//人脸识别{for(i=0;i<8;i++)Send_Char_Com2(cmd1[i]);LCD_GotoXY(0,1);LCD_Print(" conf face id   ");				delay_ms(1000);LCD_GotoXY(0,1);LCD_Print("    --------    ");			}else {sta = InputPassword(key);if(0xFF == sta){LCD_GotoXY(0,0);//"0123456789abcdef"LCD_Print(" Input A New PW."); disHome();        mode = RESET_PW;}else if(0x0F==sta)//开门{OPEN_THE_DOOR(0);goto Start;}else if(0xEE==sta)//密码错误{LCD_GotoXY(0,1);//"0123456789abcdef"LCD_Print("password [error]");//printf("password [error]");APPsendValue("password [error]","","",0,0,0);Beep(200);Beep(200);Beep(200);delay_ms(1000);err++;goto Start;}}            }while(mode == RESET_PW)//重置密码{key = Key_Map(KeyScan(0));if(key==0){if(keyUSART){key = keyUSART;keyUSART = 0;}}            if(key=='A'||key=='B'||key=='C'||key=='D')goto Start;//放弃密码重置else if(key){Beep(200);sta = SetPassword(key);if(sta==0xFF){LCD_GotoXY(0,1);//"0123456789abcdef"LCD_Print("reset PW. [OK]  ");//printf("reset PW. [OK]\r\n");APPsendValue("reset PW. [OK]","","",0,0,0);Beep(1000);delay_ms(1000);goto Start;    }else if(sta==0xEE){LCD_GotoXY(0,1);//"0123456789abcdef"LCD_Print("reset PW. [err] ");//printf("reset PW. [err]\r\n");APPsendValue("reset PW. [err]","","",0,0,0);Beep(200);Beep(200);Beep(200);delay_ms(1000);goto Start;    }}}                }     
}

具体实现截图

请添加图片描述

在这里插入图片描述

参考文献

[01]贾川. 浅谈人脸识别技术应用及发展趋势[J]. 中国安防,2010,(03):91-94
[02]崇玉海. 基于二维图像表示的人脸检测与识别技术研究[D]. 中国优秀硕士学位论文全文数据库,2014,(03):
[03]姚丽君. 人脸识别技术的发展与应用[J]. 科技创新导报,2010,(21):35
[04]张红岩. 基于神经树的人脸识别方法研究[D]. 中国优秀硕士学位论文全文数据库,2011,(06):
[05]杨敏英, 陈辉煌, 杨阿弟, 佘明辉. 一种家庭智能门禁语音报警控制设计与实现[J]. 长春大学学报,2016,(4):6
[06]刘康, 林如威, 熊宇, 崔晓, 曾贵娥. LED控制器设计[J]. 电子技术与软件工程,2022,(17):4
[07]曹义 邢玉秀 张琳 刘亿文. PCB设计课程项目驱动教学改革的探索[J]. 电子世界,2014,(01):178-179
[08]田雅楠. 基于单片机的肥箱料位检测装置设计与试验研究[D]. 中国优秀硕士学位论文全文数据库.2020,(09):
[09]韩兴会. 基于STM32和LwIP的无线传感器网络网关研究与应用[D]. 中国优秀硕士学位论文全文数据库2018,(02):
[10]王静. 基于单片机的数据串口通信[D]. 中国优秀硕士学位论文全文数据库,2013,(02):
[11]王伟. 基于STM32的大功率LED老化电源的设计[D]. 中国优秀硕士学位论文全文数据库,2017,(04):
[12]陈隐宏. 简易船舶GPS、艏向显示仪的设计[D]. 中国优秀硕士学位论文全文数据库,2015,(11):
[13]孙强强, 丁小伟. 基于52单片机的机场智能寄存柜设计[J]. 长江信息通信,2021,(05):113-115
[14]周文龙. 基于单片机控制的电子密码锁设计[J]. 大众商务:下半月,2009,(3):2
[15]牛国锋. 基于瑞萨MCU的温度预警系统设计与实现[D]. 中国优秀硕士学位论文全文数据库,2013,(10):

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟


http://www.ppmy.cn/news/1525236.html

相关文章

【Redis入门到精通一】什么是Redis?

目录 Redis 1. Redis的背景知识 2.Redis特性 3.Redis的使用场景 4.Ubuntu上安装配置Redis Redis Redis在当今编程技术中的地位可以说非常重要&#xff0c;大多数互联网公司内部都在使用这个技术&#xff0c;熟练使用Redis已经成为开发人员的一个必备技能。本章将带领读者…

oracle select字段有子查询会每次执行子查询吗

Oracle在执行SELECT语句时&#xff0c;如果子查询被嵌套在主查询中&#xff0c;子查询会被执行多次&#xff0c;这是因为子查询的结果不会被缓存。每次主查询需要用到子查询的结果时&#xff0c;子查询都会被重新执行。这种行为可能会导致性能问题&#xff0c;特别是当子查询结…

计算机网络:概述 - 计算机网络概述

目录 一. 互联网概述 1.1 网络 1.2 互联网 1.3 因特网 二. 互联网发展的三个阶段 三. 互联网的标准化工作 四. 互联网的组成 五. 计算机网络的类别 5.1 计算机网络的定义 5.2 计算机网络的不同类别 一. 互联网概述 起源于美国的互联网现如今已…

golang学习笔记13——golang的错误处理深度剖析

推荐学习文档 golang应用级os框架&#xff0c;欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

简单了解 JVM

目录 ♫什么是JVM ♫JVM的运行流程 ♫JVM运行时数据区 ♪虚拟机栈 ♪本地方法栈 ♪堆 ♪程序计数器 ♪方法区/元数据区 ♫类加载的过程 ♫双亲委派模型 ♫垃圾回收机制 ♫什么是JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java虚拟机。 虚拟机是指通过软件模…

新手制作视频用什么软件好?五款剪辑工具分享!

在数字时代&#xff0c;视频制作已成为许多人表达创意、记录生活的重要方式。但对于新手而言&#xff0c;面对琳琅满目的视频编辑软件&#xff0c;往往会感到无所适从。今天&#xff0c;我们就来推荐五款适合新手的视频制作软件&#xff0c;它们分别适用于不同的操作系统平台&a…

探索 Linux:开源操作系统的璀璨世界

摘要&#xff1a;本文围绕 Linux 展开深入探讨。从历史来看&#xff0c;20 世纪 90 年代初 Linus Torvalds 发布 Linux 内核源代码开启新纪元&#xff0c;开源模式使内核不断成长。Linux 的核心概念包含内核、文件系统、进程和线程等&#xff0c;其中内核管理硬件资源与提供系统…

Win10安装.net FrameWork3.5失败解决方法

win10安装.net FrameWork3.5失败解决方法 已经好久没有来投稿了,实在最近业务缠身,忙的焦头烂额(呵~多么伟大的牛马) 但最近开发使用windows11实在是拉胯的不行,升级完就后悔,所以就一怒之下,重装了win10 可是,好家伙,我重装完遇到一个问题,就是在使用.Net Framework3.5,按照Mi…

物理学基础精解【5】

文章目录 质点的速度一、平均速度二、瞬时速度三、速度质点的速度计算一、平均速度的计算二、瞬时速度的计算三、速度矢量的标量分量性质、定义、计算、例子和例题性质定义计算例子例题 质点的瞬时速度的方向的计算、性质、例子和例题计算性质例子例题 质点的速度 本题主要考察…

可对画面进行平台传输,实时查看监控的智慧交通开源了

智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

C语言字符函数与字符串函数

目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 2. 字符串函数 2.1 strlen 函数 2.2 strcpy 函数 2.3 strcat 函数 2.4 strcmp 函数 2.5 strncpy 函数 2.6 strncat 函数 2.7 strncmp 函数 2.8 strstr 函数 结语 1. 字符函数 在C语言标准库中提供了一系列用于…

RocketMQ 消费方式

在消息传递系统中&#xff0c;“推&#xff08;Push&#xff09;”和“拉&#xff08;Pull&#xff09;”是两种不同的消息消费方式&#xff0c;RocketMQ 也支持这两种模式。下面是对这两种模式的详细解释&#xff1a; 1. 推模式&#xff08;Push Model&#xff09; 模式简介…

【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版

文章目录 一、算法概念一、算法原理&#xff08;一&#xff09;分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost 分类损失函数5、样本权重更新6、AdaBoost 的强分类器 &#xff08;二&#xff09;回归算法基本思路1、最大误差的计算2…

智慧环保平台建设方案

智慧环保平台建设方案摘要 政策导向与建设背景 背景&#xff1a;全国生态环境保护大会提出坚决打好污染防治攻坚战&#xff0c;推动生态文明建设&#xff0c;目标是在2035年实现生态环境质量根本好转。构建生态文明体系&#xff0c;包括生态文化、生态经济、目标责任、生态文明…

【每日一题】LeetCode 2398.预算内的最多机器人数目(滑动窗口、数组、二分查找、前缀和、堆(优先队列))

【每日一题】LeetCode 2398.预算内的最多机器人数目&#xff08;滑动窗口、数组、二分查找、前缀和、堆&#xff08;优先队列&#xff09;&#xff09; 题目描述 给定两个整数数组 chargeTimes 和 runningCosts&#xff0c;分别代表 n 个机器人的充电时间和运行成本。再给定一…

通过docker overlay2目录名查找容器名和容器ID

有时候经常会有个别容器占用磁盘空间特别大&#xff0c;这个时候就需要通过docker overlay2 日录名查找对应容器名. 1.首先进入到 /var/lib/docker/overlay2 目录下 # cd /var/lib/docker/overlay2 2.查看谁占用容间最大 # du -h -d 1 | grep G |sort -nr 3.再通过目录名查找…

【机器学习(二)】分类和回归任务-决策树算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;树的构造&#xff08;二&#xff09;划分选择1、信息增益2、基尼指数3、卡方检验 &#xff08;三&#xff09;停止标准&#xff08;四&#xff09;剪枝处理1、预剪枝2、后剪枝 三、决策树的优缺点四、决策树分类任…

centos下nvme over rdma 环境配置

nvme over rdma 环境配置 本文主要介绍NVMe over RDMA的安装和配置。关于什么是NVMe over Fabrics,什么是NVMe over RDMA&#xff0c;本文就不做介绍了&#xff0c;网上资料一大堆。 可以看看什么是NVMe over Fabrics&#xff1f; RDMA&#xff08;全称&#xff1a;Remote Dir…

DevOps -CI/CD 与自动化部署

DevOps - CI/CD 与自动化部署详解 DevOps 是一种结合开发&#xff08;Development&#xff09;与运维&#xff08;Operations&#xff09;的方法论&#xff0c;旨在通过工具和文化变革&#xff0c;促进软件开发和运维之间的协作&#xff0c;提升软件交付的效率、质量和稳定性。…

Golang | Leetcode Golang题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; func canCross(stones []int) bool {n : len(stones)dp : make([][]bool, n)for i : range dp {dp[i] make([]bool, n)}dp[0][0] truefor i : 1; i < n; i {if stones[i]-stones[i-1] > i {return false}}for i : 1; i < n; i {…