"내장 내시경 - Smart Lens Case"의 두 판 사이의 차이

MIE capstone
이동: 둘러보기, 검색
(최종 결과물)
(최종 결과물)
252번째 줄: 252번째 줄:
  
 
[[파일:최종.png|400픽셀]]
 
[[파일:최종.png|400픽셀]]
 +
[[파일:최종오픈.png|400픽셀]]
  
 
===미구현 내용===
 
===미구현 내용===

2020년 6월 20일 (토) 09:33 판

프로젝트 소개

프로젝트 명

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를 적절히 설계한다면 렌즈 사용자들의 불편함을 줄일 뿐만 아니라 시력 정보 데이터 관리를 통해 시력의 감소를 예방할 수 있을 것이라고 예상된다.

<연간 성인 안경 및 콘택트렌즈 사용률>

목적 계통도

계통도.PNG
● 편리성

앞서 언급한 것처럼 Smart Lens Case는 세척 기능, 세척액의 자동 교환 메커니즘, 그리고 안드로이드를 이용해 결과물과 연동하여서 사용자에게 다양한 서비스를 제공한다. 이때 유의해야 할 점으로는 사용자가 사용하기 편리해야 한다는 점이다. 이름 좀 더 세분화하여 나타내겠다.

정밀성 – 세척액을 새로 공급하거나, 렌즈를 착용한 시간을 측정할 때 개발자가 설정한 값으로 구현되지 않는다면 새로 공급한 세척액의 양이 너무 적어 렌즈가 훼손되기도 하고, 사용자에게 정확한 렌즈 착용 시간을 제공할 수 없다. 따라서 기존에 설정한 설정값에 정밀한 값을 보이는 센서들을 사용하여 정밀성을 확보한다.

자동화 – ‘Smart’ 라는 이름에 적합하도록 결과물은 자동적으로 각각의 기능들을 구현한다. 사용자의 편의를 위해 세척액의 공급/배출, 렌즈의 세척을 버튼을 통해 기기 자체적으로 동작하도록 구현한다. 위 기능 구현을 위해 라즈베리 파이, 모터, 초음파 거리 센서를 연동시킨다. 또한 수위 센서를 이용해 남아있는 세척액의 양을 자동적으로 파악하고 일정량 이하가 된다면 사용자에게 세척액 교환 필요 여부를 알리도록 한다.

직관성 – 정밀성과 자동화 기능을 갖고 있는 Smart Lens Case는 Firebase 서버를 이용해 안드로이드 폰과 연동되어 사용자에게 렌즈 착용 시간, 세척액의 남아 있는 양과 같은 정보를 확인할 수 있다. 이때 사용자 개인 정보를 추가적으로 입력하게 되면 시력 데이터, 사용자 근방의 렌즈 구매처 등의 정보를 얻을 수 있는데, 어플 디자인이 복잡하지 않기 때문에 사용자가 직관적으로 사용할 수 있다.

심미성 – 화장실이나 화장대에 결과물이 배치될 것이라 예상되기 때문에 각각의 장소에 어울리는 외형을 가져야 한다. 이를 위해 결과물을 이루는 장치들을 크기가 작은 것들을 우선적으로 선택한다. 그리고 외형을 설계할 때 내부 공간을 최대한 활용하여 부피를 최소화하도록 하며 3D 프린트를 이용해 제작한다.

● 유지 보수성

소프트웨어 – 대부분의 데이터 처리는 라즈베리파이에서 이루어지고 사용자는 어플을 통해 처리 된 데이터를 확인할 수 있다. 그리고 데이터 처리 과정자체도 복잡하거나 병렬처리를 요구하는 것이 아니기 때문에 소프트웨어적 측면에서 에러가 발생할 확률이 적기에 유지 보수에 용이하다.

하드웨어 – 3D 프린트해서 만든 외형은 조립식으로 제작되기 때문에 라즈베리파이에 연결되어 있는 센서, 모터, 기어와 같은 장치들을 손쉽게 교체할 수 있다. 또한 기어 같은 경우에는 특별히 제작해서 사용할 수도 있지만, 표준 규격에 맞도록 구입해 제작한다. 이를 통해 사용자는 노화되거나 고장 난 하드웨어를 직접 교체할 수 있기 때문에 유지 보수에 용이하다.

● 경제성

세척액의 자동 교환 메커니즘 구현을 위해 필요한 모터의 수를 최소화하는 설계를 하고, 데이터 처리를 라즈베리파이에서 수행하기 때문에 구입하는 장치들의 비용을 최소화한다. 또한 라즈베리파이는 저전력으로 동작하기 때문에 Power를 항시 입력받더라도 유지비가 저렴하다.

동작 시나리오

구현 내용

역할분담 및 추진체계


역할.PNG

시스템 구성

기구부 설계 및 구현


초기.PNG 카티아.PNG

위의 그림은 렌즈통의 세척부에 초음파 거리 센서 및 접촉식 수위센서를 초기 모델링과 3D 프린터 출력을 위한 최종 CATIA V5 모델이다. 기구부에서는 크게 공급부, 세척부, 배출부 3가지 부분으로 나뉜다. 3D 프린터 출력 방식과 재질상의 문제로 누수의 위험이 생겨 액체를 접하는 공간은 방수 스프레이와 셀로판지와 실리콘을 이용하여 2중 방수처리를 하였다.


- 공급부


접촉식수위.png 실공급.PNG

공급부는 렌즈 세척액을 보존 및 공급하는 공간을 담당한다. 공급부에 남은 세척액의 잔량을 파악하기 위해 접촉식 수위센서로 공급부의 수위를 측정하여 데이터를 수신한다. 세척액의 공급양에 대한 정도는 세척부의 초음파 센서의 파악 여부로 결정한다. 충분한 세척액을 담을 수 있을 정도의 부피로 구성하였다. 사용자는 해당 센서를 통해 공급부의 세척액 잔량 데이터를 확인할 수 있고, 이를 통해 사용자에게 세척액의 공급이 필요하다고 알릴 수 있다.


- 세척부

세척부.PNG

세척부는 렌즈가 세척되고 보존되는 공간을 담당한다. 렌즈를 쉽게 수납하기 위해 경첩을 이용하여 뚜껑부분을 구성하였다. 세척부에는 2가지 주요 부품으로 구성된다.

1. 진동 소자

세척부 바로 옆 공간에 진동 소자를 배치할 공간을 설계하였다. 이 공간에 사용할 진동 모터를 삽입하고 세척부에 진동을 잘 전달할 수 있게 빈 공간에 진동을 잘 전달할 수 있는 물질을 삽입하여 적절한 조치를 취하였다.

2. 초음파 센서

초음파 거리 센서는 초음파를 발사하고, 후에 물체에 반사되어 돌아오는 시간을 통해 거리를 계산하는 동작을 수행한다. GPIO핀에서 VCC 핀과 GND 핀을 초음파 센서 모듈 1, 4번 핀에 연결하여 사용한다. 해당 센서는 렌즈통의 뚜껑에 위치할 것이며, 다음과 같은 역할을 수행하게 될 것이다. 초음파 센서는 렌즈 혹은 세척액이 세척부에 존재된다고 파악되면 세척을 진행할 조건이 충족된다. 이는 세척액 공급, 렌즈 세척, 세척액 배출로 이어지는 동작을 수행하게 된다. 초음파 센서의 거리 데이터를 유의미하게 받기 위해 세척부의 부피를 알맞게 조정하였다.


-배출부

배출부.PNG

배출부는 세척부에서 세척이 모두 끝난 뒤 오염된 세척액이 배출되는 공간이다. 이는 서랍처럼 편하게 수납할 수 있도록 서랍형식으로 구성하였고, 오염된 세척액이 차있다면 배출부를 꺼내어 용액을 버리는 방식이다.


-etc

Etc.PNG

라즈베리 파이, 솔레노이드, 각종 배선을 적절히 배치하기 위한 공간을 설계하였다. 배선에서 문제가 발생할 부분을 대비하여 이를 수정할 수 있도록 케이스 옆면을 분리할 수 있도록 하드웨어를 구성하였다.

제어부 및 회로 구현


전체적인 회로구성은 다음과 같다. 라즈베리 파이를 이용하여 제어해야할 주요 부품은 초음파 센서, 접촉식 센서, 진동 소자, 솔레노이드 밸브, 수동 스위치가 있다.

초음파 센서 회로도

초음파.PNG 초음파회로.PNG

위의 그림은 초음파 거리 센서의 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에 가깝게 만들어 주어 문제를 해결 할 수 있었다. 아래 그림은 실제로 구현한 결과이다.

초음파개략도.PNG

Trigger를 GPIO output으로, Echo를 GPIO input으로 설정한다. Trigger에 10us동안 High신호를 주고, Echo에 신호가 들어갔다고 판단되면 time.time() 함수를 통해 해당 시각을 pulse_start라는 변수에 저장한다. 이후 초음파가 반사되어 돌아왔다고 판단되면, 즉 Echo가 Low 신 호가 될 때의 시각을 pusle_end라는 변수에 저장한다. 이제 해당 두 시각을 빼주면 초음파가 왕복한 시간을 구할 수 있게 되고, 해당 시간을 사전에 선언한 distance_In_cm함수를 통해 거리로 환산한다. 결과적으로 초음파 센서와 물체 사이 의 거리가 계산되는 것이다.

접촉식 수위 센서

접촉식프로토.PNG

접촉식 수위센서는 아날로그 센서이므로, 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

필드.PNG

가. 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를 동일하게 적용시킬 수 있다는 장점이 있다. 아래 그림은 지금까지 설명한 어플과 라즈베리파이의 연결을 도식화한 것이다. 그리고 각각의 기능에 대해 서버와 어떻게 통신되고 있는지를 모식도로 나타내었다.

어플연결.png


모바일 어플리케이션은 현재 UI 구현과 화면 전환을 구현하였으며 파이어베이스 서 버와 연동을 구현하였다. 회원가입시 아이디와 비밀번호, 이메일을 입력하여 회원 가입을 하며 데이터는 파이어베이스에 id_list에 저장하며 저장되는 항목으로는 아이 디, 비밀번호, 이메일 및 기기에서 사용할 제어 신호와 사용자의 시력 데이터가 있다. 현재 아이디와 비밀번호, 이메일을 서버에 저장되는 것이 구현되었다. 로그인 시에 는 입력된 ID와 비밀번호를 데이터베이스에 저장된 ID와 비밀번호와 비교하여 같다면 로그인을 하는 방식으로 진행한다. 비밀번호를 잊은 경우에는 가입 시 입력했던 이메 일을 입력하면 파이어베이스를 통해 이메일로 아이디와 비밀번호를 변경할 수 있도록 한다. 어플리케이션을 통해 자동모드 세척 진행이 가능하고, 추가적으로 시력데이터를 입력하고 이를 그래프화 시켜 사용자의 시력데이터를 보기 쉽게 만들었다.


어플.PNG

프로젝트 결과

최종 결과물

최종.png 최종오픈.png

미구현 내용

프로젝트 평가

평가항목

평가항목.PNG

평가결과

느낀점