05-16 18:56
Recent Posts
Recent Comments
관리 메뉴

miinsun

[토탈 솜루션/RaspberryPi] 움직임 감지 센서로 조명 제어하기 본문

Project/2020 토탈솜루션

[토탈 솜루션/RaspberryPi] 움직임 감지 센서로 조명 제어하기

miinsun 2021. 11. 25. 14:16

 

진행 중인 프로젝트의 모션 센서 제어 부분을 맡았다.

 

📌 기능을 구현하기 위한 준비물

  • 라즈베리 파이(초기 설정된)
  • GPIO 확장 보드
  • MF선
  • 모션감지센서
  • 3색 LED >> 3색 LED가 조명을 대체한다.

그 외에 기능 확장을 위해서 서브모터가 있으면 좋을 것이다..

 

 

요구 사항은 다음과 같다.

  • 스마트 홈을 구축한다고 하였을 때, 거실이나 각각의 방에 움직임이 감지된다면 조명이 자동으로 켜져야 한다.
  • 1시간 이상 움직임이 감지되지 않을 시에는 자동으로 조명이 꺼지도록 제어할 수 있어야 한다.

 

💬 요구사항을 바탕으로 기능을 만들어보자

움직임 센서는 1초에 한 번씩 계속해서 움직임을 감지한다.
움직임이 감지되면 그 이후로 1시간 동안 LED 등을 켜둔다.
1시간이 지나면 반복해서 움직임 센서가 입력을 받는다.

💻 MotionInput.c

# GPIO핀을 액세스하기 위해 RPI, GPIO 라이브러리를 불러옵니다.
import RPi.GPIO as GPIO
import time # 시간 관련 함수를 사용하기 위한 라이브러리

GPIO.setmode(GPIO.BCM) # 코블러에 표기된 번호 그대로 핀을 사용

# 13번 핀은 LED와 연결된다. 13번 핀을 신호 출력 모드로 설정
GPIO.setup(13, GPIO.OUT)

# 25번 핀은 모션센서와 연결된다.25번 핀을 신호 입력모드로 설정
# 모션센서는 3V이상의 전압이 입력될 경우 True로 인식, 0V 전압이 입력될 경우 False로 인식
GPIO.setup(25, GPIO.IN)

def inputValue(): #신호 입력 함수
    setMsg = 0;
    if GPIO.input(25) == True: # 움직임이 감지될 시
        setMsg = 1;    
    if GPIO.input(25) == False: # 움직임이 감지되지 않을 시
        setMsg = 0; 
    return setMsg;
        
def outputValue(): #신호 출력 함수
    try:
        while True: # ctrl + c로 끝마칠 때까지 무한 반복한다.
            getMsg = inputValue() # getMsg로 입력을 받고
            if getMsg == 0: # 신호가 없으면
                print("Sensor Off!!") 
                GPIO.output(13, True) # LED 등을 끝다.
                time.sleep(1) # 1초 대기
                
            elif getMsg == 1: # 신호가 있으면,
                print("Sensor On!!") 
                GPIO.output(13, False) # LED등을 킨다.
                time.sleep(3600) # 1시간 대기

    except KeyboardInterrupt:
        GPIO.cleanup()

outputValue()

25번 핀에 모션센서를 연결하고, 13번 핀에 LED를 연결했다.

1시간 이상 대기가 사실상 힘드니, 10초로 변경해 줘도 된다. timesleep(10)으로 수정 작동을 멈출 때는 ctrl + c를 하면 된다.

Comments