饶厂长 发表于 2017-4-15 19:10:21

Arduino 指纹电磁锁, 让你们再进我的工作室乱翻

使用器材总和很便宜,而且很实用。
比市面上的产品便宜好多呢, 还很有科技感。
如果安装在工作室门口是不是感觉很厉害!

教程和演示都在视频里哦, 点开看就好了

先上动图


       本人成功开门                                                            无权限人无法开门

视频教程:http://player.youku.com/player.php/sid/XMjcxMTM1ODQ2OA==/v.swf
另外stl文件与arduino代码还有接线方法全都放在附件里面啦, 快感谢厂长吧





gada888 发表于 2017-4-16 08:36:05

借贵宝地一用,希望lz见谅,闲着无聊,推导一下代码:
先下载Fingerprint Sensor library运行库,解压库并放到arduino 运行库里,然后在arduino里样例里打开一个如下案例,
路径如下:
Example ->Adafruit_Fingerprint→fingerprint
-------------------------
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

int getFingerprintIDez();

// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino(WHITE wire)
SoftwareSerial mySerial(2, 3);


Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()
{
Serial.begin(9600);
Serial.println("fingertest");

// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
} else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
}
Serial.println("Waiting for valid finger...");
}

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("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) {
    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;
}   

// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
}

// returns -1 if failed, otherwise returns ID #
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)return -1;

// found a match!
Serial.print("Found ID #");
Serial.print(finger.fingerID);
Serial.print(" with confidence of ");
Serial.println(finger.confidence);
return finger.fingerID;
}
这是案例源文件,下一个跟帖是案例的修改文件。

gada888 发表于 2017-4-16 08:43:31



图片来自谷歌搜索
加入逻辑判断,和锁的开关之后就成了如下程序:
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

int getFingerprintIDez();
bool locked = true;
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino(WHITE wire)
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int LockPin = 2;
void setup()
{
Serial.begin(9600);
Serial.println("fingertest");

// set the data rate for the sensor serial port
finger.begin(57600);

if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
} else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1);
}
Serial.println("Waiting for valid finger...");
}

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("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) {
    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;
}   

// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
}

// returns -1 if failed, otherwise returns ID #
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)return -1;

// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);

   if (locked == true) {
    digitalWrite(LockPin, HIGH);
    locked = false;
    delay(1000);

} else {
    digitalWrite(LockPin, LOW);
    locked = true;
    delay(1000);
}

注:没测试过。但按道理应该是对的。加粗部分是新加code,程序需要微调。中间大段的测试部分可以删掉。锁的硬件电路需要设计一个简单的电流放大电路来驱动大功率电磁开关。电磁门锁通常是12V。普通一个场效应管就可以控制了。LCD不知道IIC的LCD可不可以用,如果可以,那需要根据下面的LCD IIC 代码在主程序加入几行语句,非常简单:
#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
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("Shanno");
lcd.setCursor(0,1);
lcd.print("Is Awesome!");
}
void loop()
{
}


dsweiliang 发表于 2017-4-16 08:20:11

有教程吗?

dsweiliang 发表于 2017-4-16 10:01:03

本帖最后由 gada888 于 2017-4-16 11:22 编辑

gada888 发表于 2017-4-16 08:43
图片来自谷歌搜索
加入逻辑判断,和锁的开关之后就成了如下程序:
#include

有办法令手指碰到感应器,感应器再触发感应吗,省电

gada888 发表于 2017-4-16 11:23:18

本帖最后由 gada888 于 2017-4-16 11:26 编辑

dsweiliang 发表于 2017-4-16 10:01
有办法令手指碰到感应器,感应器再触发感应吗,省电
============
可以吧,arduino有个sleep命令,可以让程序不工作时处于休眠状态。需要加入LowPower.h库。

dsweiliang 发表于 2017-4-16 13:38:33

gada888 发表于 2017-4-16 11:23
============
可以吧,arduino有个sleep命令,可以让程序不工作时处于休眠状态。需要加入LowPower.h库。
...

好的

饶厂长 发表于 2017-4-16 16:06:51

dsweiliang 发表于 2017-4-16 08:20
有教程吗?

视频今天贴上了

饶厂长 发表于 2017-4-16 16:14:31

本帖最后由 gada888 于 2017-4-16 16:44 编辑

gada888 发表于 2017-4-16 08:43
图片来自谷歌搜索
加入逻辑判断,和锁的开关之后就成了如下程序:
#include

不建议接在0、1口, 下载程序不方便

饶厂长 发表于 2017-4-16 16:14:48

本帖最后由 gada888 于 2017-4-16 16:43 编辑

gada888 发表于 2017-4-16 11:23
============
可以吧,arduino有个sleep命令,可以让程序不工作时处于休眠状态。需要加入LowPower.h库。
...
我用的是按钮唤醒

Rockets 发表于 2017-4-18 16:58:30

感觉是做雷神之锤的节奏啊。

饶厂长 发表于 2017-4-20 11:52:30

Rockets 发表于 2017-4-18 16:58
感觉是做雷神之锤的节奏啊。

怎么讲? 没看懂。

QQ358698005 发表于 2017-4-22 09:31:59

指纹识别模块多少钱一个?可以贴下链接吗

饶厂长 发表于 2017-4-23 00:09:51

QQ358698005 发表于 2017-4-22 09:31
指纹识别模块多少钱一个?可以贴下链接吗

淘宝搜 100块左右

hnyzcj 发表于 2017-4-23 07:05:40

gada888 发表于 2017-4-16 08:43
图片来自谷歌搜索
加入逻辑判断,和锁的开关之后就成了如下程序:
#include


感谢感谢

Rockets 发表于 2017-4-24 12:17:46

饶厂长 发表于 2017-4-20 11:52
怎么讲? 没看懂。

国外有个朋友做了一个雷神之锤,用的和你的原理是一样的,用指纹来控制电磁铁。只有验证的人才能切断电磁铁工作,拿起雷神之锤。

饶厂长 发表于 2017-4-25 18:09:51

Rockets 发表于 2017-4-24 12:17
国外有个朋友做了一个雷神之锤,用的和你的原理是一样的,用指纹来控制电磁铁。只有验证的人才能切断电磁 ...

好创意啊, 可以考虑搞一个

iooops 发表于 2017-4-30 23:36:15

感觉好666啊

瞻仰一下大神 = =

饶厂长 发表于 2017-5-1 16:44:53

iooops 发表于 2017-4-30 23:36
感觉好666啊

瞻仰一下大神 = =

刚接触不久;P 最近在研究这些

yahoocz 发表于 2017-6-1 19:19:45

看看

nicho 发表于 2017-6-3 20:09:24

{:5_197:}指纹识别不错呀~~
页: [1] 2 3 4 5
查看完整版本: Arduino 指纹电磁锁, 让你们再进我的工作室乱翻