"내장 내시경 - Smart Lens Case"의 두 판 사이의 차이
2012430017 (토론 | 기여) (→느낀점) |
2012430017 (토론 | 기여) (→제어부 및 회로 구현) |
||
(같은 사용자의 중간 판 6개는 보이지 않습니다) | |||
78번째 줄: | 78번째 줄: | ||
===시스템 구성=== | ===시스템 구성=== | ||
+ | [[파일:시나리오2.PNG|500픽셀]] | ||
===기구부 설계 및 구현=== | ===기구부 설계 및 구현=== | ||
128번째 줄: | 129번째 줄: | ||
<br/> | <br/> | ||
전체적인 회로구성은 다음과 같다. 라즈베리 파이를 이용하여 제어해야할 주요 부품은 초음파 센서, 접촉식 센서, 진동 소자, 솔레노이드 밸브, 수동 스위치가 있다. | 전체적인 회로구성은 다음과 같다. 라즈베리 파이를 이용하여 제어해야할 주요 부품은 초음파 센서, 접촉식 센서, 진동 소자, 솔레노이드 밸브, 수동 스위치가 있다. | ||
+ | |||
+ | [[파일:회로구성.PNG|600픽셀]] | ||
초음파 센서 회로도 | 초음파 센서 회로도 | ||
255번째 줄: | 258번째 줄: | ||
===미구현 내용=== | ===미구현 내용=== | ||
− | + | - 초음파 트랜스듀서 : 초기의 계획에서 초음파 발생 트랜스듀서를 이용하여 초음파 세척을 고려하였으나, 해당 부품을 구비하는 과정이 상당히 까다로워, 진동자를 이용한 세척으로 변경되었다. | |
==프로젝트 평가== | ==프로젝트 평가== | ||
302번째 줄: | 305번째 줄: | ||
'''전*렬''' : 라즈베리 파이를 이용하여 임베디드 시스템을 직접 작성하고 이를 구현해 보았다, 그 과정에서 구상했던 부분과 실제 구현에 있어서 예상하지 못한 문제점이 발생하였고 이를 통해 개발 구상 단계에서 다양한 부분을 고려해야 함을 배웠다. 또한 다양한 센서의 제어와 이에 필요한 데이터통신 파트를 실제로 작성함으로서 임베디드 시스템 개발에 필요한 역량을 배웠다. | '''전*렬''' : 라즈베리 파이를 이용하여 임베디드 시스템을 직접 작성하고 이를 구현해 보았다, 그 과정에서 구상했던 부분과 실제 구현에 있어서 예상하지 못한 문제점이 발생하였고 이를 통해 개발 구상 단계에서 다양한 부분을 고려해야 함을 배웠다. 또한 다양한 센서의 제어와 이에 필요한 데이터통신 파트를 실제로 작성함으로서 임베디드 시스템 개발에 필요한 역량을 배웠다. | ||
− | '''채*성''' : | + | '''채*성''' : 처음으로 사물 인터넷을 만들어 볼 수 있는 기회였다. 코로나19로 인해 대면 수업이 불가능한 상황이였지만 조원들과의 의사소통을 통해 이를 극복할 수 있었다. 이제껏 컴퓨터 프로그램을 이용해 설계를 해왔었지만, 이번 프로젝트에서는 직접 만들어 구현하면서 하드웨어 자체를 구현한다는 것이 매우 어렵다는 것을 알게 되었다. |
'''허*제''' : 무언가를 바닥부터 직접 만들어보는 경험은 처음이여서 흥미로웠다. 어플리케이션을 제작하면서 많은 것을 배웠고, 기기 제작 시에 우리가 학과 과정에서 배웠던 내용뿐만 아니라 회로나 ADC에 관련된 내용들이 필요하다는 것을 통해 많은 것을 공부해야겠다는 생각이 들었다. | '''허*제''' : 무언가를 바닥부터 직접 만들어보는 경험은 처음이여서 흥미로웠다. 어플리케이션을 제작하면서 많은 것을 배웠고, 기기 제작 시에 우리가 학과 과정에서 배웠던 내용뿐만 아니라 회로나 ADC에 관련된 내용들이 필요하다는 것을 통해 많은 것을 공부해야겠다는 생각이 들었다. |
2020년 6월 21일 (일) 07:57 기준 최신판
목차
프로젝트 소개
프로젝트 명
Smart Lens Case
프로젝트 기간
2020.3~2020.6
팀 소개
서울시립대학교 기계정보공학과 2015430021 방*웅 (팀장)
서울시립대학교 기계정보공학과 2015430009 김*주
서울시립대학교 기계정보공학과 2015430037 전*렬
서울시립대학교 기계정보공학과 2015430042 채*성
서울시립대학교 기계정보공학과 2015430045 허*제
프로젝트 개요
프로젝트 요약
본 개발은 Raspberry Pi를 이용하여 콘택트 렌즈 사용자의 불편함을 해소시키는 기능을 탑재한 임베디드 시스템 설계이다. '스마트 렌즈 케이스'는 진동소자를 Raspberry Pi로 제어하여 자동세척기능을 구현하고, 렌즈 세척 용액의 공급 및 배출을 용이하게 한다. Raspberry Pi에서 수위측정센서와 초음파센서를 통해 데이터를 전달 받고, 상황에 알맞은 작동을 자동으로 수행할 수 있도록 역할을 수행한다. Raspberry Pi의 GPIO 핀과 MCP 3208을 통해 각종 데이터의 형식을 전환시키고, Firebase 서버에 인자를 송수신하는 방식으로 실시간으로 제어하는 방식을 채택하였다. 또한, 사용자가 모바일 기기에서 Application을 이용하여 세척 예약 시간 설정, 시력 데이터 입력 등의 편의 기능을 수행할 수 있다.
프로젝트의 배경 및 기대효과
1. 배경
현대 사회에서 갈수록 많은 사람의 시력저하 현상과 더불어 안경 및 콘택트렌즈의 착용 현황이 현저히 늘어나고 있다. 주변에서도 콘택트렌즈를 착용하고 있는 사람들을 흔히 볼 수 있는데, 각자의 취향이나 목적에 맞게 렌즈의 종류 또한 다양하다. 렌즈를 착용해보고 관리해본 사람이라면 누구나 겪어본 난항들이 있었을 것이다. 일회용 렌즈를 제외한 소프트렌즈와 하드 렌즈의 이용자들은 대부분 플라스틱으로 이루어진 렌즈 사례와 ‘리뉴’라고 불리는 세척액을 사용한다.
아주 얇은 렌즈를 보존액을 담은 케이스 안에 보관하는 원리라고 이해하면 편할 것이다. 렌즈를 눈에 탈부착하는 이 단순한 과정에서 생각보다 번거로운 일들이 많이 생기는데, 이를 정리해보면 다음과 같다.
• 착용자의 안구 건강을 위해서 렌즈에 끼인 단백질 및 이물질을 제거하는 세척과정을 거치기 번거로워 이를 무시하고 렌즈의 상태가 오염되는 상황이 생긴다.
• 소프트렌즈의 경우 사용 기한이 정해져 있는데, 그 기한을 자주 망각하고, 일회용 렌즈의 경우 남은 렌즈 개수를 미리 파악하지 못하곤 한다.
• 일회용 렌즈의 경우 잠깐 착용하고 폐기하는 것이 경제적이지 못하다.
• 렌즈가 분실 또는 파손되었을 때, 본인의 시력 데이터를 모르기 때문에 원하는 상품을 구하기 힘들다.
• 렌즈 보존액의 잔량 파악을 자주 망각하고, 렌즈 탈부착 시 보존액을 갈아주기 번거롭다.
특히 이러한 문제점들은 소프트렌즈를 착용할 때, 가장 많이 생기는 애로사항인데 이러한 번거로움을 제거하고자 Smart lens Case를 라즈베리 파이를 이용한 임베디드 시스템으로 구현해보고자 한 것에서 시작하였다. Android app과 연동할 수 있다면 사용자의 편의성을 대폭 높일 수 있을 것이라고 생각하였다.
2. 기대효과
아래의 자료를 보면 알 수 있듯이, 현재 한국인은 안경과 렌즈 착용을 상당수 하는 것을 알 수 있다. 물론 렌즈를 착용하는 사람의 수는 안경을 착용하는 사람의 수에 비해 적지만 꾸준히 사용자가 증가하고 있으며, 상대적으로 시력 관리에 대한 관심도가 적은 젊은 층이 다수 이용한다는 점에서 Smart Lens Case를 적절히 설계한다면 렌즈 사용자들의 불편함을 줄일 뿐만 아니라 시력 정보 데이터 관리를 통해 시력의 감소를 예방할 수 있을 것이라고 예상된다.
목적 계통도
● 편리성
앞서 언급한 것처럼 Smart Lens Case는 세척 기능, 세척액의 자동 교환 메커니즘, 그리고 안드로이드를 이용해 결과물과 연동하여서 사용자에게 다양한 서비스를 제공한다. 이때 유의해야 할 점으로는 사용자가 사용하기 편리해야 한다는 점이다. 이름 좀 더 세분화하여 나타내겠다.
정밀성 – 세척액을 새로 공급하거나, 렌즈를 착용한 시간을 측정할 때 개발자가 설정한 값으로 구현되지 않는다면 새로 공급한 세척액의 양이 너무 적어 렌즈가 훼손되기도 하고, 사용자에게 정확한 렌즈 착용 시간을 제공할 수 없다. 따라서 기존에 설정한 설정값에 정밀한 값을 보이는 센서들을 사용하여 정밀성을 확보한다.
자동화 – ‘Smart’ 라는 이름에 적합하도록 결과물은 자동적으로 각각의 기능들을 구현한다. 사용자의 편의를 위해 세척액의 공급/배출, 렌즈의 세척을 버튼을 통해 기기 자체적으로 동작하도록 구현한다. 위 기능 구현을 위해 라즈베리 파이, 모터, 초음파 거리 센서를 연동시킨다. 또한 수위 센서를 이용해 남아있는 세척액의 양을 자동적으로 파악하고 일정량 이하가 된다면 사용자에게 세척액 교환 필요 여부를 알리도록 한다.
직관성 – 정밀성과 자동화 기능을 갖고 있는 Smart Lens Case는 Firebase 서버를 이용해 안드로이드 폰과 연동되어 사용자에게 렌즈 착용 시간, 세척액의 남아 있는 양과 같은 정보를 확인할 수 있다. 이때 사용자 개인 정보를 추가적으로 입력하게 되면 시력 데이터, 사용자 근방의 렌즈 구매처 등의 정보를 얻을 수 있는데, 어플 디자인이 복잡하지 않기 때문에 사용자가 직관적으로 사용할 수 있다.
심미성 – 화장실이나 화장대에 결과물이 배치될 것이라 예상되기 때문에 각각의 장소에 어울리는 외형을 가져야 한다. 이를 위해 결과물을 이루는 장치들을 크기가 작은 것들을 우선적으로 선택한다. 그리고 외형을 설계할 때 내부 공간을 최대한 활용하여 부피를 최소화하도록 하며 3D 프린트를 이용해 제작한다.
● 유지 보수성
소프트웨어 – 대부분의 데이터 처리는 라즈베리파이에서 이루어지고 사용자는 어플을 통해 처리 된 데이터를 확인할 수 있다. 그리고 데이터 처리 과정자체도 복잡하거나 병렬처리를 요구하는 것이 아니기 때문에 소프트웨어적 측면에서 에러가 발생할 확률이 적기에 유지 보수에 용이하다.
하드웨어 – 3D 프린트해서 만든 외형은 조립식으로 제작되기 때문에 라즈베리파이에 연결되어 있는 센서, 모터, 기어와 같은 장치들을 손쉽게 교체할 수 있다. 또한 기어 같은 경우에는 특별히 제작해서 사용할 수도 있지만, 표준 규격에 맞도록 구입해 제작한다. 이를 통해 사용자는 노화되거나 고장 난 하드웨어를 직접 교체할 수 있기 때문에 유지 보수에 용이하다.
● 경제성
세척액의 자동 교환 메커니즘 구현을 위해 필요한 모터의 수를 최소화하는 설계를 하고, 데이터 처리를 라즈베리파이에서 수행하기 때문에 구입하는 장치들의 비용을 최소화한다. 또한 라즈베리파이는 저전력으로 동작하기 때문에 Power를 항시 입력받더라도 유지비가 저렴하다.
동작 시나리오
구현 내용
역할분담 및 추진체계
시스템 구성
기구부 설계 및 구현
위의 그림은 렌즈통의 세척부에 초음파 거리 센서 및 접촉식 수위센서를 초기 모델링과 3D 프린터 출력을 위한 최종 CATIA V5 모델이다. 기구부에서는 크게 공급부, 세척부, 배출부 3가지 부분으로 나뉜다. 3D 프린터 출력 방식과 재질상의 문제로 누수의 위험이 생겨 액체를 접하는 공간은 방수 스프레이와 셀로판지와 실리콘을 이용하여 2중 방수처리를 하였다.
- 공급부
공급부는 렌즈 세척액을 보존 및 공급하는 공간을 담당한다. 공급부에 남은 세척액의 잔량을 파악하기 위해 접촉식 수위센서로 공급부의 수위를 측정하여 데이터를 수신한다. 세척액의 공급양에 대한 정도는 세척부의 초음파 센서의 파악 여부로 결정한다. 충분한 세척액을 담을 수 있을 정도의 부피로 구성하였다. 사용자는 해당 센서를 통해 공급부의 세척액 잔량 데이터를 확인할 수 있고, 이를 통해 사용자에게 세척액의 공급이 필요하다고 알릴 수 있다.
- 세척부
세척부는 렌즈가 세척되고 보존되는 공간을 담당한다. 렌즈를 쉽게 수납하기 위해 경첩을 이용하여 뚜껑부분을 구성하였다. 세척부에는 2가지 주요 부품으로 구성된다.
1. 진동 소자
세척부 바로 옆 공간에 진동 소자를 배치할 공간을 설계하였다. 이 공간에 사용할 진동 모터를 삽입하고 세척부에 진동을 잘 전달할 수 있게 빈 공간에 진동을 잘 전달할 수 있는 물질을 삽입하여 적절한 조치를 취하였다.
2. 초음파 센서
초음파 거리 센서는 초음파를 발사하고, 후에 물체에 반사되어 돌아오는 시간을 통해 거리를 계산하는 동작을 수행한다. GPIO핀에서 VCC 핀과 GND 핀을 초음파 센서 모듈 1, 4번 핀에 연결하여 사용한다. 해당 센서는 렌즈통의 뚜껑에 위치할 것이며, 다음과 같은 역할을 수행하게 될 것이다. 초음파 센서는 렌즈 혹은 세척액이 세척부에 존재된다고 파악되면 세척을 진행할 조건이 충족된다. 이는 세척액 공급, 렌즈 세척, 세척액 배출로 이어지는 동작을 수행하게 된다. 초음파 센서의 거리 데이터를 유의미하게 받기 위해 세척부의 부피를 알맞게 조정하였다.
-배출부
배출부는 세척부에서 세척이 모두 끝난 뒤 오염된 세척액이 배출되는 공간이다. 이는 서랍처럼 편하게 수납할 수 있도록 서랍형식으로 구성하였고, 오염된 세척액이 차있다면 배출부를 꺼내어 용액을 버리는 방식이다.
-etc
라즈베리 파이, 솔레노이드, 각종 배선을 적절히 배치하기 위한 공간을 설계하였다. 배선에서 문제가 발생할 부분을 대비하여 이를 수정할 수 있도록 케이스 옆면을 분리할 수 있도록 하드웨어를 구성하였다.
제어부 및 회로 구현
전체적인 회로구성은 다음과 같다. 라즈베리 파이를 이용하여 제어해야할 주요 부품은 초음파 센서, 접촉식 센서, 진동 소자, 솔레노이드 밸브, 수동 스위치가 있다.
초음파 센서 회로도
위의 그림은 초음파 거리 센서의 4개의 역할을 나타낸다. 1번 Pin은 Vcc전원과 연 결되어 전원을 공급받고, 4번 Pin은 GND와 연결된다. 2번과 3번 Pin은 GPIO와 연결 되고, 초음파를 이용한 거리 측정에 관여한다. 해당센서 는 초음파를 방사한 후 물체에 반사되어 돌아오는 시간을 계산해 물체의 거리를 파악 하는 것이 원리이다. 라즈베리파이에서 Triger Pin(초음파 센서의 Pin2)에 10us 정도 로 High신호를 주면 초음파 센서는 40khz의 펄스를 외부로 발생시킨다. 이때 echo Pin(초음파 센서의 Pin3)은 low가 되는데, 반사되어 돌아온 초음파가 감지되면 high 가 된다. 즉 echo Pin이 low일 때의 시간과 high로 될 때의 시간을 측정하고, 해당 시간을 초음파의 속도(대략 340m/s)로 나누어 주게 되면 탐지하는 물체의 거리를 계 산할 수 있게 되는 것이다. 해당 센서는 최소 cm단위 정도로 측정이 가능하고, 측정 할 수 있는 최대거리는 대략 300cm이다. 초음파 거리 센서는 5V 전압이기 때문에 5V전원을 공급해줄 수 있 는 라즈베리파이의 Pin2와 연결한다. Trigger와 Echo는 어느 GPIO핀과 연결이 가능 하기 때문에 임의로 각각 라즈베리파이의 GPIO핀에 연결한 다. 주의할 점은 라즈베리파이는 3.3V 로직이고 초음파 거리 센서의 echo핀에서는 5V출력이 나온다. 때문에 direct로 연결하면 라즈베리파이가 손상될 우려가 있다. 따 라서 2kΩ의 저항을 통해 5V의 출력신호를 3.3V에 가깝게 만들어 주어 문제를 해결 할 수 있었다. 아래 그림은 실제로 구현한 결과이다.
Trigger를 GPIO output으로, Echo를 GPIO input으로 설정한다. Trigger에 10us동안 High신호를 주고, Echo에 신호가 들어갔다고 판단되면 time.time() 함수를 통해 해당 시각을 pulse_start라는 변수에 저장한다. 이후 초음파가 반사되어 돌아왔다고 판단되면, 즉 Echo가 Low 신 호가 될 때의 시각을 pusle_end라는 변수에 저장한다. 이제 해당 두 시각을 빼주면 초음파가 왕복한 시간을 구할 수 있게 되고, 해당 시간을 사전에 선언한 distance_In_cm함수를 통해 거리로 환산한다. 결과적으로 초음파 센서와 물체 사이 의 거리가 계산되는 것이다.
접촉식 수위 센서
접촉식 수위센서는 아날로그 센서이므로, MCP3208 ADC컨버터와 SPI통신을 이용 하여 라즈베리파이에서 이를 제어하도록 하였다. 접촉식 수위센서는 3가지 핀으로 구성되는데, 각각 VCC, GND, GPIO 핀에 연결하여 동작시킨다. 해당 데이터는 서버로 전송된다.
진동 소자
진동소자는 12V 정격 전압 출력으로 Relay 모듈을 이용하여 모터를 제어한다. Relay 모듈에 각각 VCC, GND, GPIO 핀을 결합하여 GPIO 핀에 HIGH 신호가 들어왔을 때, 진동 소자를 동작시킨다. HIGH 신호는 초음파 센서가 세척부에 세척액 수위까지의 거리를 측정하여 서버에서 세척이 진행되어야 하는 상황이라고 판단되면 GPIO 출력 핀에 HIGH 신호를 주는 방식이다.
솔레노이드 밸브
솔레노이드 밸브는 공급 및 배출을 자동화 시키기 위해서 사용한다. 솔레노이드 밸브는 12V의 전압을 인가해 주어야 함으로 외부 어댑터를 사용하여 배선처리를 해서 라즈베리파이에 들어가는 전원을 병렬로 연렬하여 솔레노이드 밸브에 출력을 주었다. 이런 방법을 채택함으로서, 하나의 전원만을 이용하여 전체 부품을 동작할 수 있게되었다. 위의 부품들과 마찬가지로 GPIO 핀으로 동작하였고, 출력 신호가 HIGH 일 때는 밸브가 열리고, LOW일 때는 닫히는 방식이다. 솔레노이드 밸브는 공급부와 세척부 사이, 세척부와 배출구 사이 총 2개로 구성되었다. 전자의 경우 공급 스위치가 눌리거나, 자동모드의 경우 서버에서 세척액을 공급해주어야한다고 판단될때 GPIO 출력을 HIGH 주게 끔 설계하였다. 후자의 경우 배출 스위치가 눌리거나, 진동 소자의 동작이 모두 끝나면 오염된 세척액을 배출해 주기 위해 GPIO 출력에 HIGH 신호를 인가한다.
소프트웨어 설계 및 구현
Field & Server
가. Message Field
(1) Device_Output : 현재 기기에서 진행중인 Action , 완료 여부 등 Raspberry
Pi 의 동작 여하에 따라 사용자의 Device에 표시되어야 할 정보들을 저장. 데
이터의 축적이 필요하지 않은 부분이므로 새로운 정보가 저장될 경우 갱신
나. SensorField
(1)Sen_Waterlevel : 초음파 센서의 데이터가 저장되는 부분. 현재 세척부분에 채
워져 있는 세척액의 수위를 저장하는 부분으로, 공급/배출/세척 메커니즘에서
접근하여 행동을 결정
(2)Sen_Waterleft : 접촉식 수위 센서의 데이터가 저장되는 부분. 현재 렌즈 세척
액의 잔량을 저장하는 부분으로, 공급/세척 메커니즘에서 접근하여 행동을 결
정
다. TimeField
(1)Time_equip : 사용자의 렌즈 착용 시점이 저장되는 부분. 사용자가 렌즈를 착용
하는 신호를 보낼 때의 시간을 HHMMSS(시 분 초) 형태로 저장
(2)Time_release : 사용자의 렌즈 해제 시점이 저장되는 부분. 사용자가 렌즈를 해
제하는 신호를 보낼 때의 시간을 HHMMSS(시 분 초) 형태로 저장
(3)Time_use : 사용자의 렌즈 착용 시간을 계산하여 저장하는 부분.
Time_release와 Time_equip 의 차이를 계산하여 HHMMSS(시 분 초) 형태
로 저장
라. TriggerField - 라즈베리 파이의 제어 로직 동작을 결정하는 부분
(1)Trigger_equip : 사용자의 렌즈 착용 여부가 저장되는 부분. 사용자가 렌즈를
착용하는 신호를 보내면 1, 사용자가 렌즈 해제 신호를 보내면 0으로 데이터
가 변환된다.
(2)Trigger_release : 사용자의 렌즈 해제 여부가 저장되는 부분. 사용자가 렌즈를
해제하는 신호를 보내면 1, 착용시간 계산이 끝나면 0으로 데이터가 변환된다.
(3)Trigger_in : 세척부에 액체를 공급하는 신호가 저장되는 부분. 공급/세척 메커
니즘에서 Sen_waterlevel 과 함께 사용되어 공급 여부를 결정하게 된다.
(4)Trigger_out : 세척부의 액체를 배출하는 신호가 저장되는 부분. 배출/세척 메
커니즘에서 Sen_waterlevel 과 함께 사용되어 배출 여부를 결정하게 된다.
(5)Trigger_wash : 세척 시작 신호가 저장되는 부분. 세척 메커니즘에서 다른 데이
터와 함께 사용되어 세척을 진행한다. 세척 시작 시 1, 세척이 완료되면 0으로
데이터가 변환된다.
마. UserinfoField - 축적되어야 하는 데이터
(1)DayUse : 사용자의 일간 사용시간이 저장되는 부분. 하루에 여러 번의 사용을
나눠서 하는 경우를 고려하여, Time_use에서 계산된 시간이 일별로 합산되어
저장된다.
(2)Eyesight_Data : 사용자가 입력한 시력 데이터가 날짜별로 저장된다.
Application
사용자는 안드로이드 어플리케이션을 이용하여 렌즈 케이스와 연동하게 되고, Firebase 상용 서버를 이용하여 라즈베리파이 / 스마트폰 간의 데이터 전송을 매개할 것이다. 어플리케이션 개발에 안드로이드 스튜디오를 이용할 것이기 때문에 어플리케이션과 라즈베리파이 내장 프로그램에서의 혼란을 줄이고, 외부 서비스 (Firebase, 필요하다면 Google에서 제공하는 각종 API) 활용을 원활하게 하기 위하여 안드로이드 씽스를 이용하여 라즈베리파이 내장 프로그램 개발을 진행할 것이다. 안드로이드 씽스란 Google에서 제공하는 운영체제로서, 기존의 안드로이드 운영체제가 사용되던 분야를 넘어서 임베디드 시스템 개발에 적합하도록 단순화시킨 운영체제이다. 기존 안드로이드 운영체제와 다르게 스크린 없이 사용할 수 있으며, 장치 개발을 위한 운영체제이므로 다중 어플리케이션이 아니라 하나의 어플리케이션만 구동하게 된다. 안드로이드 어플리케이션과의 호환이 뛰어나며, 안드로이드 어플리케이션 개발에 사용가능한 API를 동일하게 적용시킬 수 있다는 장점이 있다. 아래 그림은 지금까지 설명한 어플과 라즈베리파이의 연결을 도식화한 것이다. 그리고 각각의 기능에 대해 서버와 어떻게 통신되고 있는지를 모식도로 나타내었다.
모바일 어플리케이션은 현재 UI 구현과 화면 전환을 구현하였으며 파이어베이스 서
버와 연동을 구현하였다. 회원가입시 아이디와 비밀번호, 이메일을 입력하여 회원
가입을 하며 데이터는 파이어베이스에 id_list에 저장하며 저장되는 항목으로는 아이
디, 비밀번호, 이메일 및 기기에서 사용할 제어 신호와 사용자의 시력 데이터가 있다.
현재 아이디와 비밀번호, 이메일을 서버에 저장되는 것이 구현되었다. 로그인 시에
는 입력된 ID와 비밀번호를 데이터베이스에 저장된 ID와 비밀번호와 비교하여 같다면
로그인을 하는 방식으로 진행한다. 비밀번호를 잊은 경우에는 가입 시 입력했던 이메
일을 입력하면 파이어베이스를 통해 이메일로 아이디와 비밀번호를 변경할 수 있도록
한다. 어플리케이션을 통해 자동모드 세척 진행이 가능하고, 추가적으로 시력데이터를 입력하고 이를 그래프화 시켜 사용자의 시력데이터를 보기 쉽게 만들었다.
프로젝트 결과
최종 결과물
미구현 내용
- 초음파 트랜스듀서 : 초기의 계획에서 초음파 발생 트랜스듀서를 이용하여 초음파 세척을 고려하였으나, 해당 부품을 구비하는 과정이 상당히 까다로워, 진동자를 이용한 세척으로 변경되었다.
프로젝트 평가
평가항목
평가결과
-렌즈 세척정도
세척이 얼마나 잘 이루어졌는지 확인할 방법을 모색해 보았다. 실제 렌즈 세척기를 파는 업체와 여러 논문을 찾아봤을 때, 정확한 세척 성능을 알아보기 위해서는 현미경으로 직접 확인하는 방법을 사용한다고 하였다. 하지만 이는 우리가 직접 할 수 있는 방법이 아니기에 우리가 직접 할 수 있는 방안을 찾아야 했다.
여러 방법을 찾다가 생물학과에서 현미경을 사용하지 못할 때 사용하는 방법인 ImageJ를 사용하기로 하였다. ImageJ라는 이미지 처리 프로그램은 image를 찍은 후 알고 있는 unit 단위에 맞춰 영상 분석을 할 수 있다. 우리는 이 프로그램을 이용해 화장품으로 오염시킨 렌즈의 오염된 픽셀의 개수로 세척이 완료 된 렌즈의 잔여 오염 픽셀의 개수를 나누어 백분율로 세척의 정도를 나타내었다. 하지만 비용 문제로 인해 렌즈를 대량으로 구비할 수 없어서 사각형 모양의 플라스틱 모형을 갖고 세척 정도를 판단하였다.
위 그림과 같이 플라스틱 모형에 화장품을 이용해 오염시키고 이를 ImageJ 프로그램 내의 이미지 처리를 이용해 오염된 면적을 구하였다. 오른쪽 그림은 세척 이후의 이미지 처리된 플라스틱 모형이다. 그림 가운데의 표의 1행은 하나의 플라스틱 모형을 이미지 처리할 때 전체 픽셀 수이다. 2행은 오염이 된 플라스틱 모형의 오염된 부분의 픽셀 수, 3행은 세척 이후 잔여 오염 부분의 픽셀수이다. 총 9번의 실험을 통해 세척의 정도를 판단하였다.
각각의 사진이 모두 다른 크기이기 때문에 모두 1084*1040 픽셀의 크기로 바꾸어 주었다. 그 결과 9번의 Test 중 7번 100%의 세척률을 얻을 수 있었고 나머지 2번의 Test도 83%라는 세척률을 얻을 수 있었다. 9번의 Test를 평균 내 보면 96.2%의 세척률을 얻을 수 있었고 개발 목표로 했던 100%의 세척률이 나오지는 않았다. 그 이유로는 실제 초음파 진동자를 구입하려 하였으나 이는 기업들의 개발 모듈로서 판매하지 않았고, 판매 하더라도 해외 구매나 10만원 이상의 고가를 요구하여 해결할 수 없었다. 이에 차선책으로 진동자를 이용하여 초음파 세척을 해결하려 했지만 애초에 초음파를 발생시키는 용도가 아니기에 목표로 한 세척을 이뤄낼 수 없었다.
-시나리오대비 작동 수준
공급, 배출, 세척 버튼을 눌렀을 때 작성한 시나리오를 수행하는 지 확인해 보았다. 그리고 물리적으로 버튼을 누르지 않고 안드로이드 어플을 이용해 각각의 기능을 수행시켜 보았다. 마지막으로 자동모드를 어플로만 수행하여 보았다. 각각 20회 총, 140회의 평가를 해보았고 모두 이상 없이 작동하였기에 개발 목표치에 이르렀다고 할 수 있다.
-응답시간
각 기능의 실행에서 센서값에 대한 응답은 만족스러운 수준으로 구현되었으나 사용자의 입력에 대하여 기능을 실행하기 까지의 시간이 목표로 했던 응답시간을 만족시키지 못하였다. 이는 라즈베리파이에 내장된 프로그램에서 사용된 서버와 기기간 데이터전송의 빈도가 높았기 때문으로 사료된다.
-투입 및 배출 세척액양
공급액 투입량의 표준편차는 8.9mL로 개발목표인 5mL에는 조금 벗어난 수치였다. 배출후 잔량의 평균은 4.73 mL로 개발목표였던 5mL 이내에 포함되어 이 항목에서는 만족스러운 결과를 보였다.
느낀점
방*웅 : 이번 프로젝트를 통해 평소에 편하게 쓰던 간편한 완제품을 직접 설계하게 된다면 얼마나 까다로운 과정을 거치는지 깨닫게 되었다. 또한, 현재까지 진행했던 팀 프로젝트 중 책임감에 대해 다시 한 번 재고해보게 되었고, 프로젝트 진행 과정 중 팀장의 역할에 대한 중요성을 다시금 느꼈다. 이 부분에서 내 자신이 많이 부족했던터라 많은 반성을 하게 되었다. 한 학기 동안 맡은 바 역할을 다해준 팀원들에게 너무 고맙고, 다소 어려운 개념인 임베디드 시스템을 같이 즐겁게 프로젝트를 진행하면서 배울 수 있었던 좋은 경험이었다.
김*주 : 처음 접하는 라즈베리파이도 너무 어려웠고 직접 하드웨어를 구현하는 과정이 매우 험난했다. 그래도 직접 설계한 사항을 토대로 실물을 구현해나가는 과정이 즐거웠고 흥미로웠다. 또한 대부분의 사람들이 접해볼 수 없는 하드웨어와 소프트웨어를 융합하는 값진 경험을 한 것 같다.
전*렬 : 라즈베리 파이를 이용하여 임베디드 시스템을 직접 작성하고 이를 구현해 보았다, 그 과정에서 구상했던 부분과 실제 구현에 있어서 예상하지 못한 문제점이 발생하였고 이를 통해 개발 구상 단계에서 다양한 부분을 고려해야 함을 배웠다. 또한 다양한 센서의 제어와 이에 필요한 데이터통신 파트를 실제로 작성함으로서 임베디드 시스템 개발에 필요한 역량을 배웠다.
채*성 : 처음으로 사물 인터넷을 만들어 볼 수 있는 기회였다. 코로나19로 인해 대면 수업이 불가능한 상황이였지만 조원들과의 의사소통을 통해 이를 극복할 수 있었다. 이제껏 컴퓨터 프로그램을 이용해 설계를 해왔었지만, 이번 프로젝트에서는 직접 만들어 구현하면서 하드웨어 자체를 구현한다는 것이 매우 어렵다는 것을 알게 되었다.
허*제 : 무언가를 바닥부터 직접 만들어보는 경험은 처음이여서 흥미로웠다. 어플리케이션을 제작하면서 많은 것을 배웠고, 기기 제작 시에 우리가 학과 과정에서 배웠던 내용뿐만 아니라 회로나 ADC에 관련된 내용들이 필요하다는 것을 통해 많은 것을 공부해야겠다는 생각이 들었다.