라즈베리 파이 RFID 도어 잠금 장치

이 튜토리얼은 Raspberry Pi, RFID/NFC RC522 모듈, 릴레이, 솔레노이드 잠금장치 또는 전자기 잠금장치, 그리고 선택적으로 LCD 디스플레이를 사용하여 문 잠금 시스템을 구축하는 방법을 안내합니다. 여러분의 편의를 위해, 튜토리얼은 RFID 도어 잠금 장치를 간단한 단계에서 복잡한 단계로 구축하도록 안내합니다. 세부적으로, 우리는 다음을 수행할 것입니다:

이 문을 Raspberry Pi - Keypad Door Lock와 결합하여 도어락 비밀번호를 추가하도록 수정할 수 있습니다.

Hardware Preparation

1×Raspberry Pi 4 Model B Amazon
1×RFID/NFC RC522 Kit (reader + tags) 쿠팡 | Amazon
1×RFID Key Fob 쿠팡 | Amazon
1×RFID Card Amazon
1×Solenoid Lock Amazon
1×(Alternative) Electromagnetic Lock Amazon
1×Relay Amazon
1×12V Power Adapter Amazon
1×DC Power Jack 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(추천) Screw Terminal Block Shield for Raspberry Pi 쿠팡 | Amazon
1×(추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B Amazon
1×(추천) Plastic Case and Cooling Fan for Raspberry Pi 4B Amazon
1×(추천) HDMI Touch Screen Monitor for Raspberry Pi Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

RFID/NFC RC522 모듈 및 전자기 잠금장치에 대하여

RFID/NFC RC522 모듈, 전자기 잠금 장치, 솔레노이드 잠금 장치(핀아웃, 기능, 프로그래밍 포함)에 익숙하지 않은 경우, 다음 튜토리얼이 더 많은 정보를 제공할 수 있습니다:

도어 잠금 시스템 구성 요소

도어 잠금 시스템은 두 가지 주요 구성 요소로 구성됩니다:

  • 도어 잠금장치: 라즈베리 파이, 릴레이, RFID/NFC 리더기, 솔레노이드 잠금장치.
  • 도어 키: RFID/NFC 태그.

RFID/NFC 도어 잠금 장치 작동 방법

  • 사용자가 RFID/NFC 리더에 RFID/NFC 태그를 탭하면, 리더가 태그에서 UID를 읽습니다.
  • 라즈베리 파이는 이 UID를 가져와 코드에 설정된 UID와 비교합니다.
  • UID가 허가된 키 중 하나와 일치하면, 라즈베리 파이는 전자기 자물쇠를 비활성화하여 문을 엽니다.
  • 일정 시간이 지나면 라즈베리 파이는 릴레이를 활성화하여 문을 잠급니다.

Wiring Diagram

  • 솔레노이드 잠금장치가 있는 RFID RC522 도어 잠금장치
라즈베리 파이 RFID RC522 도어 잠금 시스템 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

  • RFID RC522 도어 잠금장치와 전자기 잠금장치
라즈베리 파이 RFID RC522 도어 잠금 시스템 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:

Raspberry Pi Screw Terminal Block Shield

※ NOTE THAT:

제조업체는 핀의 순서를 다르게 배열할 수 있으므로 모듈에 인쇄된 레이블을 참고하는 것이 중요합니다. 위에 표시된 핀 배치도는 제조업체 DIYables가 제작한 모듈의 핀 배열을 나타냅니다.

라즈베리 파이 코드 - 단일 키

Detailed Instructions

  • Raspberry Pi에 Raspbian 또는 기타 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하세요.
  • Raspberry Pi가 PC와 같은 로컬 네트워크에 연결되어 있는지 확인하세요.
  • 라이브러리를 설치해야 하는 경우 Raspberry Pi가 인터넷에 연결되어 있는지 확인하세요.
  • Raspberry Pi를 처음 사용하는 경우, Raspberry Pi 설정 방법을 참조하세요.
  • Linux와 macOS에서 기본 제공 SSH 클라이언트 또는 Windows에서 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하세요. PC를 Raspberry Pi에 SSH로 연결하는 방법을 참조하세요.
  • RPi.GPIO 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않다면 다음 명령어를 사용하여 설치하세요:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Raspberry Pi - SPI 인터페이스 활성화 방법의 지침을 따라 Raspberry Pi에서 SPI 인터페이스를 활성화하세요.
  • spidev 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않다면 다음 명령어를 사용하여 설치하세요:
sudo apt-get install python3-pip python3-dev git sudo pip3 install spidev
  • mfrc522 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않다면 다음 명령어를 사용하여 설치하세요:
sudo pip3 install mfrc522
  • rfid_lock.py 파일을 생성하고 다음 코드를 추가하세요:
# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/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()
  • 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하세요:
python3 rfid_lock.py

스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프에서 계속 실행됩니다.

RFID/NFC 태그의 UID를 확인하려면 RFID/NFC 태그를 RFID-RC522 모듈에 터치하세요. UID가 터미널에 표시될 것입니다.

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

UID를 얻은 후:

  • 위의 코드에서 18번째 줄을 byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};를 본인의 UID로 교체하여 수정합니다. 예를 들어 byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • 수정한 코드를 Raspberry Pi에 업로드합니다
  • RFID/NFC 태그를 RFID-RC522 모듈에 놓습니다
  • 터미널에서 출력을 확인하세요
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Access is granted
  • 전자기 잠금 장치가 안전하게 잠금 해제되어 있는지 확인하세요.
  • 다른 RFID/NFC 태그를 RFID-RC522 모듈에 대세요.
  • 터미널에서 출력을 확인하세요.
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Access is granted Access denied for user with UID: BD 1E 1D 00

※ NOTE THAT:

  • 테스트 목적으로 잠금 해제 시간이 2초로 설정되었습니다. 그러나 실제 사용 시 또는 데모 시에는 이 시간을 늘려야 합니다.
  • MFRC522 라이브러리 설치가 필요합니다. 자세한 내용은 BASE_URL/tutorials/raspberry-pi/raspberry-pi-rfid의 Raspberry Pi - RFID/NFC RC522 튜토리얼을 참조하세요.

라즈베리 파이 코드 - 여러 키

아래 코드는 여러 권한이 있는 카드를 허용합니다.

# 이 Raspberry Pi 코드는 newbiely.kr 에서 개발되었습니다 # 이 Raspberry Pi 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. # 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: # https://newbiely.kr/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()

위와 같은 단계를 반복한 후, RFID-RC522 모듈의 각 태그를 눌러보세요. 터미널의 출력은 다음과 같이 표시됩니다:

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

위에 언급된 코드를 확장하여 네 개 이상의 RFID 태그에 사용할 수 있습니다.

Video Tutorial

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.