arduino电子指纹锁,AS608/FPM10A互通

之前有篇文章只有图,所以今天来稍微详细说说这个制作过程。
这也是一个小项目,一直不知道该做什么东西,后来在网上看到有大学生给自己宿舍装了指纹锁,一下子受到启发,我自己也搞一个!

材料,arduino UNO 开发板;光学指纹模块,型号AS608/FPM10A;舵机或者电磁锁;
自己做的时候也看了不少材料,电容式那种指纹模块比较便宜,比如手机上的小圆片就是,我感觉打卡机那种光学的精度比较好,可存的指纹数量多,看起来也比较“高大上”。
至于源码,这里的源码指的仅仅是指纹模块的源码,GitHub上有,非常好用,下载下来解压,包放在arduino的libraries文件夹里,打开arduino,文件—示例—打开那个文件夹,里面
enroll是录入指纹程序,一个指头贴两遍
delete,输入你之前录入的编号即可删除
fingerprint,检测匹配,贴上你已录过的指头,显示匹配值,数值越高契合度越好,
大概常用的就这三个。几乎网上看到的所谓源码都是把这个指纹库里的东西扒拉出来然后贴上去,没有任何教程,还是建议GitHub上把完整安装包下载下来,导入本地arduino库。

连线问题,一共6条线,用其中4条就可以,现在也没在学校,东西不在手边,具体的忘了,大多数都是电源正负,通信两条线:TX,RX与开发板上的相反连接就行。电压一定要匹配,我的是5V的,连开发板上的3.3V就会闪。

最后说一下,调试好这个指纹模块才是一小步,毕竟现在也只是贴上指头然后电脑屏幕会反馈一个信息而已,难点在于把它和“锁”连接起来,本来说直接在淘宝上买个锁,就是那种一通电就把锁芯吸住,锁开。碍于经费有限,正好实验室有舵机,听从了大佬的意见,拿舵机模拟开锁就行,没必要弄个锁,只要是个机械装置即可。
这里就用到刚才说的那个库里面的fingerprint程序,进行这样的逻辑判断,匹配值达到X即给舵机一个信号,让它带动插销转动模拟开锁就行,于是把这个库代码改造改造,整合上之前学的一点舵机方面的小知识,

在fingerprint库最后的位置插入舵机转动相关代码,本来它是在指纹匹配的情况下要输出匹配值以及指纹标号的,现在就会先驱动舵机转动,然后再输出编号,达到开锁放行的目的。
最后我还加了点小料:LED灯。
如果指纹不匹配,给RED一个信号,即红灯亮,
如果匹配,则驱动舵机的同时给BLUE一个信号,蓝灯亮。(这里颜色自己定义啦,我这是实验室有啥就用啥)
以上为了打开制作思路,下面,上代码

#include <Adafruit_Fingerprint.h>
#include <Servo.h>    
// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// 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)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);
Servo myservo;        
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int bluePin = 10; 
int redPin=11;
int pos = 0;         
void setup()  
{
  Serial.begin(9600);
  pinMode(redPin, OUTPUT);
  pinMode(bluePin,OUTPUT);
  myservo.attach(9); 
  //while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  delay(5);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
}

void loop()                  
{
  getFingerprintIDez();
  delay(200);            //don't ned to run this at full speed.
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
 
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
    
    //open the door
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  

  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  

  return finger.fingerID;
}


int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  {
    digitalWrite(redPin,HIGH);
    delay(200);
    digitalWrite(redPin,LOW);
    delay(5);
    return -1;
  }
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
    digitalWrite(bluePin, HIGH);
    digitalWrite(bluePin, LOW); 
    delay(5); 
     for(pos = 0; pos<90; pos+=1){
            myservo.write(pos);            
            delay(15);                       
    }
    
    for(pos = 90; pos>=1; pos -= 1) {
          myservo.write(pos);           
          delay(15);                    
    }

代码有点C基础的都差不多可以看,建议要做的话也要学习学习arduino方面的代码规则,这个比起单片机已经算好理解的啦hhhh,这个代码是全整合型的,要用的小伙伴要自己定义好相关接口和材料,当然你没有经费限制的话来个现成 的锁也比较好,那个好像用什么三极管就可以驱动,我买好了三极管却。。
mi有经费了。
成品大概就是这样了
图中当时我录入了大拇指没有录食指,所以食指贴上去红灯亮,机械臂不转。
另一篇图片文章中链接
其他两个是已经开锁的图,蓝灯亮没拍到,但是可以看到舵机机械臂转动了一定角度。反正就是比较简陋吧(发扬硬核朋克风)
就这样吧。
国家政策,现在也不能去学校,有些东西没拍照片,具体流程也忘了点,以后会更新补上。当时泡在实验室好几天,东西在2019最后一天做出来完成的,最后也是加上了独立电源,毕竟指纹锁不可能装到门上都接个电脑吧哈哈哈。项目2020年底才收工,可以休息好长时间了。

第一次写博,码字不易,思路以及内容对你有帮助就点个赞吧。

  • 20
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
AS608是一款常用的指纹识别模块,可以通过Arduino进行控制,需要使用相应的库文件来实现指纹识别功能。 以下是AS608指纹识别模块的Arduino库文件使用方法: 1. 下载并安装指纹识别模块AS608的相关驱动程序和库文件。 2. 打开Arduino IDE,选择“工具”菜单,然后选择“库管理器”。 3. 在搜索框中输入“AS608”,然后选择最新版本的“AS608 Fingerprint Sensor Library”,点击“安装”按钮。 4. 在Arduino程序中,使用以下代码进行测试指纹识别功能: ``` #include <Adafruit_Fingerprint.h> //指纹识别模块的RX、TX连接Arduino的引脚 #define fingerRx 2 #define fingerTx 3 //创建指纹识别器对象 Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1); void setup() { Serial.begin(9600); //指纹识别模块连接Arduino的串口 Serial1.begin(57600); delay(100); //检测指纹识别模块是否正常 if (finger.verifyPassword()) { Serial.println("指纹识别模块已正常连接!"); } else { Serial.println("无法连接指纹识别模块!"); while (1) { delay(1); } } } void loop() { //等待用户按下指纹 Serial.println("请放上您的指纹:"); while (! finger.getImage()) { delay(1); } //把指纹图像转换为字符模式并存储到指纹库中 int id = finger.storeTemplate(); if (id == FINGERPRINT_OK) { Serial.println("指纹已成功存储到指纹库中!"); Serial.print("指纹ID:"); Serial.println(id); } else { Serial.println("存储指纹失败!"); } } ``` 以上代码实现了读取指纹图像并将其转换为字符模式,然后存储到指纹库中。可以根据需要进行修改,实现更复杂的指纹识别功能。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值