본문 바로가기
카테고리 없음

라즈베리파이를 이용한 고독사 방지 프로젝트 - 진행 과정

by 비엠이 2020. 12. 16.

현재 대한민국은 전 세계 국가들 중에서 고령화속도가 가장 빠른 것으로 나타난다. 1980년 65세 이상의 인구는 3.8%에 불과했지만 2015년 13.0%를 기록한데 이어 2050년에는 35.9%까지 급상승 할것으로 전망한다. 유엔 등 국제기구는 노인이 7% 이상일 경우 ‘고령화 사회’, 14% 이상이면 ‘고령사회’, 20%이상이면 ‘초고령 사회’로 구분한다. 대한민국은 2000년 고령화사회(65세 이상 인구 7% 이상)로 진입했고 2026년에는 초고령사회(21% 이상)에 진입해 27년만에 가장 고령화 된 국가로 전락한다.

 

고령화 속도가 급속도로 전개됨에 따라 1인가구 또한 증가하는 추세다. 지난 해 전체 가구는 2017만가구로, 2016년(1984만가구)보다 33만가구(1.7%) 증가했다. 전통적 가구 형태인 ‘부부+자녀’ 가구 대신 1~2인 가구가 늘면서 인구 증가보다 빠른 속도로 가구 수가 증가한 것이다. 1인 가구는 지난해 561만9천가구로 전체의 28.6%에 이르렀다. 또 전체 가구주의 평균 연령이 51.7살로 전년보다 0.4살 늘어나고, 1인 가구주 가운데 70살 이상(18%)이 가장 많은 수를 차지하는 등 가구 특성 면에서도 고령화 영향이 드러났다.

이에 따라 노인 고독사 방지를 위해 제작할 시제품은 움직임 감지센서를 이용하여 움직임이 감지되지 않으면 근처 119나 지인에게 자동으로 연락이 가도록 만드는 시스템을 구축하는 것이다. 집 안에서 사람이 반드시 지나야 하는 문턱이나 방안에 설치하여 사람의 움직임을 파악하는 것이 주목적이고 카메라를 사용하지 않아 사생활 침해를 하지 않는다는 것이 특징이다.

늘어나는 독거노인 고독사 사망 비율

1. HC-SR501(인체감지센서)를 이용하여 센서로 인식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import RPi.GPIO as GPIO
 
import time
 
  
 
GPIO.setwarnings(False)
 
GPIO.setmode(GPIO.BCM)
 
GPIO.setup(21, GPIO.IN)
 
 
 
while True:      
 
    if GPIO.input(21):
 
        t = time.localtime()
 
        print ("%d:%d:%d 1/LIVINGROOM motion detected!!      
 
         continue for 10sec" %(t.tm_hour, t.tm_min, t.tm_sec))
 
 
 
   t = time.localtime()
 
    print ("%d:%d:%d NOT detected" %(t.tm_hour, t.tm_min, t.tm_sec))
 
 
 
  GPIO.cleanup()
 

<RPi.GPIO> library 기능을 사용할 수 있도록 "RPi.GPIO"를 import

시간에 대한 처리를 하기 위해 "time"을 import

'setwarning false' 오류발생시 적어줌

GPIO 21번에서 센서값 받아들임

21번에서 값이 오게 되면 print내의 구문 출력

현재시간을 변수 t에 입력

언제 어디서 사람이 감지되었는지 출력

GPIO 모듈이 점유한 리소스를 해제

= 초기화했던 핀 설정을 청소 해주는 기능

(라즈베리파이 제작사에서 사용 적극 권장)

 

GPIO.setmode에는 두가지 모드가 있다. ( BCM/BOARD )

BCM은 핀의 번호(= GPIO번호)를 사용하는 것이다.

BOARD는 라즈베리파이 보드를 사용자가 직접보는 물리적인 핀 번호이다.

예) 'BCM모드에서 GPIO2 = BOARD모드에서 3번핀'

이제 받아들인 센서값을 mqtt 프로토콜을 이용해서 보호자는 언제 어디서든 핸드폰, 컴퓨터를 이용해 움직임을 확인 할 수 있게 제작한다.

또한 집안 구역을 2구역(거실, 주방)으로 나눠 더욱 상세한 위치를 알 수 있도록 하였다.

* 위에서 설명하지 않은 mqtt에 관련된 내용만 추가로 설명하도록 하겠다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import RPi.GPIO as GPIO
import time
import paho.mqtt.client as mqtt
 
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN)
GPIO.setup(16, GPIO.IN)
time.sleep(2)
broker_address="브로커 주소 입력"
client2 = mqtt.Client("ClientPublisher")
client2.connect(broker_address)
 
while True:
    if GPIO.input(21):
        t = time.localtime()
        print ("%d:%d:%d 1/LIVINGROOM motion detected!! continue for 10sec" 
    %(t.tm_hour, t.tm_min, t.tm_sec))
        client2.publish("BME""%d:%d:%d 1/LIVINGROOM motion detected!! continue for 10sec" %(t.tm_hour, t.tm_min,t.tm_sec))
        time.sleep(10)
         
    if GPIO.input(16):
        t = time.localtime()
        print ("%d:%d:%d 2/BATHROOM motion detected!! continue for 10sec" %(t.tm_hour, t.tm_min, t.tm_sec))
        client2.publish("BME""%d:%d:%d 2/BATHROOM motion detected!! continue for 10sec" %(t.tm_hour, t.tm_min, t.tm_sec))
        time.sleep(10)
    t = time.localtime()
    print ("%d:%d:%d NOT detected" %(t.tm_hour, t.tm_min, t.tm_sec))
    client2.publish("BME""%d:%d:%d NOT detected" %(t.tm_hour, t.tm_min, t.tm_sec))
    time.sleep(2)
 
GPIO.cleanup()
cs

추가 진행 사항

 

- SMS API를 이용하여 위험 상황임을 인식하였을 때 보호자와 주변 보호시설에 빠르게 경보 문자 메세지를 전송하도록 하면 보호자가

어플리케이션을 확인하지 않아도 위급시에 신속하게 대처가능하도록 제작

- 움직임이 없을 때 사람의 생사여부/위험상황 구분가능한 방법 모색

- 측정을 할때 노인분들이 대상이기 때문에 거추장스러운 시계형식과 같이 장착하는 방식은 제외 -> 비접촉, 무자각 기반의 센서 활용

- 압력센서 -> 위치 파악 / 스마트 도어락 -> 외출, 귀가 확인

 

#라즈베리 파이로 MQTT 사용 - bmet.tistory.com/10