카테고리 없음

Raspberry Pi 기반 가정용 홈 자동화 프로젝트 5선

디노의 삶 2025. 4. 21. 06:35
728x90

Raspberry Pi 하나와 몇 가지 센서·액추에이터만 있으면 집안의 모든 기기스마트하게 제어할 수 있습니다. 본 가이드에서는 초보자도 쉽게 따라 할 수 있는 5가지 홈 자동화 프로젝트를 소개하고, 각 프로젝트별 하드웨어 구성, 설치 방법, Python 코드 예제, 확장 팁까지 완벽하게 다룹니다.


목차

  1. 사전 준비
  2. 1. 스마트 조명 제어
  3. 2. 온도·습도 모니터링
  4. 3. 자동 화분 급수 시스템
  5. 4. 스마트 도어락 알림
  6. 5. 홈 CCTV 모니터링
  7. 결론 및 확장 팁
  8. 참고 자료

사전 준비

  • Raspberry Pi 모델: Raspberry Pi 3 이상 권장
  • OS: Raspberry Pi OS (32-bit) 최신 버전
  • 인터넷 연결: 유선 LAN 또는 Wi‑Fi
  • 개발환경: Python 3.7 이상, pip, Git 설치
  • 기본 설정: SSH 원격 접속 활성화, I2C·SPI 인터페이스 활성화

필수 라이브러리 설치:

sudo apt update
sudo apt install python3-pip git -y
pip3 install RPi.GPIO adafruit-circuitpython-dht paho-mqtt flask

1. 스마트 조명 제어

PIR 모션 센서를 통해 움직임을 감지하고, 릴레이 모듈을 이용해 조명을 자동으로 켜고 끕니다. 야간에만 작동하도록 조도 센서를 추가하면 더욱 스마트해집니다.

하드웨어 구성

  • PIR 모션 센서 (HC‑SR501)
  • 릴레이 모듈 (1채널)
  • 조도 센서 (LDR + 10kΩ 저항)
  • 점멸 램프 또는 LED 스트립

Python 코드 예제

import RPi.GPIO as GPIO
import time

PIR_PIN = 17
RELAY_PIN = 27
LDR_PIN = 22  # (SPI or ADC 모듈 필요)

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR_PIN, GPIO.IN)
GPIO.setup(RELAY_PIN, GPIO.OUT)

def read_ldr():
    # 간단 예시, 실제로는 ADC 모듈 사용 필요
    return GPIO.input(LDR_PIN)

try:
    while True:
        if GPIO.input(PIR_PIN):
            light_level = read_ldr()
            if light_level < 300:  # 어두울 때만 켜기
                GPIO.output(RELAY_PIN, GPIO.HIGH)
                print("Motion detected & dark → Light ON")
            else:
                GPIO.output(RELAY_PIN, GPIO.LOW)
        else:
            GPIO.output(RELAY_PIN, GPIO.LOW)
        time.sleep(0.5)
finally:
    GPIO.cleanup()

확장 팁: MQTT 연동 시, Home Assistant와 연동하여 음성 제어 및 대시보드 관리 가능.


2. 온도·습도 모니터링

DHT22 센서로 실내 온도·습도를 측정해 MQTT 서버로 전송하고, Grafana·Node‑RED 대시보드에 실시간 표시합니다. 히스토리 저장를 통해 장기 추세 분석도 가능합니다.

하드웨어 구성

  • DHT22 온습도 센서
  • 4.7kΩ 풀업 저항
  • Raspberry Pi GPIO

Python 코드 예제

import time
import board
import adafruit_dht
import paho.mqtt.client as mqtt

# MQTT 설정
MQTT_BROKER = "mqtt.example.com"
MQTT_TOPIC = "home/temperature"

client = mqtt.Client()
client.connect(MQTT_BROKER, 1883, 60)

dht_device = adafruit_dht.DHT22(board.D4)

try:
    while True:
        temp = dht_device.temperature
        hum = dht_device.humidity
        payload = f'{{"temperature":{temp:.1f},"humidity":{hum:.1f}}}'
        client.publish(MQTT_TOPIC, payload)
        print("Published:", payload)
        time.sleep(10)
except KeyboardInterrupt:
    pass

확장 팁: Node‑RED와 MQTT 브로커를 로컬에 설치해 플로우를 구성하거나, AWS IoT, Google Cloud IoT Core로 전송해 원격 모니터링 가능합니다.


3. 자동 화분 급수 시스템

토양 수분 센서로 건조 상태를 감지해 워터 펌프를 자동으로 작동시킵니다. 물 공급량을 조절하면 과습 방지도 가능합니다.

하드웨어 구성

  • 토양 수분 센서 (YL‑69 + 전용 모듈)
  • 워터 펌프 + 드라이버 모듈 (L298N 등)
  • 12V 전원 어댑터

Python 코드 예제

import RPi.GPIO as GPIO
import time

MOISTURE_PIN = 18
PUMP_PIN = 23
THRESHOLD = 500  # 센서 값 기준

GPIO.setmode(GPIO.BCM)
GPIO.setup(MOISTURE_PIN, GPIO.IN)
GPIO.setup(PUMP_PIN, GPIO.OUT)

try:
    while True:
        moisture = GPIO.input(MOISTURE_PIN)
        if moisture < THRESHOLD:
            GPIO.output(PUMP_PIN, GPIO.HIGH)
            print("Soil dry → Pump ON")
            time.sleep(5)  # 5초 급수
            GPIO.output(PUMP_PIN, GPIO.LOW)
        else:
            print("Soil moist enough")
        time.sleep(60)  # 1분 간격 측정
finally:
    GPIO.cleanup()

확장 팁: 구글 시트 API와 연동해 급수 이력 기록, Telegram 봇으로 급수 알림 발송 기능 추가 가능.


4. 스마트 도어락 알림

자석식 도어 센서로 문 열림을 감지해, LINE Notify 또는 Telegram API로 푸시 알림을 전송합니다. 원격에서 출입 내역을 실시간으로 확인하세요.

하드웨어 구성

  • 자석식 도어 센서
  • Raspberry Pi GPIO

Python 코드 예제

import RPi.GPIO as GPIO
import time
import requests

SENSOR_PIN = 24
LINE_TOKEN = "YOUR_LINE_NOTIFY_TOKEN"
API_URL = "https://notify-api.line.me/api/notify"

GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

def send_line(message):
    headers = {"Authorization": f"Bearer {LINE_TOKEN}"}
    data = {"message": message}
    requests.post(API_URL, headers=headers, data=data)

try:
    prev_state = GPIO.input(SENSOR_PIN)
    while True:
        state = GPIO.input(SENSOR_PIN)
        if state != prev_state:
            if state == GPIO.HIGH:
                send_line("🚪 문이 열렸습니다!")
            else:
                send_line("🚪 문이 닫혔습니다!")
            prev_state = state
        time.sleep(0.5)
finally:
    GPIO.cleanup()

확장 팁: Raspberry Pi 카메라 모듈로 스냅샷 촬영 후, LINE 메시지에 이미지 첨부 기능 추가 가능.


5. 홈 CCTV 모니터링

Raspberry Pi 카메라 모듈과 MJPEG 스트리밍 서버로 실시간 영상을 웹 브라우저에서 확인합니다. 모바일에서도 편리하게 시청하세요.

하드웨어 구성

  • Raspberry Pi 카메라 모듈 V2
  • IR LED 조명 (야간 촬영용)

설치·구성 예제

sudo apt install -y libjpeg8-dev
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make
./mjpg_streamer -i "./input_raspicam.so -x 640 -y 480 -fps 24" \
                -o "./output_http.so -w ./www"

웹 브라우저에서 http://raspberrypi.local:8080 접속

확장 팁: 동작 감지 시 녹화 시작, FTP 업로드 스크립트로 클라우드 저장 구현 가능.


결론 및 확장 팁

본 5가지 프로젝트를 통해 Raspberry Pi를 다재다능한 홈 자동화 허브로 재탄생시킬 수 있습니다. 각 예제 코드를 기반으로 자신만의 자동화 시나리오를 설계하고, Home Assistant, Node‑RED, AWS IoT 등과 연동하여 더 복잡한 시나리오와 대시보드를 구현해 보세요.

  • Home Assistant 통합: MQTT·REST API로 디바이스 통합
  • Node‑RED 흐름: 시각적 플로우 편집기로 자동화 로직 설계
  • 클라우드 백업: Google Drive API로 로그·데이터 자동 백업
  • 보안: PiCam 접근 암호화, TLS 적용

참고 자료

태그: RaspberryPi, 홈자동화, 스마트홈, IoT프로젝트, PythonGPIO, MQTT, DHT22, 릴레이모듈, 카메라모듈, DIY프로젝트

728x90