' + re_word; if(data.autoList[i].PROD_NAME != ''){ html += ' '+data.autoList[i].PROD_NAME+''; } html += '
' html += '' + comma(Math.floor(data.autoList[i].PROD_PRICES)) + ' 원'; html += '' + re_word + '
'; html += '' + comma(Math.floor(data.resultList[i].prod_priceS)) + ' 원'; html += ''+data.catgStep1List[i].split('@@')[1]+'
'; html += '
안녕하세요, 나도메이커입니다.
지난 시간에는 아두이노(Arduino) 센서를 본격적으로 다루기 전, 반드시 숙지해야 하는 전자부품의 기초 동작 원리들에 대해 자세히 살펴보았는데요. 기초적인 전기적 신호의 흐름을 이해하는 것은 학교 코딩 동아리나 연구실 프로젝트를 진행할 때 오류를 줄이는 가장 중요한 첫걸음입니다.
오늘은 교육 현장부터 실제 산업용 프로토타입까지 아두이노 보드와 함께 가장 광범위하게 활용되고 있는 온습도 센서(Temperature and Humidity Sensor)의 원리와 실습 방법에 대해 깊이 있게 알아보도록 하겠습니다.
온습도 센서는 말 그대로 대기 중의 온도(Temperature)와 습도(Humidity)를 동시에 측정하는 계측 장비입니다. 과거에는 머리카락이 주변 습도에 따라 미세하게 수축하고 이완하는 길이를 이용한 모발 습도계나, 온도에 따른 부피 팽창을 시각적으로 보여주는 수은 온도계를 주로 사용했습니다. 이러한 아날로그 방식은 최초로 온도와 습도를 정량화하여 측정할 수 있게 해주었다는 점에서 큰 의미가 있습니다.
현대 전자공학이 발전함에 따라, 단순히 눈으로 눈금을 읽는 아날로그 계측기를 넘어 전기적 신호로 변환하여 데이터를 수집하는 다양한 디지털 온습도 센서가 개발되었습니다. 스마트팜, 날씨 예측, 실내 공기질 제어 등 정밀한 데이터 기반의 의사결정이 필요한 모든 곳에 온습도 센서가 핵심적인 역할을 수행하고 있습니다.
온도를 측정하는 전자부품 기초 원리는 크게 4가지로 분류해 볼 수 있습니다. 열전대, 저항 온도 검출기, 써미스터, 그리고 적외선 센서입니다. 각각의 특징을 상세히 알아보겠습니다.
▶ 열전대 (Thermocouple)

열전대는 서로 다른 두 종류의 금속선을 양끝에서 접합한 구조를 가집니다. 이 접점들 사이에 온도 차이가 발생하면 제베크 효과(Seebeck effect)에 의해 미세한 열기전력(전압)이 발생하는데, 이 전압의 크기를 측정하여 온도로 환산하는 방식입니다. 측정 범위가 매우 넓어 산업용 고온 환경에서 자주 사용됩니다.
▶ 저항 온도 검출기 (RTD, Resistance Temperature Detector)

모든 금속은 온도가 변함에 따라 전기적 저항값도 함께 변화하는 특성을 지닙니다. 저항 온도 검출기는 이러한 성질을 이용한 방식으로, 주로 백금(Pt)을 사용하여 높은 정밀도를 자랑합니다. 반응 속도는 다소 느릴 수 있으나, 극도로 정밀하고 안정적인 온도 제어가 필수적인 연구실 장비에 주로 채택됩니다.
▶ 써미스터 (Thermistor)

써미스터는 온도 변화에 극도로 민감하게 반응하여 저항값이 변하는 반도체 소자입니다. 동작 특성에 따라 두 가지로 나뉩니다.
소형화가 매우 용이하고 제조 단가가 저렴하여 우리가 일상적으로 사용하는 가전제품이나 소형 전자 프로토타입에 가장 널리 사용되는 방식입니다.
▶ 적외선 센서 (Infrared Sensor)

절대 영도(-273.15°C) 이상의 온도를 가진 모든 물체는 자신의 온도에 비례하는 적외선 복사 에너지를 방출합니다. 적외선 센서는 물체에서 방출되는 이 적외선 에너지의 파장을 감지하여 비접촉식으로 온도를 측정합니다.

물체에 직접 접촉하지 않고도 원거리 측정이 가능하므로 용광로처럼 접근이 불가능한 위험한 환경이나 위생이 중요한 의료용 체온계, 그리고 전체적인 온도 분포를 시각화하는 열화상 카메라 등에 필수적으로 적용되는 센서 기술입니다.
온도만큼이나 중요한 대기 중의 수분량, 즉 습도를 측정하는 센서의 원리는 크게 3가지(전기 저항식, 정전 용량식, 이슬점 방식)로 나눌 수 있습니다.
▶ 전기 저항식 습도 센서

전기 저항식은 습도에 민감한 고분자 물질을 두 전극 사이에 도포한 형태입니다. 공기 중의 수분(H2O)이 센서 표면에 흡착되면, 이온의 이동이 활발해져 두 전극 사이의 전기적 저항이 낮아지는 현상을 이용합니다. 구조가 단순하고 비용이 저렴하여 대량 생산되는 소형 기기에 유리합니다.
▶ 정전 용량식

정전 용량식은 습도를 흡수할 수 있는 유전체(폴리머 등)를 두 전극 사이에 샌드위치처럼 배치한 '커패시터(축전기)' 구조를 가집니다. 주변 습도에 따라 유전체가 흡수하는 수분량이 달라지면 유전율이 변화하고, 이는 곧 정전 용량(Capacitance)의 변화로 이어집니다. 응답 속도가 빠르고 선형성이 좋아 정밀한 측정기기에 주로 채택됩니다.
▶ 이슬점(Dew Point) 습도 센서
공기를 냉각시킬 때 수증기가 액화되어 이슬이 맺히기 시작하는 온도를 '이슬점'이라고 합니다. 이슬점 습도 센서는 빛의 반사율 등을 이용해 거울 표면에 이슬이 맺히는 정확한 온도를 측정하고, 이를 현재 온도와 비교하여 상대습도를 매우 정밀하게 역산하는 방식입니다.
아두이노(Arduino) 환경에서 B2S(Business to School) 코딩 교육이나 입문자용 프로젝트에 가장 빈번하게 사용되는 모듈이 바로 DHT-11입니다. 이 센서는 온도와 습도를 동시에 측정하고 그 아날로그 데이터를 자체적으로 디지털 변환하여 아두이노 보드로 손쉽게 전달해 주는 훌륭한 가성비 부품입니다.

DHT-11의 내부 덮개를 열어보면, 앞서 배운 원리가 그대로 적용되어 있습니다. 습도를 측정하는 전기 저항식 폴리머 센서와 온도를 감지하는 NTC 써미스터가 나란히 내장되어 있습니다. 또한 8비트 마이크로컨트롤러(MCU) 칩이 함께 탑재되어 있어, 센서가 측정한 미세한 아날로그 신호를 우리가 코딩으로 읽기 편한 디지털 신호로 변환 출력해 줍니다.
이제 최신 교육용 보드로 주목받는 아두이노 우노 Q (Arduino Uno Q)에 DHT-11 모듈을 직접 연결하여 실습을 진행해 보겠습니다.

회로 구성 시 가장 주의해야 할 점이 있습니다. 일반적인 4핀짜리 쌩(Bare) DHT-11 센서를 사용할 때는 안정적인 데이터 전송을 위해 데이터(OUT) 핀과 VCC 사이에 풀업(Pull-up) 저항(보통 4.7kΩ ~ 10kΩ)을 반드시 연결해야 플로팅(Floating) 현상을 방지할 수 있습니다.


하지만 오늘 실습에 사용하는 부품은 3핀 형태의 모듈형 DHT-11입니다. 모듈형 기판 내부에는 이미 10kΩ 풀업 저항과 전원 안정화 회로가 내장되어 있기 때문에, 브레드보드에 별도의 저항을 꽂을 필요 없이 점퍼선만으로 아두이노와 바로 연결(VCC-5V, GND-GND, DATA-디지털핀)할 수 있어 매우 간편합니다.
[아두이노 IDE 제어 코드]
#include
#define DHTPIN 2 // DHT11 센서의 데이터 핀을 D2번으로 설정
#define DHTTYPE DHT11 // 센서 모델을 DHT11로 명시
DHT dht(DHTPIN, DHTTYPE); // DHT 객체 생성
void setup() {
Serial.begin(9600); // 시리얼 통신 속도를 9600bps로 시작
dht.begin(); // DHT 센서 초기화 가동
}
void loop() {
// 센서 안정화를 위해 2초 대기 (DHT11은 측정 주기가 늦은 편)
delay(2000);
// 센서에서 습도와 온도 값을 실수형(float)으로 읽어옴
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// 데이터를 정상적으로 읽어오지 못했을 경우의 에러 처리 (NaN 확인)
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
// 정상 측정 시 시리얼 모니터에 값 출력
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
}
}
위와 같이 코드를 작성할 때, 첫 줄의 #include 헤더 파일 선언이 필수적입니다. 이 라이브러리가 없다면 복잡한 타이밍 다이어그램을 일일이 제어해야 하지만, 라이브러리를 통해 단 두 줄(readHumidity(), readTemperature())의 함수로 쉽게 데이터를 추출할 수 있습니다.
코드를 업로드하기 전, Arduino IDE 환경에서 라이브러리를 설치하는 방법은 다음과 같습니다.
1. Arduino IDE를 실행합니다.
2. 상단 메뉴에서 '스케치(Sketch)' > '라이브러리 포함하기(Include Library)' > '라이브러리 관리자(Library Manager)'를 순서대로 클릭합니다.

3. 좌측 라이브러리 관리자 검색창에 'DHT sensor library'를 입력합니다.

4. 검색된 결과 목록 중에서 'DHT sensor library by Adafruit' 항목을 찾아 설치(Install) 버튼을 클릭합니다.
5. 원활한 적용을 위해 설치 완료 후 Arduino IDE를 가볍게 재시작해 줍니다.
모든 세팅이 끝난 후 코드를 업로드하고 우측 상단의 돋보기 아이콘(시리얼 모니터)을 열면, 아래와 같이 2초 간격으로 현재 방 안의 온도와 습도가 실시간 출력되는 것을 확인할 수 있습니다.

센서에 입김을 호~ 불어보면 실시간으로 습도(Humidity) 수치가 급격히 올라가고, 센서를 손으로 꽉 쥐고 있으면 체온이 전달되어 온도(Temperature) 값이 상승하는 물리적 변화를 직관적으로 체험하실 수 있습니다. 이 기본 코드를 응용하여 특정 온도 이상이 되면 경고음을 내는 피에조 부저 알람이나, 습도가 높을 때 릴레이를 통해 제습기용 팬(Fan)을 가동하는 쿨링 시스템을 직접 만들어 보는 것도 훌륭한 확장 프로젝트가 될 수 있습니다.
오늘은 전자부품 기초와 코딩 실습의 단골손님인 온습도 센서에 대해 깊이 있게 알아보았습니다! 다음 시간에는 자율주행 자동차나 로봇의 장애물 회피 기능에 필수적으로 들어가는 '초음파 센서'의 원리를 파헤쳐 보는 시간으로 돌아오겠습니다. 그럼 다음 포스팅에서 만나요