【毕业设计项目】基于单片机的指纹识别系统实现 - 物联网 stm32 c51

article/2025/8/18 10:19:17

文章目录

  • 1 简介
  • 2 指纹识别简介
  • 3 指纹识别传感器原理
    • 3.1 光学指纹传感器原理
    • 3.2 半导体指纹传感器
    • 3.3 电容式指纹识别传感器
  • 4 系统设计
    • 4.1 指纹识别核心技术流程
    • 4.2 硬件结构
    • 4.3 采集到的指纹
    • 4.4 指纹识别算法流程
  • 5 实现效果
  • 6 部分实现代码
  • 6 最后


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目

基于单片机的指纹识别系统实现

大家可用于 课程设计 或 毕业设计


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


2 指纹识别简介

指纹识别是世界上最先进的身份识别技术之一,目前在银行金融系统,公安案例分析、户籍管理系统、门禁、考勤都得到了成功的应用。指纹识别技术利用人类指纹的惟一性和不变性这种生理特征,将指纹作为人的一种“活的身份证”,具有独特的防伪性、方便性、可靠性、安全性等众多优点。

在这里插入图片描述

众所周知,IC卡、磁卡须防伪造,密码须防破译和盗用,应用指纹识别系统可告别用识别卡、口令、密码、私人印章等鉴别人的身份的传统方法,改变了以往认卡不认人的疏漏状况,其应用领域必将越来越广泛。

所以,学长今天向大家介绍如何使用单片机实现指纹识别系统。

3 指纹识别传感器原理

3.1 光学指纹传感器原理

借助光学技术采集指纹是历史最久远、使用最广泛的技术,主要是利用光的折摄和反射原理,将手指放在光学镜片上,手指在内置光源照射下,光从底部射向三棱镜,并经棱镜射出,射出的光线在手指表面指纹凹凸不平的线纹上折射的角度及反射回去的光线明暗就会不一样。

用棱镜将其投射在电荷耦合器件上CMOS或者CCD上,进而形成脊线(指纹图像中具有一定宽度和走向的纹线)呈黑色、谷线(纹线之间的凹陷部分)呈白色的数字化的、可被指纹设备算法处理的多灰度指纹图像。

在这里插入图片描述

原理图
在这里插入图片描述

3.2 半导体指纹传感器

这类传感器,无论是电容式或是电感式,其原理类似,在一块集成有成千上万半导体器件的“平板”上,手指贴在其上与其构成了电容(电感)的另一面,由于手指平面凸凹不平,凸点处和凹点处接触平板的实际距离大小就不一样,形成的电容/电感数值也就不一样,设备根据这个原理将采集到的不同的数值汇总,也就完成了指纹的采集。

在这里插入图片描述

3.3 电容式指纹识别传感器

在这里插入图片描述
原理是将电容感整合于一块芯片中,当指纹按压芯片表面时,内部电容感测器会根据指纹波峰与波谷而产生的电荷差,从而形成指纹影像。如下简图,可以把上面的凹凸认为是指纹的谷和脊,那么同传感器就会形成不同的电容差,这样传感器就可以根据这些不同的电容差画出指纹的纹理。

4 系统设计

这里学长使用光学指纹传感器来构建指纹识别系统。

当指纹传感器收到指纹信息, 将通过串口给单片机发送命令, 单片机同意并接收相应的信息, 指纹传感器采集的指纹转换成 RGB 格式, 并且数据传输到单片机, 单片机通过存储在 EEPROM 中的固化程序执行大量的模式识别和图像处理相关计算, 当用户的指纹被确认,单片机将命令执行机构动作, 开关开。

4.1 指纹识别核心技术流程

在这里插入图片描述

4.2 硬件结构

在这里插入图片描述
学长设计的,基于stm32 单片机的 指纹识别系统、由68128RAM和EEPROM芯片等构成,具有指纹录入、图像处理、指纹对比、搜索和模版储存等功能的智能型模块。它通过与之相配套的指纹传感器,可构成一个独立的指纹识别系统,或作为一个完整的外部设备。

4.3 采集到的指纹

在这里插入图片描述

4.4 指纹识别算法流程

在这里插入图片描述

5 实现效果

在这里插入图片描述

6 部分实现代码

部分源码,篇幅有限,工程较大,不放完整源码

#include <reg52. h>
#include <intrins. h>
#include"lcd1602. h"
sbit relay =P1^4; //继电器引脚
sbit buzzer=P1^5; //蜂鸣器引脚
sbit red= P2^7; //录入模式指示灯 在板子靠近单片机处
sbit green= P2^0; //识别模式指示灯 在板子远离单片机处
sbit k2=P3^4; //录入一次指纹
sbit k1=P3^3; //模式识别转换
sbit k3=P3^2; //清除所有指纹(10 个指纹清除)
#define Max_User 10
#define error 2
unsigned char SaveNumber=0, searchnum=0;
unsigned int  SearchNumber=0; 
unsigned int clk0=0;
unsigned char str[3] ={0, ' \0' , ' \0' };
unsigned char code Identify[16]="Lock: Idenfity";
unsigned char code Input[16] ="Lock: Input ";
bit modeflag=0, clearallflag=0, changeflag=0;//默认为识别模式
常用指令定义/
//Verify Password : 验证设备握手口令
unsigned  char  code  VPWD[16] ={16, 0X01  , 0Xff, 0xff, 0xff, 0xff,
0x01, 0, 7, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b} ; //回送 12 个
//设置设备握手口令
unsigned  char  code  STWD[16] ={16, 0X01  , 0Xff, 0xff, 0xff, 0xff,
0x01, 0, 7, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a} ; //回送 12 个
//GetImage : 探测手指并从传感器上读入图像
unsigned char code GIMG[14] ={12, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 3, 1, 0x00, 0x05}; //回送 12 个
//Gen Templet1 : 根据原始图像生成指纹特征 1
unsigned  char  code
GENT1[14] ={13, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01, 0, 4, 2, 1, 0x00, 0x08} ; //
回送 12//Gen Templet2 : 根据原始图像生成指纹特征 2
unsigned  char  code
GENT2[14] ={13, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01, 0, 4, 2, 2, 0x00, 0x09} ; //回12//Search Finger : 以 CharBufferA 或 CharBufferB 中的特征文件搜索整
个或部分指纹库
unsigned char code SEAT[18] ={17, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 8, 4, 1, 0, 0, 0, 0x65, 0x00, 0x73} ; //回送 16 个
//Merge Templet ; 将 CharBufferA 与 CharBufferB 中的特征文件合并生成
模板, 结果存于 ModelBuffer。
unsigned char code MERG[14] ={12, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 3, 5 , 0x00, 0x09} ;//回送 12 个
//Store Templet : 将 ModelBuffer 中的文件储存到 flash 指纹库中
unsigned char code STOR[16] ={15, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 6, 6, 2, 0x00, 0x00, 0x00, 0x0f} ; //回送 12 个
//Read Note
unsigned char code RDNT[14] ={13, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 4, 0x19, 0, 0x00, 0x1e} ;
//Clear Note
unsigned char code DENT[46] ={45, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 36, 0x18, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x3d
} ;
//DEL one templet
unsigned char code DELE_one[16] ={16, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01,
0, 7, 0x0c, 0x00, 0x00, 0, 1, 0x00, 0x15} ;
//DEL templet ; 清空指纹库
unsigned char code DELE_all[12] ={12, 0X01 , 0Xff, 0xff, 0xff, 0xff, 0x01, 0, 3,
0x0d, 0x00, 0x11} ;
常用指令定义-------结束//
/宏定义///
#define FALSE 0
#define TURE 1
//状态定义表
#define on  1
#define off  0
#define MAX_NUMBER 63
#define _Nop() _nop_()
宏定义------------结束///
unsigned char   FifoNumber=0;
xdata unsigned char FIFO[MAX_NUMBER+1]={0} ;
void Clear_All(void) //清空指纹库
{   
delay1ms(200) ;Command(DELE_all, 50) ; //清空指纹库 
}
unsigned char ImgProcess(unsigned char BUFID) //发获取图像并生成特征
文件, 存入 BUFID 中//输入参数为缓冲区号
{
if(Command(GIMG, 89) && (FifoNumber==11) && (FIFO[9]==0x00) )
{if(BUFID==1)
{  if(Command(GENT1, 60) && (FifoNumber==11) && (FIFO[9] ==0x00))
{
return 1;}
else
{return 0;
}}else if(BUFID==2){if(Command(GENT2, 60) && (FifoNumber==11) && (FIFO[9] ==0x00) )
{   return 1;}
else
{return 0;
}  }
}
else
{
return 0;
}return 0;
}
bit Searchfinger(void) //搜索指纹(发送搜索命令、 以及根据返回值确定是否
存在)
{
if( Command(SEAT, 60) && (FifoNumber==15) && (FIFO[9] ==0x00) ) //搜
索到指纹
{SearchNumber=FIFO[10] *0x100+FIFO[11] ;//搜索到的页码
//MatchScore=FIFO[12] *0x100+FIFO[13] 可以在此计算得分, 从而进
行安全级别设定, 本程序忽略return 1;}
else
{
return 0;
}
}
unsigned char search(void) //搜索用户
{
unsigned char SearchBuf=0, i=0;
while (i<20)
{
if (ImgProcess(1) ==1) //首先读入一次指纹{
SearchBuf=Searchfinger() ;//进行指纹比对, 如果搜索到, 返
回搜索到的指纹序号if(SearchBuf==1){return SearchNumber;
}else{return 255; //表示搜索到的指纹不正确}}i++;
}
return 0;
}
bit savefingure(unsigned char ID) //保存指纹
{unsigned char i=0;//现在开始进行存储指纹模板的操作
for (i=0; i<16;i++) //保存指纹信息{FIFO[i]=STOR[i] ;}
FIFO[12]=ID; //把指纹模板存放的 PAGE_ID 也就是 FLASH 的位置
FIFO[14]=FIFO[14]+ID; //校验和
if (Command(FIFO, 70) ==1) //不成功返回 0 //此处进行存放指纹模板
的命{return(1) ; }
else{return(0) ; } //不成功返回 0
}
unsigned char enroll(void) //采集两次指纹, 生成 1 个 指纹模板
{
unsigned char temp=0, count=0;
while(1)
{
temp=ImgProcess(1) ; //生成特征 1if (temp==1) //生成特征文件成功
{ 
break;}
else
{
if (temp==0) //采集指纹没有成功
{count++;
if (count>=40) //如果采集了 40 次, 还不成功, 直接采集失败,
直接退出 enroll 函数----返回 0
return(0) ;
}
}
}//采集第一个特征成功
.... 程序截断...

单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


6 最后


http://chatgpt.dhexx.cn/article/rrEyJXNB.shtml

相关文章

基于神经网络的指纹识别,指纹比对技术何时出现

1、指纹识别是怎么进行的 导语&#xff1a;指纹识别技术通常使用指纹的总体特征如纹形、三角点等来进行分类&#xff0c;再用局部特征如位置和方向等来进行用户身份识别。尽管指纹只是人体皮肤的小部分&#xff0c;但是&#xff0c;它蕴涵着大量的信息。那么&#xff0c;接下来…

Arduino--AS608指纹传感器

&#xff08;1&#xff09;简介 如图所示为AS608指纹传感器&#xff0c;其可支持串口和USB通信 模块芯片上的管脚如下&#xff1a; 序号名称说明1Vi模块电源正输入端2Tx串行数据输出3Rx串行数据输入4GND信号地5WAK感应信号输出&#xff0c;默认高电平有效6Vt触摸感应电源输…

指纹辨识传感器解决方案

随著个人信息产品对资料安全性的要求日益升高&#xff0c;再加上指纹辨识感测技术近几年来&#xff0c;无论是在尺寸、成本、或者是准确度等&#xff0c;各方面的发展都获得快速的进步&#xff0c;因此&#xff0c;相关业者便积极开发指纹辨识感测技术应用在个人可携式产品等出…

指纹识别传感器市场仍将持续上涨

市场分析公司MarketsandMarkets的一份研究报告称&#xff0c;未来几年指纹识别传感器市场整体仍将呈上涨趋势。 市场分析公司MarketsandMarkets的新报告称&#xff0c;尽管由于移动部门的利润缩水&#xff0c;多家指纹识别传感器专业公司在2017年面临巨大的市场压力&#xff0c…

php图片指纹获取,指纹识别是通过什么等物理传感器获取指纹图像

指纹识别是将识别对象的指纹进行分类比对从而进行判别。指纹识别技术作为生物体特征识别技术之一在新世纪逐渐成熟&#xff0c;进入了人类的生产生活领域。 (推荐学习&#xff1a;web前端视频教程) 指纹模式 指纹是人类手指末端由凹凸的皮肤所形成的纹路&#xff0c;在人类出生…

指纹识别

前言&#xff1a; 为了方便查看博客&#xff0c;特意申请了一个公众号&#xff0c;附上二维码&#xff0c;有兴趣的朋友可以关注&#xff0c;和我一起讨论学习&#xff0c;一起享受技术&#xff0c;一起成长。 1.概念 指纹是指手指末端正面皮肤上凹凸不平的纹路。这段纹路蕴含…

智能门锁:指纹识别概述

每个人的皮肤纹路在图案、断点、交叉点上各不相同&#xff0c;指纹识别技术依靠皮肤纹路的唯一性、稳定性&#xff0c;把个体身份同指纹对应起来&#xff0c;通过与预存指纹对比进行身份识别。在实现方式上&#xff0c;指纹识别技术主要分为&#xff1a;电容式、光学式、超声波…

指纹识别(一)—— 电容式、光学式、超声波式介绍

指纹系列文章: 指纹识别&#xff08;一&#xff09;—— 电容式、光学式、超声波式介绍 指纹识别&#xff08;二&#xff09;—— 光学指纹场景使用OLED HBM功能 1.电容式指纹识别 1.1 原理和优缺点 原理&#xff1a;手指作为一方极板&#xff0c;手指指肚是高低不平的(脊和谷…

指纹识别-传感器原理

我们了解过了指纹识别的大致流程后&#xff0c;这篇文章用来介绍指纹识别硬件中最重要的部分&#xff0c;传感器。其实传感器、芯片也要符合物理学的基本原理&#xff0c;他们都是物理学的原理的一种实现&#xff0c;我们可以从光、电、声、热、力这几个基本的物理研究领域中展…

舵机控制的机械爪

■ 背景 先驱威锋白超发送过来机械爪购买样品连接 机械爪子汇总机器人机械手臂配件大扭力舵机控制驱动板diy夹持器 。利用其中一种完成 双轴机械臂前端抓持机械结构。 ▲ 由舵机控制的各种机械爪 手边有一个从白超订购过来的平行机械爪&#xff0c;其中舵机来自于 海灵智电 提供…

一、智能车舵机控制

前言&#xff1a; 本文章主要是近期有关舵机知识的总结&#xff0c;将分别从舵机的控制原理&#xff0c;控制流程和代码实现流程几个方面作简要介绍&#xff0c;由于时间紧急&#xff0c;难免有疏漏错误之处&#xff0c;欢迎留言指正 一、舵机的控制原理&#xff1a; 我们本次智…

单片机PWM舵机控制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、PWM是什么&#xff1f;二、如何控制舵机&#xff1f; 一、PWM是什么&#xff1f; PWM&#xff0c;英文名Pulse Width Modulation&#xff0c;是脉冲宽度调制缩…

快速学习Stm32舵机控制板控制多个舵机运动以及调速

本次分享stm32对多个舵机的控制&#xff0c;之前讲解过单个舵机的控制。以及控制原理&#xff0c;定时器的使用和pwm的输出来控制一个舵机的角度转向。这次就和大家分享一下多个舵机的控制以及调速。利用单片机实现对 8 个舵机的同时控制&#xff0c;掌握多个舵机控制程序实现方…

51单片机舵机控制

51单片机舵机控制系统 概述硬件设计程序设计PWM波的产生矩阵按键功能与数码管显示参数传递完整程序 外加模块 概述 在这篇博客中&#xff0c;将介绍一个基于51单片机的舵机控制系统&#xff0c;其可以通过矩阵按键输入角度&#xff0c;舵机打到预定角度&#xff0c;并在数码管…

Arduino基础入门篇28—舵机控制

舵机是一种位置「角度」伺服的驱动器&#xff0c;适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具、航模、机器人中已经得到普遍使用。舵机是一种俗称&#xff0c;其实是一种伺服马达。本篇通过官方驱动库来实现舵机控制。 1. 舵机介绍 结构组成 舵机实…

OpenMV输出PWM,实现对舵机控制

OpenMV的定时器官方函数介绍&#xff1a;Timer类 – 控制内部定时器 目录 OpenMV的PWM资源介绍 为什么要用OpenMV输出PWM OpenMV的PWM资源分配 资源 注意 建议 PWM输出代码 代码讲解 Timer Timer.channel tim.channel与Timer.channel区别 Timer.channel解析 OpenM…

舵机控制原理及常见问题

舵机控制 工作电压&#xff1a;3.5V/4,2V/4.8V —— 6V/6.8V/7.2V/8.4V(看具体型号参数) 切记&#xff1a;舵机不要接在电脑USB上调试&#xff0c;舵机启动瞬间大电流&#xff08;10-24倍工作电流&#xff09;可能会导致电脑死机 注意事项&#xff1a;PWM波形正确时&#xf…

第9章 舵机控制

有一种电机可以在程序的控制下&#xff0c;在一定范围内连续改变输出轴角度并且可以保持住。这种电机最早被用在航模和船模等遥控模型中&#xff0c;控制各种舵面的转动&#xff0c;这就是舵机。现在舵机除了运用在 遥控模型中&#xff0c;也大量的运用在各种机器人、机械臂的关…

Arduino入门001 - 舵机控制

Arduio基础入门篇001 - 舵机控制 一、舵机介绍 1&#xff0c;结构组成 一般来讲舵机主要由以下几个部分组成&#xff0c;舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路等。舵机的输入线共有三条&#xff0c;如图1所示&#xff0c;红色中间&#xff0c;是电源线&…

舵机控制(STM32F103C8T6)

前言 本文是以STM32F103C8T6作为主控芯片&#xff0c;通过PB6端口输出PWM&#xff0c;实现控制180舵机。 一、舵机控制原理 &#xff08;一&#xff09;概述 舵机是一种位置伺服驱动器器&#xff0c;是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时&#xff0c;…