1만 원대 휴대용 아두이노 날씨 스테이션 – 나노, DHT22, BMP180, LCD로 직접 제작
부품 및 소모품
| 부품 |
수량 |
예상 가격 |
| 아두이노 나노 R3 |
1 |
$1.89 |
| DHT22 온습도 센서 |
1 |
$3.00 |
| BMP180 기압/고도 센서 |
1 |
$2.00 |
| 16x2 I2C LCD 디스플레이 (백색/청색) |
1 |
$3.00 |
| 베로보드, 핀 헤더, 와이어 등 |
1식 |
- |
총 부품비 약 $10 (약 1만 3천 원)
필요 도구
프로젝트 배경
대학 과학 전시회용으로 이틀 만에 제작한 휴대용 날씨 스테이션입니다. 기온이 34~40°C까지 오르는 환경에서 온도, 습도, 기압, 고도를 실시간 측정해 LCD에 표시합니다.
센서 선정 이유
DHT22 (AM2302) – 온습도
- 장점: 디지털 출력, 넓은 측정 범위(-40~80°C, 0~100%RH), 높은 정밀도(온도 ±0.5°C, 습도 ±2%RH), 20m 이상 전송 가능
- 단점: 응답 속도 느림(2초 간격), 라이브러리 필요
- DHT11보다 정밀도와 범위가 월등히 우수해 환경 모니터링에 적합
BMP180 – 기압/고도
- I2C 인터페이스, 3.3V 동작 (내장 레귤레이터 확인 필요)
- 기압으로 고도 계산 가능:
alti = 44330 * [1 - (p/p0)^(1/5.255)]
- 주의사항: 밀폐 케이스 금지(통풍구 필요), 강풍/급격한 온도 변화/습기/직사광선 피하기
회로 구성
연결:
- DHT22: VCC→5V/3.3V, GND→GND, Data→D2 (10kΩ 풀업 저항 필요)
- BMP180: VCC→3.3V, GND→GND, SDA→A4, SCL→A5
- I2C LCD: 같은 I2C 버스(SDA/SCL) 공유, 주소 0x27 기본
- 아두이노 나노 핀 헤더 직접 납땜해 소형화
필수 라이브러리
코드 (주요 부분)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <SFE_BMP180.h>
#define ALTITUDE 20.56 // 현재 위치 고도(m) - 수정 필요
#define I2C_ADDR 0x27 // LCD I2C 주소 확인
#define DHTPIN 2
#define DHTTYPE DHT22
SFE_BMP180 pressure;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);
float t1, t2;
void setup() {
Serial.begin(9600);
lcd.init(); lcd.backlight();
lcd.print("Weather Station"); delay(5000);
dht.begin(); pressure.begin();
}
void loop() {
char status;
double T, P, p0, a;
// BMP180 온도/기압/고도
status = pressure.startTemperature();
if(status) { delay(status); status = pressure.getTemperature(T); }
if(status) {
lcd.clear(); lcd.print("Baro Temp:"); lcd.setCursor(0,1); lcd.print(T,2); lcd.print(" C"); t1=T; delay(3000);
status = pressure.startPressure(3);
if(status) { delay(status); status = pressure.getPressure(P,T); }
if(status) {
lcd.clear(); lcd.print("Pressure:"); lcd.setCursor(0,1); lcd.print(P,2); lcd.print(" mb"); delay(3000);
p0 = pressure.sealevel(P, ALTITUDE);
a = pressure.altitude(P, p0);
lcd.clear(); lcd.print("Altitude:"); lcd.setCursor(0,1); lcd.print(a,0); lcd.print(" m"); delay(3000);
}
}
// DHT22 온습도
float h = dht.readHumidity();
float t = dht.readTemperature(); t2=t;
lcd.clear(); lcd.print("Humidity:"); lcd.setCursor(0,1); lcd.print(h); lcd.print(" %"); delay(3000);
lcd.clear(); lcd.print("DHT Temp:"); lcd.setCursor(0,1); lcd.print(t); lcd.print(" C"); delay(3000);
lcd.clear(); lcd.print("Avg Temp:"); lcd.setCursor(0,1); lcd.print((t1+t2)/2); lcd.print(" C"); delay(3000);
}
회로도
개선 아이디어
- RTC 모듈 추가로 시계 기능 구현 (PCB 4번째 슬롯 여유분 활용)
- 배터리 + 충전 회로 추가로 완전 휴대용화
- 데이터 로깅을 위한 SD 카드 모듈 또는 무선 전송(ESP8266/LoRa) 추가