RFID 도어락으로 PC 보안 강화하기: Arduino 릴레이 프로젝트
부품 및 소모품
| 부품 |
수량 |
비고 |
| Arduino UNO |
1 |
| RFID 모듈 (MFRC522) |
1 |
SPI 인터페이스 |
| 릴레이 모듈 (5V 단일 채널) |
1 |
PC 파워 버튼과 병렬 연결 |
| 수/암 점퍼 와이어 |
12 |
RFID 7선, 릴레이 3선, 메인보드 2선 |
프로젝트 소개
동기
PC 비밀번호 외에 물리적 보안 계층을 추가하고자 했습니다. 기존 RFID 도어락 코드를 응용하여, 등록된 RFID 카드로 PC 전원 켜기, 키팩(열쇠고리형 태그)으로 강제 종료 기능을 구현했습니다.
작동 방식
- MFRC522 라이브러리 예제(
DumpInfo)로 카드/태그 UID 읽기
- 코드에 허용할 UID 등록 (
ok_rfid_1: 메인 카드, ok_rfid_2: 종료용 키팩)
- 메인 카드 태깅 → 릴레이 ON 500ms → PC 파워 버튼 신호 → 부팅
- 키팩 태깅 → 릴레이 ON 5000ms → PC 강제 종료 (파워 버튼 5초 누름과 동일)
배선
| MFRC522 신호 | Arduino UNO |
| RST | 9 |
| SDA(SS) | 10 |
| MOSI | 11 (ICSP-4) |
| MISO | 12 (ICSP-1) |
| SCK | 13 (ICSP-3) |
릴레이 모듈: VCC→5V, GND→GND, IN→핀 7. 릴레이 출력(COM, NO)을 메인보드 파워 스위치 핀과 병렬 연결.
소스 코드
#include
#include
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
String read_rfid;
String ok_rfid_1 = "e199312d"; // 메인 카드 UID (본인 것 입력)
String ok_rfid_2 = "fbecb673"; // 종료용 키팩 UID
int lockPin = 7;
void setup() {
Serial.begin(9600);
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
pinMode(lockPin, OUTPUT);
digitalWrite(lockPin, LOW);
}
void dump_byte_array(byte *buffer, byte bufferSize) {
read_rfid = "";
for (byte i = 0; i < bufferSize; i++) {
read_rfid += String(buffer[i], HEX);
}
}
void open_lock() { // PC 켜기: 500ms 펄스
digitalWrite(lockPin, HIGH);
delay(500);
digitalWrite(lockPin, LOW);
}
void close_lock() { // PC 강제 끄기: 5초 펄스
digitalWrite(lockPin, HIGH);
delay(5000);
digitalWrite(lockPin, LOW);
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid == ok_rfid_1) open_lock();
if (read_rfid == ok_rfid_2) close_lock();
// 추가 카드 등록 시 else if로 확장 가능
}
필수 라이브러리
MFRC522 라이브러리: GitHub에서 설치
회로도
포토샵으로 제작한 배선도: 색상별 와이어로 RFID(7선), 릴레이 제어(3선), 메인보드 연결(2선) 구분. 릴레이 출력은 메인보드 PWR_SW 핀과 병렬.
주의사항
- UID는 16진수 소문자 문자열로 비교 (라이브러리 버전에 따라 대문자 가능성 확인)
- 릴레이 모듈은 Active HIGH/LOW 확인 후 코드 수정 (위 코드는 HIGH 시 작동 가정)
- PC 메인보드 파워 스위치 핀아웃 확인 필수 (일반적으로 2핀, 극성 무관)
- 강제 종료 기능은 데이터 손실 위험 있음 → 비상용으로만 사용 권장