프로젝트 개요
이 프로젝트는 Arduino UNO Ek Wi-Fi, DHT11 온습도 센서, 그리고 128x64 OLED 디스플레이를 사용하여 실시간 기상 관측소를 구축하는 간단하면서도 유용한 IoT 프로젝트입니다. 초보자도 쉽게 따라할 수 있으며, 책상이나 방에서 깔끔한 기상 모니터링 시스템을 구현할 수 있습니다.
구성 요소
필요한 구성 요소는 다음과 같습니다:
- Arduino UNO Ek R4 Wi-Fi 보드 x1
- DHT11 온습도 센서 x1
- OLED 디스플레이 (128x64 I2C) x1
- 점퍼 와이어 (필요한 만큼)
- 브레드보드 x1





1단계: 회로 구성 및 연결 방법
이제 각 센서를 Arduino와 연결하여 회로를 구성해 보겠습니다.
DHT11 센서 연결:
VCC | 5V |
GND | GND |
데이터 | D7 |
OLED 디스플레이 (I2C) 연결:
VCC | 5V |
GND | GND |
SDA | A4 |
SCL | A5 |
브레드보드를 활용하여 각 요소를 적절하게 연결한 후, 코드 업로드 준비를 합니다.
2단계: 소스 코드 분석 및 동작 원리
아래의 코드는 DHT11 센서에서 온습도 데이터를 읽어 OLED 디스플레이에 출력하는 역할을 합니다.
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// OLED 디스플레이 설정
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DHT 센서 설정
#define DHTPIN 7 // DHT11 데이터 핀을 D7에 연결
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
// OLED 초기화
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED 초기화 실패"));
while (true);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println(F("DHT 센서 데이터 읽기 실패!"));
return;
}
Serial.print("온도: ");
Serial.print(temperature);
Serial.print("°C, 습도: ");
Serial.println(humidity);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.print("온도: ");
display.print(temperature, 1);
display.println("C");
display.setCursor(0, 32);
display.print("습도: ");
display.print(humidity, 1);
display.println("%");
display.display();
delay(2000);
}
동작 방식:
- Arduino가 DHT11 센서를 초기화하고 데이터를 읽습니다.
- 온도와 습도를 OLED 디스플레이 및 시리얼 모니터에 출력합니다.
- 2초마다 새로운 데이터를 가져와 화면을 갱신합니다.
3단계: 구동 방법
- Arduino IDE에서 위 코드를 작성한 후, UNO Ek Wi-Fi 보드에 업로드하세요.
- Arduino를 USB로 컴퓨터에 연결하고, 시리얼 모니터에서 실시간 온습도 데이터를 확인하세요.
- OLED 디스플레이에서 온도 및 습도를 시각적으로 표시하여 쉽게 정보를 얻을 수 있습니다.
4단계: 앱인벤터를 활용한 IoT 대시보드 구축
Wi-Fi 기능을 활용하여 데이터를 스마트폰에서 확인할 수 있도록 MIT 앱인벤터를 이용해 IoT 대시보드를 구축해봅니다.
1) 앱인벤터에서 프로젝트 생성
- MIT 앱인벤터에 접속하여 새로운 프로젝트를 생성합니다.
- "버튼", "레이블", "웹" 컴포넌트를 추가하여 UI를 구성합니다.
2) Firebase를 이용한 데이터 업로드
Wi-Fi를 이용해 Arduino에서 데이터를 Firebase에 전송하여 스마트폰 앱에서 데이터를 가져올 수 있습니다.
#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#define FIREBASE_HOST "your-firebase-url"
#define FIREBASE_AUTH "your-firebase-auth-key"
WiFiClient client;
Firebase firebase(FIREBASE_HOST, FIREBASE_AUTH, client);
void setup() {
WiFi.begin("SSID", "PASSWORD");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Firebase.setFloat("sensor/temperature", temperature);
Firebase.setFloat("sensor/humidity", humidity);
delay(5000);
}
이렇게 하면 Arduino에서 Firebase로 데이터를 보내고, 앱인벤터에서 Firebase 데이터를 실시간으로 가져와 기상 정보 화면을 구성할 수 있습니다.
결론 및 확장 가능성
이 프로젝트를 통해 Arduino UNO Ek Wi-Fi, DHT11 센서, OLED 디스플레이를 활용한 실시간 기상 관측소를 구축할 수 있었습니다. 이후에는 Wi-Fi 기능을 확장하여 웹 대시보드 구축, 클라우드 데이터 저장, 예측 모델 적용 등으로 발전시킬 수도 있습니다.
이제 실시간 환경 모니터링을 내 손안에서 쉽게 구현해볼 수 있겠네요!
'아두이노' 카테고리의 다른 글
2025년에 Arduino와 함께 구축할 상위 10가지 멋진 프로젝트 (1) | 2025.05.12 |
---|---|
🏠 손짓과 음성으로 제어하는 스마트 홈 자동화 시스템 (0) | 2025.05.12 |
아두이노 메가를 활용한 퀴즈 대회용 빨리 누르기 시스템 제작하기 🎉 (0) | 2025.05.10 |
🔌 아두이노 인터럽트 기반 LED 타이머 프로젝트 (0) | 2025.05.08 |
아두이노 시리얼 통신을 활용한 LED 제어 프로젝트 (0) | 2025.05.08 |