RFID 비접촉 체온 측정 출입 시스템: 직원 보안 접근 제어 및 클라우드 로깅
부품 및 소모품
| 부품 | 수량 | 비고 |
| Arduino MKR1000 (WiFi 내장) | 1 | 메인 컨트롤러 + 무선 통신 |
| RFID 리더 RC522 (13.56MHz) | 1 | 직원 카드 인식 |
| OLED 0.96" 128x32 (SSD1306) | 1 | 상태 표시용 |
| MLX90614 비접촉 적외선 체온 센서 | 1 | -70~380°C, 정확도 ±0.5°C |
소프트웨어 및 도구
- Arduino IDE (+ SAMD 보드 매니저 추가 필요)
- Fritzing (회로도 작성용)
필요 라이브러리
- Adafruit_MLX90614
- Adafruit_GFX
- Adafruit_SSD1306
- MFRC522
- WiFi101 (MKR1000 내장 WiFi용)
프로젝트 개요
직원이 RFID 태그로 출입 인증 시, 비접촉 적외선 체온계(MLX90614)로 체온을 동시에 측정합니다. 발열(37.5°C 이상) 감지 시 출입을 차단하고, 모든 데이터(직원 ID, 체온, 시간)는 웹 서버 데이터베이스에 실시간 기록됩니다. 코로나19 등 감염병 예방을 위한 비접촉 출입 관리 시스템입니다.
시스템 플로우
- RFID 카드 태깅 → UID 읽기
- 서버 DB에서 UID 조회 → 등록된 직원인지 확인
- 체온 측정 (34~42°C 범위 유효성 검사)
- 37.5°C 미만: 출입 허용(릴레이 ON), 37.5°C 이상: 출입 차단(릴레이 OFF) + 경고 표시
- 측정 데이터(UID, 체온, 시간) 서버 전송 및 DB 저장
- 원격 모니터링 페이지에서 실시간/일별 데이터 조회 가능
단계별 구현 가이드
1단계: Arduino IDE에 MKR1000 지원 추가
Tools → Board → Boards Manager → "Arduino SAMD" 검색 → Install. 이후 MKR1000 보드 선택 가능.
2단계: MLX90614 센서 연결 (I2C)
- VIN → 3.3V (또는 5V), GND → GND
- SDA → SDA, SCL → SCL (MKR1000 핀맵 확인)
테스트 코드로 시리얼 모니터에서 주변/물체 온도 확인.
3단계: OLED 디스플레이 연결 (I2C)
동일 I2C 버스 공유 가능. Adafruit_SSD1306 라이브러리로 온도 표시 테스트.
4단계: RC522 RFID 리더 연결 (SPI)
- SDA(SS) → D7, SCK → D13, MOSI → D11, MISO → D12, RST → D6
UID 읽기 + 체온 측정 + 출입 허용/차단 로직 구현 (상태 머신 방식).
5단계: MKR1000 WiFi 연결
WiFi101 라이브러리 사용. SSID/비밀번호 설정 후 연결 확인.
6단계: 웹 서버 DB 및 PHP 스크립트 구성
데이터베이스 테이블 (MySQL)
- users: id, name, uid (RFID UID)
- temp: id, id_user, temp, day (datetime)
PHP 스크립트 2개
get_uid.php - UID 조회 → `#yes;이름` 또는 `#no` 반환
get_temp.php - 체온 데이터 저장 → `#yes` 또는 `#no` 반환
view_temp.php - 당일 체온 기록 테이블로 조회 (발열 시 빨간색 강조)
7단계: 아두이노 → 서버 데이터 전송 함수 구현
- `send_uid_to_server()`: UID 전송 → 서버 응답 파싱 (#yes/#no)
- `send_temp_to_server()`: UID + 체온 전송
8단계: 릴레이 추가로 물리적 출입 제어
릴레이 모듈 연결 (핀 5). 체온 정상 시 HIGH(문 열림), 발열 시 LOW(문 잠김).
9단계: 통합 스케치 및 테스트
전체 상태 머신(0~5단계) 코드 업로드 후 실전 테스트. 시리얼 모니터로 디버깅.
완성된 통합 코드 (요약)
// 라이브러리 포함
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <MFRC522.h>
#include <WiFi101.h>
// 객체 생성
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6); // SS=7, RST=6
WiFiClient client;
// WiFi/서버 설정
char ssid[] = "your_SSID";
char pass[] = "your_PASSWORD";
char server[] = "your_domain.com";
int pinRelay = 5;
// 상태 변수들...
// setup(): WiFi 연결, 센서/디스플레이 초기화, 릴레이 OFF
// loop(): switch(res) 상태 머신으로 전체 플로우 제어
// case 0: 초기화 → case 1: RFID 대기 → case 2: UID 서버 조회
// case 3: 체온 측정 → case 4: 체온 서버 전송 → case 5: 출입 판정/릴레이 제어
// 함수: send_uid_to_server(), send_temp_to_server(), command(), send_display()
회로도 (Fritzing 파일 제공)
- 전원부 및 센서 배선도
- RFID 모듈 SPI 연결도
- 릴레이 제어 회로도
확장 아이디어
- 마스크 착용 감지 카메라 추가
- 출입문 자동 개폐 모터 연동
- 관리자 알림(텔레그램/이메일) 연동
- 다중 출입구 동기화 관리