라즈베리파이로 자동 커튼 제어 시스템 만들기

1. 프로젝트 개요

라즈베리파이를 이용하면 기존 수동 커튼을 자동으로 여닫는 스마트 커튼 시스템을 간단히 구현할 수 있습니다.
이 프로젝트는 서보모터, 조도 센서(LDR), 파이썬 제어 코드를 활용하여,
햇빛의 세기에 따라 커튼이 자동으로 열리거나 닫히는 구조를 만드는 것이 핵심입니다.

자동 커튼은 단순히 편리함뿐 아니라 에너지 절약 효과도 뛰어납니다.
아침에는 햇빛을 받아 자연스럽게 방을 밝히고, 오후에는 과열을 방지하기 위해 커튼을 닫는 식으로 제어할 수 있습니다.

2. 필요한 준비물

  • 라즈베리파이 4 (또는 3 이상)
  • microSD 카드 (32GB 이상, 라즈베리파이 OS 설치)
  • 5V 3A 전원 어댑터
  • 서보모터 (SG90 또는 MG995)
  • 조도 센서 (LDR + 저항)
  • 브레드보드 및 점퍼 케이블
  • 릴레이 모듈 (필요 시 모터 전원 분리용)
  • 커튼용 와이어 또는 기어 구조 (직접 연결 가능)

선 정리와 고정이 중요하므로, 서보모터를 커튼 레일이나 끈에 안정적으로 연결하는 구조를 설계해야 합니다.

3. 라즈베리파이 기본 설정

먼저 라즈베리파이에 최신 OS를 설치한 뒤 필수 패키지를 업데이트합니다.

sudo apt update && sudo apt upgrade -y
sudo apt install python3-gpiozero python3-pip -y

이후 조도 센서와 서보모터를 GPIO 핀에 연결합니다.

  • 서보모터:
    • VCC → 5V
    • GND → GND
    • Signal → GPIO 17
  • 조도 센서(LDR):
    • 한쪽 끝 → 3.3V
    • 다른 쪽 끝 → 저항(10kΩ) → GND
    • 중간 신호선 → GPIO 27

4. 서보모터 연결 및 제어 원리

서보모터는 입력된 PWM(Pulse Width Modulation) 신호의 길이에 따라 회전 각도가 결정됩니다.
라즈베리파이는 GPIO를 통해 이 신호를 제어할 수 있습니다.

다음은 기본적인 서보모터 제어 코드 예시입니다.

from gpiozero import Servo
from time import sleep

servo = Servo(17)

while True:
    servo.min()
    print("커튼 닫힘")
    sleep(2)
    servo.max()
    print("커튼 열림")
    sleep(2)

이 코드를 실행하면 2초 간격으로 커튼이 자동으로 열리고 닫힙니다.
물론 실제 커튼 메커니즘에 맞게 회전 각도나 지연 시간은 조정해야 합니다.

5. 커튼 제어용 파이썬 코드 작성

이제 조도 센서를 함께 활용해 자동 제어 기능을 구현해봅시다.

import RPi.GPIO as GPIO
import time

servo_pin = 17
ldr_pin = 27

GPIO.setmode(GPIO.BCM)
GPIO.setup(servo_pin, GPIO.OUT)
GPIO.setup(ldr_pin, GPIO.IN)

servo = GPIO.PWM(servo_pin, 50)
servo.start(0)

def rotate(angle):
    duty = angle / 18 + 2
    GPIO.output(servo_pin, True)
    servo.ChangeDutyCycle(duty)
    time.sleep(0.5)
    GPIO.output(servo_pin, False)
    servo.ChangeDutyCycle(0)

try:
    while True:
        light = GPIO.input(ldr_pin)
        if light == 0:
            print("밝음 - 커튼 닫기")
            rotate(0)
        else:
            print("어두움 - 커튼 열기")
            rotate(90)
        time.sleep(5)
except KeyboardInterrupt:
    servo.stop()
    GPIO.cleanup()

이 스크립트는 주기적으로 조도 상태를 감지해 커튼을 자동으로 제어합니다.
밝으면 커튼을 닫고, 어두워지면 자동으로 커튼을 여는 구조입니다.

6. 센서 기반 자동화 (조도 센서 활용)

조도 센서는 빛의 강도를 감지해 0 또는 1의 신호를 출력합니다.
이를 라즈베리파이의 디지털 입력으로 받아 간단한 조건문으로 커튼을 제어할 수 있습니다.

보다 정밀한 제어가 필요하다면 아날로그 신호를 지원하는 ADS1115 모듈을 추가로 사용해
밝기의 세기를 세밀하게 감지하도록 개선할 수도 있습니다.

7. 웹 또는 앱으로 원격 제어하기

자동 제어 외에도 수동 제어를 위해 웹 서버를 추가할 수 있습니다.
예를 들어 Flask를 이용하면 브라우저나 스마트폰으로도 커튼을 제어할 수 있습니다.

from flask import Flask
app = Flask(__name__)

@app.route("/open")
def open_curtain():
    rotate(90)
    return "커튼이 열렸습니다."

@app.route("/close")
def close_curtain():
    rotate(0)
    return "커튼이 닫혔습니다."

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

이제 같은 Wi-Fi 네트워크 내에서
http://라즈베리파이IP:5000/open
또는
http://라즈베리파이IP:5000/close
주소로 접속하면 스마트폰에서도 커튼을 열고 닫을 수 있습니다.

8. 자주 발생하는 문제와 해결법

1. 서보모터가 움직이지 않음

  • 전원이 부족할 수 있습니다. 별도의 5V 전원 공급 사용을 권장합니다.
  • GND가 정확히 연결되어 있는지 확인합니다.

2. 조도 센서 반응이 느림

  • 저항값(10kΩ)을 조정하면 민감도를 개선할 수 있습니다.
  • 밝기 차이가 명확하지 않을 경우 LDR 위치를 조정하세요.

3. 웹 제어가 되지 않음

  • Flask 서버가 실행 중인지 확인합니다.
  • 방화벽 또는 포트 차단 여부를 점검하세요.

9. 확장 아이디어 및 마무리

자동 커튼 시스템은 단순히 열고 닫는 기능을 넘어 다양한 확장이 가능합니다.

  • 온도 센서 연동: 여름철 일정 온도 이상일 때 자동으로 커튼 닫기
  • 음성 제어 추가: 구글 홈, 아마존 알렉사와 연동
  • 스케줄 기능: 특정 시간에 자동 개폐
  • 모바일 앱 연동: IoT 플랫폼 (Blynk, Home Assistant 등) 사용

라즈베리파이를 기반으로 한 커튼 제어 시스템은 저비용, 확장성, 직접 제어 가능성이 뛰어나
스마트홈 입문자에게 매우 좋은 실습 프로젝트입니다.
한 번 구축해두면, 매일 아침 커튼이 자동으로 열리며 자연광으로 하루를 시작하는 즐거움을 누릴 수 있습니다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다