用电磁锁做一个指纹锁

2019-06-141.8万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用DFRduino UNO R3、指纹识别传感器和电磁锁制作一个指纹锁。项目包括3D建模盒子结构件、电路连接和代码编写。最终效果是通过指纹识别来控制电磁锁的开关。适合STEM教育场景,锻炼学生的动手能力和逻辑思维。


          入手DF商城的指纹传感器和阿里套件的电磁锁有段时间了,一直没有动过,所以这次把这两样东西放在一起玩玩!
【展示视频】

【展示效果】
用电磁锁做一个指纹锁图2
用电磁锁做一个指纹锁图1
用电磁锁做一个指纹锁图3
【作品器材】                    
                             
          DFRduino UNO R3                   1
          IO 传感器扩展板 V7.1                1
          指纹识别传感器                         1
          电磁锁                                       1
          数字继电器模块                         1
          I2C LCD1602液晶模块(兼容Arduino Gadgeteer)     1
          M3*30扁头内六角螺丝 10套      1
【制作过程】

         1.3D建模盒子结构件
用电磁锁做一个指纹锁图4
用电磁锁做一个指纹锁图5
3D打印模型
用电磁锁做一个指纹锁图7
用电磁锁做一个指纹锁图6
3D打印盒子结构件
用电磁锁做一个指纹锁图12
用电磁锁做一个指纹锁图13
3D打印盒子盖

3D打印盒子
(新模型盒盖和盖轴是连在一起的)


器材安装
用电磁锁做一个指纹锁图8
拿出电磁锁和三根M3的螺丝
用电磁锁做一个指纹锁图9
将电磁锁安装盒壁的侧面
用电磁锁做一个指纹锁图10

用电磁锁做一个指纹锁图17

拿出指纹传感器从盒子内部由里到外穿出指纹传感器,使其卡在指纹传感器的卡缝处。用热熔胶枪从盒子内部打胶固定指纹传感器。

用电磁锁做一个指纹锁图15
用AB胶水固定在盖板上,用30mm的m3螺丝固定转轴。
用电磁锁做一个指纹锁图11
再将LCD屏固定在对应的孔位上。

把主控器等电子元器件放入盒子内部。



电路连线图:
用电磁锁做一个指纹锁图20

代码编写:
[mw_shl_code=cpp,true]
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

#include <Adafruit_Fingerprint.h>

SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);



void setup()  
{ lcd.init();                      // initialize the lcd
  lcd.home();
  lcd.print("door use finger");
  lcd.setCursor(0, 1);
  lcd.print("nsfzsz_cj");
  Serial.begin(9600);

  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);
  pinMode(4, OUTPUT);
  pinMode(6, INPUT_PULLUP);         //Set Pin6 as output
  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...");

}

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
{
  getFingerprintIDez();
   delay(50);            //don't ned to run this at full speed.
   //lcd.print("read your finger");
  
  
}

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;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
  
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
   // digitalWrite(12,LOW);
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    //digitalWrite(12,LOW);
    Serial.println("Did not find a match");
    return p;
  } else {
    //digitalWrite(12,LOW);
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
// digitalWrite(12,HIGH);
  Serial.print("Found 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)  return -1;
  lcd.clear();
  lcd.print("you no master");
  p = finger.image2Tz();
  if (p != FINGERPRINT_OK) return -1;
  lcd.clear();
  lcd.print("you no master");
  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
// found a match!

  lcd.clear();
  lcd.print("Found ID #");
  lcd.print(finger.fingerID);
  lcd.setCursor(0, 1);
  lcd.print("come in master");
  //lcd.print(finger.confidence);
  digitalWrite(4,HIGH);
  delay(5000);
  digitalWrite(4,LOW);
  lcd.clear();
  //Serial.print("Found ID #");
// Serial.print(finger.fingerID);
  //Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID;
  }[/mw_shl_code]

测试效果:
整体效果用电磁锁做一个指纹锁图16
用电磁锁做一个指纹锁图14
上电效果,输入指纹开门
用电磁锁做一个指纹锁图18
输入错误的指纹
用电磁锁做一个指纹锁图19
输入正确的指纹信息






创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(6)
韩俊
韩俊
学习中
DFr15BEux-H
DFr15BEux-H
学习中,希望自己能成功做出一个来!谢谢分享!
gray6666
gray6666
指纹模块好贵。。。
gada888
gada888
you are a master
dsweiliang
dsweiliang
有没有办法让指纹模块自动休眠了,一直亮着灯晚上很亮
指纹解锁
指纹解锁回复dsweiliang
加一个按钮。或者通过指纹模块感应信号:https://mc.dfrobot.com.cn/thread-297288-1-1.html (这里没有明确说明)
xfNDcOnf
xfNDcOnf回复dsweiliang
模块有一个触摸电压
Ash1
Ash1
精华都给你了 我来催更了
hnyzcj
hnyzcj
作者
回复Ash1
收到老板
- 没有更多了 -