就是闲的没事,看见某超级大佬也弄了一个,觉得挺好,然后自己也实践实践。

总共,大概花了一周时间吧。
自己

查考博客:
https://blog.csdn.net/woshi_ziyu/article/details/88200664
https://blog.csdn.net/m0_54003252/article/details/114542500我也是参考这篇博客采购的

自己用的零件: uno板子,线公对公、母对母尽量多,充电宝(寝室停电使用要一个9V供电的(不过5V好像也够)),面包板,as608,SG90S舵机,一根强度比较高的线(通过舵机拉门用),LCD1602显示屏焊好的。

成本大概150左右,不要充电宝就110。

首先需要知道怎么接线,我花2-3天看的这个b站视频,第一部分看一大半就知道怎么接了:链接

然后东西到了开始接线。

指纹模
Vi 3.3V
Tx 2管脚
Rx 3管脚
GND GND

SG90舵机
VCC(红色线) 5V
I/O(橙色线) 8管脚
GND(黑色线) GND
舵机注意方向!!当时门把手没拉动我还以为力不够!结果是初始位置搞错了,导致先回到初始位置才开始旋转。

这个是lcd的使用方法:
https://blog.csdn.net/acktomas/article/details/88136405
lcd参考上面那个博客接线!
注意lcd 先找地址!具体可以上面的博客

需要安装的库
指纹库 fingerprint github下载地址:链接

LCD库 LiquidCrystal_I2C github下载地址:链接

下载后2个文件后,将文件放进arduino的libraries(我用的苹果m1,windons其他博客应该会写。)进入方法找到arduino图标右键->contents->Java->libraries

指纹库 fingerprint 的文件还要放进arduino图标右键->contents->Java->examples里。

然后打开ardiuno。
接下来参考视频:https://www.bilibili.com/video/BV1tb411a7by?t=45参考他怎么烧录和操作的。

下面代码:大部分我自己改成中文了,这样看的时候方便。

烧录指纹代码:

/***************************************************This is an example sketch for our optical Fingerprint sensorDesigned specifically to work with the Adafruit BMP085 Breakout----> http://www.adafruit.com/products/751These displays use TTL Serial to communicate, 2 pins are required tointerfaceAdafruit invests time and resources providing this open source code,please support Adafruit and open-source hardware by purchasingproducts from Adafruit!Written by Limor Fried/Ladyada for Adafruit Industries.BSD license, all text above must be included in any redistribution****************************************************/#include <Adafruit_Fingerprint.h>#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1#endifAdafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);uint8_t id;void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\n指纹传感器登记");// set the data rate for the sensor serial portfinger.begin(57600);if (finger.verifyPassword()) {Serial.println("找到指纹传感器");} else {Serial.println("没有找到指纹传感器:(");while (1) { delay(1); }}Serial.println(F("阅读传感器参数"));finger.getParameters();Serial.print(F("状态: 0x")); Serial.println(finger.status_reg, HEX);Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);Serial.print(F("Capacity: ")); Serial.println(finger.capacity);Serial.print(F("安全等级: ")); Serial.println(finger.security_level);Serial.print(F("设备地址: ")); Serial.println(finger.device_addr, HEX);Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);Serial.print(F("波特率: ")); Serial.println(finger.baud_rate);
}uint8_t readnumber(void) {uint8_t num = 0;while (num == 0) {while (! Serial.available());num = Serial.parseInt();}return num;
}void loop()                     // run over and over again
{Serial.println("准备注册指纹!");Serial.println("请输入ID号(从1到127),你想保存这个手指为…");id = readnumber();if (id == 0) {// ID #0 not allowed, try again!return;}Serial.print("注册 ID #");Serial.println(id);while (!  getFingerprintEnroll() );
}uint8_t getFingerprintEnroll() {int p = -1;Serial.print("等待有效的手指注册为#"); Serial.println(id);while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("拍摄");break;case FINGERPRINT_NOFINGER:Serial.println(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("通信错误");break;case FINGERPRINT_IMAGEFAIL:Serial.println("成像错误");break;default:Serial.println("未知错误");break;}}// OK success!p = finger.image2Tz(1);switch (p) {case FINGERPRINT_OK:Serial.println("图像转换");break;case FINGERPRINT_IMAGEMESS:Serial.println("图像太混乱");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("通信错误");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("找不到指纹特征");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("找不到指纹特征");return p;default:Serial.println("未知错误");return p;}Serial.println("请拿开手指");delay(2000);p = 0;while (p != FINGERPRINT_NOFINGER) {p = finger.getImage();}Serial.print("ID "); Serial.println(id);p = -1;Serial.println("再次放同一个手指");while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("拍摄");break;case FINGERPRINT_NOFINGER:Serial.print(".");break;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("通信错误");break;case FINGERPRINT_IMAGEFAIL:Serial.println("成像错误");break;default:Serial.println("未知错误");break;}}// OK success!p = finger.image2Tz(2);switch (p) {case FINGERPRINT_OK:Serial.println("图像转换");break;case FINGERPRINT_IMAGEMESS:Serial.println("图像太混乱");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("通信错误");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("找不到指纹特征");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("找不到指纹特征");return p;default:Serial.println("未知错误");return p;}// OK converted!Serial.print("创建模型为#");  Serial.println(id);p = finger.createModel();if (p == FINGERPRINT_OK) {Serial.println("打印匹配!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("通信错误");return p;} else if (p == FINGERPRINT_ENROLLMISMATCH) {Serial.println("指纹不匹配");return p;} else {Serial.println("未知错误");return p;}Serial.print("ID "); Serial.println(id);p = finger.storeModel(id);if (p == FINGERPRINT_OK) {Serial.println("存储!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("通信错误");return p;} else if (p == FINGERPRINT_BADLOCATION) {Serial.println("不能存储在那个位置");return p;} else if (p == FINGERPRINT_FLASHERR) {Serial.println("写入闪存错误");return p;} else {Serial.println("未知错误");return p;}return true;
}

指纹锁代码:

/***************************************************This is an example sketch for our optical Fingerprint sensorDesigned specifically to work with the Adafruit BMP085 Breakout----> http://www.adafruit.com/products/751These displays use TTL Serial to communicate, 2 pins are required tointerfaceAdafruit invests time and resources providing this open source code,please support Adafruit and open-source hardware by purchasingproducts from Adafruit!Written by Limor Fried/Ladyada for Adafruit Industries.BSD license, all text above must be included in any redistribution****************************************************/#include <Adafruit_Fingerprint.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int servopin = 8;
int buzzer = 5;void servopulse(int angle)//定义一个脉冲函数
{int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值digitalWrite(servopin, HIGH);   //将舵机接口电平至高delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数digitalWrite(servopin, LOW);    //将舵机接口电平至低delayMicroseconds(20000 - pulsewidth);
}#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
// For UNO and others without hardware serial, we must use software serial...
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
// Set up the serial port to use softwareserial..
SoftwareSerial mySerial(2, 3);#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial1#endifAdafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);void setup()
{Serial.begin(9600);while (!Serial);  // For Yun/Leo/Micro/Zero/...delay(100);Serial.println("\n\n手指检测测试");// set the data rate for the sensor serial portfinger.begin(57600);delay(5);lcd.init();                  // 初始化LCDlcd.backlight();             //设置LCD背景等亮if (finger.verifyPassword()) {Serial.println("发现指纹传感器 憨批!");lcd.setCursor(0,0);lcd.print("Found fingerprint");delay(1000);} else {Serial.println("No Found fingerprint sensor");lcd.setCursor(0,0);lcd.print("no find!");lcd.setCursor(0,1);lcd.print("Check Connections");delay(1000);while (1) {delay(1);}}lcd.clear();Serial.println(F("阅读传感器参数"));finger.getParameters();Serial.print(F("状态: 0x")); Serial.println(finger.status_reg, HEX);Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);Serial.print(F("Capacity: ")); Serial.println(finger.capacity);Serial.print(F("安全等级: ")); Serial.println(finger.security_level);Serial.print(F("设备地址: ")); Serial.println(finger.device_addr, HEX);Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);Serial.print(F("波特率: ")); Serial.println(finger.baud_rate);finger.getTemplateCount();if (finger.templateCount == 0) {Serial.print("传感器不包含任何指纹数据。请运行“注册”示例。");}else {Serial.println("等待有效的手指…");Serial.print("传感器包含 "); Serial.print(finger.templateCount); Serial.println(" 模板");}
}void loop()                     // run over and over again
{getFingerprintIDez();delay(50);            //don't ned to run this at full speed.
}uint8_t getFingerprintID() {uint8_t p = finger.getImage();switch (p) {case FINGERPRINT_OK:Serial.println("拍摄");break;case FINGERPRINT_NOFINGER:Serial.println("没有检测到手指");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("通信错误");return p;case FINGERPRINT_IMAGEFAIL:Serial.println("成像误差");return p;default:Serial.println("未知错误");return p;}// OK success!p = finger.image2Tz();switch (p) {case FINGERPRINT_OK:Serial.println("图像转换");return p;case FINGERPRINT_IMAGEMESS:Serial.println("图像太乱");return p;case FINGERPRINT_PACKETRECIEVEERR:Serial.println("通信错误");return p;case FINGERPRINT_FEATUREFAIL:Serial.println("找不到指纹特征");return p;case FINGERPRINT_INVALIDIMAGE:Serial.println("找不到指纹特征");return p;default:Serial.println("未知错误");return p;}// OK converted!p = finger.fingerSearch();if (p == FINGERPRINT_OK) {Serial.println("找到匹配的指纹了!");} else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("通信错误");return p;} else if (p == FINGERPRINT_NOTFOUND) {Serial.println("没有找到匹配对指纹");return p;} else {Serial.println("未知错误");return p;}// found a match!Serial.print("找到的 ID #"); Serial.print(finger.fingerID);Serial.print(" with confidence of "); Serial.println(finger.confidence);return finger.fingerID;
}// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {uint8_t p = finger.getImage();if (p != FINGERPRINT_OK) {lcd.setCursor(0,0);lcd.print("no Finger");return -1;}p = finger.image2Tz();if (p != FINGERPRINT_OK) {lcd.setCursor(0,0);lcd.print("Fingerprint");lcd.setCursor(0,1);lcd.print("error");delay(1000);lcd.clear();return -1;}p = finger.fingerFastSearch();if (p != FINGERPRINT_OK)  {lcd.setCursor(0,0);lcd.print("Fingerprint");lcd.setCursor(0,1);lcd.print("error");delay(1000);lcd.clear();return -1;}// found a match!Serial.print("找到的 ID #"); Serial.print(finger.fingerID);Serial.print(" with confidence of "); Serial.println(finger.confidence);lcd.setCursor(0,0);lcd.print("hello");delay(500);lcd.clear();int s=finger.fingerID;switch(s){case 2:lcd.setCursor(0,0);lcd.print("pt dad");delay(500);break;case 1:lcd.setCursor(0,0);lcd.print("llt shi dog");delay(500);break;case 3:lcd.setCursor(0,0);lcd.print("ly king");delay(500);break;case 4:lcd.setCursor(0,0);lcd.print("wmy si pig");delay(500);break;case 5:lcd.setCursor(0,0);lcd.print("wyl king");delay(500);break;case 6:lcd.setCursor(0,0);lcd.print("wyh hanpi");delay(500);break;case 8:lcd.setCursor(0,0);lcd.print("lwz niubi");delay(500);break;default:lcd.setCursor(0,0);lcd.print("lyp king");delay(500);break;}lcd.setCursor(0,1);lcd.print(finger.confidence);lcd.print("ms");delay(1000);lcd.clear();int angle = 50;for ( angle = 0; angle < 180; angle++) //angle+4是舵机的转速设置{servopulse(angle);delay(1);}Serial.print("欢迎回家");lcd.setCursor(0,0);lcd.print("welcome 504");lcd.setCursor(0,1);lcd.print("no Henan home");delay(3500); //这是拉门的持续时间 3.5秒for ( angle = 180; angle > 0; angle--){servopulse(angle);delay(1);}lcd.clear();return finger.fingerID;
}

即可

0基础手把手教你弄寝室指纹识别开门装置(arduino uno,as608)相关推荐

  1. 0基础手把手教你开发探探类社交软件(Tinder项目产品架构说明文档)

    目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及缺点 1.2.主要的技术要点 1.2.1 布局常用及技巧 ...

  2. 0基础手把手教您开发坦克大战游戏

    写在前面的话:首先,本文适读于所有层次的读者,不管您是程序员,还是对代码一无所知的小白.其次,本文只讲怎么做,不讲为什么(但我会尽量添加注释,如果嫌不够,可以下载浅墨所著的<window游戏编程 ...

  3. java 注册探探账号_零基础手把手教你开发探探类社交软件Tinder

    原标题:零基础手把手教你开发探探类社交软件Tinder 目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及 ...

  4. 零基础手把手教你做FMEDA

       前 言    你可能是硬件工程师,但也可能是软件工程师.系统工程师或者是结构工程师,甚至是质量工程师--但这些都不重要.因为你不需要了解复杂的电路设计知识,只需要了解串并联电路,就可以读懂本文. ...

  5. Java基础--手把手教你如何从键盘录入信息

    从键盘录入信息 文章目录 一.前奏 1.创建扫描仪对象 2.导入包 二.从键盘录入信息 1.输入整数 2.输入浮点数 3.输入字符串 三.释放资源 四.补充说明 1.输入与接收的数据类型不匹配 2.输 ...

  6. 零基础手把手教你写NFT抢购软

    前言 由于之前写过几篇文章,但是个人不是很满意,所以这次我打算把所有的知识汇总成一篇文章.可能会有很多地方写的不是很好,欢迎大家评论指出,我后续修正. 个人vx:http://wc.ljlju.cn/ ...

  7. 手把手教你弄一个毕业答辩项目-01

    前言 不知道大家是不是跟我一样,快到毕业答辩的时候就有些焦虑,可能是因为我是学渣本渣了,老担心自己的项目太low,毕业答辩会被导师diss.不过看了这篇文章之后就不用担心了,本渣教你如何去搞来一个大气 ...

  8. 零基础手把手教你写NFT捡漏软

    想必大家都很想学习捡漏软件的编写,现在教大家捡漏软的逻辑,大家举一反三,相信大家可以写出优秀并且优秀的软件!!! 捡漏软逻辑解析 个人vx:http://wc.ljlju.cn/4ZGETK,有兴趣的 ...

  9. flyme Android7.0 root,手把手教你如何免ROOT卸载Flyme7系统自带APP

    本教程需要使用adb,adb的全称为Android Debug bridge,就是起到调试桥的作用.借助adb工具,我们可以管理设备或手机模拟器的状态. 本教程需要使用adb,adb的全称为Andro ...

最新文章

  1. Swift类与OC类方法相互调用的
  2. 组合破解windows域账号
  3. abap git - commnication failure错误消息的分析和定位
  4. python head 函数_python爬虫中header是什么?怎么用?
  5. 十一、飞机大战(IVX 快速开发教程)
  6. android代码删除wifi,Android Wifi的forget()操作实例详解_Android_脚本之家
  7. 源码主干分支开发四大模式
  8. css裁剪图片 clip-path
  9. 统计学中sp_统计学假设检验中 p 值的含义具体是什么?
  10. 下载mrt需要java_MRT(MODIS Reprojection Tool)下载及安装方法
  11. MySQL数据库安装包官网下载地址
  12. FCoin币改试验区(主版C)筹备公告(5号)
  13. 邮件服务器安全SPF、DKIM、DMARC
  14. 翻译论文:Deep Domain Confusion: Maximizing for Domain Invariance
  15. 基于php小说阅读网站
  16. php 数组如何添加元素,php数组添加元素
  17. 分享到豆瓣/QQ/开心网/人人网/百度/Google等代码
  18. 《AutoCAD Advanced 3D Modeling》学习笔记
  19. python中val是什么意思_如何处理Python单个val和val列表?
  20. 三种方法教你清空剪贴板

热门文章

  1. 金港赢简述大基建大金融和三赛道
  2. 使HTML中的表单Form实现居中效果
  3. Java并发编程书籍推荐,丹丹学妹哭着对我说:学长(1)
  4. 亚马逊击败IBM 获美国中情局6亿美元云计算订单
  5. 瓦片经纬度及行列号转换_Slippy map tilenames(瓦片和经纬度换算)
  6. XSSFWorkbook根据模板生成Excel文件
  7. 校园闲置物品交易平台的设计与实现(论文+源码)_kaic
  8. 图像增强方法之--BM3D(3D块匹配)性能在传统方法中是最好的
  9. 无代码开发平台云表,让企业系统实现自我控制
  10. HTML+CSS+JS登录界面