Raspberry Pi Khóa Cửa RFID

Hướng dẫn này sẽ chỉ bạn cách xây dựng hệ thống khóa cửa sử dụng Raspberry Pi, module RFID/NFC RC522, một relay, khóa solenoid hoặc khóa điện từ, và tùy chọn màn hình LCD. Để giúp bạn dễ dàng hơn, hướng dẫn này sẽ xây dựng khóa cửa RFID từ đơn giản đến phức tạp theo từng bước. Cụ thể, chúng ta sẽ thực hiện:

Bạn có thể chỉnh sửa để thêm mật khẩu cho khóa cửa bằng cách kết hợp với Raspberry Pi - Khóa Cửa Keypad.

Phần Cứng Cần Thiết

1×Raspberry Pi 5
1×Bộ Kit RFID/NFC RC522 (đầu đọc + thẻ)
1×Thẻ RFID Key Fob
1×Thẻ RFID Card
1×Khóa Solenoid
1×(Thay thế) Khóa Điện Từ
1×Relay
1×Adapter Nguồn 12V
1×Jack Nguồn DC
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Raspberry Pi
1×(Khuyến nghị) Raspberry Pi Prototyping Base Plate & Breadboard Kit
1×(Khuyến nghị) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Module RFID/NFC RC522 và Khóa Điện Từ

Nếu bạn chưa quen thuộc với Module RFID/NFC RC522, khóa điện từ, khóa solenoid (bao gồm sơ đồ chân, chức năng và lập trình), các hướng dẫn sau có thể cung cấp thêm thông tin:

Các Thành Phần Của Hệ Thống Khóa Cửa

Hệ thống khóa cửa bao gồm hai thành phần chính:

  • Khóa Cửa: Một Raspberry Pi, một relay, một đầu đọc RFID/NFC, và một khóa solenoid.
  • Chìa Khóa Cửa: Thẻ RFID/NFC.

Cách Hoạt Động Của Khóa Cửa RFID/NFC

  • Người dùng chạm thẻ RFID/NFC vào đầu đọc RFID/NFC, đầu đọc sẽ đọc UID từ thẻ.
  • Raspberry Pi sau đó lấy UID này và so sánh với các UID đã được thiết lập trong code.
  • Nếu UID khớp với một trong những chìa khóa được ủy quyền, Raspberry Pi sẽ tắt khóa điện từ, từ đó mở khóa cửa.
  • Sau một khoảng thời gian nhất định, Raspberry Pi sẽ kích hoạt relay để khóa cửa lại.

Sơ Đồ Kết Nối

  • Khóa Cửa RFID RC522 với Khóa Solenoid
Raspberry Pi RFID rc522 khóa cửa system sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

  • Khóa Cửa RFID RC522 với Khóa Điện Từ
Raspberry Pi RFID rc522 khóa cửa system sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

※ Lưu ý:

Các nhà sản xuất có thể sắp xếp thứ tự chân khác nhau, vì vậy điều quan trọng là dựa vào các nhãn in trên module. Sơ đồ chân được mô tả ở trên hiển thị cách sắp xếp chân cho các module được sản xuất bởi nhà sản xuất DIYables.

Code Raspberry Pi - Một Thẻ Duy Nhất

Các Bước Thực Hiện

  • Đảm bảo bạn đã cài đặt Raspbian hoặc bất kỳ hệ điều hành tương thích Raspberry Pi nào khác trên Pi của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối với cùng mạng cục bộ với PC của bạn.
  • Đảm bảo Raspberry Pi của bạn được kết nối internet nếu bạn cần cài đặt một số thư viện.
  • Nếu đây là lần đầu tiên bạn sử dụng Raspberry Pi, xem Raspberry Pi - Cài Đặt Phần Mềm
  • Kết nối PC của bạn với Raspberry Pi qua SSH bằng SSH client tích hợp trên Linux và macOS hoặc PuTTY trên Windows. Xem cách kết nối PC với Raspberry Pi qua SSH.
  • Đảm bảo bạn đã cài đặt thư viện RPi.GPIO. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Kích hoạt giao diện SPI trên Raspberry Pi bằng cách làm theo hướng dẫn tại Raspberry Pi - how to enable SPI inteface
  • Đảm bảo bạn đã cài đặt thư viện spidev. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo apt-get install python3-pip python3-dev git sudo pip3 install spidev
  • Đảm bảo bạn đã cài đặt thư viện mfrc522. Nếu chưa, hãy cài đặt bằng lệnh sau:
sudo pip3 install mfrc522
  • Tạo một file script Python rfid_lock.py và thêm code sau:
# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi 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/raspberry-pi/raspberry-pi-rfid-door-lock import RPi.GPIO as GPIO import MFRC522 import time # Define GPIO pins RC522_RST_PIN = 12 # GPIO pin connected to RC522's RST pin RELAY_PIN = 16 # GPIO pin connected to relay # Set up GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(RELAY_PIN, GPIO.OUT, initial=GPIO.LOW) # Create an instance of the RFID reader reader = MFRC522.MFRC522() authorized_uid = [0xFF, 0xFF, 0xFF, 0xFF] try: print("Tap RFID/NFC Tag on reader") while True: (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL) if status == reader.MI_OK: (status, uid) = reader.MFRC522_Anticoll() if status == reader.MI_OK: if uid == authorized_uid: print("Access is granted") GPIO.output(RELAY_PIN, GPIO.HIGH) # unlock the door for 2 seconds time.sleep(2) GPIO.output(RELAY_PIN, GPIO.LOW) # lock the door else: print(f"Access denied for user with UID: {' '.join(format(b, '02x') for b in uid)}") except KeyboardInterrupt: GPIO.cleanup()
  • Lưu file và chạy script Python bằng cách thực thi lệnh sau trong terminal:
python3 rfid_lock.py

Script chạy trong một vòng lặp vô hạn liên tục cho đến khi bạn nhấn Ctrl + C trong terminal.

Để xác định UID của thẻ RFID/NFC, hãy chạm thẻ RFID/NFC vào module RFID-RC522, UID sẽ được hiển thị trên Terminal.

PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Access denied for user with UID: 3A C9 6A CB

Khi bạn đã có UID của mình:

  • Sửa đổi dòng 18 của code trên bằng cách thay thế byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; với UID của bạn, ví dụ byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Upload code đã sửa đổi lên Raspberry Pi của bạn
  • Đặt thẻ RFID/NFC lên module RFID-RC522
  • Kiểm tra kết quả trên Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Access is granted
  • Kiểm tra khóa điện từ để đảm bảo nó không bị khóa.
  • Chạm một thẻ RFID/NFC khác vào module RFID-RC522.
  • Kiểm tra kết quả trên Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Access is granted Access denied for user with UID: BD 1E 1D 00

※ Lưu ý:

  • Để phục vụ mục đích thử nghiệm, thời gian mở khóa đã được đặt thành 2 giây; tuy nhiên, điều này nên được tăng lên khi sử dụng trong thực tế hoặc cho các cuộc trình diễn.
  • Việc cài đặt thư viện MFRC522 là bắt buộc. Để biết thêm thông tin, vui lòng tham khảo hướng dẫn Raspberry Pi - RFID.

Code Raspberry Pi - Nhiều Thẻ

Code dưới đây cho phép nhiều thẻ được ủy quyền.

# Mã Raspberry Pi này được phát triển bởi newbiely.vn # Mã Raspberry Pi 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/raspberry-pi/raspberry-pi-rfid-door-lock import RPi.GPIO as GPIO import MFRC522 import time # Define GPIO pins RC522_RST_PIN = 12 # GPIO pin connected to RC522's RST pin RELAY_PIN = 16 # GPIO pin connected to relay # Set up GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(RELAY_PIN, GPIO.OUT, initial=GPIO.LOW) # Create an instance of the RFID reader reader = MFRC522.MFRC522() # List of authorized UIDs authorized_uids = [ [0xAA, 0xBB, 0xCC, 0xDD], [0x11, 0x22, 0x33, 0x44], [0xFF, 0xFF, 0xFF, 0xFF] ] def is_authorized(uid): for auth_uid in authorized_uids: if uid == auth_uid: return True return False try: print("Tap RFID/NFC Tag on reader") while True: (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL) if status == reader.MI_OK: (status, uid) = reader.MFRC522_Anticoll() if status == reader.MI_OK: if is_authorized(uid): print("Access is granted") GPIO.output(RELAY_PIN, GPIO.HIGH) # unlock the door for 2 seconds time.sleep(2) GPIO.output(RELAY_PIN, GPIO.LOW) # lock the door else: print(f"Access denied for user with UID: {' '.join(format(b, '02x') for b in uid)}") except KeyboardInterrupt: GPIO.cleanup()

Lặp lại các bước tương tự như trên và sau đó nhấn mỗi thẻ lên module RFID-RC522. Kết quả trên Terminal sẽ xuất hiện như sau:

PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Access is granted Access is granted

Bạn có thể mở rộng code đề cập ở trên cho bốn thẻ RFID, hoặc nhiều 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.

Bài hướng dẫn liên quan