**

基于Arduino的密码+指纹智能锁(LCD1602显示器)

**

设计背景:

随着科技的不断进步,智能锁的使用也越来越普遍,市场上的智能锁多种多样,有单一的智能锁,比如密码锁,蓝牙锁,指纹锁,人脸识别技术开锁,甚至还有瞳孔识别等高阶智能锁;不过我们日常见到的、使用普遍的多为他们的结合体,功能并不单一。虽然智能门锁出现的时间已经比较长了,已经算是一款非常成熟的产品了,但是一款产品的发展年限,一定是永无止境的,需要开发人员不断地追求进步,才是现在的市场,因为用户的需求在不断的变化,所以产品自然会变,而产品的优点和缺点也是避免不了的。换句话说,尽管智能锁发展得很好,但是也存在一定的缺点和问题,比如安全性、稳定性、耐用度等。在这个背景下,以及对智能锁怀着好奇之心还有不可描述的兴趣,我决定自己做一个智能锁感受一下。
作为一名穷逼大学生,要做一个智能锁肯定得考虑到成本问题,密码锁虽然成本低但是我又不想只是做一个单一的密码锁,想玩点特殊的,最后决定使用光学指纹识别模块,提升智能锁的档次,光学指纹识别模块相比于其他指纹识别模块更便宜而且使用简单。
然后我们再简单了解以下指纹锁,方便我们后续对它进行设计和研究。指纹锁是在原有机械锁的技术上增加指纹开锁功能,指纹开锁的主要技术是将用户的指纹信息先储存起来,当用户用指纹验证时,指纹识别系统会把用户的指纹和储存的指纹相对比,如果验证的指纹与预先储存的指纹相匹配,门锁就会打开,如果不相匹配,会提示错误,门锁无法打开。指纹锁是通过指纹是否匹配的方法来认识主人与开锁的,那么识别指纹的真假成了指纹锁的一个重要技术指标。目前市场广泛使用识别指纹的探头可分了两类,一类是光学指纹头。较便宜,另一类是半导体指纹头灵敏度更好也更精细,当然价格也是光学指纹头的两倍多。当然,除了这两种,还有温差感应式指纹识别和生物射频指纹识别,这两种并不常见,原因是前者受温度影响较大,识别面积范围小,后者虽然很牛逼,但是老贵了。扯远了,感兴趣的话大家可以去了解一下指纹学。
指纹锁是机械锁升级过来的,其主要目的是能够保障财物安全的情况下,提高了我们生活的便利性,相比于机械锁,指纹锁是高出一个级别的,不法分子想要伪造主人的假指纹,比撬锁的难度高出几百倍。
总的来说,使用指纹锁比使用机械锁要更安全、更便捷、更舒心。大家可以放心大胆使用。密码锁就不多解释了,因为太常见了,懂得都懂。
当然,做出来的产品那得必须考虑他的实用性,做出来不能用或者不实用,只能看那就违背了产品本身的定义。设计制作这个智能锁时,我还在住在大学宿舍,那么,首当其冲的便是我们宿舍的门锁,对,我得想想怎么把普通的机械锁在不拆除的前提下改成智能锁,最后,对门锁进行点对点的受力分析,决定用舵机做传动机构,用钓鱼线做传动绳拉动门锁开关,实现开锁。因为每个人原先的机械锁都不一样,要改动的话大家根据实际情况自己设计,这里只提供一个想法,就不多解释或者上图了。当然如果要拆掉原先的锁自己换上一个锁轴那就简单多了。好,废话不多说,总之大家可以简单的理解为我是用舵机模拟开锁。

硬件部分:

先给大家简单介绍以下设计所需要的硬件,之后会告诉大家怎么连线,包括仿真和实物接线图,我只是给出一个参考,大家自己设计的话完全可以根据自己的设计要求自己更改接线端口。

  1. 控制芯片Arduino UNO
    额…这个不多说,新手的话网上有很多资料,老手的话就更不用说了,我这里就直接放上在网上看到写的比较好的之一,新手可以学习了解以下。
    Arduino UNO数据手册(新手入门)

    图片来源于上述网址,意在让大家认识一下Arduino UNO 芯片

  2. 4×4矩阵按键
    4×4矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以得出按键的坐标从而判断按键键值。
    下图是我在某宝买的矩阵键盘包括它的原理图:

  3. LCD1602显示器
    这个显示器我相信很多电子芯片爱好者肯定都有接触或了解过,要想用它来显示你总得知道它的工作原理吧,不清楚的话,前人之述备矣,网上解释得很清楚了,大家可以去了解一下,方便后续工作地进行。
    LCD1602一般是16条引脚,我也有见过14条引脚的,但与16脚的相比缺少了背光电源A(15脚)和地线K(16脚),起始功能原理差不多,常见的还是16引脚的。下面是它的功能引脚,知道这个有利于接线。还有啥其他的具体知识,网上搜一下相关数据手册就全出来了,这里就不多此一举了。

  4. AS608光学指纹识别模块
    ATK-AS608 指纹识别模块是 ALIENTEK 推出的一款高性能的光学指纹识别模块。
    ATK-AS608 模块采用了国内著名指纹识别芯片公司杭州晟元芯片技术有限公司(Synochip)
    的 AS608 指纹识别芯片。芯片内置 DSP 运算单元,集成了指纹识别算法,能高效快速采集图像并识别指纹特征。模块配备了串口、USB 通讯接口,用户无需研究复杂的图像处理及指纹识别算法,只需通过简单的串口、USB 按照通讯协议便可控制模块。本模块可应用于各种考勤机、保险箱柜、指纹门禁系统、指纹锁等场合。
    它长这样:

    PCB原理图:

    模块引脚描述:

    大家可以去网上找一下相关数据手册,当然,我相信你要是去某宝买的话都会有数据手册给你的,只是想学习了解,没有去买,然后实在找不到的话,我最后会放在我提供的资料包里,大家下载后可学习。

  5. MG90S舵机
    我用的舵机是小规格的,俗称9g舵机,了解过舵机的都知道,舵机实际上是通过脉宽调制来控制舵机角度的,舵机的控制信号是周期20ms 的脉宽调制(PWM)信号,其中脉冲宽度从 0.5ms-2.5ms,相对应舵盘的位置为 0~180 度,呈线性变化。我用Arduino做控制的话,实际上根据舵机的原理,写代码的方式也有两种,一种是直接写角度,另一种就是写入PWM信号。代码我后面也会给大家提供出来供大家下载。具体舵机啥原理,这玩意的资料网上很多,写的也很清楚,这里不做多解释。

    图片来源于网络。附图是为了强调,舵机三条线的颜色分别表示为中间红色接开发板5V电源,灰色接地,橙色接信号端,一般都是这样的。了解一下方便后续接线。

实物接线方法:


LCD1602的VSS,VEE,RW均接地,其中为了使显示更清晰,VEE需要串一个电位器调节电阻或者直接串上1K~2.2K左右的电阻,LCD1602的VDD端接开发板5V电源;舵机红线接开发板5V电源,灰线接地;AS608指纹模块Vi接开发板3.3V电源端,GND接开发板地。

仿真部分:

Proteus仿真接线图:
因为仿真里是做不到指纹识别的,所以就没有在仿真中加入指纹识别模块,大家完全可以用某些元件代替,比如说就加个LED灯,我就懒得加了,因为我做仿真主要是想看LCD1602配合按键的效果以及我的代码能不能应付得过来,所以仿真做不做指纹模块对我来说不重要。

Proteus仿真效果图(部分):



程序设计:

用Arduino做控制芯片的话,肯定都听过Arduino专门的IDE编程软件,去官网下载就好,也有Mixly图形化编程软件,但是个人还是建议用专门的IDE软件会好点,因为开源的库文件比较多。说到库文件,好像指纹识别的库文件需要自行下载并移到IDE库文件夹中的,一般是不自带的,我提供的资料里面有这次设计所需要的所有库文件,大家只需要把我里面压缩包Adafruit_Fingerprint_Sensor_Library.rar和Keypad-master.rar解压后复制到Arduino根目录的libraries文件夹内即可。
由于程序篇幅太长,这里仅提供思路,源码在我的资料包里都有。
写程序之前,得先弄清楚你要想实现什么功能,对于Arduino而言,很多代码都是开源的,可以直接复制了用,我们只需要根据自己实际电路微改一下就行。废话不多说,整个密码+指纹锁就是既能用密码开锁,也能用指纹开锁,LCD1602时刻给用户显示提示,免得用户一脸懵逼,不知道自己在干嘛,按键得充分应用起来,我是设置了按键有让用户选择开锁方式的功能,在主界面时用户可以选择开锁方式,按下指定键即可切换开锁方式,使用灵活,当密码输入正确,显示器做出提示,舵机转动;当指纹识别正确,显示器做出提示,舵机也能转动。错误的话当然会提示你错误,重新输入或者重新指纹识别啦。具体看我资料里的用户使用手册,需要强调以下,因为某些原因,我提供的这个资料只是基础版,能够基本实现其功能,供大家学习了解足以,完美版也有而且我还在不断完善,感兴趣且想要深入了解的朋友可以在讨论区留言讨论,如果针对初版有更好的想法欢迎讨论。

下面我附上部分代码:

/*定义部分*/
Servo myservo;
LiquidCrystal liquid_crystal_display{A5, A4, A0, A1, A2, A3,};
char password[6];
char initial_password[6], new_password[6];
int i = 0;
char key_pressed = 0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {{'7', '8', '9', 'A'},{'4', '5', '6', 'B'},{'1', '2', '3', 'C'},{'*', '0', '#', 'D'}
};
byte row_pins[rows] = {10, 11, 12, 13};
byte column_pins[columns] = {4, 5, 6, 7}; //键盘的引脚设定
Keypad keypad_key = Keypad( makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);
/*loop循环函数*/
void loop()
{key_pressed = keypad_key.getKey();switch (key_pressed){case 'A': KeyWay(); break;case 'B': getFingerprintID(); break;}
}
/*KeyWay()函数循环部分*/
while (flag == 0){if (t == 3 || key_pressed == 'D'){liquid_crystal_display.clear();liquid_crystal_display.print("A/B select way!");liquid_crystal_display.setCursor(0, 1);i = 0;  //清除按键按下次数的记录,避免密码判断错误flag = 1;}key_pressed = keypad_key.getKey();if (key_pressed){password[i++] = key_pressed;liquid_crystal_display.print(key_pressed);if (key_pressed == 'C'){liquid_crystal_display.clear();liquid_crystal_display.print("Enter again:");liquid_crystal_display.setCursor(0, 1);i = 0;        //清除按键按下次数的记录,避免密码判断错误key_pressed = 0;}while (key_pressed == '*'){change();}}if (i == 6){delay(200);for (int j = 0; j < 6; j++)initial_password[j] = EEPROM.read(j);if (!(strncmp(password, initial_password, 6)))            //比较输入密码与当前密码是否一致{liquid_crystal_display.clear();liquid_crystal_display.print("Password via!");liquid_crystal_display.setCursor(0, 1);liquid_crystal_display.print("Welcome home!");liquid_crystal_display.setCursor(0, 2);myservo.write(180);delay(1000);myservo.write(0);liquid_crystal_display.clear();liquid_crystal_display.print("A/B select way!");liquid_crystal_display.setCursor(0, 1);i = 0;              //清除按键按下次数的记录,避免密码判断错误flag = 1;}else{liquid_crystal_display.clear();liquid_crystal_display.print("Wrong Password!");delay(1000);liquid_crystal_display.clear();liquid_crystal_display.print("Enter Password:");liquid_crystal_display.setCursor(0, 1);t++;i = 0;}}}

指纹识别函数我就不说了,因为初代版本真的就很简单,给大家个提示,我们完全可以直接在官网提供的Adafruit_Fingerprint_Sensor_Library文件里看到它的指纹载入、识别、删除函数,然后做些修改或增添就好,有C语言基础那就是小CASE。

实物效果图:




资料下载网址:

我把初代,能够基本实现其功能的资料都放在那里了,里面还有使用手册,感兴趣的可以下载看看。
密码+指纹锁资料包.
然后我录了视频放B站了,感兴趣的可以看一下,喜欢就点赞加关注吧!
整体效果视频

基于Arduino的密码+指纹智能锁(LCD1602显示器)相关推荐

  1. 指纹智能锁的几种指纹模块

    指纹智能锁的指纹模块是其核心部件,是用来完成指纹的采集和指纹的识别的,对于指纹智能锁附加值的提升起到很大作用.指纹模块一般由指纹盖板.指纹传感器.指纹芯片.指纹存储器,及相关的软件算法组成.指纹模块有 ...

  2. 基于Arduino的多功能智能交通信号灯的设计与实现 ---------对盲人语音播报,红灯结束时铃声提醒,信号灯倒计时和闯红灯语音劝阻

    ** 基于Arduino的多功能智能交通信号灯的设计与实现 ---------对盲人语音播报,红灯结束时铃声提醒,信号灯倒计时和闯红灯语音劝阻 ** 魏树鸿, 1.系统设计思路 a.: 满足基本信号灯 ...

  3. arduino智能闹钟_一种基于Arduino的多功能智能闹钟的制作方法

    本实用新型涉及智能闹钟技术领域,具体为一种基于Arduino的多功能智能闹钟. 背景技术: 智能睡眠是款带有睡眠循环跟踪的闹钟,可以设置多组闹钟,添加不同的铃声,可以记录睡眠状态,自动改变屏幕亮度,帮 ...

  4. 基于Arduino或者Stm32的智能台灯

    基于Arduino或者Stm32的智能台灯: 支持功能定制,提供全套硬件.软件及! 1.可以实现自动调光手动调光两种模式: 2.可以实时监测环境温度及湿度: 3.采用OLED显示环境温度湿度信息: 4 ...

  5. c语言虚位密码验证,智能锁的“虚位密码”是什么?该怎么用?

    很多人在选购智能锁时,都会留意到宣传资料中关于密码功能一栏写着"虚位密码"四个字.尽管宣传文案能让这个功能的用法尽可能地容易理解,但是在实际应用过程中,这个功能究竟怎么用,又如何能 ...

  6. 基于Arduino+nodemcu+blink的智能家居系统

    基于Arduino+nodemcu+blink的智能家居系统 #此篇为代码部分,实物视频演示在下面这个链接https://www.bilibili.com/video/BV1iA411v7qt/ 链接 ...

  7. 基于Arduino高温巡逻报警智能小车

    引言 1.1 目的 高温巡逻报警智能小车 学习了解Arduino的工作原理 实战拼接小车内部结构模板 掌握了解高温传感器如何识别环境温度和工作原理 学习了解火焰传感器如何识别火焰的工作原理 掌握了解蓝 ...

  8. 基于arduino和openmv的智能小车设计制作流程

    arduino与openmv的智能物流小车 一.购买模块组件准备阶段 1.ArduinoMAGE2560+扩展板 使用这个当做主控板,加上扩展板已经满足了所有需求,主要是也很便宜,唯一不足的是就是扩展 ...

  9. 基于51单片机的指纹识别锁管理门禁密码锁系统方案原理图程序设计

    硬件电路的设计 (附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本系统由STC89C52单片机电路+指纹模块传感器电路+LCD1602液晶显示电路+继电器电路+按键电路+电源电 ...

  10. 【物联网毕设】基于Arduino与树莓派的智能鱼缸【二】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Arduino与树莓派进行通信 二.树莓派把数据上传到服务器 1.在树莓派上用Django搭建服务器 2.在树莓派 ...

最新文章

  1. 【TP5.0】tp5.0实现连接多个数据库,实现类似3.2M(‘table’,'prefix_','db_config2')的CURD操作...
  2. Kali Linux 安全渗透教程第一更
  3. DC课程笔记-数字逻辑综合工具-DC Synthesis Optimization Techniques
  4. 办公室计算机网络使用情况,企事业单位办公网络的现状及解决方案.doc
  5. 一步一步学Remoting
  6. C#.NET 可以为不同的客户定制不同的登录窗体的设计思路参考【功能代码组件化,可以灵活选配】...
  7. acrobat 下拉列表 逻辑_记一次 无限列表 滚动优化
  8. Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
  9. 提升写作效率,让 Word 更好地为你所用
  10. iocomp iPlot使用说明6 轴属性设置
  11. sigar监控API的测试用例
  12. 【毕业设计/Matlab系列】基于matlab的线性调频信号的仿真
  13. Linux 教程: (Linux基础+命令大全)
  14. 机器学习——sklearn实现决策树(隐形眼镜预测和鸢尾花分类)
  15. 夜神模拟器安装激活面具magisk教程
  16. 以太坊基础---奖励
  17. vdbench运行报错:java.net.NoRouteToHostException: No route to host (Host unreachable)
  18. 特征提取 - 海森矩阵(Hessian Matrix)及一个用例(图像增强)
  19. 星巴克中国首推全新精品咖啡品类“威士忌桶酿咖啡”
  20. POJ 1006 生理周期

热门文章

  1. 动态规划和分治法解合唱队形问题
  2. Invalid bound statement (not found)出现的原因和解决方法
  3. Android相关问题的好文章整理——温故而知新,可以为师矣
  4. 雷霆战机的java代码_JavaSwing雷霆战机(飞机大战)源代码
  5. 低配置享受3D立体游戏 手把手教你设置
  6. [IDE]webstorm安装并配置sass踩坑(windwos)
  7. 0014 UVA1589 象棋 Xiangqi
  8. day19 482 合唱队形 (线性DP)
  9. 将QMessageBox对话框中按钮的“Yes/No”转换成中文的“是/否”
  10. 7-2 jmu-python-汇率兑换