본문 바로가기

컴퓨터

[아두이노 센서] KY-013 Analog Temperature sensor (NTC)

이 모듈은 -55°C에서 +125°C 범위의 온도를 측정할 수 있는 NTC 서미스터를 포함하고 있습니다.

1. [KY-013 온도 센서] 무엇을 하는 친구일까?

주변 온도가 뜨거워지거나 차가워지면 신호를 보내는 디지털 온도계의 눈이에요."

이 모듈에 달린 작은 검은색 부품(서미스터)은 온도가 올라가면 저항이 줄어드는 성질이 있습니다. 아두이노는 이 전압의 변화를 읽어서 "아, 지금은 몇 도구나!"라고 계산해 냅니다.

 

2. [활용사례] 우리 주변의 어디에 있을까?

  • 스마트 홈: 설정한 온도보다 높아지면 에어컨을 켜거나 선풍기를 돌려요.
  • 디지털 체온계: 우리 몸의 온도를 빠르게 측정할 때 사용해요.
  • 화재 경보기: 갑자기 온도가 급격히 올라가면 사이렌을 울리게 할 수 있어요.

3. [회로도] 어떻게 연결할까?

모듈 핀
아두이노 연결
설명
S (Signal)
Analog A0
변화하는 온도 전압 값을 보내요.
중간 (VCC)
5V
전원을 공급해요.
- (GND)
GND
전기가 나가는 길이에요.

4. [코드설명] 아두이노에게 명령 내리기

 

서미스터 값은 수학적인 계산(Steinhart-Hart 식)이 필요하지만, 처음에는 단순히 값이 변하는 것부터 확인해 보는 것이 좋습니다.

int sensorPin = A0; // 센서를 A0에 연결했어요

void setup() {
  Serial.begin(9600); // 시리얼 모니터로 값을 확인해요
}

void loop() {
  int rawValue = analogRead(sensorPin); // 0~1023 사이의 값을 읽어와요
  
  // 간단한 온도 환산 (대략적인 값입니다)
  float voltage = rawValue * (5.0 / 1023.0);
  
  Serial.print("현재 센서 값: ");
  Serial.print(rawValue);
  Serial.print(" | 전압: ");
  Serial.println(voltage);
  
  delay(500); // 0.5초마다 측정해요
}

정확한 온도 측정을 위한 변환 공식

#include <math.h> // 로그 계산을 위해 필요한 라이브러리

int sensorPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int rawValue = analogRead(sensorPin);
  
  // 1. 저항값 계산 (모듈에 달린 분압 저항 기준)
  // R = 10000 / (1023 / rawValue - 1)
  double resistance = 10000.0 / (1023.0 / rawValue - 1);
  
  // 2. 스테인하트-하트 식을 이용한 온도(켈빈) 계산
  double tempK = 1 / (0.001129148 + (0.000234125 * log(resistance)) + (0.0000000876741 * pow(log(resistance), 3)));
  
  // 3. 켈빈(K) 단위를 섭씨(C)로 변환
  float tempC = tempK - 273.15;

  Serial.print("현재 온도: ");
  Serial.print(tempC);
  Serial.println(" C");

  delay(1000);
}

5. [미션] 도전! 직접 만들어보기

온도가 높으면 경고등 켜기!

조건: 평소에는 초록색이다가, 센서를 손으로 꽉 쥐어서 온도가 올라가면(센서 값이 변하면) 빨간색으로 변하게 만들어 보세요!

힌트: `if (rawValue > 특정숫자)` 형식을 사용하면 됩니다.

KY-013은 아주 정밀한 온도를 측정하기보다는 '온도의 변화'를 감지하는 데 아주 훌륭한 가성비 센서입니다. 만약 정확한 섭씨온도를 얻고 싶다면 수학 공식이 포함된 라이브러리를 사용하는 것이 좋습니다.

#아두이노 #KY013 #온도센서 #서미스터 #Thermistor #아두이노기초 #DIY온도계

반응형