Skip to content

ckd0325/System-Programming-Team-Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sce214_team_project

1 프로젝트 목표

해당 프로젝트의 목표는 “청각 장애 부모를 위한 육아 보조 장치”이다. 이 장치는 부모의 눈이 닿지 않는 곳에서 아이에게 문제 상황이 발생했을 때, 해당 상황을 부모에게 알리는 것 을 목표로 한다. 이 프로젝트에서 선정한 문제 상황은 아이가 울음을 터뜨렸을 때, 아이가 침 대에서 떨어졌을 때, 아이가 위험한 곳(ex.창문, 부엌 등)에 위치했을 때이다. 장치는 아이가 각 문제 상황이 발생했을 때 이를 인지하고 부모에게 이를 알려야 한다. 장 치를 사용하는 부모는 소리를 감지하는데 어려움이 있으므로 시각적이거나 촉각적인 방법으 로 상황을 전달해야 한다. 때문에 해당 장치에서는 부모에게 상황을 알릴 때 led, 진동모터를 사용한다.



2 분석

가) 요구 사항 및 기술 분석

장치는 라즈베리파이를 이용해 구현되어야 한다. 이때 각 문제 상황을 인지하는 라즈 베리 파이, 부모에게 상황을 알리는 라즈베리파이가 필요하다. 우선 센서들이 장착된 클라이언트 라즈베리파이에서(Pi2, Pi3) 센서 들로부터 값을 읽 어올 수 있어야 하고 이 값을 이용하여 문제 상황인지 판단해야 한다. 그리고 문제 상황 이라면 부모에게 문제 상황을 알리는 서버 라즈베리파이(Pi1)에게 전달할 필요가 있다. Pi1에서는 Pi2, Pi3로부터 문제 상황이 발생했다는 정보를 받을 수 있어야 하고 이것이 어떤 문제 상황인지 판단하고 이를 구분하여 적절한 엑추에이터를 동작 시켜야 한다.

나) 도전적 이슈 및 제한 사항

문제 상황 발생시 기본적으로 진동모터를 작동시키고 거기에 서로 다른 색의 LED를 사용하여 어떤 문제 상황인지 알리려고 했었다. 하지만 당시 가지고 있던 LED가 고장이 나 빨간색 LED만으로 각 상황을 구별하게끔 하였다. 아이의 떨어짐을 감지하는 기능은 원래 4개의 압력 센서를 이용하여 여러 위치에서 떨어짐을 감지하고자 하였지만 회로 구성이 매우 복잡해지기도 하고 라즈베리파이에서 사용할 수 있는 핀 수에도 제한이 있었기에 하나의 압력 센서만을 사용하였다.



3 응용 시스템 제작 (설계 및 구현)

가) 응용 시스템의 구조

image


구현한 시스템은 센서를 이용해 문제 상황 발생 여부를 감지하는 클라이언트 라즈베 리파이에서(Pi2, Pi3), 발생한 문제 상황을 구별하여 이를 액추에이터로 알리는 서버 라 즈베리파이(Pi1)로 구성된다. Pi2는 사운드 센서로 일정 크기 이상의 소리를 감지하고, 초음파 센서로 위험한 공간 과 대상과의 거리를 측정하고 일정 값보다 낮다면(가깝다면) 문제상황으로 간주한다. 그 리고 발생한 상황에 대한 메시지를 소켓 통신을 이용해 Pi1에게 전송한다. Pi3에서는 MCP3008 ADC 컨버터를 SPI 인터페이스를 이용하여 사용했다. 이를 통해 압력 센서로부터 압력 값을 받고 특정 크기 이상의 압력을 입력으로 받으면 문제상황으 로 간주하고 소켓 통신을 이용해 메시지를 Pi1에 전송한다. Pi1에서는 소켓 통신을 통해 받은 메시지가 문제 상황에 대한 것이라면 진동 모터를 동작 시키고 어떤 문제상황인지 구분하여 led를 다르게 작동시킨다.

나) 세부 알고리즘의 개요

  1. Pi1

image


2. Pi2

image


3. Pi3

image


다) 전체 알고리즘의 개요

image



4 변동사항

가) 온습도 알림 기능에서 위험 공간 접근 알림 기능으로 변경

온습도 알림 기능을 구현하기 위해서는 온습도 센서를 이용하여 온도, 습도 값들을 받 아와야 한다. 이를 위해 조원들은 실습시간의 코드를 이용해보거나 이미 실행됨을 확인 한 다른 예제 코드들을 이용하였다. 하지만 주어진 모든 방법을 써보아도 센서로부터 값

을 받아오지 못했다. 그래서 센서에 문제가 있는 것으로 간주하였다. 때문에 주제에 적 합하고 현재 가지고 있는 센서로 구현할 수 있는 기능에 대해 의논하였고, 이에 대한 결 론으로 초음파 센서를 이용한 위험 공간 접근 알림이라는 기능으로 교체하기로 결정하 였다.

나) 압력 센서 사용 개수 변경

이전 기획 시, 여러 개의 압력 센서를 사용하여 떨어짐 감지 기능을 구현하려고 하였 으나, 압력 센서를 이용하려면 요구되는 브레드보드 영역이나 핀의 개수가 많았다. 따라 서 하나의 라즈베리 파이에 여러 개의 압력 센서를 연결하기에는 무리가 있다고 판단하 여 한 개의 압력 센서만을 사용하기로 결정하였다.



5 시험 평가

가) 컴파일 환경 및 방법, 실행 방법

image


서버에 관한 파일인 server.c와 사운드 센서와 초음파 센서를 동시에 사용하는 clinet1.c는 멀티 쓰레드를 이용하기 때문에 컴파일 시 ‘-lpthread’ 옵션을 추가하여 컴파 일 하였다. 압력 센서를 사용하는 client2.c는 추가적인 옵션을 추가하지 않고 컴파일 하 였다. 우선 서버 파일을 ‘(포트번호)’를 입력 값으로 준 뒤 가장 먼저 실행했다. 이후 클라이 언트 1, 2 파일들을 ‘(서버의 IP 주소) (포트번호)’를 입력 값으로 준 뒤 차례대로 실행했다.

나) 버그 및 개선할 사항

해당 시스템은 클라이언트가 문제 상황을 인식하든 하지 않았든 이에 대한 정보를 계 속해서 서버에 전송하고 이를 받은 서버가 문제 상황 발생 여부를 계속해서 실시간으로 파악한다. 두 개의 클라이언트가 보내는 메시지 양을 하나의 서버가 감당하기 힘든 지는 파악하기 어려워서 알 수 없지만 시스템 실행 후 시간이 지날수록 서버의 반응 속도가 느려지거나(상황 발생 후 시간이 지나야 반응) 강제로 서버가 종료되는 현상이 발견됐다. 이에 대한 대응으로 테스트시 서버의 메시지 수신 확인을 위한 출력문을 삭제하거나

usleep()을 이용해 클라이언트의 write()가 속한 반복문의 반복 속도를 줄였음에도 해결이 되지 않았다. 해결을 위해서는 소켓 통신에 대한 깊은 이해가 필요할 것으로 보인다.

다) 구현한 사항과 구현하지 못한 사항에 대한 설명

1 구현한 사항

⚫ 사운드 센서, 초음파 센서, 압력 센서로부터 값 읽어오기
⚫ 문제 상황 인지, 구별 후 적절하게 LED와 진동모터 동작
⚫ 서버-클라이언트 간의 소켓 통신, 멀티 쓰레드
⚫ 하드웨어 인터페이스: GPIO, SPI

2 구현하지 못한 사항과 이에 대한 설명

아이가 울음을 터뜨렸을 때 부모에게 단순히 발생 여부만 알리는 것이 아니라 울 음 소리 크기에 따라 led의 점등 주기를 다르게 하는 기능을 구현하려고 했었다. 하 지만 기능 구현에 사용되는 사운드 센서는 초기에 설정한 저항 값(소리 크기)에 대 한 소리 발생 여부만 감지할 수 있고 감지한 소리가 어느 정도의 크기인지에 대한 값을 얻는 건 불가능했다. 때문에 해당 기능을 구현할 수 없었다.

About

청각 장애 부모를 위한 육아 보조 장치 임베디드 시스템 구현

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages