Hệ thống đóng mở cửa tự động dùng RFID và Arduino

0
9397
Đóng mở cửa tự động dùng RFID và Arduino

Trong dự án này, tôi sẽ hướng dẫn các bạn thiết kế một hệ thống bảo mật dựa trên RFID RC522 sử dụng Arduino, màn hình LCD Display và động cơ Servo. RC522 là mô-đun rất đơn giản nhưng hiệu quả. Nó là một mô-đun RFID và được sử dụng để quét thẻ RFID. Đây là một công nghệ mới và đang mở rộng từng ngày. Ngày nay, nó được sử dụng rộng rãi trong các văn phòng nơi nhân viên được cấp thẻ RFID và sự tham gia của họ được đánh dấu khi họ chạm vào thẻ của họ vào thẻ đọc RFID. Chúng ta cũng đã nhìn thấy nó trong phim ảnh mà khi ai đó đặt những thẻ trên một số máy sau đó cánh cửa mở ra hoặc đóng lại. Nói tóm lại, đây là một công nghệ mới và khá hữu ích.

Trước tiên, chúng ta cùng tìm hiểu một chút về RFID. RFID là tên viết tắt của Radio frequency identification (Nhận dạng qua tần số vô tuyến). Mô-đun RFID sử dụng trường điện từ để truyền dữ liệu giữa thẻ (tag) và đầu đọc (reader). Các thẻ khác nhau được gắn vào các đối tượng và khi chúng ta đặt đối tượng đó ở phía trước đầu đọc, đầu đọc đọc các thẻ đó. Một lợi ích khác của RFID là nó không cần phải nằm trong tầm nhìn để được phát hiện. Như trong mã vạch, đầu đọc phải ở trong tầm mắt của thẻ và sau đó nó có thể quét nhưng trong RFID không có hạn chế như vậy. Bây giờ, chúng ta hãy bắt đầu với giao tiếp của RFID RC522 với Arduino.

Xem thêm bài viết: Công nghệ RFID và ứng dụng

Chuẩn bị

Phần cứng

Linh kiện Số lượng
Arduino UNO 1
Module RFID 1
LCD 16×2 1
Động cơ Servo 1
   

Phần mềm: Arduino IDE

Module RFID-RC522

Giới thiệu

Module RFID RC522 sử dụng IC MFRC522 của Phillip dùng để đọc và ghi dữ liệu cho thẻ NFC tần số 13.56Mhz, với mức giá rẻ, thiết kế nhỏ gọn, module này là sự lựa chọn hàng đầu cho các ứng dụng về ghi đọc thẻ RFID.

Hình ảnh về Module RFID RC522

Module RFID RC522 được ứng dụng rộng rãi trong các mô hình như bảo mật xe máy, đóng mở cửa bằng thẻ RFID, các hệ thống quản lý, chấm công dựa trên mã thẻ RFID,…

Download datasheet Module RFID-RC522 tại đây.

Sơ đồ chân

Sơ đồ chân Module RFID RC522

Số TT Tên chân Mô tả
1 SDA(SS) Chân lựa chọn chip khi giao tiếp SPI ( Kích hoạt ở mức thấp)
2 SCK Chân xung trong chế độ SPI
3 MOSI(SDI) Master Data Out- Slave In trong chế độ giao tiếp SPI
4 MISO(SDO) Master Data In- Slave Out trong chế độ giao tiếp SPI
5 IRQ Chân ngắt
6 GND Chân nối đất
7 RST Chân RESET module
8 Vcc 3,3V

Thông số kỹ thuật 

  • Điện áp nuôi: 3.3V;
  • Dòng điện nuôi :13-26mA
  • Tần số hoạt động: 13.56MHz
  • Khoảng cách hoạt động: 0 ~ 60 mm
  • Cổng giao tiếp: SPI, tốc độ tối đa 10Мbps
  • Kích thước: 40mm х 60mm
  • Có khả năng đọc và ghi.

Cấu tạo và nguyên tắc hoạt động của thiết bị RFID

Hoạt động của thiết bị RFID

Một thiết bị hay một hệ thống RFID được cấu tạo bởi hai thành phần chính:

1. Thẻ RFID (RFID tag, Transponder – bộ phát đáp)

Là một thẻ gắn chip + Anten. Được lập trình điện tử với thông tin duy nhất.

Gồm 2 phần chính:

  • Chip: (bộ nhớ của chip có thế chứa tới 96 bit đến 512 bit dữ liệu gấp 64 lần so với mã vạch) lưu trữ một số thứ tự duy nhất hoặc thông tin khác dựa trên loại thẻ: read-only, read-write…
  • Antenna: được gắn với vi mạch truyền thông tin từ chip đến reader. Antenna có công suất càng lớn cho biết phạm vi đọc càng lớn.

Thẻ RFID là một thiết bị lưu trữ và truyền dữ liệu đến một đầu đọc trong một môi trường tiếp xúc bằng sóng vô tuyến. Thẻ RFID mang dữ liêu một vật một sản phẩm (item…) nào đó và gắn lên sản phẩm đó. Mỗi thẻ có các phần lưu trữ dữ liệu bên trong và cách giao tiếp với dữ liệu đó. Vài thẻ RFID giống như những nhãn giấy và được ứng dụng để bỏ vào hộp và đóng gói. Một số khác được sáp nhập thành vách của thùng chứa plastic được đúc. Còn một số khác được xây dựng thành miếng da bao cổ tay. Mỗi thẻ được lập trình với một nhận dạng duy nhất cho phép theo dõi không dây đối tượng hoặc con người đang gần thẻ đó. Thông thường mỗi thẻ RFID có một cuộn đây hoặc anten nhưng không phải tất cả RFID đều có vi chip và nguồn năng lượng riêng.

Có 02 loại thẻ RFID phổ biến: 

  •  Thẻ thụ động (Passive Tag): Không cần nguồn ngoài và nhận nằng lượng từ thiết bị đọc. Khoảng cách đọc ngắn.
  • Thẻ thụ động (Active Tag): Được nuôi bằng PIN, sử dụng với khoảng cách đọc lớn

2. Các reader (đầu đọc) hoặc sensor (cảm biến) để truy vấn các thẻ.

Đầu đọc FRlD (hay còn gọi là interrogator) là thiết bị kết nối không dây với thẻ để dễ dàng nhận dạng đối tượng được gắn thẻ. Nó là một thiết bị đọc và ghi dữ liệu nên thẻ FRID tương thích. Thời gian mà đầu đọc có thể phát năng lượng RF để đọc thẻ được gọi là chu trình làm việc của đầu đọc. Đầu đọc có nhiệm vụ kích hoạt thẻ, truyền dữ liệu bằng sóng vô tuyến với thẻ, thực hiện giải điều chế và giải mã tín hiệu nhận được từ thẻ ra dạng tín hiệu cần thiết để chuyển về máy chủ, đồng thời cũng nhận lệnh từ máy chủ để thực hiện các yêu cầu truy vấn hay đọc ghi thẻ.

Đầu đọc thẻ là hệ thần kinh trung ương của toàn bộ hệ thống phần cứng RFID thiết lập việc truyền với thành phần này và điều khiển nó, là thao tác quan trọng nhất của bất kỳ thực thể nào muốn liên kết với thiết bị phần cứng này.

Một hệ thống RFID có ba thành phần cơ bản: thẻ, đầu đọc, và một host computer. RFID hoạt động trên nền tảng sóng vô tuyến kết hợp với máy tính quản lý bao gồm thẻ, đầu đọc thẻ và máy tính chủ. Thẻ RFID gắn vào sản phẩm được tích hợp chip bán dẫn và ăng-ten thu sóng. Đầu đọc thẻ nhận tín hiệu từ thẻ RFID từ xa, có thể lên đến 50m tùy vào nguồn năng lượng được cung cấp cho thẻ RFID, chuyển dữ liệu đến máy tính để phân tích và xử lý thông tin về đối tượng đó.

Sơ đồ mạch

Sơ mạch điều khiển đóng mở của tự động

Chương trình

//Khai báo các thư viện

#include <RFID.h>

#include <SPI.h>

#include <LiquidCrystal.h>

#include <Servo.h>

#include “pitches.h”

//Định nghĩa

#define SS_PIN 10

#define RST_PIN 9

#define SERVO_PIN 6

#define Red_LED 8

#define Green_LED 7

#define Buzzer 5

//Khởi tạo thư viện với các chân giao tiếp

LiquidCrystal lcd(A5, A4, A3, A2, A1, A0); //(RS,E,D4,D5,D6,D7)

Servo DoorLock;

RFID rfid(SS_PIN, RST_PIN );

//ID duy nhất của thẻ RFID mà bạn muốn cấp quyền truy cập

int My_RFID_Tag[5] = {0x45, 0xD4, 0x07, 0xAB, 0x3D};

//Biến để giữ Access_card của bạn

boolean My_Card = false;

//Các note nhạc với giai điệu, lấy từ:

//File -> Examples -> Digital -> ToneMelody

int melody[] = {

NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4

};

//Trường độ của note 4 = note 1/4, 8 = note 1/8, v.v..

int noteDurations[] = {

4, 8, 8, 4, 4, 4, 4, 4

};

void setup()

{

//Thiết lập các chân Input/Output

pinMode(Red_LED, OUTPUT);

pinMode(Green_LED, OUTPUT);

pinMode(Buzzer, OUTPUT);

//Servo được kết nối đến chân 5 của Arduino

DoorLock.attach(SERVO_PIN);

//Mở port serial với 9600 baudrate.

Serial.begin(9600);

//Khởi tạo LCD 16×2

lcd.begin(16, 2);

//Khởi tạo Servo và RFID

SPI.begin();

rfid.init();

}
void loop()
{

//Đầu tiên giả sử card (hoặc tag) phát hiện được là My_Card

//Sau đó, chúng ta sẽ kiểm tra xem nó có phải là My_Card hay không!

My_Card = true;

DoorLock.write(0); //Servo ở vị trí 0, cửa đóng

lcd.clear();

lcd.print(” Dat the cua ban “);

//Kiểm tra xem có thẻ RFID nào được phát hiện hay không?

if ( rfid.isCard() )

{

//Nếu phát hiện thấy thẻ RFID, hãy kiểm tra số ID,

//và in nó trên cửa sổ Serial

if ( rfid.readCardSerial() )

{

lcd.clear();

lcd.print(“So ID la: “);

delay(500);

lcd.setCursor(0, 1); //Đặt con trỏ LCD ở hàng thứ hai, ký tự đầu tiên

//Số IC là số gồm có 5 chữ số

//In ra số HEX để hiểu rõ hơn

for ( int i = 0; i < 5; i++ )

{

Serial.print(rfid.serNum[i], HEX);

Serial.print(” “);

lcd.print(rfid.serNum[i], HEX);

lcd.print(” “);

}

delay(500);

//So sánh ID thẻ RFID này với ID của My_RFID_Tag

for (int i = 0; i < 5; i++) {

//Nếu bất kỳ số ID nào không khớp,

//thì cho My_Card = false và thoát ra khỏi vòng lặp

//Không cần phải kiểm tra tất cả các chữ số!

if ( My_RFID_Tag[i] != rfid.serNum[i] ) {

My_Card = false;
break;
}
} Serial.println();

delay(1000);

//Nếu thẻ RFID = My_Card thì cấp quyền truy cập vào phòng

//ngược lại không mở của

if (My_Card) {
Serial.println(“\nChao mung den phong cua ban!”);
lcd.clear();

lcd.print(“Chao mung den”);

lcd.setCursor(0, 1);

lcd.print(“Phong cua ban!”);

delay(2000);

//Bật đèn LED màu xanh để cho biết được phép vào phòng

digitalWrite(Green_LED, HIGH);

//Buzzer Config, taken from: //File -> Examples -> Digital -> ToneMelody

// iterate over the notes of the melody:

int i = 0;

while (i < 2)

{

for (int thisNote = 0; thisNote < 12; thisNote++) {

int noteDuration = 1000 / noteDurations[thisNote];

tone(5, melody[thisNote], noteDuration);

int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes);

noTone(5);

} i = i + 1; delay(500);

}

delay(1000); //Bây giờ, mở cửa với sự giúp đỡ của động cơ Servo
DoorLock.write (180);

delay(500);

lcd.clear();

lcd.print(“Cua mo”);

lcd.setCursor(0, 1);

lcd.print(“Ngay bay gio!”);

delay(2000);

lcd.clear();

//Cho 10 giây delay để vào phòng

//Sau đó cửa sẽ đóng lại!

for (int i = 10; i > 0; i–)

{

lcd.print(“Cua se dong lai”);

lcd.setCursor(0, 1);

lcd.print(“sau “);

lcd.print(i);

lcd.print(” s Nhanh!”);

delay(1000);

lcd.clear();

}

//Khi cửa được đóng lại và đèn LED màu xanh được tắt

DoorLock.write(0);

digitalWrite(Green_LED, LOW);

delay(200);

lcd.clear();

lcd.print(“Cua dong lai”);

lcd.setCursor(0, 1);

lcd.print(“Ngay bay gio!”);

delay(2000);

}

// Nếu thẻ RFID không phải là My_Card thì

// không mở của và

//Bật đèn LED màu đỏ và Buzzer như một dấu hiệu cảnh báo

//Có ai đó đang cố gắng vào phòng của bạn.

else

{

Serial.println(“\nRa khoi day !”);

lcd.clear();

lcd.print(“The khong thay!”);

lcd.setCursor(0, 1);

lcd.print(“Ra khoi day!”);

for (int i = 0; i < 7; i++)

{

digitalWrite(Buzzer, HIGH);

digitalWrite(Red_LED, HIGH);

delay(500);

digitalWrite(Buzzer, LOW);

digitalWrite(Red_LED, LOW);

delay(500);

}

delay(1000);

}

}

}

//Đặt RFID Reader vào trạng thái chờ, cho đến khi nó không phát hiện bất kỳ thẻ RFID nào.

rfid.halt();

}

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây