Chế tạo khóa cửa mô hình dùng Arduino và thẻ RFID

Mô hình sẽ hoạt động như thế nào?

Đầu đọc RFID RC522 đọc mã định danh UID của thẻ đặt gần nó. Arduino so sánh UID này với mã đã lưu: nếu trùng, servo xoay để nhả chốt mô hình trong vài giây rồi đưa chốt về vị trí đóng.

Đây là dự án học tập về cảm biến, giao tiếp SPI và điều khiển cơ cấu chấp hành. UID của thẻ có thể bị sao chép, vì vậy không dùng mô hình này để bảo vệ cửa thật hoặc tài sản.

Chuẩn bị linh kiện và dụng cụ

Bạn cần Arduino Uno, mô-đun RFID RC522 kèm thẻ tương thích, servo cỡ nhỏ, dây nối, breadboard, cáp USB và vật liệu làm cửa, khung, chốt bằng bìa cứng hoặc tấm nhựa nhẹ. Chuẩn bị thêm mạch chuyển mức logic phù hợp để nối các tín hiệu 5 V từ Uno sang RC522 dùng mức 3,3 V.

Nên cấp điện cho servo từ nguồn 5 V ổn định, đủ dòng cho servo đang sử dụng; nối GND của nguồn này với GND Arduino. Không cấp 5 V vào chân 3.3V của RC522 và không cấp nguồn cho servo từ chân 3.3V.

Làm cửa và chốt trước khi lắp mạch

Tạo một cánh cửa có bản lề đơn giản. Gắn servo lên khung, rồi gắn một thanh chốt nhẹ vào tay servo sao cho ở một góc, chốt chắn cửa; ở góc còn lại, chốt rời khỏi mép cửa. Để chốt không phải chịu lực ép lớn từ cánh cửa.

Trước khi cố định tay servo, hãy xác định hai vị trí đóng và mở bằng cách xoay thử trong phạm vi cơ cấu cho phép. Ví dụ lập trình dùng 0° để đóng và 90° để mở; hãy đổi các góc này nếu kết cấu của bạn khác, tránh để servo cố đẩy vào vật cản.

Đấu dây Arduino, RC522 và servo

Với Arduino Uno, nối RC522 qua giao tiếp SPI: SDA hoặc SS đến D10, SCK đến D13, MOSI đến D11, MISO đến D12, RST đến D9, GND đến GND và 3.3V đến nguồn 3,3 V. Đưa các tín hiệu Uno gửi sang RC522, gồm SS, SCK, MOSI và RST, qua mạch chuyển mức 5 V sang 3,3 V theo hướng dẫn của mạch chuyển mức. Chân IRQ của RC522 không cần nối trong bài này.

Nối dây tín hiệu servo đến D6, dây nguồn đến nguồn 5 V dành cho servo và dây GND đến GND chung. Ngắt nguồn trước khi thay đổi dây; kiểm tra lại cực nguồn và chân tín hiệu trước khi cắm USB.

Đọc UID và nạp chương trình

Trong Arduino IDE, cài thư viện MFRC522 và bảo đảm có thư viện Servo. Trước tiên, mở ví dụ đọc thông tin thẻ của thư viện MFRC522, chọn đúng bo mạch và cổng, rồi mở Serial Monitor ở tốc độ mà ví dụ quy định. Đưa thẻ lại gần đầu đọc và ghi chính xác các byte UID được in ra, kể cả số byte.

Trong chương trình dưới đây, thay dãy {0xDE, 0xAD, 0xBE, 0xEF} bằng UID vừa đọc. Dãy này chỉ là giá trị minh họa. Chương trình chỉ mở khi cả độ dài lẫn từng byte UID đều trùng khớp.

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

MFRC522 rfid(10, 9);
Servo chot;
const byte uidChoPhep[] = {0xDE, 0xAD, 0xBE, 0xEF};
const int GOC_DONG = 0;
const int GOC_MO = 90;

void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
chot.attach(6);
chot.write(GOC_DONG);
}

void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;

bool dungThe = rfid.uid.size == sizeof(uidChoPhep);
if (dungThe) {
for (byte i = 0; i < sizeof(uidChoPhep); i++) {
if (rfid.uid.uidByte[i] != uidChoPhep[i]) {
dungThe = false;
break;
}
}
}

if (dungThe) {
Serial.println("The hop le: mo chot");
chot.write(GOC_MO);
delay(3000);
chot.write(GOC_DONG);
} else {
Serial.println("The khong hop le");
}
rfid.PICC_HaltA();
}

Kiểm tra theo từng bước

Thử khi chưa gắn tay servo vào chốt: sau khi cấp nguồn, servo phải về vị trí đóng. Quét thẻ đã đăng ký để quan sát servo xoay sang vị trí mở rồi quay lại; quét một thẻ khác để xác nhận servo không mở. Sau đó mới gắn tay servo và thử với cánh cửa mô hình.

Nếu RC522 không đọc thẻ, kiểm tra nguồn 3,3 V, GND chung, dây SPI và mạch chuyển mức. Nếu servo giật làm Arduino khởi động lại, kiểm tra nguồn servo và các mối nối GND; không cố khắc phục bằng cách cấp 5 V cho RC522.

Mở rộng và hiểu giới hạn của dự án

Bạn có thể thêm đèn LED báo thẻ hợp lệ hoặc không hợp lệ, hoặc điều chỉnh thời gian mở chốt theo nhu cầu của mô hình. Khi thêm linh kiện, hãy lập sơ đồ chân và kiểm tra nguồn cấp trước khi sửa chương trình.

Việc so sánh UID chỉ phù hợp để minh họa nguyên lý: nó không xác thực thẻ một cách an toàn. Mô hình cũng chưa có cơ chế phát hiện cửa đang mở hoặc vật cản ở chốt, nên hãy giám sát khi vận hành và tránh dùng lực để thử độ bền.