Skip to content

seonghuncode/schoolCapstone1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

schoolCapstone1

3학년2학기 캡스톤

웹웹.




💁 과제 선택

1. 과제명
→ 로봇청소기와 공기청정기 결합

2. 과제 수행 목적
    아래의 사례들은 로봇청소기와 공기청정기의 현주소이며 이를 개선하여 사용자가 로봇청소기와 공기청정기를 하나의 모듈로 사용할 수 있도록하는 서비스를 구축하기 위함
로봇청소기와 공기청정기와 관련된 학계의 연구 기록은 아래와 같다. 1.김태선(2020) [공기청정 기능을 가진 로봇청소기] – 경운대학교 2.박명철(2019) [아두이노를 이용한 공기청정 기능을 탑재한 로봇청소기] – 경운대학교 3.남택주(2020) [우리집 청소박사 ’로봇청소기’] – 기술표준원 4.정일균(2004) [멀티 로봇 청소기] – LG전자 위와 같은 연구 진행이 현재에도 활발하게 진행되고 있다는 것을 보여준다. 단순히 컴퓨터공학과 뿐이 아닌 다른 다양한 전공에서 로봇청소기와 공기청정기의 결합 혹은 동시사용에 관해 관심도가 존재하며, 정상적으로 결합 후 사용에 문제가 없다면 가정에서 사용하는 기기를 1개 줄일 수 있는 효과를 기대한다.

※향후 공기 청정기에 대한 시장 전망 다음은 공기청정 기능을 탑재한 생활가전에 대한 전자신문의 기사를 발췌했다. 변상근. <공기청정 기능탑재 생활가전 붐.. 청소로봇, 의류관리기, 시스템에어컨까지> 2018-10-28 (https://www.etnews.com/20181026000266) 다양한 생활가전에서 공기 청정 기술이 부가 기능을 넘어 제품을 프리미엄화하는 포인트로 활용되고 있다. 업계에 따르면 중국 로봇청소기 제조업체 에코백스는 올해 로봇청소기에 공기 청정 기능을 접목한 로봇청소기 '애트모봇(ATMOBOT) AA3'을 새해 초 국내 출시한다. 기존 생활가전 제품에도 공기 청정 기능 적용이 활발하다. 가정용 에어컨에 공기 청정 기능을 내장하는 것은 물론 다른 종류 제품에 공기청정기를 결합하기도 한다. 업계 관계자는 “겨울철을 앞두고 짙은 미세먼지가 이어지면 전자제품에 대한 공기청정 기능을 요구하는 소비자가 더 많아질 것”이라고 밝혔다.




👪 개발 팀 소개(팀명 : 로봇청정기)

이름 역할
개발 내용
유성훈 Web 서버에 저장된 데이터를 자세하게 통계 형식으로 보여주기 위한 웹 사이트 제작, 집안 내 하드웨어의 위치를 확인할 수 있는 웹 사이트 제작
김준석 Server, H/W 하드웨어를 이용하여 아두이노 및 아날로그 센서를 이용하여 하드웨어 구현, 집안 내 온습도, 미세먼지 측, 하드웨어와 서버 연동
윤성직 Raider Sensor 하드웨어의 맵핑 기술을 위해 Raider센서를 이용한 맵핑, 집안 내 하드웨어 위치 확인을 위한 Raider센서 네비게이션, 리눅스 마스터
한다영 DB mySQL을 통해 데이터베이스 설계 및 구축, Fast Api를 활용하여 서버 제작, 안드로이드와 웹에 보내주는 데이터를 위한 메소드 제작, 하드웨어에서 보내주는 데이터를 가져오는 메소드 제작
안노아 Android 서버에 저장된 데이터를 간단하게 통계 형식으로 보여주기 위한 안드로이드 UI, 사용자가 하드웨어를 안드로이드에서 조작할 수 있는 UI




📅 프로젝트 진행 일정

22.07.27 . ~ 22.11.16.




🛠 기술 스택

Web


Server, H/W


Raider Sensor


DB


Android




💡 연구 과정

[🌟웹 - 개발 설명]

Java 언어와 Spring Boot 프레임 워크를 사용하여 개발하였으며 개발 툴로는 Spring Tool Suit를 사용하여 개발하였습니다. Rest API를 통해 온도, 습도, 미세먼지, LED 색상의 위치에 대한 데이터를 요청하여 받아와 데이터를 가공하며 페이지를 동적으로 움직이기 위해 JSP를 사용하여 JSTL 문법을 함께 사용하여 페이지를 동적으로 움직이도록 구현하였습니다. 디자인의 경우 bootstrap과 tailwind를 사용하였고 폰트의 경우 폰트어썸에서 가지고 와 사용((https://fontawesome.com/)) 프로젝트를 진행하면서 Rest API에 요청으로는 회원가입 기능을 post 방식, DB에 저장된 모든 방에 대한 정보에 대한 요청은 get 방식, 로그인에 대한 요청은 get 방식, 방 이름 수정에 대한 요청은 put 방식, 특정 방을 찾는 요청의 경우 get 방식, 삭제의 경우 delete 방 식, DB에 저장된 사용자에 대한 정보 요청은 get 방식, 특정 방에 대한 정보 요청은 get 방식, 검색 기능에 대해서는 get 방식을 사용해서 rest API에 요청하여 사용했습니다. 이때 Rest API를 사용하면서 https로 요청할 경우 SSL 인증서가 신뢰하는 기관 인증서가 없거나 SSL/TLS 암호화 버전이 맞지 않는 경우 발생하는 오류 코드가 발생하여 정상적으로 요청이 진행되지 않았습니다. 이러한 문제를 해결하기 위해서는 key store에 신뢰하는 인증기관 인증서를 추가하거나 서버, 클라이언트 사이에 사용하는 TLS 버전을 동일하게 해주어야 하는데 이때 해결방안으로는 ignoreHttps파일을 만들어서 https 요청 시 오류를 무시하고 요청을 강제로 진행하는 코드를 작성하여 강제적으로 요청을 실행하도록 하여 문제를 해결하였습니다. 또한 Rest API를 통해 요청한 데이터를 가공하여 그래프로 나타내는 과정에 있어 처음에는 basic line chart API를 사용하였으나 사용이 간단하다는 이점을 제외하고는 여러 데이터의 통계를 나타내는 것에 있어 적합하지 않다고 판단되어 구글 차트 API를 사용하게 원형 그래프와 막대그래프로 나타내어 통계 그래프를 만들어 표현하였습니다.

[웹 - 개발 중 대표적인 이슈 해결 내용]
https요청에 대한 인증서 문제를 무시하고 요청을 보내는 코드
(※해결 방안에 대한 추가 자료)
Architecture Architecture
Rest API에 요청하는 방법(ex. 로그인을 요청하는 방법)
(해결 방안에 대한 추가 자료)
Architecture

[🌟안드로이 - 개발 설명]

안드로이드의 전반적 목표는 웹보다는 간단하며 편리하게 누구든 쉽게 사용할 수 있는 용도로 만드는 것으로 잡고 시작하였다. 웹과 안드로이드는 연동 되어있어 웹에서 사용하는 계정과 안드로이드에서 사용하는 계정은 같다. 따라서 어플 에서 가입한 계정으로 웹에서 로그인이 가능하며, 반대로 웹에서 가입한 계정으로 어플 에서 로그인이 가능하다. 이는 Fast API를 사용한 서버를 같이 이용하도록 주소 설정을 해 두었기 때문이다. 로그인에 성공하면 가장 먼저 공기청정기가 현재 위치한 곳의 정보를 서버에서 GET 방식으로 받게 되고 사용자는 온도, 습도, 미세 먼지 수치를 한 눈에 볼 수 있다. 이 외의 화면으로는 이동 방식 설정, 통계 값 확인, 기타 설정으로 구성되어 있어 홈 화면에서 네비게이션 바를 이용하여 편리하게 이동 가능하다. 공기청정기의 이동 방식 설정 화면에서는 공기청정기가 현재 위치가 깨끗하다고 느끼면 알아서 다른 방으로 이동하는 자동 방식, 임의로 설정한 시간마다 이동하는 시간별 이동 방식, 사용자가 지정한 방으로 이동하는 임의 지정 방식 총 세가지 중 하나를 선택하여 설정할 수 있다. 설정시 서버에게 POST 방식으로 값을 보내게 된다. 또한 지도를 확인하고 싶다면 ‘지도’ 버튼을 통하여 서버에게 GET 방식으로 지도 사진을 받아 화면에 띄어 확인할 수 있다. 특정 날짜들 사이의 평균 수치 값들을 보기 위해선 통계 화면에서 사용자가 통계를 보고싶은 특정 방 위치와 시작 날짜 및 종료 날짜를 입력하면 서버에게 GET 방식으로 사용자가 입력한 값에 따른 정보를 받게 된다. 받은 정보들을 평균 내어 화면에 나타내게 된다. 기타 설정에선 ‘방 이름 수정’과 ‘로그아웃’을 할 수 있다. 방 이름 수정은 말 그대로 방의 이름을 수정하는 기능이며, 원하는 방의 이름을 사용자 임의로 설정할 수 있다. 사용자가 입력한 값을 PUT 방식으로 서버에게 보내게되면 수정이 완료된다. 로그아웃 또한 클릭과 동시에 로그인 화면으로 돌아가며 로그아웃이 완료된다.


[🌟서버 - 개발 설명]

움직이는 로봇청소기 및 공기청소기를 제공함에 있어 사용자는 온도, 습도, 미세먼지 농도 등의 정보를 제공받아야 한다. 하드웨어, 웹, 안드로이드와 통신하기 위해 fastAPI를 사용하였다. fastAPI는 파이썬 표준 타입 힌트에 기초한 Python 3.6+의 API를 빌드하기 위한 웹 프레임워크이다. 코드의 변화에 따라 발생하는 요청/응답 스키마를 자동으로 문서화 해 제공하는 파이프라인을 제공해주며 비동기 처리를 기본적으로 지원하기 때문에 django, Flask보다 서버에서 유저에게 전송하는 속도, DB 데이터 입출력 속도 등에서 2배 이상의 퍼포먼스를 낸다는 장점이 있다. 다음은 API 구성이다.

NO Https Method URL 설명
1 POST /register/{login_id}/{login_pw}/{nickname}/{name}/{email}/{phone} 회원가입
2 POST /login/{login_id}/{login_pw} 로그인

웹(api 구성)
NO Https Method URL 설명
1 GET /userInfo/{login_id} 회원 정보 출력
2 GET /findRoomInfo/{room_name} 특정 방 출력
3 GET /findRoom/{login_id} id에 해당하는 방 목록 출력
4 GET /allRoomInfo 모든 방에 대한 정보 출력
5 GET /stat_web/{room_name}/{start}/{amount} 웹 통계 출력
6 GET /findDate/{searchText}/{room_name}/{start}/{amount} 특정 데이터 출력
7 GET /findFinedust/{searchText}/{room_name}/{start}/{amount} 특정 미세먼지 데이터 값 출력
8 GET /findTemp/{searchText}/{room_name}/{start}/{amount} 특정 온도 데이터 값 출력
9 GET /findHumidity/{searchText}/{room_name}/{start}/{amount} 특정 습도 데이터 값 출력
10 PUT /update_roomName/{old_room_name}/{new_room_name} 방 이름 수정
11 DELETE /delete_room/{room_name} 방 상세정보 삭제

하드웨어(api구성)
NO Https Method URL 설명
1 POST /addRoomInfo/{room_name}/{temp}/{humidity}/{finedust}/{ledcolor} 센서 값 입력

안드로이드(api구성)
NO Https Method URL 설명
1 GET /home/{login_id} 홈화면
1 GET /stat/{login_id}/{room_name}/{startdate}/{enddate} 통계 화면
2 GET /stat/{login_id}/{room_name}/{startdate}/{enddate} 통계 화면
3 GET /getRoom/{login_id} 방 이름 출력
4 PUT /update_roomName/{login_id}/{old_room_name}/{new_room_name} 방 이름 수정
5 POST /move/{login_id}/{move_select}/{move_set}/{room_name} 이동화면 출력

개체-관계 모델(ERD)
ERD

[🌟하드웨어 - 개발 설명]

캡스톤 프로젝트 로봇/공기청정기를 만들기 위하여 아두이노를 사용하기로 결정하였습니다. 아두이노의 온습도센서, 미세먼지 센서를 통하여 서버로 온도, 습도, 미세먼지등의 정보를 전송하고, LED 불빛을 이용하여 하드웨어에서도 미세먼지에 따라 불빛을 다르게 하여 확인할 수 있도록 만들었습니다. 이동에는 아두이노 모터와 바퀴, 모터드라이버, 적외선 센서를 이용하여 바퀴의 경우 4개를 사용하여 안정성을 더하였고, 2개의 바퀴를 하나의 모터드라이버에 연결하여 앞뒤 바퀴가 똑같이 움직일 수 있도록 설계 진행하였습니다. 이동하다가 적외선 센서에 장애물이 감지되었을 때 후퇴기동 및 방향전환을 할 수 있도록 만들었습니다. 이후 필터와 펜을 통하여 공기청정을 가능하게 만들고, 흡입 모터를 이용하여 청소기의 기능또한 가능하게 제작하였습니다. 전원 같은 경우에는 리튬 이온배터리를 사용하여 아두이노의 전원 및 부족한 모터드라이버의 전원까지 부족하지 않도록 연결 하였습니다. 아두이노 메가에서 얻어온 온도 값, 습도 값, 미세먼지 값을 WeMos D1로 전송하고 D1을 이용해 서버와 통신하고 서버에서 DB에 저장할 데이터를 위한 온도 값, 습도 값, 미세먼지 값, LED 색깔을 서버로 전송 합니다.

이름 사진
Arduino Mega 2560 ERD
브레드보드 400홀 ERD
바퀴 ERD
서브모터 ERD
흡입 모듈 ERD
적외선 감지 센서 ERD
Raider 센서 ERD
리튬 배터리(6) ERD
미세먼지 측정 센서 ERD
LCD ERD
D1 ERD
쿨링팬 ERD
사진 설명
ERD 포인트 클라우드로 장애물 인식까지 되는 것을 확인후에 포인트 클라우드를 기반으로 맵핑을 진행하기 위하여 SLAM을 사용
SLAM은 초기화, 예측, 보정, 위치 추정, 재추출의 과정으로 이루어지며 다음 그림과 같이 작동
※ SLAM이란 Simultaneous Localization And Mapping으로 지도를 그림과 동시에 로봇의 위치를 추정하는 것을 의미합니다. 쉽게말해 로봇 스스로 돌아다니며 센서를 통해 얻은 데이터로 스스로 지도를 작성하는 것입니다.
ERD 라즈베리파이3에도 ROS 및 패키지를설치 이후, 라이다 센서, 아두이노를 통하여 전원 및 서버 연결을 진행하고, SSH를 통하여 라즈베리파이와 Virtual Box내의 ubuntu ROS와 연결 진행
이후 전원을 켜고 LIDar sencer로 맵핑 진행




💡 도출 결과 내용

🌟웹
메인화면
Architecture
로그인 여부에 따른 기능 설명
→ 로그인전
Architecture
로그인 전 기능 – 사용가능한 버튼들을 보여준다.
1. 메인 메뉴로 이동
2. 회원가입 기능
3. 로그인 기능
→ 로그인후
Architecture
로그인 후 기능 – 사용가능한 버튼들을 보여 준다.
1. 메인 메뉴로 이동
2. 로그아웃 기능
3. 회원 정보, 방에 대한 간단 정보 열람, 방 이름 수정
4. 방 온도, 미세먼지, 습도, 통계 자료 리스트 + 해당 방에 대한 전체 데이터 확인
회원가입
Architecture
로그인
Architecture
정보
1. 현재 로그인된 회원의 정보와 방에 대한 정보를 보여주는 기능
Architecture
2. 방에 대한 정보 수정 기능
Architecture
통계정보
1. 전체 방에 대한 통계치
Architecture
2. 특정 방에 대해서 데이터 검색 기능
Architecture
3. 데이터 검색
Architecture
4. 특정 방에 대한 전체 데이터 + 맵핑된 지도
Architecture
※설명
1. 데이터 정보 에서 특정 방을 선택 하면 해당 방에 저장된 온도, 습도, 미세먼지, led에 대해 저장된 모든 데이터 제공.
2. 또한 해당 방에 대해 맵핑된 지도를 보여주어 방의 구조를 사용자에게 제공
(위의 지도 경우 하드웨어가 C403을 돌아다니며 맵핑한 정보를 서버로부터 받아 나온 지도)
데이터 통계 그래프로 보기
Architecture
특정 방에 대한 저장된 정보 모두 초기화 시키기
Architecture

🌟안드로이드
회원가입
Architecture Architecture
로그인
Architecture Architecture
홈화면
Architecture
미세먼지 매우 나쁨일 때
Architecture
미세먼지 나쁨일 때
Architecture
미세먼지 좋음일 때
이동화면
Architecture
자동 선택
Architecture
시간별 선택
Architecture
임의 지정
Architecture
지도 선택
통계 화면
Architecture
이틀치 평균
Architecture
닷새치 평균
Architecture
시작날짜가 종료 날짜보다 클 경우
설정 화면
Architecture Architecture

🌟하드웨어
제작 과
Architecture Architecture




💻 과제 수행 후기

로봇청정기는 로봇청소기와 공기청정기를 어떻게 결합해서 가정에서 사용하는 하드웨어를 하나 줄일 수 있는 방법이 있지 않을까 라는 생각으로 출발하게 되었습니다.
각 학년별로 성취한 개인의 교과목 수준에 따라 역할을 분배하고, 이를 통합하여 하나의 결과물을 도출해내는 것을 이번 과제의 요인으로 생각합니다. 각 분야에서 개발을 진행하고 이를 통합해 내는 것은 쉬운 일이 아닙니다. 연결 수단을 떠올려야 하며, 서로의 규격을 맞출 줄 알아 야하고, 문제 발생 시 원인 발생 요인도 많이 늘어납니다.
이러한 많은 단점들이 존재하지만 같은 학년으로 팀을 꾸렸을 때의 장점도 발생합니다. 팀 프로젝트를 수행하기 위해서 각 분야에 전문적인 지식을 요구하며, 맡은 능력단위에 책임이 생겨 완벽함을 추구하고, 대인관계 및 협력 능력을 키울 수 있습니다. 학부가 끝난 뒤 사회에서 업무를 수행함에 있어서 항상 팀별로 움직여야 하는 요구사항을 캡 스톤으로 꾸려낼 수 있다는 점은 큰 이점이라고 생각합니다.
배재대학교 컴퓨터공학과에서 서버 관련한 전공 지식으로는 네트워크 프로그래밍, 리눅스, JSP 등의 교과목이 존재하지만 부족한 배경지식이 많았습니다. FAST API를 사용하여 서버를 구성함에 있어서 전공에서 배우지 못한 지식을 많이 활용해야 했고, 공개형 서버를 구성함에 있어서 무차별 공격에 의한 보안과 트래픽 과다로 인한 서버가 죽는 현상도 대비해야 했습니다. 보안 지식이 적은 학부의 한계로는 어려운 점이 많았고 다방면에서 모든 지식을 염두 하며 공부해야 하는 시간이 늘어났습니다. Fast Api를 이용하여 서버를 구성하며 하드웨어와 통신할 때 사용하는 규약과 정책들을 검토 했어야 했습니다.
Raider Sensor를 사용함에 있어서는 처음 들어본 리눅스에서만 사용되는 ROS라는 기술도 사용해야 했습니다. 이러한 많은 문제들을 하나씩 하나씩 팀원들 끼리 소통하고 의지하며 해결해 나가면서 개인 능력과 팀 협동능력을 기르는 귀중한 시간이었습니다.




🔍 참고 사항

[Java] HttpsURLConnection (tistory.com) HttpsURLConnection을 이용한 통신시 SSL 인증서 수동으로 지정하는 방법 | (osujin.github.io) Tomcat SSL 적용시 https로 자동 리다이렉트 설정하기 (tistory.com) SSL 인증서 없이 https 통신하는 법 예제 (tistory.com) htttps 호출시 SSL 무시하여 오류안나게 하는법 :: 나를 정리하는 공간 (tistory.com)

About

3학년2학기 캡스톤

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published