"월요일이 좋아 - Smart Window Device"의 두 판 사이의 차이
EmSys2024C (토론 | 기여) (→동작 시나리오) |
Mie2021205 (토론 | 기여) (→프로젝트의 배경 및 기대효과) |
||
(다른 사용자 한 명의 중간 판 53개는 보이지 않습니다) | |||
19번째 줄: | 19번째 줄: | ||
===프로젝트의 배경 및 기대효과=== | ===프로젝트의 배경 및 기대효과=== | ||
− | Iot 기술의 발달로 많은 가정에서 전등과 TV 등 많은 가구 및 가전의 자동화 혜택을 누리고 있다. 그러나 창문의 경우 아직도 수동으로 열고 닫아야 하고, 기존의 스마트 창문의 경우 대부분 새로운 집에 직접 빌트인되어있다. 따라서 우리는 창호에 장착할 수 있는 스마트 디바이스를 만들어 사용자의 IOT경험을 극대화시키는 것을 목표로 한다. 또한 미세먼지 경보 발령 빈도가 잦아지고, 코로나19의 확산으로 인하여 적절한 시기에 행해지는 환기의 중요성이 커지는 요즘, 미세먼지를 체크하여 자동으로 여닫아 사용자의 건강 증진에도 기여하는 것을 목표로 한다. 이 프로젝트를 통해 IOT 개발에 대해 더 학습하고 실습할 수 있는 기회를 얻을 수 있을 것으로 생각된다. 이 장치를 통해 기존의 창문에서 스마트 창문을 사용할 수 있고, 가정 혹은 카페나 사무실 등에서 실내 정보를 확인해 공간별로 적합한 실내 환경을 조성할 수 있고 이를 통해 사용자의 건강을 증진할 수 있을 것으로 기대한다. 또한 창문 조작의 편의성을 증대하고 필요에 따라 사용자의 프라이버시를 지킬 수 있을 것으로 기대된다. | + | Iot 기술의 발달로 많은 가정에서 전등과 TV 등 많은 가구 및 가전의 자동화 혜택을 누리고 있다. 그러나 창문의 경우 아직도 수동으로 열고 닫아야 하고, 기존의 스마트 창문의 경우 대부분 새로운 집에 직접 빌트인되어있다. 따라서 우리는 창호에 장착할 수 있는 스마트 디바이스를 만들어 사용자의 IOT경험을 극대화시키는 것을 목표로 한다. 또한 미세먼지 경보 발령 빈도가 잦아지고, 코로나19의 확산으로 인하여 적절한 시기에 행해지는 환기의 중요성이 커지는 요즘, 미세먼지를 체크하여 자동으로 여닫아 사용자의 건강 증진에도 기여하는 것을 목표로 한다. 이 프로젝트를 통해 IOT 개발에 대해 더 학습하고 실습할 수 있는 기회를 얻을 수 있을 것으로 생각된다. 이 장치를 통해 기존의 창문에서 스마트 창문을 사용할 수 있고, 가정 혹은 카페나 사무실 등에서 실내 정보를 확인해 공간별로 적합한 실내 환경을 조성할 수 있고 이를 통해 사용자의 건강을 증진할 수 있을 것으로 기대한다. 또한 창문 조작의 편의성을 증대하고 필요에 따라 사용자의 프라이버시를 지킬 수 있을 것으로 기대된다. |
===프로젝트 개발 목표=== | ===프로젝트 개발 목표=== | ||
[[파일:Monday goal tree.png|800픽셀|섬네일|가운데|목적 계통도]] | [[파일:Monday goal tree.png|800픽셀|섬네일|가운데|목적 계통도]] | ||
− | 편의성, | + | 우리의 프로젝트 개발 목표를 목적 계통도로 나타내면 다음과 같다. |
+ | *편의성 | ||
+ | :직관적이며 편리한 조작을 목표로 한다. 적절한 창문의 개폐 알고리즘의 적용을 통하여 실내 대기 질에 반응해 창문을 자동으로 여닫을 수 있고, 센서로부터 받은 정보를 연결된 어플로 전달하여 사용자가 쉽게 볼 수 있다. 스마트폰 어플리케이션은 하위 컨텍스트 메뉴의 개수를 줄이고 깔끔하게 디자인하여 가능한 한 적은 | ||
+ | 터치 횟수로 창문을 여닫을 수 있다. | ||
+ | *호환성 | ||
+ | :장치와 실제 창문이 잘 결합되어 작동하도록 단단하게 고정되고, 스펙 내의 각각 다른 창문의 크기에도 전부 대응하여야 한다. 차후 소프트웨어적인 기능의 추가가 가능하다. | ||
+ | *성능 | ||
+ | :내부 공기 질의 측정과 창문의 조작이 정확하여야 한다. 제품은 너무 비싸면 안되며 작동에 에러가 일어나지 않고 안정적으로 동작하여야 한다. 오버스펙을 지양하고 비교적 저렴한 센서와 구동부, 제어장치를 사용하여 단가를 낮춘다. | ||
==동작 시나리오== | ==동작 시나리오== | ||
[[파일:어플 시나리오.png|800픽셀|섬네일|가운데|어플 시나리오]] | [[파일:어플 시나리오.png|800픽셀|섬네일|가운데|어플 시나리오]] | ||
+ | :어플리케이션의 동작 시나리오는 다음과 같다. 어플리케이션을 실행하면 로그인 화면이 나오고, 라즈베리 파이와 연결에 성공하면 메인화면으로 가게 된다. 메인화면에선 창문 자동모드 토글과 PDLC 토글, 수동모드 제어 기능이 있다. 각 기능에 해당하는 명령어가 라즈베리파이 서버로 전송된다. | ||
+ | |||
+ | [[파일:Monday flowchart.png|800픽셀|섬네일|가운데|메인 제어 알고리즘 플로우차트]] | ||
+ | :우리가 사용한 창문 자동모드 제어 알고리즘은 다음과 같다. 내부 미세먼지 농도가 외부 미세먼지 농도보다 높은 경우, 또는 3분간의 내부 미세먼지 농도 증가 속도를 이용한 외삽법으로 예상되는 내부 미세먼지 농도가 외부 미세먼지 농도보다 높은 경우 창문을 연다. 이때 외부 미세먼지 농도가 너무 낮아서 의도치 않게 창문이 열리는 경우를 방지하기 위해 문턱값인 30µg/m^3 이상일 때만 창문이 열리도록 한다. 내부 미세먼지 농도는 PM2.5와 PM10으로 나뉘는데, 두 수치 모두 비교한다. 또한 내부 이산화탄소 농도가 800ppm 이상일 때 창문이 열리도록 한다. 창문이 열린 후 5분간 실내 대기 질의 변화가 10 이하일 때 실내와 실내 대기 교환이 정상상태에 이르렀다고 판단하고 닫게 된다. PM2.5, PM10, 이산화탄소 중 하나라도 위의 조건을 만족하면 창문이 열리고, 세가지 조건에 대해 창문을 닫는 판단을 하면 그때 닫게 된다. | ||
==구현 내용== | ==구현 내용== | ||
35번째 줄: | 46번째 줄: | ||
===구동부 설계 및 구현=== | ===구동부 설계 및 구현=== | ||
− | 가.랙 앤 피니언 | + | :가. 랙 앤 피니언 |
− | :랙 앤 피니언은 회전운동을 직선운동으로 바꾸는데 사용하는 | + | ::랙 앤 피니언은 회전운동을 직선운동으로 바꾸는데 사용하는 기어이다. |
− | :이를 이용하여 창문의 여닫음 구동을 설계하였다. | + | ::이를 이용하여 창문의 여닫음 구동을 설계하였다. |
− | :기어설계는 표준규격에 맞추어서 3D캐드로 설계하였다. | + | ::기어설계는 표준규격에 맞추어서 3D캐드로 설계하였다. |
− | : | + | ::정면도, 윗면도, 측면도와 배치도를 나타낸다. |
− | [[파일:랙앤피니언도면.png|800픽셀|섬네일|가운데|< | + | [[파일:랙앤피니언도면.png|800픽셀|섬네일|가운데|<CAD>]] |
− | :피니언 설계스펙은 다음과 | + | ::*피니언 |
− | pinion 피치경 : 30mm | + | :::피니언 설계스펙은 다음과 같다. |
− | ::m : 1.5 | + | :::pinion 피치경 : 30mm |
− | ::z : 20 | + | :::m : 1.5 |
− | ::원주 : 94.2mm | + | :::z : 20 |
− | :피니언이 랙 끝까지 이동 시 필요한 회전수는 1.8회전이고 시간은 3.1 sec이다. | + | :::원주 : 94.2mm |
− | : | + | :::피니언이 랙 끝까지 이동 시 필요한 회전수는 1.8회전이고 시간은 3.1 sec이다. |
− | [[파일:랙앤피니언확대.png| | + | ::설계된 랙 앤 피니언은 다음과 같다. |
− | :나 | + | [[파일:랙앤피니언확대.png|500픽셀|섬네일|가운데|<CAD_랙앤피니언>]] |
+ | ::3d프린터 제작 | ||
+ | [[파일:랙앤피니언.png|500픽셀|섬네일|가운데|<3D프린트_랙앤피니언>]] | ||
+ | |||
+ | :나) 아두이노 | ||
::구동부 회로는 다음 그림과 같이 구현되었다. | ::구동부 회로는 다음 그림과 같이 구현되었다. | ||
− | + | [[파일:구동부.png|800픽셀|섬네일|가운데|<구동부회로>]] | |
− | + | ::*모터부 | |
− | + | :::3A모터 드라이버 AM-DC1-3D 와 모터 RB-35GM+Encoder 21TYPE 로 구성되어 있으며, 12V 배터리로부터 전원을 인가받아 아두이노로부터 명령받은 대로 동작한다. | |
− | :::*PDLC부 | + | :::엔코더를 이용해 제어부에서 측정하고 계산한 rate에 따른 모터 회전 수를 조절할 수 있도록 설계하였다. |
− | + | ::*PDLC부 | |
− | :::*블루투스 Client | + | :::스마트필름 (PDLC), DC_DC 가변 컨버터, MOSFET IRF520 모듈로 구성되어 있으며, 12V 배터리-인버터 로부터 전원을 인가받는다. 아두이노에서 신호를 받아 MOSFET을 통해 on/off 를 제어한다. |
− | + | :::전원이 인가되면 필름이 투명해지며, 전원이 인가되지 않는경우 필름이 다시 불투명해진다. | |
− | + | ::*블루투스 Client | |
− | + | :::HC-06 모듈을 사용하여 제어부와 통신한다. | |
− | + | ::*winduino.INO | |
− | + | :::아두이노에 내장된 명령어는 다음과 같다. | |
− | + | ::::명령어 '1' = 자동모드 on | |
− | + | ::::명령어 '2' = 자동모드 off | |
− | + | ::::명령어 '3' = 자동모드 open | |
− | + | ::::명령어 '4' = 자동모드 close | |
− | + | ::::명령어 '5' = PDLC on | |
− | + | ::::명령어 '6' = PDLC off | |
− | + | ::::명령어 '7' = 수동모드 open 또는 측정 start | |
− | + | ::::명령어 '8' = 수동모드 close | |
− | + | ::::명령어 '9' = 수동모드 stop 또는 측정 end | |
− | ::[[파일:정면샷.jpg|500픽셀| | + | ::::명령어 'else' = 측정된시간*모터회전수 만큼의 rate를 가져온다. |
− | + | ::*기구부 | |
− | ::[[파일:내부 정면.png| | + | |
− | + | :::[[파일:정면샷.jpg|500픽셀|가운데]] | |
+ | :::기구부의 경우 22cm x 13cm x 7cm 의 상자형태로 제작하였다. 전면부는 경첩을 통해 여닫이 구조로 제작, 창문과의 접합부의 경우 판을 하나 덧대어 접합 가능한 표면적을 넓게 하였다. | ||
+ | :::창문과의 접합부의 경우 양면젤테이프/나사못고정 두가지 경우를 두었으며, 프로토타입 제작에서는 양면 젤테이프를 이용하기로 하였다. | ||
+ | :: | ||
+ | :::[[파일:내부 정면.png|500픽셀|가운데]] | ||
+ | :::내부 회로 구성은 다음과 같다. | ||
+ | :::후면부 패널에 회로를 고정시키고, 모터는 상부에 고정하였다. 배터리는 전면부 개방시 가장 앞에두어 후에 배터리 교체가 용이하도록 구성하였다. | ||
===제어부 설계 및 구현=== | ===제어부 설계 및 구현=== | ||
라즈베리 파이 제어 프로그램 | 라즈베리 파이 제어 프로그램 | ||
− | + | ::제어부의 회로는 다음과 같이 구성된다. | |
+ | ::[[파일:제어부.png|500픽셀|가운데]] | ||
*미세먼지 센서 및 이산화탄소 센서 연결 | *미세먼지 센서 및 이산화탄소 센서 연결 | ||
− | ::[[파일:monday_rasppi.jpg|300픽셀]] | + | ::[[파일:monday_rasppi.jpg|300픽셀|가운데]] |
::미세먼지 센서 PMS7003은 라즈베리 파이의 GPIO 핀 중 UART 1을 통해 연결하였다. 이산화탄소 센서 MHZ19는 라즈베리 파이의 GPIO 핀 중 UART 0을 통해 연결하였다. 시리얼 통신을 이용해 값을 받아와서 메인 제어 프로그램인 server_main.py에서 값을 저장하도록 한다. | ::미세먼지 센서 PMS7003은 라즈베리 파이의 GPIO 핀 중 UART 1을 통해 연결하였다. 이산화탄소 센서 MHZ19는 라즈베리 파이의 GPIO 핀 중 UART 0을 통해 연결하였다. 시리얼 통신을 이용해 값을 받아와서 메인 제어 프로그램인 server_main.py에서 값을 저장하도록 한다. | ||
*미세먼지 데이터 OpenApi 사용 | *미세먼지 데이터 OpenApi 사용 | ||
91번째 줄: | 113번째 줄: | ||
*센서 값 처리 | *센서 값 처리 | ||
::받아온 센서의 데이터에 노이즈가 있는 경우를 대비하여 이동평균필터를 센서값에 적용하였다. 최근 10초간의 데이터의 평균값을 저장하는 리스트를 운영하게 된다. 이 리스트는 최대 300개의 원소를 가지고 있어 최근 5분간의 데이터를 확인할 수 있다. | ::받아온 센서의 데이터에 노이즈가 있는 경우를 대비하여 이동평균필터를 센서값에 적용하였다. 최근 10초간의 데이터의 평균값을 저장하는 리스트를 운영하게 된다. 이 리스트는 최대 300개의 원소를 가지고 있어 최근 5분간의 데이터를 확인할 수 있다. | ||
− | |||
− | |||
*수동 제어 모드 | *수동 제어 모드 | ||
::어플리케이션으로부터 수동으로 창문을 열고 닫거나, PDLC 필름을 켜고 끄는 명령을 받으면 구동부인 아두이노에 명령을 전달한다. | ::어플리케이션으로부터 수동으로 창문을 열고 닫거나, PDLC 필름을 켜고 끄는 명령을 받으면 구동부인 아두이노에 명령을 전달한다. | ||
99번째 줄: | 119번째 줄: | ||
===어플리케이션 설계 및 구현=== | ===어플리케이션 설계 및 구현=== | ||
− | 나. | + | 어플리케이션은 사용자에게 인터페이스를 제공하여 실내, 실외 미세먼지와 실외 온도를 나타내며, 창문과 pdlc 필름을 제어할 수 있는 기능을 보기 쉽게 제공한다. 소켓통신을 통해 실내 미세먼지 데이터를 받고, 창문과 pdlc 필름을 제어하는 신호를 라즈베리파이에 전달한다. 실외 미세먼지와 기온정보는 API를 통해 정보를 제공한다. |
+ | :가.화면 설계 | ||
+ | :*연결 화면 | ||
+ | [[파일:연결 화면.png|800픽셀|섬네일|가운데|연결화면]] | ||
+ | ::연결 화면은 연결하기 버튼을 누르면 라즈베리파이 서버와 연결을 시도하여 라즈베리파이와 소켓통신이 성공하면 메인화면으로 화면이 넘어간다. 실패할 경우 어플은 재시작 된다. | ||
+ | |||
+ | :*메인 화면 | ||
+ | |||
+ | [[파일:메인 화면.png|800픽셀|섬네일|가운데|메인화면]] | ||
+ | |||
+ | ::메인 화면은 각종 api를 통한 외부 미세먼지 수치, 온도와 라즈베리파이에서 제공하는 실내 미세먼지, 이산화탄소 수치를 확인할 수 있다. 실외 정보는 api를 통해 정보를 받아와 첫번째(측정주소), 두번째 섹션(외부 기온)과 세번째(미세먼지)오른쪽 섹션에 출력하고 실내 정보는 연결 화면에서 소켓통신을 성공하면 서버에서 주는 데이터를 사용해 세번째(미세먼지), 네번째(이산화탄소 농도)섹션 왼쪽에 출력한다. 이때 2번째 섹션은 정시 근처에서 데이터를 받을 경우 동네예보 실황정보 에러로 Null값이 반환되기 때문에 해당 상황은 "예보중"이라는 문구가 출력된다. pdlc 제어와 창문 자동 모드는 버튼을 클릭하여 제어 신호를 서버로 전성한다. 창문 수동 모드 버튼을 클릭할 경우 창문 제어 화면으로 이동한다. 화면 제일 하단에는 공공데이터 api의 저작권을 표시해 두었다. | ||
+ | ::pdlc 제어 | ||
+ | [[파일:Pdlconoff.png|700픽셀|섬네일|가운데|pdlc 제어]] | ||
+ | :: 창문 자동 모드 | ||
+ | [[파일:창문자동모드.png|700픽셀|섬네일|가운데|창문 자동 모드]] | ||
+ | |||
+ | |||
+ | :나.API | ||
+ | [[파일:api 개략도.png|700픽셀|섬네일|가운데|API 개략도]] | ||
+ | ::api는 다음과 같이 수행된다. 단말기에서 GPS 신호인 경위도를 카카오 위치 API에 넣어 TM좌표를 반환받는다. 이 좌표를 다시 동네예보 API와 미세먼지 측정소명API에 사용한다. 동네예보 API에서는 해당 지역 실시간 날씨 정보가 반환되고, 측정소명 API에서는 해당 좌표에서 가장 가까운 측정소명이 반환된다. 측정소명은 다시 미세먼지 API에 입력되고 미세먼지 데이터를 반환 받는다. | ||
+ | |||
+ | |||
+ | :다.소켓 통신 및 제어신호 | ||
+ | [[파일:제어 신호 리스트.png|700픽셀|섬네일|가운데|제어 통신 리스트]] | ||
+ | ::라즈베리파이와 어플은 소켓 통신을 통해 연결되고 어플은 클라이언트 역할을 한다. 사용자가 어플을 통해 디바이스를 제어하기 때문에 사용자가 원하는 제어가 있을 경우 해당 제어 신호를 위와 같이 서버로 보내게 된다. | ||
==프로젝트 결과== | ==프로젝트 결과== | ||
===최종 결과물=== | ===최종 결과물=== | ||
+ | [[미디어:Monday motor measurement.mp4]] | ||
+ | *어플리케이션을 통해 창문의 개폐를 조절할 수 있다. 길이 측정 시작 버튼을 누른 뒤 창문이 전부 열리면 길이 측정 종료 버튼을 눌러 측정을 종료한다.그동안 창문이 얼마나 열렸는지를 계산하여 디바이스가 저장하게 된다. | ||
+ | [[미디어:Monday automode open.mp4]] | ||
+ | *집안의 미세먼지 농도가 상승된 상태일 경우 자동모드에서 집안 대기질이 안좋다고 판단하여 자동으로 창문을 열게 된다. | ||
+ | [[미디어:Monday automode close.mp4]] | ||
+ | *집안의 미세먼지 농도가 5분동안 10 이상 하락하지 않아 자동모드에서 정상상태에 돌입했다고 판단하여 자동으로 창문을 닫게 된다. | ||
+ | [[미디어:Monday PDLC.mp4]] | ||
+ | *어플리케이션으로 창문의 PDLC 필름을 제어하는 모습 | ||
+ | |||
+ | 프로젝트 하드웨어 결과물 | ||
+ | :*구동부 내부 | ||
+ | [[파일:내부 정면.png|섬네일|가운데|구동부 내부]] | ||
+ | |||
+ | :*구동부 기어 | ||
+ | [[파일:랙앤피니언.png|섬네일|가운데|구동부 기어]] | ||
+ | |||
+ | :*제어부 및 센서 | ||
+ | [[파일:Monday rasppi.jpg|섬네일|가운데|제어부 및 센서]] | ||
+ | |||
+ | :*어플리케이션 | ||
+ | [[파일:실제어플.jpg|섬네일|가운데|어플]] | ||
+ | |||
− | |||
− | + | 오픈소스 | |
+ | :작업한 최종 자료는 아래의 링크에 존재 | ||
+ | https://github.com/gksl2577/monday.git | ||
===미구현 내용=== | ===미구현 내용=== | ||
116번째 줄: | 183번째 줄: | ||
===평가항목=== | ===평가항목=== | ||
− | + | [[파일:Monday evaluation.png]] | |
− | *평가 | + | |
− | + | *시나리오 정상 작동 여부 평가 | |
− | + | :자동모드 시나리오대로 창문이 작동하는지 반복실험(20회)를 진행한다. | |
− | *평가 | + | |
− | *평가 | + | *기상 데이터 파싱 정확도 평가 |
− | + | :최근 6시간 이내의 인근 지역 기상 데이터 정보를 받아오는지 반복실험(20회)를 진행한다. | |
− | + | ||
− | * | + | *통신의 안정성 평가 |
− | + | :어플리케이션- 라즈베리파이-아두이노 간의 통신이 끊기지 않는지 반복실험(20회)를 진행한다. | |
− | + | ||
− | *평가 | + | *창문 조작 정확도 평가 |
− | + | :창문이 원하는 위치로 정확하게 조작되는지 반복실험(20회)를 진행한다. | |
− | *평가 | + | |
− | + | *디바이스의 안정적 부착 여부 평가 | |
− | + | :작동 도중 디바이스가 안정적으로 부착되는지 반복실험(20회)를 진행한다. | |
− | *평가 | + | |
− | + | *창문 조작 속도 평가 | |
+ | :창문의 개폐 조작에 어느정도 시간이 걸리는지 반복실험(20회)를 진행한다. | ||
+ | |||
+ | *센서 반응속도 평가 | ||
+ | :센서가 실내 공기 변화에 반응하는 데 어느정도 시간이 걸리는지 반복실험(20회)를 진행한다. | ||
===평가결과=== | ===평가결과=== | ||
+ | *시나리오 정상 작동 여부 평가 | ||
+ | 자동모드 시나리오대로 창문이 작동하는지 20회 테스트 결과 테스트 케이스 전부 작동하는 모습을 확인하였다. | ||
+ | |||
+ | *기상 데이터 파싱 정확도 평가 | ||
+ | 어플리케이션으로부터 가장 가까운 관측소의 데이터를 받아와 최근 1시간 이내의 대기오염 데이터를 받아올 수 있었다. 평가 결과 20회 전부 Api 호출에 성공하였다. | ||
+ | |||
+ | *통신의 안정성 평가 | ||
+ | 어플리케이션에서 명령어를 보내면 라즈베리파이를 통해 아두이노까지 정상 전달되는지 여부를 20회 테스트 하였다. 20회 전부 전달에 성공하였다. | ||
+ | |||
+ | *창문 조작 정확도 평가 | ||
+ | 창문이 원하는 위치에 오차범위 10% 이내로 조작되는지를 평가하였다. 이를 위해서 창문 모터 회전시간 측정 기능을 구현하였고 실험값을 통한 오프셋을 구해 창문의 길이에 맞게 움직이도록 하였다. 창문을 특정 비율만큼 여는 기능은 미구현되어 달성하지 못하였고, 끝까지 열거나 닫는 경우만 구현되었는데 이 경우 오차범위 1cm(2%)이내로 20회 동작하였다. | ||
+ | |||
+ | *디바이스의 안정적 부착 여부 평가 | ||
+ | 창문의 개폐 동작 도중 디바이스가 떨어지거나 진동 등이 있는지를 확인하였다. 20회 테스트 결과 전부 안정적으로 부착되어있었다. | ||
+ | |||
+ | *창문 조작 속도 평가 | ||
+ | 창문의 개폐 조작에 걸린 시간을 20회 반복 측정하였다. 평가결과 평균 2.16초로 개발 목표치인 5초 이내를 달성하였다. | ||
+ | |||
+ | *센서 반응속도 평가 | ||
+ | 센서가 실내 공기 변화에 반응하는 데 걸린 시간을 측정하였다. 오염의 발생지점과 센서의 거리에 따라서 결과가 달라졌는데, 센서부에 사용할 시연용 상자 내에서 오염을 발생시켰을 경우 메인 프로그램이 리프레시되는 최소 주기마다 반응하여 평균 1초 이내로 개발 목표치를 달성하였다. | ||
==느낀점== | ==느낀점== | ||
141번째 줄: | 232번째 줄: | ||
:노*하 : 프로젝트가 끝나감에 따라 올해 1학기가 파노라마처럼 생각이 났습니다. 처음에 내장형 프로젝트 조원을 구하고, 처음 조원을 만나 주제를 정하였습니다. 저희 조는 주제를 정하는 과정에서 정말 많은 고민을 하였고 여러가지 얘기도 오갔습니다. 그리고 교수님 피드백을 받게 되었고 그리하여 Smart Window Device라는 주제를 선정하게 되었습니다. 어플리케이션, 다양한 센서제어, 공공데이터 API, 기어 설계 등등 정말 다양한 작업을 하기로 하여서 진행과정에서 서로 토론을 많이 하였습니다. 작업에서 해야 하는 내용이 다르기 때문에 프로젝트를 진행함에 있어서 분업을 중요하게 생각하였습니다. 그래서 서로 원하는 분업을 하게 되었고 문제가 발생하였을 떄 서로 모여서 고민하고 조사하여 해결하기도 하였습니다. 짧지만 여러가지를 많이 배운거 같습니다. 실제로 회사에 들어가게 되어서 프로젝트를 하게 된다고 한다면 무슨 문제가 발생할 지 모르기 때문에 마감일보다 더 여유롭게 계획해야한다고 느꼈습니다. 또한 이런 중요한 프로젝트의 팀장으로써 조원들의 사기를 올려주려고 노력하였으며 팀장이라는 무거운 자리에서 역할에 대해 알게 된거 같아서 좋은 경험이었습니다. 제가 많이 부족했지만 저를 믿고 따라주고 너무 잘해준 조원들에게 너무 고맙고 진행해가는 과정에서 교수님과 조교님들이 좋은 피드백을 주시고 방향을 잡는데 도움을 많이 주셔서 너무 감사했습니다. 만약에 다시 프로젝트의 팀장을 할 수 있는 기회가 있다면 이번보다는 더 안정적이고 완성도 있는 프로젝트를 진행할 수 있을거 같습니다. | :노*하 : 프로젝트가 끝나감에 따라 올해 1학기가 파노라마처럼 생각이 났습니다. 처음에 내장형 프로젝트 조원을 구하고, 처음 조원을 만나 주제를 정하였습니다. 저희 조는 주제를 정하는 과정에서 정말 많은 고민을 하였고 여러가지 얘기도 오갔습니다. 그리고 교수님 피드백을 받게 되었고 그리하여 Smart Window Device라는 주제를 선정하게 되었습니다. 어플리케이션, 다양한 센서제어, 공공데이터 API, 기어 설계 등등 정말 다양한 작업을 하기로 하여서 진행과정에서 서로 토론을 많이 하였습니다. 작업에서 해야 하는 내용이 다르기 때문에 프로젝트를 진행함에 있어서 분업을 중요하게 생각하였습니다. 그래서 서로 원하는 분업을 하게 되었고 문제가 발생하였을 떄 서로 모여서 고민하고 조사하여 해결하기도 하였습니다. 짧지만 여러가지를 많이 배운거 같습니다. 실제로 회사에 들어가게 되어서 프로젝트를 하게 된다고 한다면 무슨 문제가 발생할 지 모르기 때문에 마감일보다 더 여유롭게 계획해야한다고 느꼈습니다. 또한 이런 중요한 프로젝트의 팀장으로써 조원들의 사기를 올려주려고 노력하였으며 팀장이라는 무거운 자리에서 역할에 대해 알게 된거 같아서 좋은 경험이었습니다. 제가 많이 부족했지만 저를 믿고 따라주고 너무 잘해준 조원들에게 너무 고맙고 진행해가는 과정에서 교수님과 조교님들이 좋은 피드백을 주시고 방향을 잡는데 도움을 많이 주셔서 너무 감사했습니다. 만약에 다시 프로젝트의 팀장을 할 수 있는 기회가 있다면 이번보다는 더 안정적이고 완성도 있는 프로젝트를 진행할 수 있을거 같습니다. | ||
− | :장*선 : | + | :장*선 :내장형 수업은 지금까지 수강했던 설계수업과는 다르게 실제로 모델을 만드는 수업입니다. 그러다 보니 실제 모델을 만들기 위해서 필요한 물품 구매, 적절한 계획과 작업을 가늠하기 어려움을 느껴 프로젝트를 진행함에 있어서 지체되는 부분들도 있었습니다. 그럴 때 마다 교수님과 조교님의 컨설팅에서 조언은 크게 도움이 되었고 앞으로는 어떻게 계획을 세우고, 진행시켜야 하는지 배울 수 있었습니다. 한편, 팀원들과 분업을 하면서 서로의 파트에 대해 이해하고, 앞으로 진행함에 있어 토론을 하였습니다. 분업을 할수록 책임감이 더욱 생겼고, 서로 파트가 겹치는 부분이 있을 때 서로 의사소통이 잘 될수록 상대의 파트는 물론 제 파트까지 잘 진행시키게 되는 시너지 효과를 받는 것을 느꼈고, 이것을 앞으로 잘 활용해야겠다고 생각이 들었습니다. 개인적으로는 흥미가 있었던 어플리케이션을 만들어 보아서 좋은 경험이었다고 생각합니다. 어플을 만들면서 평소에 알던 에러도 만났지만 문제가 없어 보였지만 외부 라이브러리 버전이 너무 높거나 낮아서 파일 실행이 안된 문제, 에뮬레이터에서는 작동되지만 실제 단말기에서 실행이 안되는 문제, 한글 깨짐 문제, 그 쉽다던 api호출 하나를 2주가 넘도록 매달렸지만 아직도 그 원인을 모르는 문제(다른 방법으로 현재는 실행이 됨) 등등 저에게는 생소했던 문제들을 만나 해결을 하는 과정이 힘들었지만 재미있었습니다. 이 수업을 통해 교수님과 조교님의 조언, 프로젝트를 진행하면서 나누었던 팀원들과의 대화, 실제 문제를 만나 해결하는 과정 등 이런 경험을 앞으로 잘 사용하도록 하겠습니다. |
:김*호 :이번 프로젝트를 하면서 하드웨어를 제작하는 것이 생각보다 어렵다는 것을 느꼈습니다. 기계정보공학과임에도 불구하고 기구에 관련된 설계를 처음 해보았기 떄문에, 주제 선정 단계부터 하드웨어 제작을 생각하며 정말 걱정이 많았습니다. 실제로 설계를 진행하면서 회로도 구성부터 기구부 제작까지 우여곡절이 많았습니다. 특히 물품 선정과 구매 부분에서 여러 어려움이 있었습니다. 개념 설계과정에서 적합하다 생각한 제작 재료도 제작을 하면서 변경의 필요를 느끼고, 그때문에 새로운 물품을 선정하고, 물품을 구매할 방법또한 찾아내는 과정이 저에겐 처음이었기에 매우 생소했던것 같습니다. 또한 팀으로 무언가를 할 때 커뮤니케이션이 얼마나 중요한지 새심 깨닫게 되었습니다. 프로젝트가 진행되면서 몇가지 의견 충돌이 있었는데 제 생각에는 설계의 지향점이 각자가 달랐기 때문이라고 생각되었습니다. 처음부터 이 부분에 대한 의견을 조율하여 일관된 설계 방향을 뚜렷하게 잡았어야 했는데 초반에 팀원간의 의사소통이 조금 부족했던 것 같습니다. 때문에 조금 늦게 불이 붙기는 했지만, 후반전만큼은 팀원들 모두가 말도 안되게 뛰어난 실력을 보여주면서 말이 안나올정도로 열심히 해주었기에 이렇게 프로젝트를 잘 마무리할 수 있었습니다 | :김*호 :이번 프로젝트를 하면서 하드웨어를 제작하는 것이 생각보다 어렵다는 것을 느꼈습니다. 기계정보공학과임에도 불구하고 기구에 관련된 설계를 처음 해보았기 떄문에, 주제 선정 단계부터 하드웨어 제작을 생각하며 정말 걱정이 많았습니다. 실제로 설계를 진행하면서 회로도 구성부터 기구부 제작까지 우여곡절이 많았습니다. 특히 물품 선정과 구매 부분에서 여러 어려움이 있었습니다. 개념 설계과정에서 적합하다 생각한 제작 재료도 제작을 하면서 변경의 필요를 느끼고, 그때문에 새로운 물품을 선정하고, 물품을 구매할 방법또한 찾아내는 과정이 저에겐 처음이었기에 매우 생소했던것 같습니다. 또한 팀으로 무언가를 할 때 커뮤니케이션이 얼마나 중요한지 새심 깨닫게 되었습니다. 프로젝트가 진행되면서 몇가지 의견 충돌이 있었는데 제 생각에는 설계의 지향점이 각자가 달랐기 때문이라고 생각되었습니다. 처음부터 이 부분에 대한 의견을 조율하여 일관된 설계 방향을 뚜렷하게 잡았어야 했는데 초반에 팀원간의 의사소통이 조금 부족했던 것 같습니다. 때문에 조금 늦게 불이 붙기는 했지만, 후반전만큼은 팀원들 모두가 말도 안되게 뛰어난 실력을 보여주면서 말이 안나올정도로 열심히 해주었기에 이렇게 프로젝트를 잘 마무리할 수 있었습니다 | ||
− | :이*재 : 다방면으로 배우는 점이 | + | :이*재 : 다방면으로 배우는 점이 많았습니다. 처음 계획한 진행 순서에 너무 매달려서 후반부 진행을 늦게 시작한게 아쉬웠습니다. 결과적으론 비슷할 수 있지만 쉽게 가능한 일을 먼저 처리하는게 심리적인 여유가 있었을 것 같습니다. 처음으로 해보는 중규모 팀 프로젝트였는데, 분업과 협업을 이렇게 경험해볼 수 있어서 좋았습니다. |
==부록== | ==부록== |
2021년 12월 20일 (월) 04:10 기준 최신판
목차
프로젝트 소개
프로젝트 명
Smart Window Device
프로젝트 기간
2021.3~2021.6
팀 소개
서울시립대학교 기계정보공학과 20144300** 노*하 (팀장)
서울시립대학교 기계정보공학과 20144300** 장*선
서울시립대학교 기계정보공학과 20154300** 김*호
서울시립대학교 기계정보공학과 20164300** 이*재
프로젝트 개요
프로젝트 요약
미세먼지 센서, 이산화탄소 센서 등 IoT 센서와 라즈베리파이를 이용하여 기존의 창문에서 탈부착 가능한 장치를 개발한다. 인터넷으로부터 기상 정보를 불러오고 각종 센서를 통해 전달받은 값을 이용하여 PDLC필름에 ON/OFF 값을 주어 채광 조절을 하고, 여러 조건들을 만들어 자동으로 창문이 열림/닫힘 기능이 가능하도록 구현하였다. 시나리오에 따라 창문이 개폐 될 때도 있지만 스마트폰 어플리케이션을 활용하여 수동으로 개폐할 수 있도록 어플리케이션을 추가로 개발한다. 어플리케이션을 통해 센서 값을 실시간으로 확인할 수 있다.
프로젝트의 배경 및 기대효과
Iot 기술의 발달로 많은 가정에서 전등과 TV 등 많은 가구 및 가전의 자동화 혜택을 누리고 있다. 그러나 창문의 경우 아직도 수동으로 열고 닫아야 하고, 기존의 스마트 창문의 경우 대부분 새로운 집에 직접 빌트인되어있다. 따라서 우리는 창호에 장착할 수 있는 스마트 디바이스를 만들어 사용자의 IOT경험을 극대화시키는 것을 목표로 한다. 또한 미세먼지 경보 발령 빈도가 잦아지고, 코로나19의 확산으로 인하여 적절한 시기에 행해지는 환기의 중요성이 커지는 요즘, 미세먼지를 체크하여 자동으로 여닫아 사용자의 건강 증진에도 기여하는 것을 목표로 한다. 이 프로젝트를 통해 IOT 개발에 대해 더 학습하고 실습할 수 있는 기회를 얻을 수 있을 것으로 생각된다. 이 장치를 통해 기존의 창문에서 스마트 창문을 사용할 수 있고, 가정 혹은 카페나 사무실 등에서 실내 정보를 확인해 공간별로 적합한 실내 환경을 조성할 수 있고 이를 통해 사용자의 건강을 증진할 수 있을 것으로 기대한다. 또한 창문 조작의 편의성을 증대하고 필요에 따라 사용자의 프라이버시를 지킬 수 있을 것으로 기대된다.
프로젝트 개발 목표
우리의 프로젝트 개발 목표를 목적 계통도로 나타내면 다음과 같다.
- 편의성
- 직관적이며 편리한 조작을 목표로 한다. 적절한 창문의 개폐 알고리즘의 적용을 통하여 실내 대기 질에 반응해 창문을 자동으로 여닫을 수 있고, 센서로부터 받은 정보를 연결된 어플로 전달하여 사용자가 쉽게 볼 수 있다. 스마트폰 어플리케이션은 하위 컨텍스트 메뉴의 개수를 줄이고 깔끔하게 디자인하여 가능한 한 적은
터치 횟수로 창문을 여닫을 수 있다.
- 호환성
- 장치와 실제 창문이 잘 결합되어 작동하도록 단단하게 고정되고, 스펙 내의 각각 다른 창문의 크기에도 전부 대응하여야 한다. 차후 소프트웨어적인 기능의 추가가 가능하다.
- 성능
- 내부 공기 질의 측정과 창문의 조작이 정확하여야 한다. 제품은 너무 비싸면 안되며 작동에 에러가 일어나지 않고 안정적으로 동작하여야 한다. 오버스펙을 지양하고 비교적 저렴한 센서와 구동부, 제어장치를 사용하여 단가를 낮춘다.
동작 시나리오
- 어플리케이션의 동작 시나리오는 다음과 같다. 어플리케이션을 실행하면 로그인 화면이 나오고, 라즈베리 파이와 연결에 성공하면 메인화면으로 가게 된다. 메인화면에선 창문 자동모드 토글과 PDLC 토글, 수동모드 제어 기능이 있다. 각 기능에 해당하는 명령어가 라즈베리파이 서버로 전송된다.
- 우리가 사용한 창문 자동모드 제어 알고리즘은 다음과 같다. 내부 미세먼지 농도가 외부 미세먼지 농도보다 높은 경우, 또는 3분간의 내부 미세먼지 농도 증가 속도를 이용한 외삽법으로 예상되는 내부 미세먼지 농도가 외부 미세먼지 농도보다 높은 경우 창문을 연다. 이때 외부 미세먼지 농도가 너무 낮아서 의도치 않게 창문이 열리는 경우를 방지하기 위해 문턱값인 30µg/m^3 이상일 때만 창문이 열리도록 한다. 내부 미세먼지 농도는 PM2.5와 PM10으로 나뉘는데, 두 수치 모두 비교한다. 또한 내부 이산화탄소 농도가 800ppm 이상일 때 창문이 열리도록 한다. 창문이 열린 후 5분간 실내 대기 질의 변화가 10 이하일 때 실내와 실내 대기 교환이 정상상태에 이르렀다고 판단하고 닫게 된다. PM2.5, PM10, 이산화탄소 중 하나라도 위의 조건을 만족하면 창문이 열리고, 세가지 조건에 대해 창문을 닫는 판단을 하면 그때 닫게 된다.
구현 내용
시스템 구성
시스템은 위와 같은 구성으로 이루어진다. 메인 서버가 되는 라즈베리 파이에 미세먼지 센서 PMS7003과 이산화탄소 센서 Mh-z19가 장착되고, 공공데이터포털에서 대기질 데이터를 api로 받아온다. 어플리케이션은 공공데이터포털 OpenApi를 사용하고 라즈베리 파이와 소켓 통신을 하여 실내와 실내의 대기 질을 사용자에게 보여준다. 어플리케이션으로부터 라즈베리 파이에 명령이 입력되면 블루투스 통신을 통해 제어부의 아두이노로 전달된다. 이러한 명령에 따라 아두이노가 모터와 pdlc 필름을 제어하여 최종적으로 디바이스가 동작 시나리오대로 작동한다.
구동부 설계 및 구현
- 가. 랙 앤 피니언
- 랙 앤 피니언은 회전운동을 직선운동으로 바꾸는데 사용하는 기어이다.
- 이를 이용하여 창문의 여닫음 구동을 설계하였다.
- 기어설계는 표준규격에 맞추어서 3D캐드로 설계하였다.
- 정면도, 윗면도, 측면도와 배치도를 나타낸다.
- 피니언
- 피니언 설계스펙은 다음과 같다.
- pinion 피치경 : 30mm
- m : 1.5
- z : 20
- 원주 : 94.2mm
- 피니언이 랙 끝까지 이동 시 필요한 회전수는 1.8회전이고 시간은 3.1 sec이다.
- 설계된 랙 앤 피니언은 다음과 같다.
- 3d프린터 제작
- 나) 아두이노
- 구동부 회로는 다음 그림과 같이 구현되었다.
- 모터부
- 3A모터 드라이버 AM-DC1-3D 와 모터 RB-35GM+Encoder 21TYPE 로 구성되어 있으며, 12V 배터리로부터 전원을 인가받아 아두이노로부터 명령받은 대로 동작한다.
- 엔코더를 이용해 제어부에서 측정하고 계산한 rate에 따른 모터 회전 수를 조절할 수 있도록 설계하였다.
- PDLC부
- 스마트필름 (PDLC), DC_DC 가변 컨버터, MOSFET IRF520 모듈로 구성되어 있으며, 12V 배터리-인버터 로부터 전원을 인가받는다. 아두이노에서 신호를 받아 MOSFET을 통해 on/off 를 제어한다.
- 전원이 인가되면 필름이 투명해지며, 전원이 인가되지 않는경우 필름이 다시 불투명해진다.
- 블루투스 Client
- HC-06 모듈을 사용하여 제어부와 통신한다.
- winduino.INO
- 아두이노에 내장된 명령어는 다음과 같다.
- 명령어 '1' = 자동모드 on
- 명령어 '2' = 자동모드 off
- 명령어 '3' = 자동모드 open
- 명령어 '4' = 자동모드 close
- 명령어 '5' = PDLC on
- 명령어 '6' = PDLC off
- 명령어 '7' = 수동모드 open 또는 측정 start
- 명령어 '8' = 수동모드 close
- 명령어 '9' = 수동모드 stop 또는 측정 end
- 명령어 'else' = 측정된시간*모터회전수 만큼의 rate를 가져온다.
- 기구부
- 기구부의 경우 22cm x 13cm x 7cm 의 상자형태로 제작하였다. 전면부는 경첩을 통해 여닫이 구조로 제작, 창문과의 접합부의 경우 판을 하나 덧대어 접합 가능한 표면적을 넓게 하였다.
- 창문과의 접합부의 경우 양면젤테이프/나사못고정 두가지 경우를 두었으며, 프로토타입 제작에서는 양면 젤테이프를 이용하기로 하였다.
-
- 내부 회로 구성은 다음과 같다.
- 후면부 패널에 회로를 고정시키고, 모터는 상부에 고정하였다. 배터리는 전면부 개방시 가장 앞에두어 후에 배터리 교체가 용이하도록 구성하였다.
제어부 설계 및 구현
라즈베리 파이 제어 프로그램
- 제어부의 회로는 다음과 같이 구성된다.
- 미세먼지 센서 및 이산화탄소 센서 연결
- 미세먼지 센서 PMS7003은 라즈베리 파이의 GPIO 핀 중 UART 1을 통해 연결하였다. 이산화탄소 센서 MHZ19는 라즈베리 파이의 GPIO 핀 중 UART 0을 통해 연결하였다. 시리얼 통신을 이용해 값을 받아와서 메인 제어 프로그램인 server_main.py에서 값을 저장하도록 한다.
- 미세먼지 데이터 OpenApi 사용
- 공공데이터 포털의 한국환경공단_에어코리아_대기오염정보 중 측정소별 실시간 측정정보 조회 기능을 사용한다. 구할 수 있는 OpenApi 서비스 중 가장 정밀한 위치별 데이터를 제공하고, 매 시간마다 업데이트되는 정보를 받아 최대 1시간 이내의 시간 정확도를 가진다.
- 소켓 서버
- 어플리케이션에서 접속을 할 수 있도록 소켓 서버를 운영한다. 클라이언트가 접속한 경우 받아온 센서값을 csv 형식으로 보내준다.어플리케이션 클라이언트가 라즈베리 파이 서버에 전달하는 메시지는 공공데이터포털 기상정보 Api에 사용하기 위한 관측소 위치 정보와 사용자가 창문에 내리는 명령어이다.
- 블루투스 서버
- 아두이노를 제어하기 위한 통신 서버이다. 메인 알고리즘 또는 사용자 명령에 따라 클라이언트에게 모터와 PDLC 필름을 제어하는 명령어를 전달한다.
- 센서 값 처리
- 받아온 센서의 데이터에 노이즈가 있는 경우를 대비하여 이동평균필터를 센서값에 적용하였다. 최근 10초간의 데이터의 평균값을 저장하는 리스트를 운영하게 된다. 이 리스트는 최대 300개의 원소를 가지고 있어 최근 5분간의 데이터를 확인할 수 있다.
- 수동 제어 모드
- 어플리케이션으로부터 수동으로 창문을 열고 닫거나, PDLC 필름을 켜고 끄는 명령을 받으면 구동부인 아두이노에 명령을 전달한다.
- 창문 길이 측정
- 어플리케이션으로부터 창문을 끝까지 여닫기 위해 필요한 모터 회전수를 측정할 수 있다. 측정 시작시 창문이 열리고 창문이 끝까지 열리면 종료를 눌러 동작을 멈추도록 한다. 이 사이 모터가 움직인만큼을 기억하여 앞으로 창문을 여닫을 때 적용할 수 있도록 한다.
어플리케이션 설계 및 구현
어플리케이션은 사용자에게 인터페이스를 제공하여 실내, 실외 미세먼지와 실외 온도를 나타내며, 창문과 pdlc 필름을 제어할 수 있는 기능을 보기 쉽게 제공한다. 소켓통신을 통해 실내 미세먼지 데이터를 받고, 창문과 pdlc 필름을 제어하는 신호를 라즈베리파이에 전달한다. 실외 미세먼지와 기온정보는 API를 통해 정보를 제공한다.
- 가.화면 설계
- 연결 화면
- 연결 화면은 연결하기 버튼을 누르면 라즈베리파이 서버와 연결을 시도하여 라즈베리파이와 소켓통신이 성공하면 메인화면으로 화면이 넘어간다. 실패할 경우 어플은 재시작 된다.
- 메인 화면
- 메인 화면은 각종 api를 통한 외부 미세먼지 수치, 온도와 라즈베리파이에서 제공하는 실내 미세먼지, 이산화탄소 수치를 확인할 수 있다. 실외 정보는 api를 통해 정보를 받아와 첫번째(측정주소), 두번째 섹션(외부 기온)과 세번째(미세먼지)오른쪽 섹션에 출력하고 실내 정보는 연결 화면에서 소켓통신을 성공하면 서버에서 주는 데이터를 사용해 세번째(미세먼지), 네번째(이산화탄소 농도)섹션 왼쪽에 출력한다. 이때 2번째 섹션은 정시 근처에서 데이터를 받을 경우 동네예보 실황정보 에러로 Null값이 반환되기 때문에 해당 상황은 "예보중"이라는 문구가 출력된다. pdlc 제어와 창문 자동 모드는 버튼을 클릭하여 제어 신호를 서버로 전성한다. 창문 수동 모드 버튼을 클릭할 경우 창문 제어 화면으로 이동한다. 화면 제일 하단에는 공공데이터 api의 저작권을 표시해 두었다.
- pdlc 제어
- 창문 자동 모드
- 나.API
- api는 다음과 같이 수행된다. 단말기에서 GPS 신호인 경위도를 카카오 위치 API에 넣어 TM좌표를 반환받는다. 이 좌표를 다시 동네예보 API와 미세먼지 측정소명API에 사용한다. 동네예보 API에서는 해당 지역 실시간 날씨 정보가 반환되고, 측정소명 API에서는 해당 좌표에서 가장 가까운 측정소명이 반환된다. 측정소명은 다시 미세먼지 API에 입력되고 미세먼지 데이터를 반환 받는다.
- 다.소켓 통신 및 제어신호
- 라즈베리파이와 어플은 소켓 통신을 통해 연결되고 어플은 클라이언트 역할을 한다. 사용자가 어플을 통해 디바이스를 제어하기 때문에 사용자가 원하는 제어가 있을 경우 해당 제어 신호를 위와 같이 서버로 보내게 된다.
프로젝트 결과
최종 결과물
미디어:Monday motor measurement.mp4
- 어플리케이션을 통해 창문의 개폐를 조절할 수 있다. 길이 측정 시작 버튼을 누른 뒤 창문이 전부 열리면 길이 측정 종료 버튼을 눌러 측정을 종료한다.그동안 창문이 얼마나 열렸는지를 계산하여 디바이스가 저장하게 된다.
- 집안의 미세먼지 농도가 상승된 상태일 경우 자동모드에서 집안 대기질이 안좋다고 판단하여 자동으로 창문을 열게 된다.
- 집안의 미세먼지 농도가 5분동안 10 이상 하락하지 않아 자동모드에서 정상상태에 돌입했다고 판단하여 자동으로 창문을 닫게 된다.
- 어플리케이션으로 창문의 PDLC 필름을 제어하는 모습
프로젝트 하드웨어 결과물
- 구동부 내부
- 구동부 기어
- 제어부 및 센서
- 어플리케이션
오픈소스
- 작업한 최종 자료는 아래의 링크에 존재
https://github.com/gksl2577/monday.git
미구현 내용
- 창문을 끝까지 열거나 끝까지 닫지 않고 50%나 25%, 혹은 사용자가 원하는 만큼만큼 여는 기능
- 메인 제어 알고리즘에서 내부 CO2 농도에 따라 창문을 열 때, 외부 미세먼지 농도에 따라 창문을 여는 정도가 바뀌는 부분
프로젝트 평가
평가항목
- 시나리오 정상 작동 여부 평가
- 자동모드 시나리오대로 창문이 작동하는지 반복실험(20회)를 진행한다.
- 기상 데이터 파싱 정확도 평가
- 최근 6시간 이내의 인근 지역 기상 데이터 정보를 받아오는지 반복실험(20회)를 진행한다.
- 통신의 안정성 평가
- 어플리케이션- 라즈베리파이-아두이노 간의 통신이 끊기지 않는지 반복실험(20회)를 진행한다.
- 창문 조작 정확도 평가
- 창문이 원하는 위치로 정확하게 조작되는지 반복실험(20회)를 진행한다.
- 디바이스의 안정적 부착 여부 평가
- 작동 도중 디바이스가 안정적으로 부착되는지 반복실험(20회)를 진행한다.
- 창문 조작 속도 평가
- 창문의 개폐 조작에 어느정도 시간이 걸리는지 반복실험(20회)를 진행한다.
- 센서 반응속도 평가
- 센서가 실내 공기 변화에 반응하는 데 어느정도 시간이 걸리는지 반복실험(20회)를 진행한다.
평가결과
- 시나리오 정상 작동 여부 평가
자동모드 시나리오대로 창문이 작동하는지 20회 테스트 결과 테스트 케이스 전부 작동하는 모습을 확인하였다.
- 기상 데이터 파싱 정확도 평가
어플리케이션으로부터 가장 가까운 관측소의 데이터를 받아와 최근 1시간 이내의 대기오염 데이터를 받아올 수 있었다. 평가 결과 20회 전부 Api 호출에 성공하였다.
- 통신의 안정성 평가
어플리케이션에서 명령어를 보내면 라즈베리파이를 통해 아두이노까지 정상 전달되는지 여부를 20회 테스트 하였다. 20회 전부 전달에 성공하였다.
- 창문 조작 정확도 평가
창문이 원하는 위치에 오차범위 10% 이내로 조작되는지를 평가하였다. 이를 위해서 창문 모터 회전시간 측정 기능을 구현하였고 실험값을 통한 오프셋을 구해 창문의 길이에 맞게 움직이도록 하였다. 창문을 특정 비율만큼 여는 기능은 미구현되어 달성하지 못하였고, 끝까지 열거나 닫는 경우만 구현되었는데 이 경우 오차범위 1cm(2%)이내로 20회 동작하였다.
- 디바이스의 안정적 부착 여부 평가
창문의 개폐 동작 도중 디바이스가 떨어지거나 진동 등이 있는지를 확인하였다. 20회 테스트 결과 전부 안정적으로 부착되어있었다.
- 창문 조작 속도 평가
창문의 개폐 조작에 걸린 시간을 20회 반복 측정하였다. 평가결과 평균 2.16초로 개발 목표치인 5초 이내를 달성하였다.
- 센서 반응속도 평가
센서가 실내 공기 변화에 반응하는 데 걸린 시간을 측정하였다. 오염의 발생지점과 센서의 거리에 따라서 결과가 달라졌는데, 센서부에 사용할 시연용 상자 내에서 오염을 발생시켰을 경우 메인 프로그램이 리프레시되는 최소 주기마다 반응하여 평균 1초 이내로 개발 목표치를 달성하였다.
느낀점
- 노*하 : 프로젝트가 끝나감에 따라 올해 1학기가 파노라마처럼 생각이 났습니다. 처음에 내장형 프로젝트 조원을 구하고, 처음 조원을 만나 주제를 정하였습니다. 저희 조는 주제를 정하는 과정에서 정말 많은 고민을 하였고 여러가지 얘기도 오갔습니다. 그리고 교수님 피드백을 받게 되었고 그리하여 Smart Window Device라는 주제를 선정하게 되었습니다. 어플리케이션, 다양한 센서제어, 공공데이터 API, 기어 설계 등등 정말 다양한 작업을 하기로 하여서 진행과정에서 서로 토론을 많이 하였습니다. 작업에서 해야 하는 내용이 다르기 때문에 프로젝트를 진행함에 있어서 분업을 중요하게 생각하였습니다. 그래서 서로 원하는 분업을 하게 되었고 문제가 발생하였을 떄 서로 모여서 고민하고 조사하여 해결하기도 하였습니다. 짧지만 여러가지를 많이 배운거 같습니다. 실제로 회사에 들어가게 되어서 프로젝트를 하게 된다고 한다면 무슨 문제가 발생할 지 모르기 때문에 마감일보다 더 여유롭게 계획해야한다고 느꼈습니다. 또한 이런 중요한 프로젝트의 팀장으로써 조원들의 사기를 올려주려고 노력하였으며 팀장이라는 무거운 자리에서 역할에 대해 알게 된거 같아서 좋은 경험이었습니다. 제가 많이 부족했지만 저를 믿고 따라주고 너무 잘해준 조원들에게 너무 고맙고 진행해가는 과정에서 교수님과 조교님들이 좋은 피드백을 주시고 방향을 잡는데 도움을 많이 주셔서 너무 감사했습니다. 만약에 다시 프로젝트의 팀장을 할 수 있는 기회가 있다면 이번보다는 더 안정적이고 완성도 있는 프로젝트를 진행할 수 있을거 같습니다.
- 장*선 :내장형 수업은 지금까지 수강했던 설계수업과는 다르게 실제로 모델을 만드는 수업입니다. 그러다 보니 실제 모델을 만들기 위해서 필요한 물품 구매, 적절한 계획과 작업을 가늠하기 어려움을 느껴 프로젝트를 진행함에 있어서 지체되는 부분들도 있었습니다. 그럴 때 마다 교수님과 조교님의 컨설팅에서 조언은 크게 도움이 되었고 앞으로는 어떻게 계획을 세우고, 진행시켜야 하는지 배울 수 있었습니다. 한편, 팀원들과 분업을 하면서 서로의 파트에 대해 이해하고, 앞으로 진행함에 있어 토론을 하였습니다. 분업을 할수록 책임감이 더욱 생겼고, 서로 파트가 겹치는 부분이 있을 때 서로 의사소통이 잘 될수록 상대의 파트는 물론 제 파트까지 잘 진행시키게 되는 시너지 효과를 받는 것을 느꼈고, 이것을 앞으로 잘 활용해야겠다고 생각이 들었습니다. 개인적으로는 흥미가 있었던 어플리케이션을 만들어 보아서 좋은 경험이었다고 생각합니다. 어플을 만들면서 평소에 알던 에러도 만났지만 문제가 없어 보였지만 외부 라이브러리 버전이 너무 높거나 낮아서 파일 실행이 안된 문제, 에뮬레이터에서는 작동되지만 실제 단말기에서 실행이 안되는 문제, 한글 깨짐 문제, 그 쉽다던 api호출 하나를 2주가 넘도록 매달렸지만 아직도 그 원인을 모르는 문제(다른 방법으로 현재는 실행이 됨) 등등 저에게는 생소했던 문제들을 만나 해결을 하는 과정이 힘들었지만 재미있었습니다. 이 수업을 통해 교수님과 조교님의 조언, 프로젝트를 진행하면서 나누었던 팀원들과의 대화, 실제 문제를 만나 해결하는 과정 등 이런 경험을 앞으로 잘 사용하도록 하겠습니다.
- 김*호 :이번 프로젝트를 하면서 하드웨어를 제작하는 것이 생각보다 어렵다는 것을 느꼈습니다. 기계정보공학과임에도 불구하고 기구에 관련된 설계를 처음 해보았기 떄문에, 주제 선정 단계부터 하드웨어 제작을 생각하며 정말 걱정이 많았습니다. 실제로 설계를 진행하면서 회로도 구성부터 기구부 제작까지 우여곡절이 많았습니다. 특히 물품 선정과 구매 부분에서 여러 어려움이 있었습니다. 개념 설계과정에서 적합하다 생각한 제작 재료도 제작을 하면서 변경의 필요를 느끼고, 그때문에 새로운 물품을 선정하고, 물품을 구매할 방법또한 찾아내는 과정이 저에겐 처음이었기에 매우 생소했던것 같습니다. 또한 팀으로 무언가를 할 때 커뮤니케이션이 얼마나 중요한지 새심 깨닫게 되었습니다. 프로젝트가 진행되면서 몇가지 의견 충돌이 있었는데 제 생각에는 설계의 지향점이 각자가 달랐기 때문이라고 생각되었습니다. 처음부터 이 부분에 대한 의견을 조율하여 일관된 설계 방향을 뚜렷하게 잡았어야 했는데 초반에 팀원간의 의사소통이 조금 부족했던 것 같습니다. 때문에 조금 늦게 불이 붙기는 했지만, 후반전만큼은 팀원들 모두가 말도 안되게 뛰어난 실력을 보여주면서 말이 안나올정도로 열심히 해주었기에 이렇게 프로젝트를 잘 마무리할 수 있었습니다
- 이*재 : 다방면으로 배우는 점이 많았습니다. 처음 계획한 진행 순서에 너무 매달려서 후반부 진행을 늦게 시작한게 아쉬웠습니다. 결과적으론 비슷할 수 있지만 쉽게 가능한 일을 먼저 처리하는게 심리적인 여유가 있었을 것 같습니다. 처음으로 해보는 중규모 팀 프로젝트였는데, 분업과 협업을 이렇게 경험해볼 수 있어서 좋았습니다.