아두이노 우노와 AWS 연동 스마트 기상 관측소 만들기
프로젝트 개요
아두이노 우노(Arduino UNO) 기반으로 온도, 습도, 기압, 조도, 수위(물/눈), 실시간 시각 등 다양한 환경 데이터를 수집하고, 16x2 I2C LCD에 적외선 리모컨으로 화면을 전환하며 확인할 수 있는 스마트 기상 관측소(AWS, Arduino Weather Station)를 제작합니다. 아크릴 박스를 레이저 커터로 제작해 소형화했으며, 향후 AWS(IoT 클라우드) 연동 확장을 염두에 둔 구조입니다.
사용 센서 및 모듈
| 센서/모듈 | 수량 | 측정 항목 및 용도 |
| DHT11 온습도 센서 | 1 | 디지털 온도/습도 (보정됨, 저가형) |
| LM35 정밀 온도 센서 | 1 | 아날로그 출력, 고정밀 온도 보조 측정 |
| 포토레지스터 (LDR) | 1 | 조도/어둠 비율 측정 (0~100% 스케일) |
| 수위 센서 (물/눈) | 1 | 아날로그 전압으로 수위(0~40mm) 추정 |
| DS1302 RTC 모듈 | 1 | 실시간 시계(연/월/일 시:분:초), 백업 배터리 내장 |
| 16x2 I2C LCD (백라이트) | 1 | 데이터 표시, I2C로 핀 절약 (주소 0x27) |
| IR 수신 모듈 + 리모컨 | 1세트 | 화면 전환: 0(시각), 1(온습도), 2(어둠%), 3(수위), Cycle(순환) |
| 아크릴 4mm (레이저 커팅) | 1식 | 외함 박스, 센서 노출 홀/인터록킹 조립 |
센서별 상세 설명
DHT11 온습도 센서
캘리브레이션된 디지털 신호 출력, 고신뢰성, 장기 안정성, 빠른 응답, 저가. 단일 와이어 프로토콜로 핀 1개 사용 (풀업 저항 내장 모듈 권장).
LM35 정밀 온도 센서
아날로그 전압 출력이 온도에 선형 비례 (10mV/°C). 아두이노 ADC(10비트, 5V 기준)에서 온도(°C) = analogRead * 5.0 / 1024 * 100 공식으로 변환. DHT11 대비 고정밀 보조용.
포토레지스터 (LDR)
빛에 따라 저항값 변화 (어두움: MΩ 단위, 밝음: 수십 Ω). 10kΩ 고정 저항과 분압기 구성 → 아날로그 입력. 코드에서 map(0~1023, 0~100%)로 어둠 비율 환산.
수위 센서
평행 전극 간 도전율 변화 이용. 아날로그 전압 읽어 map(0~1023, 0~40mm)로 수위 환산. 오버플로 방지, 강설량 간이 측정 용도.
DS1302 RTC
3선 시리얼 인터페이스(RST, SDA/IO, SCL/CLK). 코인셀 백업으로 전원 차단 시에도 시각 유지 (약 10년). 라이브러리(DS1302.h)로 간편 제어.
I2C LCD 1602
PCF8574 익스팬더 내장으로 SDA/SCL 2선만 사용. 백라이트 조절용 청색 가변저항 온보드. LiquidCrystal_I2C 라이브러리 사용.
하드웨어 조립 단계
- 박스 제작: 오토캐드로 전개도 설계(인터록킹 탭, 센서 홀, 배선 구멍) → 레이저 커터로 아크릴 절단 → 강력 접착제로 조립.
- 회로 배선: 프리칭(Fritzing) 회로도 참조. 브레드보드 또는 퍼프보드에 구성. 센서 리드는 박스 홀을 통해 외부로 노출.
- 전원: USB 전원(개발용) 또는 리튬이온 배터리 + 5V 부스트 컨버터 (약 2일 지속, 2시간 충전).
소프트웨어 구조 및 주요 코드
라이브러리
#include
#include
#include
#include
#include
핵심 기능
- 비블로킹 메인 루프:
millis() 없이 단순 delay() 사용 (교육용 단순화). IR 수신 시에만 분기 처리.
- IR 리모컨 코드 매핑: NEC 프로토콜 기준 (0: 0xFF6897, 1: 0xFF30CF, 2: 0xFF18E7, 3: 0xFF7A85, Cycle: 0xFF9867)
- 화면별 표시 함수:
print_time() (RTC 읽기/포맷), 온습도/어둠%/수위 각각 10초 표시 후 홈 화면 복귀
- Cycle 모드: 4개 화면을 4초씩 순환 표시 후 홈 복귀
- 홈 화면: "Arduino Weather Station" 텍스트 문자별 페이드인 효과
RTC 초기 설정 (최초 1회)
// 최초 업로드 시 주석 해제하여 현재 시각 설정
Time t(2024, 1, 15, 14, 30, 00, 1); // 연,월,일,시,분,초,요일(1=일)
rtc.time(t);
// 업로드 후 반드시 다시 주석 처리하고 재업로드
// Time t(2024, 1, 15, 14, 30, 00, 1); rtc.time(t);
확장 및 개선 방향 (AWS 클라우드 연동 대비)
- 통신 모듈 추가: ESP8266/ESP32 (Wi-Fi), LoRa (장거리), NB-IoT/LTE-M (셀룰러) 중 선택
- 데이터 프로토콜: JSON over MQTT/HTTP로 AWS IoT Core, Timestream, DynamoDB 연동
- 펌웨어 OTA: AWS FreeRTOS 또는 Arduino OTA 라이브러리로 원격 업데이트
- 대시보드: AWS QuickSight, Grafana, 또는 커스텀 웹앱으로 실시간/이력 시각화
- 알림: 임계값 초과 시 SNS(이메일/SMS) 또는 Lambda 함수로 자동 대응
- 전원 관리: 딥슬립 + 태양광 충전으로 무인 장기 운용
주의사항 및 유지보수
- 센서부(특히 수위 센서)는 강우 후 청소/건조 필수. 부식 방지용 컨포멀 코팅 고려.
- IR 수신부는 저온(약 0°C 이하)에서 수신 감도 저하 가능. 리셋 버튼으로 복구.
- 배터리 잔량 모니터링 로직 추가 권장 (분압기 + 아날로그 핀).
- RTC 백업 배터리(CR2032) 주기적 교체 (약 10년 수명).
- 코드 내
delay() 다용으로 IR 수신 놓칠 수 있음 → 인터럽트/타이머 기반 재구성 권장.
이 프로젝트는 아두이노 기초 센서 인터페이싱, LCD 제어, IR 통신, RTC 활용을 종합적으로 다루며, 레이저 커팅 외함 제작까지 경험할 수 있는 훌륭한 메이커 프로젝트입니다. 향후 클라우드 연동으로 확장 가능한 기반을 다지는 데에도 적합합니다. 전체 코드(AWS code.ino), 회로도(aws_DMDwb4iUZp.fzz), 박스 도면(box_a5et5f4U9F.dwg)은 프로젝트 페이지의 Code, Schematics, Custom parts and enclosures 섹션에서 다운로드 가능합니다.