본문 바로가기
아두이노

Arduino UNO Ek Wi-Fi를 활용한 실시간 기상 관측소 구축

by 모빌리티키즈 2025. 5. 12.
728x90
반응형

프로젝트 개요

이 프로젝트는 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 센서 연결:

DHT11 핀Arduino 연결
VCC 5V
GND GND
데이터 D7

OLED 디스플레이 (I2C) 연결:

OLED 핀Arduino 연결
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);
}

동작 방식:

  1. Arduino가 DHT11 센서를 초기화하고 데이터를 읽습니다.
  2. 온도와 습도를 OLED 디스플레이 및 시리얼 모니터에 출력합니다.
  3. 2초마다 새로운 데이터를 가져와 화면을 갱신합니다.

3단계: 구동 방법

  1. Arduino IDE에서 위 코드를 작성한 후, UNO Ek Wi-Fi 보드에 업로드하세요.
  2. Arduino를 USB로 컴퓨터에 연결하고, 시리얼 모니터에서 실시간 온습도 데이터를 확인하세요.
  3. 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 기능을 확장하여 웹 대시보드 구축, 클라우드 데이터 저장, 예측 모델 적용 등으로 발전시킬 수도 있습니다.

이제 실시간 환경 모니터링을 내 손안에서 쉽게 구현해볼 수 있겠네요!

728x90
반응형