비접촉 체온 측정 게이트: 아두이노 MKR1000으로 구현하는 자동 발열 검사 시스템
부품 및 준비물
| 부품 | 수량 |
| 아두이노 MKR1000 | 1 |
| DFRobot 비접촉 적외선 온도 센서 (MLX90614) | 1 |
| SG90 마이크로 서보 모터 | 1 |
| 점퍼 와이어 | 1세트 |
필요 도구
사용 소프트웨어
- 아두이노 IDE
- Microsoft Visual Studio Code (아두이노 확장)
프로젝트 개요
이 시스템은 게이트를 통과하는 사람의 체온을 비접촉으로 측정하여, 37.2°C(99°F) 이상이면 자동으로 게이트를 닫아 출입을 차단하고 경고음을 울립니다. 코로나19 등 감염병 예방을 위한 초기 증상(발열) 선별에 활용할 수 있습니다.
주요 특징
- 평상시 게이트는 열려 있음
- 고온 감지 시 서보 모터로 게이트 차단
- 경고 부저로 알림
- 열화상 카메라 대비 저비용 구현 가능
- 버스 정류장, 병원, 식당, 공항, 마트 등 다중이용시설에 적용 가능
구성 부품 상세
- 적외선 온도 센서 (MLX90614)
- 서보 모터 (게이트 개폐용)
- 마이크로컨트롤러 (아두이노 MKR1000)
- PVC 시트/보드 (게이트 프레임)
- 점퍼 와이어, 커터 칼, 접착제
프로토타입은 PVC 시트로 제작했으며, 게이트 상단 중앙에 온도 센서를 설치했습니다. 마이크로컨트롤러와 부저는 게이트 옆에 배치하고, 서보 모터로 게이트의 개폐를 제어합니다.
회로도
소스 코드
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Servo.h>
Servo myservo;
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
double temp;
int buzzerPin = 2;
void setup() {
Serial.begin(115200);
Serial.println("Adafruit MLX90614 test");
pinMode(buzzerPin, OUTPUT);
myservo.attach(5); // MKR1000 핀 5
myservo.write(0); // 게이트 열림 위치
mlx.begin();
}
void loop() {
digitalWrite(buzzerPin, HIGH); // 부저 끄기 (액티브 로우 가정)
myservo.write(0); // 게이트 열림
temp = mlx.readObjectTempF(); // 화씨 온도 읽기
if (temp > 90) { // 임계값: 90°F ≈ 32.2°C (코드상 99°F 의도이나 90으로 설정됨)
Serial.println("HIGH TEMPERATURE");
digitalWrite(buzzerPin, LOW); // 부저 울림
myservo.write(95); // 게이트 닫힘
delay(1000);
}
Serial.print(temp);
Serial.println("*F");
Serial.println();
delay(500);
}
참고: 코드상 임계값이 90°F로 되어 있으나, 설명에는 99°F(37.2°C)라고 되어 있습니다. 실제 적용 시 if (temp > 99)로 수정하거나 섭씨 기준 mlx.readObjectTempC() > 37.2로 변경하세요.
회로도
결론
자동 체온 검사 게이트를 저비용으로 구현했습니다. 열화상 카메라 대비 경제적이면서도 기본적인 발열 선별 기능을 제공합니다. 추가 개선으로는 와이파이 연동(원격 모니터링), 데이터 로깅, 더 정교한 임계값 설정 등이 가능합니다.