아두이노 - TMP36 온도 센서 | Arduino - TMP36 Temperature Sensor
준비물
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | TMP36 Temperature Sensor | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
TMP36 온도 센서에 관하여
핀배열
TMP36 온도 센서는 세 개의 핀을 가지고 있습니다:
- GND 핀: GND(0V)에 연결해야 합니다.
- VCC 핀: VCC(5V)에 연결해야 합니다.
- +Vs 핀: 센서의 전원 공급 장치로, 2.7V에서 5.5V 사이에서 변동될 수 있습니다.
- Vout 핀: 온도에 선형적으로 비례하는 출력 전압을 제공하는 신호 핀으로, Arduino의 아날로그 핀에 연결해야 합니다.
작동 원리
TMP36은 섭씨 온도에 선형적으로 비례하는 전압을 출력합니다. TMP36의 출력 스케일 팩터는 10 mV/°C입니다. 이는 온도가 출력 핀의 전압(mV)을 10으로 나누어 계산된다는 것을 의미합니다.
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
TMP36 온도 센서를 프로그래밍하는 방법
analogRead() 함수를 사용하여 온도 센서에서 ADC 값을 가져옵니다.
int adcVal = analogRead(PIN_TMP36);
ADC 값을 전압으로 변환하세요
// 3.3V Arduino를 사용하는 경우 5.0을 3.3으로 교체하세요
float voltage = adcVal * (5.0 / 1024.0);
전압을 섭씨 온도로 변환하세요.
float tempC = (voltage - 0.5) * 100;
(선택 사항) 섭씨를 화씨로 변환하세요
float tempF = tempC * 9 / 5 + 32; // 온도 C를 F로 변환
아두이노 코드
/*
* 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-tmp36-temperature-sensor
*/
#define ADC_VREF 5.0 // 볼트 단위
#define ADC_RESOLUTION 1024.0
#define PIN_TMP36 A0
void setup() {
Serial.begin(9600);
}
void loop() {
// TMP36 온도 센서에서 ADC 값을 얻습니다.
int adcVal = analogRead(PIN_TMP36);
// ADC 값을 전압으로 변환합니다.
float voltage = adcVal * (ADC_VREF / ADC_RESOLUTION);
// 전압을 섭씨 온도로 변환합니다.
float tempC = (voltage - 0.5) * 100;
// 섭씨를 화씨로 변환합니다.
float tempF = tempC * 9 / 5 + 32;
// Serial Monitor에 온도를 출력합니다:
Serial.print("TMP36 Temperature: ");
Serial.print(tempC); // 섭씨 온도를 출력합니다.
Serial.print("°C");
Serial.print(" ~ "); // 섭씨와 화씨 사이의 구분자
Serial.print(tempF); // 화씨 온도를 출력합니다.
Serial.println("°F");
delay(1000);
}
사용 방법
- 위의 코드를 복사하여 Arduino IDE로 열기
- Arduino IDE에서 Upload 버튼을 클릭하여 아두이노에 코드 업로드
- 손으로 센서를 잡기
- 시리얼 모니터에서 결과 확인하기
COM6
TMP36 Temperature: 26.31°C ~ 79.36°F
TMP36 Temperature: 26.44°C ~ 79.59°F
TMP36 Temperature: 26.50°C ~ 79.70°F
TMP36 Temperature: 26.56°C ~ 79.81°F
TMP36 Temperature: 27.06°C ~ 80.71°F
TMP36 Temperature: 27.75°C ~ 81.95°F
TMP36 Temperature: 28.37°C ~ 83.07°F
TMP36 Temperature: 29.00°C ~ 84.20°F
TMP36 Temperature: 29.56°C ~ 85.21°F
TMP36 Temperature: 30.00°C ~ 86.00°F
TMP36 Temperature: 30.31°C ~ 86.56°F
TMP36 Temperature: 30.62°C ~ 87.12°F
TMP36 Temperature: 30.87°C ~ 87.57°F
Autoscroll
Clear output
9600 baud
Newline
온도 정밀도 개선
위의 코드에서 우리는 기본적으로 ADC 참조 전압(5V~5000mV)을 사용합니다. 참조 전압을 3.3V(3300mV)로 변경함으로써 온도 해상도를 높일 수 있습니다. 이 참조 전압은 아래 다이어그램과 같이 3.3V와 AREF 두 핀을 서로 연결함으로써 변경할 수 있습니다.
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아래 표는 5000mV와 1100mV 기준 전압을 사용하는 차이를 보여줍니다.
Vref(mV) | 5000 mV (by default) | 3300 mV |
---|---|---|
Reading Resolution | 5000/1024 = 4.88 mV | 3300/1024 = 3.22 mV |
Temperature Resolution | 0.49°C | 0.32°C |
아두이노 코드
/*
* 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-tmp36-temperature-sensor
*/
#define ADC_VREF 3.3
#define ADC_RESOLUTION 1024.0
#define PIN_TMP36 A0
void setup() {
Serial.begin(9600);
analogReference(EXTERNAL); // VREF 핀에서 전압 기준을 설정합니다
}
void loop() {
// TMP36 온도 센서에서 ADC 값을 가져옵니다
int adcVal = analogRead(PIN_TMP36);
// ADC 값을 전압으로 변환합니다
float voltage = adcVal * (ADC_VREF / ADC_RESOLUTION);
// 전압을 섭씨 온도로 변환합니다
float tempC = (voltage - 0.5) * 100;
// 섭씨를 화씨로 변환합니다
float tempF = tempC * 9 / 5 + 32;
// 온도를 시리얼 모니터에 출력합니다:
Serial.print("TMP36 Temperature: ");
Serial.print(tempC); // 섭씨 온도를 출력합니다
Serial.print("°C");
Serial.print(" ~ "); // 섭씨와 화씨 사이의 구분자
Serial.print(tempF); // 화씨 온도를 출력합니다
Serial.println("°F");
delay(1000);
}
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.