|
/*************************************************** |
|
This is an example sketch for our optical Fingerprint sensor |
|
|
|
Designed specifically to work with the Adafruit BMP085 Breakout |
|
----> http://www.adafruit.com/products/751 |
|
|
|
These displays use TTL Serial to communicate, 2 pins are required to |
|
interface |
|
Adafruit invests time and resources providing this open source code, |
|
please support Adafruit and open-source hardware by purchasing |
|
products from Adafruit! |
|
|
|
Written by Limor Fried/Ladyada for Adafruit Industries. |
|
BSD license, all text above must be included in any redistribution |
|
****************************************************/ |
|
|
|
/***************************************************************************** |
|
<DIY 지문 인식 장치. (원래는 방 문, 교실 문 잠그려고 만듦)> |
|
1. 미리 학급에 출입해도 되는 학생들의 지문을 등록한다. |
|
2. 지문 인식 센서를 통해 출입이 허가된 학생들은 서보 모터의 각도를 바꿔 잠금 장치를 연다. |
|
3. 등록되지 않은 학생의 지문이 인식되면 경고 부저와 LED가 반짝이게 된다. |
|
*****************************************************************************/ |
|
|
|
#include <Adafruit_Fingerprint.h> |
|
#include<Servo.h> //Servo 라이브러리를 추가 |
|
Servo servo; //Servo 클래스로 servo객체 생성 |
|
|
|
//핀 정의 |
|
int touchSensor = 8; // 터치센서 핀 설정 |
|
int ledPin = 9; |
|
int buzzerPin = 11; |
|
int servoPin = 7; //0도에 열고 180도에 닫고 |
|
//서보 모터 각도 조절을 위한 변수 |
|
bool flag = false; |
|
|
|
SoftwareSerial mySerial(2, 3); |
|
|
|
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); |
|
|
|
void setup() |
|
{ |
|
servo.attach(servoPin); |
|
servo.write(180); |
|
pinMode(touchSensor, INPUT); |
|
Serial.begin(9600); |
|
while (!Serial); // For Yun/Leo/Micro/Zero/... |
|
delay(100); |
|
Serial.println("\n\nAdafruit finger detect test"); |
|
|
|
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() // run over and over again |
|
{ |
|
getFingerprintIDez(); |
|
if(flag) { |
|
servo.write(1); |
|
delay(1000); |
|
} |
|
|
|
//이미 출입한 학생이 학급안에서 바깥에 있는 잠금 장치를 잠그기 위해 터치 센서를 |
|
//교실 안쪽에 따로 설치해둠. |
|
//터치 센서 동작시 문을 닫음. |
|
int touchValue = digitalRead(touchSensor); |
|
if (touchValue == HIGH){ |
|
servo.write(179); |
|
Serial.println("문을 닫습니다."); |
|
flag = false; |
|
} |
|
delay(300); //don't need 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); |
|
|
|
return finger.fingerID; |
|
} |
|
|
|
// returns -1 if failed, otherwise returns ID # |
|
int getFingerprintIDez() { |
|
uint8_t p = finger.getImage(); |
|
if (p != FINGERPRINT_OK) { |
|
Serial.println("Waiting"); |
|
return -1; |
|
} |
|
|
|
p = finger.image2Tz(); |
|
if (p != FINGERPRINT_OK) { |
|
Serial.println("22"); |
|
return -1; |
|
} |
|
|
|
p = finger.fingerFastSearch(); |
|
if (p != FINGERPRINT_OK) { |
|
Serial.println("Denied"); |
|
tone(buzzerPin, 261.63, 500); |
|
flag = false; |
|
digitalWrite(ledPin, HIGH); |
|
delay(500); |
|
digitalWrite(ledPin, LOW); |
|
servo.write(179); |
|
return -1; |
|
} |
|
|
|
// found a match! |
|
Serial.print("Found ID #"); Serial.print(finger.fingerID); |
|
Serial.print(" with confidence of "); Serial.println(finger.confidence); |
|
if(finger.confidence >= 100){ |
|
Serial.println("문이 열립니다."); |
|
flag=true; |
|
} |
|
else{ |
|
Serial.println("retouch"); |
|
} |
|
return finger.fingerID; |
|
} |