아두이노 우노 LM35/36 온도 센서 LCD 온도계 만들기 (초보자용)
프로젝트 소개
아두이노 우노와 LM35 또는 LM36 아날로그 온도 센서, 16x2 캐릭터 LCD를 이용해 간단한 디지털 온도계를 만듭니다. 특수한 엔지니어링이나 프로그래밍 기술 없이 10분 만에 완성할 수 있는 입문자 최적 프로젝트입니다.
필요 부품
| 부품 | 수량 | 비고 |
| 아두이노 우노 보드 | 1 | |
| 브레드보드 | 1 | |
| 16x2 LCD 디스플레이 (백라이트) | 1 | HD44780 호환 |
| LM35 또는 LM36 온도 센서 | 1 | 아날로그 출력, 10mV/°C (LM35) 또는 10mV/°C 오프셋 (LM36) |
| 10kΩ 가변저항 (포텐셔미터) | 1 | LCD 대비 조절용 (50kΩ 대체 가능) |
| 점퍼 와이어 | 약 19개 | |
공식 아두이노 스타터 키트에 모두 포함되어 있으며, Adafruit, SparkFun, 알리익스프레스, 뱅굿 등에서 개별 구매도 가능합니다.
회로 구성 (프리칭 다이어그램 참조)
- LCD를 브레드보드에 장착 후 아두이노와 연결 (데이터 핀 D4~D7 → 아두이노 D5~D2, RS→D12, E→D11, RW→GND, VSS→GND, VDD→5V, K→GND, A→5V)
- 가변저항: 양끝 단자 → 5V/GND, 중간 단자 → LCD VO 핀 (핀 3)
- 온도 센서: VCC→5V, GND→GND, OUT→아두이노 A0
주의: 센서 극성 역결선 시 280°C 이상 과열로 파손될 수 있으니 데이터시트 핀아웃 확인 필수
프로그래밍
아두이노 IDE에서 아래 두 가지 코드 중 하나를 업로드하면 바로 작동합니다. LCD에 아무것도 안 보이거나 네모만 나오면 가변저항을 돌려 대비를 조절하세요.
코드 1: Gaige Kerns 버전 (LM35/LM36 겸용, 화씨 표시)
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 0;
int tempC, tempF;
void setup() {
lcd.begin(16, 2);
}
void loop() {
tempC = get_temperature(sensorPin);
tempF = celsius_to_fahrenheit(tempC);
lcd.setCursor(0, 0);
lcd.print(tempF);
lcd.print(" ");
lcd.print((char)223); // 도(°) 기호
lcd.print("F");
delay(200);
}
int get_temperature(int pin) {
int temperature = analogRead(pin);
float voltage = temperature * 5.0 / 1024.0;
return ((voltage - 0.5) * 100); // LM35: 0.5V 오프셋 보정
}
int celsius_to_fahrenheit(int temp) {
return (temp * 9 / 5) + 32;
}
코드 2: 섭씨/화씨 동시 표시 (1초 갱신)
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int inPin = 0; // A0
void setup() {
lcd.begin(16, 2);
}
void loop() {
int value = analogRead(inPin);
float millivolts = (value / 1024.0) * 5000;
float celsius = millivolts / 10; // LM35: 10mV/°C
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(celsius);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print((celsius * 9) / 5 + 32);
lcd.print("F");
delay(1000);
}
작동 원리
- LM35: 0°C에서 0V, 1°C당 10mV 상승 (예: 25°C = 250mV)
- 아두이노 ADC(10비트, 0~1023)로 전압 읽기:
전압 = 읽은값 * 5.0 / 1024
- 섭씨 변환:
(전압 - 0.5) * 100 (코드 1) 또는 전압(mV) / 10 (코드 2)
- 화씨 변환:
C * 9/5 + 32
확장 아이디어
- 온도 임계값 초과 시 부저/LED 경보 추가
- 데이터 로깅 (SD 카드 또는 시리얼 플로터)
- 다중 센서로 실내/실외 동시 측정
- I2C LCD 모듈로 배선 간소화