Networks Business Online Việt Nam & International VH2

Giới thiệu cảm biến vân tay, hướng dẫn sử dụng cảm biến vân tay với Arduino, thực hành làm bộ mở khóa cửa bằng cảm biến vân tay và Arduino

Đăng ngày 08 November, 2022 bởi admin

Mục lục:

1. Giới thiệu cảm biến vân tay

Công nghệ cảm biến vân tay ngày càng thông dụng và tăng trưởng. Không chỉ được sử dụng để tích hợp tính năng bảo mật thông tin trên những dòng smartphone đời mới. Công nghệ cảm ứng vân tay còn được ứng dụng tích hợp vào những thiết bị văn minh khác như : Laptop, Tivi, Khóa cửa, Máy chấm công …. Vậy cảm biến vân tay là gì ? Hãy cùng Nshop khám phá để biết về tính năng, và cách hoạt động giải trí của công nghệ tiên tiến cảm biến vân tay nhé .

  • Định nghĩa:

Cảm biến vân tay hay còn có tên gọi khác là cảm biến nhận diện vân tay là một dạng tàng trữ vân tay của người dùng bằng công nghệ sinh trắc học với những loại sóng khác nhau, sau đó lưu lại những mặt phẳng lồi lõm và cả lớp da của tay để lưu lại nhằm mục đích bảo vệ tính bảo mật thông tin khi người dùng đăng nhập vào thiết bị .

  • Nguyên lý hoạt động:

Về cơ bản, cảm biến vân tay là một hệ thống có khả năng lưu bản in vân tay của người dùng một cách nhanh chóng nhờ một hệ thống được đặt dưới khung quét. Người dùng đặt tay lên khung quét và các cảm biến trên khung quét sẽ lưu lại các hình ảnh đó và các phân mềm, vi xử lý sẽ phân tích hình ảnh này theo các vị trí lồi/lõm trên đầu ngón tay của bạn. Khi đặt ngón tay lên trên một thiết bị đọc dấu vân tay, ngay lập tức thiết bị này sẽ quét hình ảnh ngón tay đó và đưa vào hệ thống. Hệ thống sẽ xử  lý dấu vân tay, chuyển sang dạng dữ liệu số rồi đối chiếu các đặc điểm của vân tay đó với dữ liệu đã được lưu trữ trong hệ thống.

  • Ưu nhược điểm của cảm biến vân tay:

Ưu điểm :

  1. So với các thiết bị thông thường việc mở khóa bằng cảm biến vân tay sẽ nhanh hơn với độ nhạy cao: chỉ cần chạm hoặc vuốt nhẹ
  2. Không cần ghi nhớ mật khẩu, dễ dàng thao tác, tiếp cận dễ dàng với người dùng
  3. Có tính bảo mật, xác thực cao: do vân tay của mỗi người là khác nhau

Nhược điểm :

  1. Không thể mở thiết bị nếu vân tay của bạn bị xước, biến dạng mà không có phương án dự phòng
  2. Cảm biến vân tay là một hệ thống xác thực, không có chức năng bảo vệ dữ liệu. Chính vì vậy người khác có thể sử dụng ngón tay của bạn mở khóa thiết bị khi bạn ngủ hoặc mất ý thức.
  • Phân loại cảm biến vân tay
    • Cảm biến quang học:

Cảm biến này sẽ sử dụng một camera chuyên được dùng để chụp lại hình ảnh của dấu vân tay trên bề mặt kính, bề mặt kính của cảm biến loại này được phủ một lớp vật liệu đặc biệt quan trọng giúp dấu vân tay hiển thị được rõ nét hơn trên mặt phẳng lớp mặt kính. Bức ảnh sau khi được mạng lưới hệ thống camera chụp lại sẽ được nén lại và chuyển sang tín hiệu số để chuyển đến khối giải quyết và xử lý hình ảnh phía sau .
Công nghệ này có điểm yếu kém là nhận dạng vân tay lâu. Thiếu độ đúng mực cao, năng lực giải quyết và xử lý dấu vân tay mất nhiều thời hạn hơn so với những loại khác .

    • Cảm biến điện dung:

Cảm biết loại này dựa trên nguyên tắc cảm ứng điện từ, mặt phẳng cảm biến sẽ được sắp xếp một ma trận tụ điện, ma trận này sẽ có trách nhiệm tái tạo lại hình ảnh vân tay khi được lấy mẫu. Khi ngón tay của người dùng đặt trên mặt phẳng cảm biến, ngay lập tức nó sẽ tạo nên sự đổi khác điện dung trong từng con tụ trên ma trận tụ điện, tùy vào độ nông sâu của dấu vân tay ở từng điểm mà trị số tụ điện sẽ khác nhau. Dựa vào trị số điện dung ở từng node mạng lưới hệ thống sẽ dựng lại ảnh vân tay trên ngón vừa lấy mẫu để gửi về khối giải quyết và xử lý và so sánh .
Cảm biến loại này có cấu trúc mỏng mảnh và có độ bảo mật thông tin cao hơn cảm biến quang học do đó nó được vận dụng ở những thiết bị cá thể như máy điện thoại di động hoặc một số ít dòng thiết bị hạng sang khác .

  • Ứng dụng của cảm biến vân tay
    • Hệ thống khóa cửa vân tay
    • Két sắt
    • Máy chấm công
    • Kiểm soát ra vào
    • Điện thoại thông minh…

2. Hướng dẫn sử dụng cảm biến vân tay với Arduino

Để sử dụng cảm biến vân tay với arduino ta cần sẵn sàng chuẩn bị một cảm biến vân tay, board mạch Arduino, máy tính đã thiết lập Arduino. Các bạn hoàn toàn có thể tìm hiểu thêm những mẫu sản phẩm có sẵn tại shop :
Sau khi tải và setup ứng dụng triển khai cài thư viện cho cảm biến vân tay :

Link thư viện: https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library

Tiến hành kết nối cảm biến với Arduino theo sơ đồ sau:

Cảm biến vân tay Arduino Uno

5V —> 5V

TX  —> 2

RX —> 3

0V —> GND

Ở đây mình sử dụng cảm biến R307, một cảm biến sẽ có một sơ đồ chân khác nhau, những bạn cần xác lập đúng chân trước khi liên kết :

Sau khi kết nối, tiến hành test cảm biến: Mở Arduino, đầu tiên nạp code enroll để đăng ký vân tay:

Sau khi nạp code, mở Serial chọn baud: 9600

Nhập ID -> Enter


Sau đó đặt ngón tay lên cảm biến để học vân tay :

Đến khi cổng Serial hiện Stored là đã học thành công vân tay vào ID 1, các bạn có thể học tương tự các vân tay bằng cách chọn ID từ 1 -> 127  và làm như trên.

Sau khi học vân tay xong chúng ta mở code fingerprint để kiểm tra các vân tay vừa học:

Sau khi nạp code, mở Serial chọn baud: 9600

Đặt ngón tay mà bạn lưu là ID 1: nếu đúng Serial sẽ báo Found ID #1

Khi bạn đặt 1 ngón tay khác mà bạn chưa học vào cảm biến, cổng Serial sẽ báo Did not find a match:


Như vậy là tất cả chúng ta đã kiểm tra được cảm biến vân tay hoạt tốt, từ đó ta hoàn toàn có thể phối hợp với những linh phụ kiện khác để tạo thành một mẫu sản phẩm hoàn hảo theo ý muốn .

3. Thực hành: làm bộ khóa cửa bằng cảm biến vân tay hoàn chỉnh

Để triển khai một bộ khóa cửa hoàn hảo, tất cả chúng ta cần chuẩn bị sẵn sàng những linh phụ kiện sau :

  • Arduino UNO R3 DIP x1
  • Cảm biến nhận dạng vân tay R307 x1
  • LCD 1602 kèm module I2C x1
  • Module 1 Relay Với Opto Cách Ly Kích H/L (5VDC) x1
  • Khóa Chốt Điện Từ LY-03 12VDC x1
  • Nút nhấn x4

Sơ đồ kết nối:

Hướng dẫn sử dụng:

Đăng kí vân tay: Nhấn nút Enroll để đăng kí vân tay, chọn địa chỉ lưu ID vân tay bằng cách nhấn Up hoặc Down sau đó nhấn Ok. Đặt ngón tay cần đăng kí vào cảm biến cho đến khi màn hình báo Stored!.

Xóa vân tay: Nhấn nút Del để xóa vân tay, chọn địa chỉ ID mà bạn cần xóa bằng cách nhấn UP hoặc Down sau đó nhấn Ok. Màn hình báo Figer Deleted Successfully là thành công.

Mở khóa điện từ: Nhấn giữ Up/Down 2s để bắt đầu kiểm tra, lúc này đặt ngón tay vào cảm biến, nếu vân tay đúng khóa điện từ sẽ tự động mở 5s sau đó đóng; nếu vân tay không đúng màn hình sẽ báo Finger Not Found Try Later và khóa chốt sẽ không mở.

Code:

#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <SoftwareSerial.h>
#include 
SoftwareSerial fingerPrint(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerPrint);
uint8_t id;
#define enroll A0
#define del A1
#define up A2
#define down A3
#define openLight 4
#define closeLight 5
#define door 6
void setup() {
  // put your setup code here, to run once:
  lcd.begin();
  delay(100);
  Serial.begin(9600);
  pinMode(enroll, INPUT_PULLUP);
    pinMode(up, INPUT_PULLUP); 
    pinMode(down, INPUT_PULLUP); 
    pinMode(del, INPUT_PULLUP); 
    pinMode(openLight, OUTPUT);
    pinMode(closeLight, OUTPUT);
    pinMode(door, OUTPUT);
    digitalWrite(door, LOW);
    lcd.begin();
    lcd.print("Cam Bien Van Tay");
    lcd.setCursor(0,1);
    lcd.print("    by Nshop");
    delay(2000);
    finger.begin(57600);
    Serial.begin(9600);
    lcd.clear();
    lcd.print("Finding Module");
    lcd.setCursor(0,1);
    delay(1000);
    if (finger.verifyPassword()) 
    {
      Serial.println("Found fingerprint sensor!");
      lcd.clear();
      lcd.print("Found Module ");
      delay(1000);
    } 
    else 
    {
    lcd.clear();
    lcd.print("Module not Found");
    lcd.setCursor(0,1);
    lcd.print("Check Connections");
    while (1);
    }
}

void loop() {
  // put your main code here, to run repeatedly:
  lcd.setCursor(0,0);
       lcd.print("Press UP/Down ");
       lcd.setCursor(0,1);
       lcd.print("to start System");
       digitalWrite(closeLight, HIGH);
       if(digitalRead(up)==0 || digitalRead(down)==0)
       {
        for(int i=0;i<5;i++)
        {
          lcd.clear();
          lcd.print("Place Finger");
          delay(2000);
          int result=getFingerprintIDez();
          if(result>=0)
          {
              digitalWrite(openLight, HIGH);
              digitalWrite(door, HIGH);
              digitalWrite(closeLight, LOW);
              lcd.clear();
              lcd.print("Allowed");
              lcd.setCursor(0,1);
              lcd.print("Gete Opened   ");
              delay(5000);
              digitalWrite(closeLight, HIGH);
              digitalWrite(door, LOW);
              digitalWrite(openLight, LOW);
              lcd.setCursor(0,1);
              lcd.print("Gate Closed   ");
              return;
           }
         }
       }
       checkKeys();
       delay(1000);          
}
void checkKeys()
{
   if(digitalRead(enroll) == 0)
   {
    lcd.clear();
    lcd.print("Please Wait");
    delay(1000);
    while(digitalRead(enroll) == 0);
    Enroll();
   }

   else if(digitalRead(del) == 0)
   {
    lcd.clear();
    lcd.print("Please Wait");
    delay(1000);
    delet();
   }  
}

void Enroll()
{
   int count=0;
   lcd.clear();
   lcd.print("Enroll Finger    ");
   lcd.setCursor(0,1);
   lcd.print("Location:");
   while(1)
   {
     lcd.setCursor(9,1);
     lcd.print(count);
     lcd.print("  ");
     if(digitalRead(up) == 0)
     {
       count++;
       if(count>25)
       count=0;
       delay(500);
     }

     else if(digitalRead(down) == 0)
     {
       count--;
       if(count<0)
       count=25;
       delay(500);
     }
     else if(digitalRead(del) == 0)
     {
          id=count;
          getFingerprintEnroll();
          return;
     }

       else if(digitalRead(enroll) == 0)
     {        
          return;
     }
 }
}

void delet()
{
   int count=0;
   lcd.clear();
   lcd.print("Delete Finger    ");
   lcd.setCursor(0,1);
   lcd.print("Location:");
   while(1)
   {
     lcd.setCursor(9,1);
     lcd.print(count);
     lcd.print("  ");
     if(digitalRead(up) == 0)
     {
       count++;
       if(count>25)
       count=0;
       delay(500);
     }

     else if(digitalRead(down) == 0)
     {
       count--;
       if(count<0)
       count=25;
       delay(500);
     }
     else if(digitalRead(del) == 0)
     {
          id=count;
          deleteFingerprint(id);
          return;
     }

       else if(digitalRead(enroll) == 0)
     {        
          return;
     }
 }
}

uint8_t getFingerprintEnroll() 
{
  int p = -1;
  lcd.clear();
  lcd.print("finger ID:");
  lcd.print(id);
  lcd.setCursor(0,1);
  lcd.print("Place Finger");
  delay(2000);
  while (p != FINGERPRINT_OK)
  {
    p = finger.getImage();
    switch (p)
    {
    case FINGERPRINT_OK:
      lcd.clear();
      lcd.print("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      lcd.clear();
      lcd.print("No Finger");
      break;
    case FINGERPRINT_PACKETRECIEVEERR:
      lcd.clear();
      lcd.print("Comm Error");
      break;
    case FINGERPRINT_IMAGEFAIL:
      lcd.clear();
      lcd.print("Imaging Error");
      break;
    default:
       lcd.clear();
      lcd.print("Unknown Error");
      break;
    }
  }

  // OK success!

  p = finger.image2Tz(1);
  switch (p) {
    case FINGERPRINT_OK:
      lcd.clear();
      lcd.print("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
       lcd.clear();
       lcd.print("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      lcd.clear();
      lcd.print("Comm Error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      lcd.clear();
      lcd.print("Feature Not Found");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      lcd.clear();
      lcd.print("Feature Not Found");
      return p;
    default:
      lcd.clear();
      lcd.print("Unknown Error");
      return p;
  }
  
  lcd.clear();
  lcd.print("Remove Finger");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {
    p = finger.getImage();
  }
  p = -1;
   lcd.clear();
      lcd.print("Place Finger");
      lcd.setCursor(0,1);
      lcd.print("   Again");
  while (p != FINGERPRINT_OK) {
    p = finger.getImage();
  }

  // OK success!

  p = finger.image2Tz(2);  
  p = finger.createModel();   
  p = finger.storeModel(id);
  if (p == FINGERPRINT_OK) {
    lcd.clear();
    lcd.print("Stored!");
    delay(2000);
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    return p;
  } else if (p == FINGERPRINT_BADLOCATION) {
    return p;
  } else if (p == FINGERPRINT_FLASHERR) {
    return p;
  }
  else {
    return p;
  }   
}

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)
  {
   lcd.clear();
   lcd.print("Finger Not Found");
   lcd.setCursor(0,1);
   lcd.print("Try Later");
   delay(2000);  
  return -1;
  }
  return finger.fingerID; 
}

uint8_t deleteFingerprint(uint8_t id) 
{
  uint8_t p = -1;  
  lcd.clear();
  lcd.print("Please wait");
  p = finger.deleteModel(id);
  if (p == FINGERPRINT_OK) 
  {
    lcd.clear();
    lcd.print("Figer Deleted");
    lcd.setCursor(0,1);
    lcd.print("Successfully");
    delay(1000);
  } 
  
  else 
  { 
    lcd.clear();
    lcd.print("Something Wrong");
    lcd.setCursor(0,1);
    lcd.print("Try Again Later");
    delay(2000);
    return p;
  }   
}

Qua bài viết này tất cả chúng ta đã hiểu rõ hơn về cảm biến vân tay và đã hoàn toàn có thể tự làm một dự án Bất Động Sản đơn thuần ứng dụng vào đời sống rồi. Các bạn hoàn toàn có thể phát minh sáng tạo và tạo ra nhiều thiết bị có hiệu suất cao cao hơn, chúc những bạn thành công xuất sắc ! ! !

Source: https://vh2.com.vn
Category : Tin Học