산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 지문인식 안전구역: 안드로이드/iOS/윈도우10 기기 자동 잠금해제

부품 및 소모품

부품수량비고
HC-05 블루투스 시리얼 모듈1기기 페어링용
Arduino Nano R31메인 컨트롤러
R301T 반도체 지문 인식 모듈1시리얼 통신 방식
5mm RGB 4핀 LED1상태 표시용

소프트웨어

프로젝트 소개

스마트폰, 태블릿, 노트북 등 스마트 기기 사용이 늘면서 개인정보(채팅, 연락처, 사진, 메모 등) 보호가 필수가 되었습니다. 하지만 집이나 개인 사무실처럼 안전한 공간에서도 매번 비밀번호/지문/얼굴 인증을 거쳐야 하는 건 번거롭습니다.

이 프로젝트는 지문으로 인증된 '안전구역(Safe Zone)' 장치를 만들어, 장치가 활성화되어 있는 동안 근처의 모든 페어링된 기기를 자동으로 잠금해제 상태로 유지합니다.

완성 후 할 수 있는 것

작동 원리: 기기 잠금/해제

장치에 등록된 지문을 인식하면 → 블루투스(HC-05) 켜짐 → 미리 페어링된 기기들(윈도우10, 안드로이드, iOS)이 '신뢰할 수 있는 장치' 감지 → 자동 잠금해제. 장치가 범위를 벗어나거나 지문 인증 해제 시 → 블루투스 꺼짐 → 기기 자동 잠금.

R301T 지문 모듈

컨트롤러(아두이노)와 시리얼 통신으로 데이터 교환. 지문 등록 후 아두이노 TX/RX 핀에 연결. HC-05 블루투스 모듈과 기기들을 1회 페어링. 아두이노 코드에서 '유효한 지문 감지 시 블루투스 켜기' 로직 구현.

회로도

프로젝트 페이지의 'Circuit' 섹션에서 상세 배선도 확인 가능.

코드 업로드 방법

  1. Arduino IDE 다운로드 및 설치
  2. IDE 실행 후 아래 코드 복사 붙여넣기
  3. Tools → Board → Arduino Nano 선택
  4. USB 연결 후 Tools → Port에서 COM 포트 선택
  5. 업로드 버튼(화살표) 클릭

메인 코드 (지문 라이브러리 필요: Adafruit_Fingerprint)

#include "Adafruit_Fingerprint.h"
#include "SoftwareSerial.h"

SoftwareSerial mySerial(2, 3);  // RX, TX
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int cc = 0;

void setup() {
  Serial.begin(9600);
  while (!Serial); delay(100);
  Serial.println("\n\nAdafruit finger detect test");
  
  finger.begin(57600);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { pinMode(13,OUTPUT); digitalWrite(13,LOW); pinMode(9,OUTPUT); digitalWrite(9,HIGH); }
  }
  
  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
}

void loop() {
  getFingerprintIDez();
  delay(50);
}

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;
  }
  
  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!");
  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);
  
  for (int i=255; i>1; i--) { analogWrite(9,i); delay(10); }
  if (cc%2==0) digitalWrite(13,HIGH); else digitalWrite(13,LOW);
  cc++;
  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) return -1;
  
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID;
}

조립 및 기기 페어링

  1. 윈도우10: 설정 → 로그인 옵션 → 동적 잠금 활성화 → 블루투스 장치 페어링
  2. 안드로이드: 설정 → 디스플레이 → 잠금화면 → 스마트 잠금 활성화 → 블루투스 페어링
  3. iOS: 설정 → Touch ID 및 암호 → 거기서 설정

자동 페어링 안 될 경우: 최초 페어링 시도 시 장치로 문자 하나 전송하는 트릭 사용.

향후 개선 아이디어

제조공정

  1. 아두이노 나노 비행 시뮬레이터 2020 컨트롤 패널 – LCD & CDI 디스플레이
  2. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  3. 학교용 스마트 체온 모니터링 시스템: 정확하고 실시간이며 안전한
  4. 아두이노용 효율적인 8비트 IO 포트 라이브러리 – 디지털 제어 확장
  5. 와이파이/이더넷으로 iOS·안드로이드 앱에서 아두이노 LED 제어하기
  6. 아두이노 64키 프로토타이핑 키보드 매트릭스 - 시프트 레지스터로 핀 절약하기
  7. 아두이노로 음악 톤 만들기: 88키 피아노 음계 구현 가이드
  8. 아두이노용 절연 아날로그 입력 회로 만들기
  9. 아두이노 프로젝트를 위한 스마트 실내 내비게이션 로봇 키트
  10. 직결식 워터 펌프로 수전송 효율 높이기