Arduino RFID/NFC rơ-le

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng thẻ RFID/NFC để kích hoạt rơ-le bằng Arduino. Bạn có thể mở rộng hướng dẫn này bằng cách sử dụng rơ-le để điều khiển động cơ, cơ cấu chấp hành.

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Relay
10×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về mô-đun RFID/NFC RC522 và rơ-le

Nếu bạn chưa biết về mô-đun RFID/NFC RC522 và relay (bản đồ chân, cách hoạt động, cách lập trình ...), hãy tìm hiểu chúng trong các bài hướng dẫn sau đây:

linh kiện rơ-le RFID cho Arduino

Cách hoạt động

  • Các UID của một số thẻ RFID/NFC được định sẵn trong mã Arduino
  • Người dùng chạm thẻ RFID/NFC lên đầu đọc RFID/NFC
  • Đầu đọc đọc UID từ thẻ.
  • Arduino nhận được UID từ đầu đọc
  • Arduino so sánh UID đã đọc với các UID được định sẵn
  • Nếu UID khớp với một trong các UID được định sẵn, Arduino kích hoạt rơ-le

Sơ đồ đấu dây

sơ đồ đấu nối rơ-le rc522 cho Arduino RFID

This image is created using Fritzing. Click to enlarge image

Để đơn giản hóa cách thiết lập, các chân của mô-đun RC522 được kết nối trực tiếp với các chân của Arduino. Tuy nhiên, điều này có thể khiến Arduino ngừng hoạt động trong một số tình huống, vì các chân đầu ra của Arduino cung cấp 5V trong khi các chân của mô-đun RC522 được thiết kế để hoạt động ở 3.3V. Do đó, nên điều chỉnh điện áp giữa các chân Arduino và các chân của mô-đun RC522. Để biết thêm thông tin, vui lòng tham khảo Arduino - RFID/NFC (nhận diện bằng tần số vô tuyến / giao tiếp trường gần). Sơ đồ dưới đây minh họa cách sử dụng điện trở để điều chỉnh từ 5V xuống 3.3V:

Arduino RFID rc522 với sơ đồ đấu dây có nguồn điện được điều chỉnh

This image is created using Fritzing. Click to enlarge image

※ Lưu ý:

Thứ tự các chân có thể khác nhau tùy theo nhà sản xuất. LUÔN sử dụng nhãn được in trên mô-đun. Hình trên cho thấy sơ đồ chân của các mô-đun từ nhà sản xuất DIYables.

Mã Arduino - Thẻ RFID/NFC duy nhất

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rfid-nfc-relay */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // the Arduino pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the relay Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == authorizedUID[0] && rfid.uid.uidByte[1] == authorizedUID[1] && rfid.uid.uidByte[2] == authorizedUID[2] && rfid.uid.uidByte[3] == authorizedUID[3] ) { Serial.println("Authorized Tag"); digitalWrite(RELAY_PIN, HIGH); // activate the relay for 2 seconds delay(2000); digitalWrite(RELAY_PIN, LOW); // deactivate the relay } else { Serial.print("Unauthorized Tag with UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Hướng dẫn từng bước

Vì UID thường không được in trên thẻ RFID/NFC, bước đầu tiên mà chúng ta cần thực hiện là tìm ra UID của thẻ. Điều này có thể được thực hiện bằng:

  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấn nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Mở Serial Monitor
  • Chạm một thẻ RFID/NFC lên mô-đun RFID-RC522
  • Lấy UID trên Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Sau khi có UID:

  • Cập nhật UID ở dòng 18 của mã ở trên. Ví dụ, thay đổi byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; sang byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Tải lại mã lên Arduino
  • Chạm thẻ RFID/NFC lên module RFID-RC522
  • Xem đầu ra trên Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Chạm thêm một thẻ RFID/NFC khác lên mô-đun RFID-RC522
  • Xem đầu ra trên Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Unauthorized Tag with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Lưu ý:

Mã Arduino - Nhiều thẻ RFID/NFC

Chúng ta có thể cho phép nhiều thẻ RFID/NFC kích hoạt rơ-le. Đoạn mã dưới đây sử dụng hai thẻ làm ví dụ.

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-rfid-nfc-relay */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // the Arduino pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID1[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the relay Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == authorizedUID1[0] && rfid.uid.uidByte[1] == authorizedUID1[1] && rfid.uid.uidByte[2] == authorizedUID1[2] && rfid.uid.uidByte[3] == authorizedUID1[3] ) { Serial.println("Authorized Tag 1"); digitalWrite(RELAY_PIN, HIGH); // activate the relay for 2 seconds delay(2000); digitalWrite(RELAY_PIN, LOW); // deactivate the relay } else if (rfid.uid.uidByte[0] == authorizedUID2[0] && rfid.uid.uidByte[1] == authorizedUID2[1] && rfid.uid.uidByte[2] == authorizedUID2[2] && rfid.uid.uidByte[3] == authorizedUID2[3] ) { Serial.println("Authorized Tag 2"); digitalWrite(RELAY_PIN, HIGH); // activate the relay for 2 seconds delay(2000); digitalWrite(RELAY_PIN, LOW); // deactivate the relay } else { Serial.print("Unauthorized Tag with UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Thực hiện các bước tương tự như ở trên, sau đó chạm lần lượt từng thẻ lên mô-đun RFID-RC522. Kết quả trên Serial Monitor trông như dưới đây:

COM6
Send
Tap RFID/NFC tag on reader Authorized Tag 2 Authorized Tag 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Bạn có thể mở rộng đoạn mã ở trên cho ba, bốn hoặc nhiều thẻ hơn.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.