과제명: ROSS(Rear Occupant Safety System) 작성일: 2019.04.27
작성팀: 공동안전구역MMU
1. 목차
2. 작품 소개 ...4
3. 요구사항 개발 진도표...5
4. 구현 명세 ...7
4.1. 서버 구현 명세 ...7
4.1.1. ServerMain ...8
4.1.2. CustomLogger ... 10
4.1.3. CustomLogFormatter ... 11
4.1.4. Config ... 12
4.1.5. ServiceManager ... 13
4.1.6. RequestProcessorMapper ... 14
4.1.7. RequestProcessor ... 15
4.1.8. ModuleConnectionRequestProcessor ... 16
4.1.9. RequestDataProcessor ... 17
4.1.10. Dispatcher ... 18
4.1.11. MessageResolver... 19
4.1.12. Service ... 20
4.1.13. ModuleService ... 21
4.1.14. ServerListener ... 22
4.2. 모듈 구현 명세 ... 23
4.2.2. 실제 모듈 사진 ... 23
4.2.3. connectWIFI() ... 24
4.2.4. Logger ... 25
4.2.5. currentDateTime() ... 26
4.2.6. 하드웨어 테스트 ... 27
4.3. 어플리케이션 구현 명세 ... 33
5. 진행상황 ... 41
5.1. 개발일정 및 진척도... 42
5.2. 문제점 ... 42
5.3. 해결방안 ... 43
6. 향후 계획 ... 44
6.1. 해야할 일 ... 44
6.1.1. 향후 하드웨어 모듈 제작 ... 44
6.2. 개발일정 ... 45
2. 작품 소개
본 시스템은 차량 내부에 남겨진 아동 혹은 반려동물을 감지하는 시스템이다. 이 시스템은 하드 웨어, 서버, 어플리케이션으로 나뉜다. 하드웨어는 후석의 생명체를 감지할 수 있는 무게센서, 차 량 내부의 온도를 감지하는 온도 센서로 구성된다. 서버는 하드웨어에서 전송한 센싱 데이터를 처리하여 위험 상태를 판단하고 판단 결과를 모바일 어플리케이션으로 전송한다. 모바일 어플리 케이션은 사용자에게 차량 내부의 상태를 위젯을 통하여 알려준다.
3. 요구사항 개발 진도표
순번 요구사항 ID 요구사항 명칭 개발진도(O, ∆, X) 개발가능여부(O, X)
1 UC1-REQ-1 차량시동ON ∆ O
2 UC1-REQ-2 차량시동OFF ∆ O
3 UC2-REQ-1 무게센서 점검 ∆ O
4 UC2-REQ-2 온도센서 점검 O
5 UC3-REQ-1 타이머 상태조회 요청 ∆ O
6 UC3-REQ-2 타이머 상태조회 수신 ∆ O
7 UC3-REQ-3 센서절전 ∆ O
8 UC4-REQ-1 연결요청 O
9 UC4-REQ-2 연결요청 결과 확인 O
10 UC4-REQ-3 연결해제 O
11 UC5-REQ-1 무게/온도 데이터
전송 O
12 UC6-REQ-1 이용자 정보 파일
갱신 ∆ O
13 UC7-REQ-1 서버연결/해제 요
청 응답 ∆ O
14 UC8-REQ-1 타이머 상태 조회 ∆ O
15 UC8-REQ-2 타이머 상태 응답 ∆ O
16 UC9-REQ-1 어플리케이션 설
정 정보 수신 ∆ O
17 UC9-REQ-2 어플리케이션 설
정정보 갱신 ∆ O
18 UC10-REQ-1 어플리케이션 사
용자 인증 ∆ O
19 UC11-REQ-1 어플리케이션 설
정 정보 조회 ∆ O
20 UC12-REQ-1 경고메시지 전송 ∆ O
21 UC13-REQ-1 차량상태정보 전
송 ∆ O
22 UC14-REQ-1 어플리케이션 사 용자 인증 요청
∆ O
23
UC14-REQ-2
어플리케이션 사 용자 인증 결과
확인
∆ O
24 UC15-REQ-1 어플리케이션 설정 정보 변경
∆ O
25
UC15-REQ-2
어플리케이션 설정 정보 갱신
요청
∆ O
26 UC16-REQ-1 차량 상태 정보 수신
∆ O
27 UC16-REQ-2 차량 상태 정보 출력
∆ O
28 UC17-REQ-1 경고 메시지 위젯 출력
∆ O
29 UC17-REQ-2 경고 메시지 푸쉬 알림
∆ O
30 UC18-REQ-1 서버 연결요청 ∆ O
31 UC18-REQ-2 서버 연결요청 결과
확인 ∆ O
32
UC19-REQ-1
어플리케이션 설 정 정보 조회 요청
∆
O
33
UC19-REQ-2
어플리케이션 설 정 정보 조회 결과
확인
∆
O
4. 구현 명세
4.1. ROSS 서버 구현 명세
4.1.1. ServerMain
클래스명 설명
ServerMain 서버가 시작될 때 필요한 각종 설정을 초기화하고 서버에서 동작할 각종 클래스모듈 을 동작시킨다. 또한 서버가 종료될 때 올바르게 종료되도록 한다.
클래스명 메소드명 매개변수 반환 타입 설명
ServerMain ServerMain Void Void 생성자
ServerMain ServerOn Void Void 서버가 시작될 때 필요한
각종 설정 작업을 한다.
ServerMain ServerOff Void Void 서버가 종료될 때 해야하 는 작업을 한다.
ServerMain readConfigFile Void Void 서버 설정 파일을 읽어온
다.
ServerMain logConfigInitailize Void Void 로그를 기록할 파일을 설 정한다.
ServerMain requestProcessorMapperInitailzie Void Void 요청메시지와 요청처리를 맵핑하는 맵퍼를 초기화 한다.
ServerMain dispatcherInitailize Void Void 요청메시지를 처리할 모 듈을 초기화한다.
ServerMain serviceManagerInitialize Void Void 클라이언트와 연결된 서 비스들을 관리모듈을 초 기화한다.
ServerMain messageResolverInitialize Void Void 메시지를 조합하고 분해 하는 처리모듈을 초기화 한다.
ServerMain setConfig Void Void 읽어온 설정 파일대로 설
정을 수행한다.
4.1.2. CustomLogger
클래스명 설명
CustomLogger 서버에서 로그를 콘솔 및 파일로 출력하는 기능을 가진 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
CustomLogger CustomLogger String Void 생성자
CustomLogger getLogger Logger Void 싱글톤
4.1.3. CustomLogFormatter
클래스명 설명
CustomLogFormatter 로그메시지의 출력형식을 지정하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
CustomLogFormatter Format Void String Log 포맷을 커스터마이징 한다.
4.1.4. Config
클래스명 설명
Config 설정파일 정보를 가지는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
Config Config Void Void 생성자
Config getTcpPort Void Int 설정 파일에서 읽어온
TCP 포트번호를 얻는 다.
Config getUdpPort Void Int 설정 파일에서 읽어온
UDP 포트번호를 얻는다
Config getLogFileName Void String 읽어온 설정 파일에서 로
그 파일명을 읽어온다 Config getRequestProcessorConfigFilePath Void String 요청 처리모듈 설정파일
의 경로명을 읽어온다.
4.1.5. ServiceManager
.
클래스명 설명
ServiceManager 클라이언트와 연결된 서비스들의 맵핑을 담당하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
ServiceManager ServiceManager Void Void 생성자
ServiceManager addModuleService ModuleService Void 서비스 관리 모듈에 모듈 서 비스를 추가한다.
ServiceManager addService Service Void 서비스 관리 모듈에 서비스를 추가한다.
ServiceManager deleteService String Void 서비스 관리 모듈에서 서비스 를 제거한다.
ServiceManager hasService String Boolean 서비스 관리 모듈에 해당 서 비스가 존재하는지 판단한다.
ServiceManager getService String Service 서비스 관리 모듈에서 서비스 를 얻는다.
4.1.6. RequestProcessorMapper
클래스명 설명
ReuqestProcessorMapper 각각의 요청에 대한 RequestProcessor를 맵핑시키는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
RequestProcessorMapper RequestProcessMapper String Void 생성자
RequestProcessorMapper readConfigFile String BufferedReader 요청을 수행 할 모듈들에 대한 설정파 일을 읽어온 다
RequestProcessorMapper getRequestProcessorMapper String RequestProcessorMapper 싱글톤
4.1.7. RequestProcessor
클래스명 메소드명 매개변수 반환 타입 설명
RequestProcessor requestProcess Data Void 요청을 처리한다.
4.1.8. ModuleConnectionRequestProcessor
클래스명 설명
ModuleConnectionRequestProcessor 하드웨어에서 요청한 연결을 처리하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
ModuleConnectionRequestProcessor requestProcess Data Void 요청을 처리 한다
ModuleConnectionRequestProcessor Respond Void Void 요청에 대해 응답한다 ModuleConnectionRequestProcessor extractSerialNo data JSONObject 요청메시지
의 데이터필 드에서 SerialNo를 얻는다.
ModuleConnectionRequestProcessor composeData Void JSONObject 전송할 데이 터를 조합한 다.
ModuleConnectionRequestProcessor init Void Void 초기화
4.1.9. RequestDataProcessor
클래스명 설명
RequestDataProcessor 하드웨어에서 송신한 데이터를 서버에 저장 및 처리하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
RequestDataProcessor requestProcess JSONObject Void 요청을 처리한다
RequestDataProcessor extractTemperature JSONObject Double 요청메시지의 데이터필드 에서 온도를 얻는다.
RequestDataProcessor extractWeight JSONObject Double 요청메시지의 데이터필드 에서 무게를 얻는다
4.1.10. Dispatcher
클래스명 설명
Dispatcher 클라이언트와 연결된 서비스들에서 수신한 요청메시지를 각각의 RequesProcessor에 게 처리를 위임(delegation)하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
Dispatcher Dispatcher Void Void 생성자
Dispatcher getDispatcher Void Dispatcher 싱글톤
Dispatcher Dispatch Message Void 메시지를 각각의 처리모듈로 발송한다.
Dispatcher processRequest JSONObject Void 파싱된 요청메시지를 이용해 요청 처리 모듈에게 요청처리를 위임한다.
Dispatcher isRequestType requestType Boolean 메시지가 요청메시지인지 확인한다.
4.1.11. MessageResolver
클래스명 설명
MessageResolver 요청메시지를 파싱하고 응답메시지를 조합하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
MessageResolver messageResolver Void Void 생성자
MessageResolver getResolver Void MessageResolver 싱글톤
MessageResolver Resolve String JSONObject Message를 JSON객체로 파싱한다.
MessageResolver Compose Int String JSONObject
String 메시지를 생성한다.
4.1.12. Service
클래스명 설명
Service 클라이언트와 연결되어 요청메시지를 수신하고 응답메시지를 송신하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
Service Service socket Socket 생성자
Service Service Void Void 생성자
Service Run Void Void 작업 스레드
Service Terminate Void Void 스레드를 종료한
다
Service getSocket Void Socket 소켓을 얻어온다.
4.1.13. ModuleService
클래스명 설명
ModuleService 하드웨어와 연결되어 요청메시지를 수신하고 응답메시지를 송신하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
ModuleService moduleService Module Void 생성자
ModuleService Run Void Void 작업 스레드
ModuleService Terminate Void Void 스레드를 종료한
다.
4.1.14. ServerListener
클래스명 설명
ServerListener 서버에서 클라이언트와의 연결을 대기하는 모듈이다.
클래스명 메소드명 매개변수 반환 타입 설명
ServerListener ServerListener tcpPort Int 생성자
ServerListener Run Void Void 작업 스레드
ServerListener Terminate Void Void 스레드를 종료한
다.
4.2. ROSS 서비스 디바이스 구현 명세
4.2.1.
회로도
4.2.2.
실제 모듈 사진
4.2.3. connectWIFI()
클래스, 함수명 용도 주요 소속함수 LOC
connectWIFI()
Wifi의 ssid와 password로 모듈과 Wifi를 연결한다.
WiFi.begin(ssid, password) class Logger
24
4.2.4. Logger
클래스, 함수명 용도 주요 소속함수 LOC
class Logger{}
서버에서 로그를 저장할때의 시간 값을 현재시간으로 초기화 하기 위한 클래스이다.
currentDateTime() 38
4.2.5. currentDateTime()
클래스, 함수명 용도 주요 소속함수 LOC
currentDateTime()
그리니치 천문대의 시간을 얻어와서 한국의 표준시간 을 String 형식으로 반환하 는 함수이다.
configTime() 8
4.2.6.
하드웨어 테스트
무게센서 테스트
온도센서 테스트
아두이노와 와이파이 쉴드, 온도센서, 무게센서 결합 시 무게센서가 동작하지 않고, 온도센서 포 트에 전압 인가가 되지 않는 오류.
아두이노와 와이파이쉴드, 무게센서 결합 시 발생하는 오류.->ESP8266을 구입
*
ESP8266 : 와이파이 통신 기능을 포함한 마이크로컨트롤러이며, 아두이노 스튜디오에서 코딩이 가능하다.
ESP8266 구입 후 무게센서와 연결하여 정상 작동.
ESP8266 구입 후 온도센서, 무게센서 결합 후 서버와 연결하여 제이슨 방식으로 데이터를 정상 적으로 전송.
4.3. ROSS 어플리케이션 구현 명세
순번 목 표 현재 진행상황 추후 가능 여부 설명
1 인트로 화면,
기능 O O
메인 화면에 들어가기 전에 잠깐의 시간동안 그림등과 같은 형식으로 2초가량 화면을 띄우고 난 후 메인
화면 시작
순번 목 표 현재 진행상황 추후 가능 여부 설명
2 메인 화면 O O
차량의 내부 온도, 무게의 값을 나 타내고 모드상황을 나타낸다. 또한
온도 임계치 설정하는 화면, 모드 설정하는 화면으로 이동을 지원한
순번 목 표 현재 진행상황 추후 가능 여부 설명
3 온도 임계치
설정 화면 O O
차량 내부의 온도를 사용자마다 설 정할수 있는 시스템이며 Seekbar 이벤트를 사용해서 마우스를 사용 해서 조정하면 ProgreesBar를 통해 TextView의 퍼센트를 조정해서 값을
순번 목 표 현재 진행상황 추후 가능 여부 설명
4 모드 설정 화
면 △ O
사용자가 뒷자석에 애기가 있는 걸 인식하지 못하고 내렸을 경우와 애
기가 있는걸 알면서 잠시 놔두고 나갔을때의 모드를 나눠서 사용자
순번 목 표 현재 진행상황 추후 가능 여부 설명
5 사용자 인증
화면 △ O
Edit이벤트를 사용하여 값을 서버로 전송하고 서버에서 저장된 값과 일
치하면 초기화면으로 넘어가게 된
순번 목 표 현재 진행상황 추후 가능 여부 설명
6 서버 연결 O O
안드로이드와 서버간의 통신을 연 결했다. Thread와 socket을 이용하여 안드로이드에서 메시지를 전송하면 서
버에서 받는 형식으로 만들었다.
5. 진행상황
계획 일정 수행 업무 설명
2019.05.06~2019.05.12 하드웨어 모듈 제작
차량 시동을 대체할 스위치 연 결을 포함해 작품 시연을 위한
모듈을 완성한다.
2019.05.13~2019.05.16 서버 분석 모듈 개발
만들어진 모듈을 바탕으로 데 이터를 수집하고 이를 분석하 는 분석 소프트웨어를 구현한 다.
2019.05.01~2019.05.13 어플리케이션 UI 완성 어플리케이션 UI를 완성한다.
2019.05.06~2019.05.12 어플리케이션 서버 연동
만들어진 어플리케이션 UI에서 수행하는 작업을 서버와 연동
하여 통신할 수 있도록 한다.
2019.05.17~2019.05.20 전체 시스템 연동 테스트
모듈,서버,어플리케이션이 통합 적으로 통신되는지 테스트 하
고 문제점을 해결한다.
2019.05.21~2019.06.03 단계별 테스트 케이스 수행 만들어진 유스케이스를 바탕으 로 테스트 케이스를 수행한다.
5.1. 개발일정 및 진척도
5.2. 문제점
① 하드웨어 부품 중 와이파이 보드가 다른 부품들과 정상적으로 연동되지 않음.
② 안드로이드 스튜디오의 버전업으로 인해 기존에 수행되던 네트워크 작업이 정상적으로
수행되지 않음
③ 데이터를 저장하는 방식을 파일 저장 방식에서 데이터베이스 저장 방식으로 새롭게 변경
④ 각종 시험으로 인해 팀별 업무 진행 속도 하락
5.3. 해결방안
① 와이파이 쉴드를 ESP복합 모듈로 교체
② 버전업된 개발환경에 맞게 네트워크 작업을 개별 스레드에서 작업하도록 개발
③ Mysql 라이브러리를 설치하고 테이블을 생성하여 데이터를 새로 저장.
④ 각종 시험기간이 모두 끝났으므로 팀별 업무가 다시 원활하게 가능.
6. 향후 계획
6.1. 해야할 일
6.1.1.
향후 하드웨어 모듈 제작
위의 그림처럼 로드셀의 상,하에 간격을 두고, 평평한 부착물을 부착하여 방석과 같은 형태로 제 작할 예정이다.
6.2. 개발일정
계획 일정 수행 업무 설명
2019.05.06~2019.05.12 하드웨어 모듈 제작
차량 시동을 대체할 스위치 연 결을 포함해 작품 시연을 위한
모듈을 완성한다.
2019.05.13~2019.05.16 서버 분석 모듈 개발
만들어진 모듈을 바탕으로 데 이터를 수집하고 이를 분석하 는 분석 소프트웨어를 구현한 다.
2019.05.01~2019.05.13 어플리케이션 UI 완성 어플리케이션 UI를 완성한다.
2019.05.06~2019.05.12 어플리케이션 서버 연동
만들어진 어플리케이션 UI에서 수행하는 작업을 서버와 연동
하여 통신할 수 있도록 한다.
2019.05.17~2019.05.20 전체 시스템 연동 테스트
모듈,서버,어플리케이션이 통합 적으로 통신되는지 테스트 하
고 문제점을 해결한다.
2019.05.21~2019.06.03 단계별 테스트 케이스 수행 만들어진 유스케이스를 바탕으 로 테스트 케이스를 수행한다.