본문 바로가기
-----ETC-----/C++ 임베디드 시스템 프로그래밍 시리즈

[C++ 임베디드 시스템 프로그래밍] Day 22: 프로젝트: 스마트 홈 시스템 구축 (1)

by cogito21_cpp 2024. 8. 1.
반응형

스마트 홈 시스템의 개요

스마트 홈 시스템은 가정 내의 여러 장치를 인터넷과 연결하여 제어하고 모니터링할 수 있는 시스템입니다. 이 프로젝트에서는 다양한 센서와 액추에이터를 사용하여 스마트 홈 시스템을 구축하고, 이를 제어하고 모니터링하는 방법을 학습합니다. 오늘은 프로젝트의 첫 번째 단계로 시스템 설계와 기본적인 구성 요소를 다루겠습니다.

1. 시스템 설계

스마트 홈 시스템의 설계는 여러 가지 요소를 고려해야 합니다. 다음은 이 프로젝트에서 사용할 주요 구성 요소입니다:

  • 센서: 온도 센서, 조도 센서, 문 열림 센서 등
  • 액추에이터: LED, 릴레이, 서보 모터 등
  • 통신 모듈: Wi-Fi 모듈(ESP8266)
  • 컨트롤러: Arduino 또는 ESP8266

2. 기본 구성 요소 설정

프로젝트의 첫 번째 단계로, 각 구성 요소를 설정하고 연결하는 방법을 학습하겠습니다.

 

하드웨어 구성

  1. 온도 센서 (DHT22):
    • VCC: 3.3V 또는 5V
    • GND: GND
    • 데이터 핀: GPIO 2 (D4)
  2. 조도 센서 (LDR):
    • VCC: 5V
    • GND: GND
    • 데이터 핀: A0 (아날로그 입력)
  3. 문 열림 센서:
    • VCC: 5V
    • GND: GND
    • 데이터 핀: GPIO 14 (D5)
  4. 액추에이터 (LED, 릴레이):
    • LED의 + 단자: GPIO 12 (D6)
    • LED의 - 단자: GND
    • 릴레이의 제어 핀: GPIO 13 (D7)
  5. ESP8266 모듈:
    • USB를 통해 컴퓨터에 연결

3. 센서 데이터 읽기

다음 예제는 DHT22 온도 센서와 LDR 조도 센서의 데이터를 읽어 시리얼 모니터에 출력하는 방법을 보여줍니다.

 

예제: 온도 및 조도 센서 데이터 읽기

#include <DHT.h>

#define DHTPIN 2       // DHT22 데이터 핀 (GPIO 2)
#define DHTTYPE DHT22  // DHT22 센서 타입

DHT dht(DHTPIN, DHTTYPE);

void setup() {
    Serial.begin(115200);
    dht.begin();
}

void loop() {
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    int ldrValue = analogRead(A0);

    if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }

    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");

    Serial.print("LDR Value: ");
    Serial.println(ldrValue);

    delay(2000); // 2초 대기
}

 

4. 액추에이터 제어

다음 예제는 LED와 릴레이를 제어하는 방법을 보여줍니다.

 

예제: LED 및 릴레이 제어

const int ledPin = 12; // LED 핀 (GPIO 12)
const int relayPin = 13; // 릴레이 핀 (GPIO 13)

void setup() {
    Serial.begin(115200);
    pinMode(ledPin, OUTPUT);
    pinMode(relayPin, OUTPUT);
}

void loop() {
    // LED 켜기
    digitalWrite(ledPin, HIGH);
    Serial.println("LED ON");
    delay(1000); // 1초 대기

    // LED 끄기
    digitalWrite(ledPin, LOW);
    Serial.println("LED OFF");
    delay(1000); // 1초 대기

    // 릴레이 켜기
    digitalWrite(relayPin, HIGH);
    Serial.println("Relay ON");
    delay(1000); // 1초 대기

    // 릴레이 끄기
    digitalWrite(relayPin, LOW);
    Serial.println("Relay OFF");
    delay(1000); // 1초 대기
}

 

5. Wi-Fi 통신 설정

이 프로젝트에서는 ESP8266을 사용하여 Wi-Fi를 통해 데이터를 송수신합니다. 다음 예제는 ESP8266을 Wi-Fi 네트워크에 연결하고, 데이터를 송수신하는 방법을 보여줍니다.

 

예제: Wi-Fi 설정 및 데이터 송수신

#include <ESP8266WiFi.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

void setup() {
    Serial.begin(115200);
    delay(10);

    // Wi-Fi 연결 시작
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP()); // IP 주소 출력
}

void loop() {
    // 여기서 추가적인 데이터 송수신 작업을 수행합니다.
    delay(1000); // 1초 대기
}

 

마무리

오늘은 스마트 홈 시스템 구축 프로젝트의 첫 번째 단계로 시스템 설계와 기본적인 구성 요소 설정을 학습했습니다. 다음 단계에서는 이러한 구성 요소를 통합하고, 데이터를 송수신하며 제어하는 방법을 학습하겠습니다. 다음 날에는 프로젝트의 두 번째 단계로 넘어가겠습니다.

질문이나 추가적인 피드백이 있으면 언제든지 댓글로 남겨 주세요.

Day 23 예고

다음 날은 "프로젝트: 스마트 홈 시스템 구축 (2)"에 대해 다룰 것입니다. 스마트 홈 시스템의 두 번째 단계로, 센서와 액추에이터를 통합하여 제어하고, 데이터를 Wi-Fi를 통해 송수신하는 방법을 학습하겠습니다.

반응형