RFID 카드 인식 출입 시스템 만들기 — IoT 보안 도어락 제작기
현대 IoT 환경에서는 출입 관리 시스템의 중요성이 높아지고 있습니다. RFID(Radio Frequency Identification) 기술을 활용하면 비접촉 방식으로 출입을 관리할 수 있으며, 라즈베리파이를 이용해 저비용, 맞춤형 IoT 보안 도어락 시스템을 구축할 수 있습니다. 이번 글에서는 RFID 카드 인식 기반 출입 시스템 제작 과정을 단계별로 설명하고, 센서와 라즈베리파이를 연동하여 실제 도어락으로 구현하는 방법을 다룹니다.
RFID 출입 시스템 개요
RFID 출입 시스템은 카드 또는 태그를 RFID 리더기에 접촉하지 않고 접근하면 전자 신호로 고유 ID를 읽어 출입 권한을 판단하는 기술입니다.
시스템 구성 요소는 다음과 같습니다.
- RFID 리더기: 카드나 태그의 ID를 읽는 장치
- RFID 카드/태그: 각 사용자에게 부여되는 고유 ID
- 라즈베리파이: 데이터 처리 및 권한 확인, 도어락 제어
- 전기 자물쇠 또는 솔레노이드 락: 라즈베리파이 신호에 따라 문을 열고 닫는 장치
- 데이터베이스: 등록된 카드 ID와 사용자 정보 관리
RFID 시스템은 빠른 출입, 비접촉 방식, 낮은 유지비용이 장점이며, 소규모 사무실, 연구실, 개인 프로젝트용 IoT 도어락에 적합합니다.
준비물
RFID 기반 IoT 출입 시스템을 만들기 위해 필요한 준비물은 아래와 같습니다.
- 라즈베리파이 4 Model B 또는 3B+
- MFRC522 RFID 리더기 모듈
- RFID 카드 또는 태그
- 전기 자물쇠(솔레노이드 타입)
- 릴레이 모듈 또는 MOSFET (락 제어용)
- 점퍼 케이블 및 브레드보드
- Python 3 환경과 관련 라이브러리
RFID 리더기 연결 및 설정
- MFRC522 핀 연결 (SPI 방식)
| RFID 핀 | 라즈베리파이 GPIO |
|---|---|
| SDA | GPIO8 (CE0) |
| SCK | GPIO11 (SCLK) |
| MOSI | GPIO10 (MOSI) |
| MISO | GPIO9 (MISO) |
| IRQ | 미사용 |
| GND | GND |
| RST | GPIO25 |
| 3.3V | 3.3V |
- SPI 활성화
sudo raspi-config
Interface Options → SPI → Enable 선택 후 재부팅
정상 작동 확인:
ls /dev/spidev*
/dev/spidev0.0와 /dev/spidev0.1가 출력되면 SPI가 정상입니다.
Python 환경 및 라이브러리 설치
RFID 모듈과 도어락 제어를 위해 필요한 라이브러리를 설치합니다.
sudo apt update
sudo apt install python3-pip
pip3 install mfrc522 RPi.GPIO
- mfrc522: MFRC522 RFID 모듈 제어용
- RPi.GPIO: 라즈베리파이 GPIO 제어
RFID 카드 읽기 및 권한 확인 코드
아래 코드는 RFID 리더기로 카드 UID를 읽고, 등록된 카드인지 확인하여 도어락을 제어하는 예제입니다.
from mfrc522 import SimpleMFRC522
import RPi.GPIO as GPIO
import time
# 도어락 릴레이 핀 설정
LOCK_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(LOCK_PIN, GPIO.OUT)
GPIO.output(LOCK_PIN, GPIO.LOW)
reader = SimpleMFRC522()
# 등록된 카드 UID 목록
authorized_uids = ['1234567890', '9876543210'] # 예시 UID
try:
while True:
print("카드를 인식해주세요")
id, text = reader.read()
uid = str(id)
print(f"인식된 카드 UID: {uid}")
if uid in authorized_uids:
print("출입 허용")
GPIO.output(LOCK_PIN, GPIO.HIGH) # 문 열기
time.sleep(5) # 5초간 문 열림
GPIO.output(LOCK_PIN, GPIO.LOW) # 문 닫기
else:
print("출입 거부")
time.sleep(1)
finally:
GPIO.cleanup()
이 코드를 실행하면 카드 UID가 등록된 목록에 있으면 도어락이 5초간 열리고, 없으면 출입이 거부됩니다.
웹 기반 출입 기록 시스템 확장
IoT 도어락을 웹과 연동하면, 출입 기록 관리 및 실시간 모니터링이 가능합니다. Flask와 SQLite를 사용하면 간단하게 웹 서버와 DB를 구축할 수 있습니다.
- Flask 설치:
pip3 install flask
- 출입 기록 저장: SQLite DB 테이블 생성 및 UID, 시간, 허용 여부 저장
- 웹 페이지에서 출입 기록 확인 및 관리 가능
프로젝트 확장 아이디어
- 알림 연동: 출입 시 이메일, Telegram, Slack 알림 발송
- 다중 출입권한 관리: 사용자별 접근 권한 설정
- 센서 통합: 온도, 습도, 동작 센서와 결합해 보안 강화
- 원격 관리: VPN이나 클라우드 서버를 통한 외부 관리
성능 및 안정성 팁
- 전원 안정성 확보: 릴레이와 RFID 모듈에 충분한 전원 공급
- UID 등록 시 중복 방지 및 정확한 카드 ID 확인
- 도어락 기계적 문제 예방: 릴레이와 솔레노이드 사용 시 충분한 전류 확보
- 지속적 로그 저장: DB를 이용하여 장기간 출입 기록 유지
마무리
RFID 기반 출입 시스템은 비접촉 방식으로 안전하고, 라즈베리파이를 활용하면 저비용으로 맞춤형 IoT 도어락을 구현할 수 있습니다. 본 글에서는 MFRC522 RFID 모듈과 라즈베리파이를 이용해 카드 인식, 도어락 제어, 권한 확인 방법을 단계별로 다뤘습니다.
추가로 Flask와 웹 서버를 연동하면 실시간 출입 기록 모니터링, 원격 관리, 알림 시스템 등 다양한 기능을 통합할 수 있어, 소규모 사무실이나 연구실, 가정용 보안 시스템으로도 충분히 활용 가능합니다. RFID와 라즈베리파이를 결합한 IoT 보안 도어락은 개인 프로젝트는 물론 실무 IoT 환경에서도 효율적이고 실용적인 솔루션이 될 수 있습니다.