"6x3=18 - BIG Private Box"의 두 판 사이의 차이
EmSys2024A (토론 | 기여) (→프로젝트의 배경 및 기대효과) |
(→프로젝트 평가) |
||
(사용자 2명의 중간 판 178개는 보이지 않습니다) | |||
2번째 줄: | 2번째 줄: | ||
===프로젝트 명=== | ===프로젝트 명=== | ||
− | BIG(Barcode-Identification-Guaranteeing) Private Storage Box | + | '''BIG(Barcode-Identification-Guaranteeing) Private Storage Box''' - 바코드 인증 방식의 개인용 무인 택배함 시스템 설계 |
− | |||
===프로젝트 기간=== | ===프로젝트 기간=== | ||
13번째 줄: | 12번째 줄: | ||
서울시립대학교 기계정보공학과 (20164300**) (박*호) <br/> | 서울시립대학교 기계정보공학과 (20164300**) (박*호) <br/> | ||
서울시립대학교 기계정보공학과 (20184300**) (최*리) <br/> | 서울시립대학교 기계정보공학과 (20184300**) (최*리) <br/> | ||
+ | |||
+ | ===GITHUB=== | ||
+ | 어플리케이션, 잠금장치 모듈, 바코드 인식 모듈, 도난 감지 모듈 소스코드 <br/> | ||
+ | [https://github.com/only-juun/6x3equals18 6x3equals18 깃허브] | ||
==프로젝트 개요== | ==프로젝트 개요== | ||
===용어 정의=== | ===용어 정의=== | ||
− | + | 1. 바코드 | |
− | + | :컴퓨터로 판독 가능한 1차원 선형 코드 및 2차원 매트릭스 코드를 통칭한다. <br> | |
− | + | 2. 기구부 | |
+ | :직접 제작한 택배함의 모형을 명칭한다. <br> | ||
+ | 3. 데이터베이스 | ||
+ | :Firebase의 Firestore Database(비관계형 데이터베이스)와 Storage(데이터 저장소)를 통칭한다. <br> | ||
===프로젝트 요약=== | ===프로젝트 요약=== | ||
− | + | 바코드를 사용하는 개인용 무인 택배함 시스템을 개발하여 사용자와 택배기사 모두 간편하게 택배를 주고 받을 수 있도록 한다. 사용자는 어플리케이션을 통해 인터페이스를 제공받으며 어플리케이션을 통해 택배함과 관련한 다양한 기능을 이용할 수 있다. 무인 택배함의 잠금장치를 통해 사용자의 물품을 안전하게 보관하고 개인 정보 노출 사고를 방지할 수 있으며, 함께 탑재된 도난 시도 감지 기능으로 수령자의 부재 시 발생할 수 있는 도난 사고를 예방하거나 빠르게 조치할 수 있도록 할 수 있도록 도와준다. 택배 기사는 송장 번호 바코드를 스캔하여 잠금장치를 해제함으로써 부재중인 사용자와 연락하거나 무인 택배함의 비밀번호를 설정하고 알려주어야 하는 등의 추가적인 상호작용 없이 손쉽고 빠르게 배송을 완료할 수 있다. | |
===프로젝트의 배경 및 기대효과=== | ===프로젝트의 배경 및 기대효과=== | ||
− | + | ====배경==== | |
− | + | '''1. 증가하는 1인 가구 및 택배 이용량''' | |
− | + | :1인 가구가 점점 증가하고 있고, 택배 이용횟수 역시 증가하는 추세이다. 대부분의 1인 가구는 경제활동인구이므로 택배를 직접 받는 데 어려움이 있다. 따라서 수령자 부재 시에 택배 기사가 택배를 문 앞에 놓고 가는 경우가 빈번하고, 이는 도난 사고와 개인 정보 노출 사고로 이어질 위험이 있다. 그뿐 아니라, 부재중 택배 수령은 택배 이용 시 사용자와 택배 기사 모두에게 가장 큰 불편함을 주는 요소이다. | |
− | + | :[[파일:6x3=18그림1.png|400픽셀|섬네일|가운데|택배이용 횟수 추이]] | |
− | : | + | <div><ul class = "center"> |
− | : | + | <li style="display: inline-block;">[[파일:6x3=18그림2.png|섬네일|가운데|택배이용 시 불편한 점]] |
− | + | <li style="display: inline-block;">[[파일:6x3=18그림3.png|섬네일|가운데|택배시장 물동량 및 피해구제 신청]] | |
− | + | </ul></div> | |
− | + | ||
− | + | ||
− | + | '''2. 공공 무인 택배함 사용 시 어려움''' | |
− | + | :공공 무인 택배함은 택배 수령자에게 부재 시 발생할 수 있는 ‘도난 사고’의 위험과 ‘개인 정보 노출 사고’의 위험으로부터 어느 정도의 안전성을 제공한다. 하지만 공공 무인 택배함의 보급률은 그리 높지 않고, 1인 가구의 경우에는 접근성 역시 현저히 낮다. 공공시설이기에 철저한 관리가 필요하지만, 실제 운영 시에 미수령 물품에 대한 관리가 제대로 이루어지지 않아 이용 가능한 무인 택배함을 찾기 어려울 때가 있다. | |
− | + | :공공 무인 택배함은 택배 수령자뿐만 아니라 택배 기사에게도 불편함이 있다. 택배 기사들이 공공 무인 택배함을 이용할 때마다 비밀번호를 설정하고 사용자에게 그 비밀번호를 전달해야 하는 과정을 거쳐야 하므로 시간적인 손해가 생긴다. 이는 수많은 택배를 정해진 시간 안에 배송해야 하는 택배 기사에게 매우 큰 번거로움으로 다가온다. | |
− | + | :[[파일:6x3=18그림4.png|섬네일|가운데|무인택배함 현황]] | |
− | |||
− | + | '''3. 개인용 무인 택배함 사용 시 불편함''' | |
− | : | + | :공공 무인 택배함의 불편함을 해결하고자 개인용 무인 택배함 역시 등장하였다. 이러한 제품들은 개폐를 위해 열쇠나 비밀번호를 사용한다. |
− | ::무인 택배함을 | + | <div><ul class = "center"> |
− | + | <li style="display: inline-block;">[[파일:6x3=18그림5-1.png|섬네일|가운데|무인택배함1]] | |
+ | <li style="display: inline-block;">[[파일:6x3=18그림5-2.png|섬네일|가운데|무인택배함2]] | ||
+ | </ul></div> | ||
+ | :열쇠형 무인 택배함은 한 번 택배함을 닫은 이후에는 열쇠를 사용하여 열어야 하므로, 2개 이상의 택배를 수령하기 어렵다는 문제점이 있다. 비밀번호형 무인 택배함은 사용자가 비밀번호를 사전에 택배 기사에게 전달해야 하므로 보안을 위해 주기적인 비밀번호 변경이 필요하고 이는 이후에 또 다시 새로운 비밀번호를 택배 기사에게 전달해야 한다는 번거로움이 있다. | ||
− | + | ====기대효과==== | |
− | : | + | '''1. 도난 사고 및 오배송, 개인 정보 노출 사고 방지''' |
+ | :무인 택배함을 열 수 있는 바코드는 사용자가 어플리케이션을 통해 생성할 때마다 갱신이 되는 사용자용 고유 QR코드와 사용자의 물품의 송장 번호를 담고 있는 바코드 두 가지이다. 따라서 어플리케이션 사용자와 물품을 가지고 있는 택배 기사만이 택배함을 열 수 있으므로 택배 배송 이후 발생할 수 있는 도난 사고와 개인 정보 노출 사고 등을 방지할 수 있다. 또한, 오배송된 물품의 바코드로는 택배함을 열 수 없으므로 택배 기사의 실수로 발생하는 오배송 사고를 예방할 수 있다. | ||
+ | :또한, 도난 시도 감지 메커니즘을 통해 도난 시도가 감지되면 어플리케이션을 통해 사용자에게 알림을 전송하여 사용자가 도난에 대해 신속한 대처를 할 수 있도록 도와준다. 이후 일정 시간 간격으로 택배함 내부를 촬영하여 데이터베이스에 저장하고 사용자 어플리케이션을 통해 촬영된 이미지를 확인할 수 있도록 한다. | ||
− | + | '''2. 사용자와 택배 기사 모두의 편리한 사용''' | |
+ | :사용자는 어플리케이션을 통해 생성되는 QR코드를 사용해 택배함을 간편하게 열 수 있다. 또한 사용자가 어플리케이션을 통해 주문한 물품의 송장 번호를 등록하면 해당 바코드 정보가 데이터베이스에 저장되어 택배 기사가 해당 물품을 배송할 때 사용자와의 추가적인 연락 없이도 택배함을 열 수 있고, 사용자는 택배함에 해당 물품이 도착했을 때 어플리케이션을 통해 도착 알림을 받을 수 있다. 이러한 택배함의 독립적 사용은 사용자와 택배 기사 간 불필요한 상호작용을 줄이며 택배 기사와 사용자의 추가적인 부담을 줄일 수 있다. | ||
===목적 계통도=== | ===목적 계통도=== | ||
− | [[파일:6x3= | + | [[파일:6x3=18_목적계통도.png|1000픽셀|섬네일|가운데|목적계통도]]<br> |
− | |||
− | |||
− | |||
− | + | '''1. 편의성''' | |
− | : | + | : 개인용 무인 택배함은 사용자의 집 문 바로 앞에 비치를 할 수 있기 때문에 주거 건물의 공공 무인 택배함이 없어 무인 택배함을 사용하기 위해서는 먼 거리를 이동해야 하는 1인 가구들에게 지리적으로 높은 수준의 접근성을 제공할 수 있고, 사용자 어플리케이션을 통해 택배 송장 번호를 등록하거나 알림을 확인하는 등 어느 곳에서든 원격으로 택배함에 접근할 수 있다. |
− | : | + | : 또한 바코드 스캔 인증 방식을 채택하여 수령자와 배송자 모두 직관적으로 택배함을 사용할 수 있게 한다. |
− | + | '''2. 실용성''' | |
− | : | + | : 바코드 인증 방식과 사용자 어플리케이션을 활용한 개인용 무인 택배함은 수령자가 도착 예정인 물품의 송장 번호를 어플리케이션을 사용해 등록함으로써, 수령자와 배송자의 독립적인 사용이 가능하게 하여 무인 택배함의 비밀번호 및 기타 정보들을 전달하는 등의 불필요한 상호작용을 제거할 수 있다. |
+ | : 의류나 개인 용품 등 비교적 크지 않은 물품의 배송이 잦은 1인 가구의 특성을 고려하여 택배함의 크기를 선택하고, 2단으로 접고 펼 수 있도록 제작함으로써 집 앞 공간을 낭비하지 않고 효율적으로 사용할 수 있다. | ||
− | :4. 경제성 | + | '''3. 보안성''' |
− | + | : 기구적 장치와 잠금 장치를 사용하여 제품 자체의 도난 및 물품의 도난을 방지하고 정확한 바코드 스캔과 데이터베이스를 통한 인증 과정을 거쳐 인증이 성공한 경우에만 택배함을 개방함으로써 제품의 보안성을 강화한다. 쉽게 생성이 가능한 바코드의 특성을 고려하여 사용자의 개인용 QR코드는 사용자가 어플리케이션을 통해 생성한 이후 일정 시간이 지난 후에는 무효화되어 임의의 바코드를 사용한 비정상적인 접근 시도를 차단하고 택배함을 개인화하여 사용할 수 있게 한다. | |
+ | |||
+ | '''4. 경제성''' | ||
+ | :시중에 판매되고 있는 열쇠형 및 비밀번호형 개인용 무인 택배함들은 크기와 기능에 따라 기본 10 ~ 20 만원의 가격대를 형성하고 있다. 제작 비용은 이를 초과하지만 바코드 인식 기능 및 사용자 어플리케이션 활용 등 추가적인 기능을 고려하고 프로토타입 제작 비용임을 감안했을 때, 실제 제품의 가격은 다른 경쟁 제품과 근소한 차이라고 할 수 있을 것이다. 거의 동일한 가격에 추가적인 기능을 추가함으로써 제품의 경제성을 추구하고자 한다. | ||
==동작 시나리오== | ==동작 시나리오== | ||
===정상 시나리오=== | ===정상 시나리오=== | ||
− | [[파일:6x3= | + | [[파일:6x3=18_정상시나리오.png|1600픽셀|섬네일|가운데|정상 시나리오]] |
사용자가 송장 번호를 어플리케이션에 등록하고 등록된 택배가 오는 상황을 가정한다. 택배기사는 송장 번호 바코드를 바코드 인식 모듈에 스캔하면 라즈베리파이에서 송장 번호를 바탕으로 데이터베이스에 해당 번호가 있는 지 확인한다. 해당 송장 번호가 데이터베이스에 있고 Valid 필드가 True인 경우 잠금장치를 해제한다. 이후 데이터베이스에 택배 도착 정보를 저장하고 어플리케이션으로 FCM을 전송하여 사용자는 택배가 도착했다는 알림을 받을 수 있다. | 사용자가 송장 번호를 어플리케이션에 등록하고 등록된 택배가 오는 상황을 가정한다. 택배기사는 송장 번호 바코드를 바코드 인식 모듈에 스캔하면 라즈베리파이에서 송장 번호를 바탕으로 데이터베이스에 해당 번호가 있는 지 확인한다. 해당 송장 번호가 데이터베이스에 있고 Valid 필드가 True인 경우 잠금장치를 해제한다. 이후 데이터베이스에 택배 도착 정보를 저장하고 어플리케이션으로 FCM을 전송하여 사용자는 택배가 도착했다는 알림을 받을 수 있다. | ||
+ | |||
+ | ===오동작 시나리오=== | ||
+ | [[파일:6x3=18_오동작시나리오.png|1600픽셀|섬네일|가운데|오동작 시나리오]] | ||
+ | |||
+ | 바코드 인식 모듈에 바코드를 인식했지만, 잠금장치가 해제되지 않는 경우는 3가지로 정리할 수 있다. 1) 올바른 송장 번호가 데이터베이스에 저장되어있지만, 바코드 인식 모듈에서 바코드를 잘못 판독한 경우, 2) 잘못된 송장 번호가 데이터베이스에 저장된 경우, 3) 사용자와 택배기사 외에 다른 사람이 바코드 인식을 시도하는 경우이다. 3가지 경우 모두 사용자에게 해당 정보를 알려 조치할 필요가 있으므로 라즈베리 파이에서 바코드 스캔 정보와 데이터베이스 내용이 일치하지 않은 횟수를 카운트하고 10초 이내에 바코드 인식 실패 횟수가 3회인 경우 데이터베이스로 해당 정보를 저장한다. 이후 데이터베이스에서 사용자 어플리케이션으로 FCM을 전송하여 사용자가 어플리케이션을 통해 알림을 확인할 수 있게 한다. | ||
+ | |||
+ | ===도난 시도 감지 시나리오=== | ||
+ | [[파일:6x3=18_도난시도감지시나리오.png|2000픽셀|섬네일|가운데|도난 시도 감지 시나리오]] | ||
+ | |||
+ | 진동 센서 모듈에 진동이 감지되면 진동 센서 모듈은 아날로그 출력 신호를 내보낸다. 라즈베리파이는 아날로그-디지털 컨버터를 통해 진동 센서 모듈의 측정값을 입력받고 라즈베리파이에서 도난 시도 감지를 위해 별도로 설정한 진동 세기의 임계 값과 비교한다. 설정한 임계 세기 값 이상의 측정값이 지속되면 도난 시도로 감지하여 데이터베이스로 도난 시도 감지 정보 및 카메라가 촬영한 내부 이미지를 전송한다. 또한, 라즈베리파이는 사용자 어플리케이션에 도난 시도 감지 알림을 보내 사용자가 이를 알 수 있도록 한다. | ||
==구현 내용== | ==구현 내용== | ||
+ | ===역할분담 및 추진체계=== | ||
+ | ====역할분담==== | ||
+ | [[파일:6x3=18_역할분담.png|500픽셀|섬네일|가운데|역할분담]] | ||
+ | |||
+ | ====추진체계==== | ||
+ | [[파일:6x3=18_개발일정.png|1000픽셀|섬네일|가운데|추진계획]] | ||
===시스템 구성=== | ===시스템 구성=== | ||
+ | '''전체구성도'''<br> | ||
+ | [[파일:6x3=18_전체구성도.png|1600픽셀|섬네일|가운데|시스템 전체 구성도]] | ||
===기구부 설계 및 구현=== | ===기구부 설계 및 구현=== | ||
+ | 420mm x 420 mm 크기의 아크릴 판재를 레이저가공기를 사용해 절단하여 택배함의 기본적인 구성 요소들을 제작하였다. 내부 함, 외부 함, 택배함의 문이 있는 앞판과 사용자 가구의 현관문과 부착될 뒷판을 각각 제작하였고, 아래 그림에서 볼 수 있듯 내부 함과 외부 함에 각각의 턱을 만들고 앞판은 내부 함에, 뒷판은 외부 함에 부착하여 내부 함과 외부 함이 분리되지 않도록 제작하였다. | ||
+ | |||
+ | '''1. 기구부 설계''' | ||
+ | <div><ul class = "center"> | ||
+ | <li style="display: inline-block;">[[파일:6x3=18_catia도면1.png|섬네일|가운데|조립 시 모습]] | ||
+ | <li style="display: inline-block;">[[파일:6x3=18_catia도면2.png|섬네일|가운데|조립 전 모습]] | ||
+ | </ul></div> | ||
+ | |||
− | === | + | '''2. 기구부 구현''' |
+ | <div><ul class = "center"> | ||
+ | <li style="display: inline-block;">[[파일:6x3=18_기구부구현2.png|400픽셀|섬네일|가운데|BIG BOX]] | ||
+ | <li style="display: inline-block;">[[파일:6x3=18_기구부구현1.jpg|400픽셀|섬네일|가운데|BIG BOX 거치 시 모습]] | ||
+ | </ul></div> | ||
+ | |||
+ | ===데이터베이스=== | ||
+ | '''1. 데이터베이스 구조'''<br> | ||
+ | [[파일:6x3=18_데이터베이스구조.png|600픽셀|섬네일|가운데|데이터베이스 구조]] | ||
+ | :'''2. 사용자 인증'''<br> | ||
+ | :[[파일:6x3=18_인증.png|600픽셀|섬네일|가운데|사용자 인증]] | ||
+ | :어플리케이션을 통해 입력받은 아이디와 비밀번호를 사용하여 Firebase의 Authentication에서 사용자 UID를 확인할 수 있다. Firestore의 UserList라는 Collection에 접속하여 앞서 확인한 사용자 UID를 Field로 가지는 Document의 이름을 찾아 그 이름과 같은 이름을 가진 Collection에 접속한다. 이 때 접속한 Collection의 이름 즉, 사용자의 UID를 필드로 가진 Document의 이름은 사용자가 회원가입시 등록한 택배함 고유의 이름이다. | ||
+ | :위와 같은 인증 과정을 통해 하나의 택배함만 고정적으로 사용가능한 것이 아니라 여러 사용자가 각자의 택배함을 등록하여 사용할 수 있도록 하였다. | ||
+ | |||
+ | :'''3. 사용자 정보 및 FCM 토큰'''<br> | ||
+ | :[[파일:6x3=18_사용자정보및FCM토큰.png|600픽셀|섬네일|가운데|사용자정보 및 FCM토큰]] | ||
+ | :사용자의 회원가입과 동시에 생성되는 UserAccount Document는 사용자의 계정과 택배함에 대한 정보를 담고 있다. 그 중 Token은 사용자가 어플에 로그인할 때마다 업데이트되도록 설정되어있다. Token은 메세지를 수신하도록 앱을 등록하며 받는 등록토큰으로 어플에 FCM(Firebase Cloud Messaging)을 전송할 때 앱을 구분해주는 용도로 사용한다. 사용자가 로그인하는데 사용한 기기가 바뀌거나 앱을 삭제한뒤 다시 설치하는 등의 경우에서 값이 바뀌기 때문에 로그인할 때마다 Token을 업데이트 해준다. 이를 통해 택배함에 설치된 라즈베리파이에서 FCM을 보내고자 할 때 해당 택배함에 마지막으로 접근한 어플이 설치된 기기로 FCM을 보내게 된다. | ||
+ | |||
+ | :'''4. 개인용 QR코드 및 송장 번호 바코드'''<br> | ||
+ | :[[파일:6x3=18_바코드.png|600픽셀|섬네일|가운데|QR코드 및 송장번호 바코드]] | ||
+ | :사용자가 택배함을 열기 위해 어플에서 QR코드를 생성하면 QRcode라는 Document에 생성된 QR 코드가 저장되고 valid값이 true가 된다. 15초가 지나면 valid가 false로 업데이트 되어 더 이상 사용할 수 없게 된다. | ||
+ | :어플에서 송장 번호(code)와 택배 내용(Info)를 입력하게 되면 해당 택배와 관련된 내용들이 등록시간과 택배내용을 이름으로 갖는 Document가 생성되며 Document 하위 Field에 저장된다. 저장되는 내용에는 Date, Info, code, valid가 있는데 이중 code와 valid의 경우 필드의 이름을 QRcode라는 Document아래의 필드명과 동일하게 두어 라즈베리파이에서 유효한 code값을 찾기 쉽도록 하였다. 송장 번호 바코드의 valid는 해당 바코드로 함이 열리게 되면 false로 업데이트된다. Date의 경우 value로 바코드 등록 시각을 가지고 있어서 등록 시각을 기준으로 한달이 지나면 valid가 false인 택배에 대한 document를 삭제하는데 사용한다. 어플에서 배송 완료된 목록을 확인하기 위해 한달의 시간을 두도록 하였다. | ||
+ | |||
+ | :'''5. 로그''' | ||
+ | :[[파일:6x3=18_로그.png|600픽셀|섬네일|가운데|로그]]<br> | ||
+ | :로그가 등록된 시간을 key값으로 하여 map의 형태로 로그를 저장한다. 각각의 map, 즉 로그안에는 Code, Date, Event, Info를 저장한다. Code에는 해당 Event가 발생한 택배의 코드를, Info에는 택배의 내용을 저장한다. 어플리케이션에서 로그 목록 창을 들어갈때마다 Log안의 map 중 최근 10개를 제외하고 삭제한다. | ||
+ | |||
+ | :'''6. Storage''' | ||
+ | :[[파일:6x3=18_Storage.png|600픽셀|섬네일|가운데|Storage]]<br> | ||
+ | :도난 시도 감지 후 촬영한 이미지는 촬영 시각 뒤에 0~4까지의 숫자를 붙인 이름으로 라즈베리파이에서 5장씩 전송한 사진은 Firebase Storage에 저장 된다. | ||
+ | |||
+ | ===회로 구현=== | ||
+ | [[파일:6x3=18_회로구현.png|1600픽셀|섬네일|가운데|회로도 구성]]<br> | ||
+ | 1. 바코드 인식 모듈 | ||
+ | :사용자 개인QR코드와 택배 송장 바코드를 스캔하여 얻은 정보를 USB를 통해 라즈베리 파이로 전송한다.<br> | ||
+ | 2. 릴레이모듈 | ||
+ | :라즈베리파이의 GPIO를 통해 입력이 들어오면 솔레노이드 회로에 전류가 흐를 수 있게 제어한다.<br> | ||
+ | 3. 솔레노이드 잠금장치 | ||
+ | :잠금장치에 전류가 흐를 때 솔레노이드의 Thrust Pin이 뒤쪽으로 들어가 잠금이 해제된다.<br> | ||
+ | 4. 전원 공급 장치 | ||
+ | :솔레노이드 잠금장치는 라즈베리파이보다 높은 12V 전압에서 동작한다. 따라서 높은 전압의 전원을 공급하기 위해 사용된다.<br> | ||
+ | 5. 문닫힘 감지 센서 | ||
+ | :자석을 이용하여 자석센서가 가까워지면 1을 출력한다. GPIO에서 값을 읽어 문이 닫혔는지 파악할 수 있다.<br> | ||
+ | 6. 진동 감지 센서 | ||
+ | :측정된 진동 세기 값을 출력한다.<br> | ||
+ | 7. AD 컨버터 | ||
+ | :진동 감지 센서로부터 입력된 값을 디지털 출력으로 변환하여 라즈베리파이로 입력한다.<br> | ||
+ | 8. 카메라 모듈 | ||
+ | :도난 시도가 감지되면 일정 주기로 특정 횟수만큼 택배함의 내부를 촬영한다.<br> | ||
+ | 9. 네오픽셀 | ||
+ | :택배함 내부가 어두울 경우 카메라 모듈로 촬영한 영상을 확인하기 어려울 수 있다. 따라서 촬영하기 전에 네오픽셀 LED 를 켜고 사진 촬영이 끝나고 LED 를 끄도록 한다.<br> | ||
+ | 10. 데이터베이스 | ||
+ | :사용자 개인 바코드 정보와 송장번호를 저장하며 잠금장치 개폐에 관한 로그를 저장한다. 또한 도난 시도 감지 상황의 경우 택배함 내부를 찍은 사진을 저장하고 FCM을 전송한다.<br> | ||
===소프트웨어 설계 및 구현=== | ===소프트웨어 설계 및 구현=== | ||
+ | ====잠금장치 및 바코드 스캔 모듈==== | ||
+ | [[파일:6x3=18_잠금장치및바코드스캔모듈.png|2000픽셀|섬네일|가운데|잠금장치 및 바코드스캔 모듈]] | ||
+ | |||
+ | ====도난 시도 감지 및 카메라 모듈==== | ||
+ | '''1. 도난 시도 감지 알고리즘'''<br> | ||
+ | :'''가. 진동 세기의 임계값과 진동 횟수의 임계값'''<br> | ||
+ | ::'''진동 세기 임계 값'''<br> | ||
+ | :: 아날로그-디지털 컨버터를 통해 라즈베리파이로 입력되는 진동 센서 모듈의 측정 값의 이상 진동 여부 판단 기준. 측정 값을 이상 진동으로 판단하면 이상 진동 감지 횟수를 증가시킨다. | ||
+ | |||
+ | ::'''진동 횟수 임계 값'''<br> | ||
+ | ::이상 진동 감지 횟수와 비교하여 최종적으로 도난 시도 여부를 판단하는 기준. 최초로 이상 진동이 감지된 이후 일정 시간 내에 이상 진동 감지 횟수가 진동 횟수 임계 값에 도달하면 도난 시도가 발생한 것으로 간주한다. 만약 도달하지 못하면 다시 이상 진동 감지 횟수를 초기화한다. | ||
+ | |||
+ | :'''나. 진동 측정 시간 및 임계값의 선정'''<br> | ||
+ | ::'''진동 측정 시간'''<br> | ||
+ | ::간헐적으로 발생하는 진동에 의해 도난 시도 판단이 이뤄지지 않도록 하기 위해 최초 이상 진동을 감지하여 타임스탬프를 생성한 이후 20초 동안을 도난 시도 감지 측정 시간으로 설정했다. | ||
+ | ::'''진동 세기 임계 값'''<br> | ||
+ | ::택배함에 여러 종류의 진동이나 충격을 주었을 때 진동 센서 모듈로부터 측정되는 값을 확인하였다. 어떠한 진동이나 충격이 없는 상황에서는 14~15의 값이 측정되었고, 순간적인 충격이나 지속적인 진동에는 300~600의 값이 측정되었다. 상대적으로 큰 값을 이상 진동으로 판단하기 위해 400을 진동 세기의 임계 값으로 설정했다. | ||
+ | ::'''진동 횟수 임계 값 '''<br> | ||
+ | ::반복적인 실험을 통해 20초 동안 6000번의 이상 진동이 감지되면 도난 시도로 판단하도록 설정했다. | ||
+ | |||
+ | :'''다. 도난 시도 감지 알고리즘 플로우차트'''<br> | ||
+ | :[[파일:6x3=18_플로우차트.png|2000픽셀|섬네일|가운데|도난 시도 감지 알고리즘 플로우차트]] | ||
+ | |||
+ | '''2. 카메라 모듈''' | ||
+ | :'''가. 택배함 내부 촬영'''<br> | ||
+ | ::도난 시도 감지 알고리즘에 의해 도난 시도 판단이 이뤄지면 네오픽셀 조명을 켜고 5초 간격으로 택배함 내부를 5번 촬영한다. | ||
+ | |||
+ | :'''나. 촬영 이미지 저장'''<br> | ||
+ | ::카메라 모듈로 촬영된 이미지는 매 촬영마다 파이어베이스의 저장소로 전송되고 추후 사용자는 어플리케이션을 통해 저장된 이미지를 확인할 수 있다. | ||
+ | |||
+ | ::[[파일:6x3=18_도난시도촬영.png|400픽셀|섬네일|가운데|도난 시도 감지 시 촬영 사진 예시]] | ||
+ | |||
+ | ===어플리케이션=== | ||
+ | '''1. 로그인 및 회원가입'''<br> | ||
+ | |||
+ | [[파일:6x3=18_로그인회원가입.png|400픽셀|섬네일|가운데|로그인&회원가입 화면]] | ||
+ | |||
+ | 어플은 사용자의 이메일주소와 비밀번호를 입력받는 로그인 화면으로 시작한다. 최초 사용자는 회원가입 후 로그인이 가능하다. 사용자는 회원가입 화면에서 이메일과 비밀번호, 택배함 이름을 입력하여 데이터베이스에 사용자 정보를 등록할 수 있다. 이때 택배함 이름은 구입한 택배함의 고유한 이름이다. 회원가입한 정보로 로그인 후 택배함과 관련한 기능을 사용할 수 있다. | ||
+ | |||
+ | '''2. 메인화면'''<br> | ||
+ | [[파일:6x3=18_메인화면.png|200픽셀|섬네일|가운데|메인화면]] | ||
+ | 사용자는 메인화면에서 ‘QR코드’ 생성, ‘택배등록’, ‘택배목록’ 확인, ‘로그목록’ 확인, ‘회원탈퇴’의 기능들을 사용할 수 있다. | ||
+ | |||
+ | '''2-1. QR코드'''<br> | ||
+ | |||
+ | [[파일:6x3=18_QR코드.png|400픽셀|섬네일|가운데|QR코드(활성화&비활성화)]] | ||
+ | |||
+ | 메인화면에서 QR코드 버튼을 누르면 사용자는 택배함을 열기 위해 사용되는 코드를 발급받는다. 해당 QR코드는 랜덤한 문자열로 생성되며, 15초의 유효기간이 지나면 화면에서 사라진다. 이때 나타난 화면의 ‘REFRESH’버튼을 통해 QR코드를 재생성 할 수 있다. QR코드 화면은 구글에서 제공하는 ‘Zebra Crossin(Zxing)’라이브러리를 활용하여 구현하였다. https://github.com/zxing/zxing | ||
+ | |||
+ | '''2-2. 택배등록'''<br> | ||
+ | |||
+ | [[파일:6x3=18_택배등록.png|200픽셀|섬네일|가운데|택배등록]] | ||
+ | |||
+ | 택배등록은 배송예정인 택배의 송장번호와 택배에 대한 간단한 설명을 입력하여 이루어진다. 송장번호는 택배기사가 택배함의 잠금장치를 해제할 때 사용되고, 택배내용은 택배목록에서 사용자가 택배를 식별하는데에 쓰인다. | ||
+ | |||
+ | '''2-3. 택배목록'''<br> | ||
+ | |||
+ | [[파일:6x3=18_택배목록.png|400픽셀|섬네일|가운데|택배목록]] | ||
+ | |||
+ | 택배목록은 ‘배송전’과 ‘배송완료’목록으로 나뉜다. | ||
+ | |||
+ | '''2-4. 로그목록'''<br> | ||
+ | |||
+ | [[파일:6x3=18_로그목록.png|200픽셀|섬네일|가운데|로그목록]] | ||
+ | |||
+ | 로그목록에서는 택배함 개폐, 도난 시도 감지, 바코드 3회 오류 등과 같은 택배함과 관련된 상호작용들을 확인할 수 있다. 도난 시도 감지의 경우 데이터베이스로부터 당시의 사진(5장)을 다운받을 수 있다. 로그목록은 최대 10개 항목이 시간순서대로 정렬된다. | ||
+ | |||
+ | '''2-5. 회원탈퇴'''<br> | ||
+ | |||
+ | [[파일:6x3=18_회원탈퇴.png|200픽셀|섬네일|가운데|회원탈퇴]] | ||
+ | |||
+ | 더 이상 택배함을 사용하지 않는 사용자는 회원탈퇴를 통해 데이터베이스에서 사용자와 관련된 정보를 전부 삭제할 수 있다. | ||
==프로젝트 결과== | ==프로젝트 결과== | ||
===최종 결과물=== | ===최종 결과물=== | ||
− | + | [[파일:6x3equals18_데모영상.mp4]] | |
− | |||
===미구현 내용=== | ===미구현 내용=== | ||
− | |||
− | |||
==프로젝트 평가== | ==프로젝트 평가== | ||
===평가항목=== | ===평가항목=== | ||
− | [[파일:6x3=18_평가항목.png|600픽셀]] | + | [[파일:6x3=18_평가항목.png|600픽셀|섬네일|가운데|평가항목]] |
===평가결과=== | ===평가결과=== | ||
− | [[파일:6x3=18_평가결과.png|600픽셀]] | + | [[파일:6x3=18_평가결과.png|600픽셀|섬네일|가운데|평가결과]] |
1. 바코드 스캔 - 잠금 해제 응답 시간 | 1. 바코드 스캔 - 잠금 해제 응답 시간 | ||
− | + | 바코드 스캐너에 바코드가 스캔된 이후 솔레노이드 잠금장치를 해제하는 함수를 호출하기 전까지 걸린 시간을 20회 반복 측정했다. 1000ms 보다 빠르도록 개발 목표치를 설정하였고 평가 결과 16.35ms로 개발 목표치 보다 낮음을 확인할 수 있었다. 바코드 스캔에 걸리는 시간과 잠금장치 회로에서 잠금해제 신호를 받고 솔레노이드 잠금장치가 열리는 시간을 정확하게 측정하는 것에는 어려움이 있었지만 모두 포함하여 측정하더라도 1000ms 보다 낮은 것을 확인할 수 있었다. | |
2. 잠금 장치 정상 작동률 | 2. 잠금 장치 정상 작동률 | ||
− | + | 사용자 QR 코드 또는 valid가 true인 송장 번호 바코드일 때 정상적으로 잠금 해제 되는 지, valid가 false인 송장 번호 바코드일 때 잠금 해제가 되지 않는 지를 1회로 설정하여 총 20번 반복 측정했다. 평과 결과 20회 모두 정상적으로 동작하였기에 개발 목표치에 이르렀다고 할 수 있다. | |
3. 도난 시도 감지 메커니즘 정확도 | 3. 도난 시도 감지 메커니즘 정확도 | ||
− | + | 사용자와 택배기사가 택배함을 사용하는 상황과 도난 시도를 가정한 상황을 설정했다. 사용자와 택배기사가 택배함을 사용하는 상황에 도난 감지가 작동하지 않고 도난 시도를 가정한 상황에서 도난 감지가 작동 하는 경우를 정상 작동으로 판단하였다. 총 20회 실험 중 11회 성공하여 목표로 한 80%에는 달성할 수 없었다. 대부분 도난 상황이 아닌 상황에서 도난 감지가 작동하여 실패했다. 목표달성에 실패한 원인으로 초기 10회 실험에서의 정확도는 70%였지만 실험의 후반부로 갈수록 진동 감지 센서가 작은 진동에서 작동하여 정확도가 낮아졌다. | |
4. 바코드 인식 정확도 | 4. 바코드 인식 정확도 | ||
− | + | 바코드에 실제로 저장된 데이터와 라즈베리파이에서 인식한 값이 일치하는 지를 100회 반복 측정하였고 택배 송장 바코드에 주로 사용하는 EAN 13타입과 QR코드를 평가에 사용하였다. 정확도는 100%로 바코드에 저장된 정보와 다르게 스캔되는 경우는 없을 것으로 예상할 수 있다. | |
5. 어플리케이션 편의성 | 5. 어플리케이션 편의성 | ||
− | + | 25명 대상으로 설문 조사를 진행하였다. 문항에 대한 평가 점수는 1점(전혀 아니다.)부터 5점(매우 그렇다.)까지로 설정했다. | |
− | [[파일:6x3=18_어플리케이션_설문조사.png|600픽셀]] | + | [[파일:6x3=18_어플리케이션_설문조사.png|600픽셀|섬네일|가운데|어플리케이션 설문조사 결과]] |
==느낀점== | ==느낀점== | ||
이*하 | 이*하 | ||
− | + | ||
+ | 평소 불편함을 느꼈던 주제로 프로젝트를 진행했기 때문에 더욱 재미있게 프로젝트를 진행했던 것 같습니다. 이번 프로젝트를 통해 제품 설계 과정에 대한 전반적인 이해 뿐 아니라 경험도 함께 얻을 수 있었고, 실제로 프로토타입을 제작하여 결과물을 만들어내는 프로젝트가 처음이었기 때문에 더욱 기억에 많이 남을 것 같습니다. 물론 처음이다 보니 일정을 계획하고 계획한 일정을 그대로 소화하는 것에 어려움을 겪기도 하고 각자에게 업무를 배분하는 것에 미숙하기도 했던 것 같습니다. 또한 팀장으로서 스스로의 부족한 모습도 많이 보게 되었고 이를 계기로 팀워크와 팀장의 역할에 대해 더욱 많은 것을 느끼고 배울 수 있었던 것 같습니다. 언젠가 이러한 프로젝트를 다시 하게 된다면 이번 프로젝트 경험을 토대로 더욱 자신 있게 진행할 수 있을 것 같습니다. | ||
남*준 | 남*준 | ||
− | + | ||
+ | 프로젝트를 시작하면서 가장 중요하게 생각한 부분은 팀워크였다. 이러한 유형의 팀단위 프로젝트는 경험해본 적이 없었기 때문에 팀워크가 결과물에 가장 큰 영향을 미칠 것이라고 생각하였다. 서로의 역량과 흥미 등을 파악하여 역할을 나누고, 지속적으로 정보를 교환하면서 프로젝트를 진행하였고, 그 결과 혼자 했을 때는 불가능한 만족스러운 결과물을 얻을 수 있었다. 이러한 팀프로젝트의 과정들이 나에게는 하나의 팀스포츠처럼 다가왔다. 팀스포츠에서는 모든 선수들이 우승이라는 목표를 향해 각자의 부분에서 최선을 다한다. 서로가 가진 재능과 조건들은 다르지만 서로의 부족한 점은 채워주고, 뛰어난 것은 배우면서 같이 성장한다. 나 또한 이 프로젝트를 통해서 팀원들 덕분에 많은 것을 배우고 성장할 수 있었고, 팀워크의 의미를 되새길 수 있었다. | ||
박*호 | 박*호 | ||
− | + | ||
+ | 설계 및 시뮬레이션은 많이 해봤지만 설계부터 제작은 처음이라 흥미로우면서도 어려움도 많았습니다. 부품이 제대로 동작하지 않은 경우도 많았고 사용 방법이 자세하지 않은 경우도 많았지만 팀원과 함께 해결하는 것이 도움이 되었고 팀워크가 중요하다는 것을 많이 배웠습니다. 또한, 역학적 해석이 항상 필요하다는 것도 알 수 있었습니다. 이번 프로젝트에서 어려움이 많았지만 다음 학기에는 더 높은 수준의 프로젝트를 완성도있게 진행해보고 싶어졌습니다. 이 과목을 통해 다양하게 많은 것을 배울 수 있었고 다른 학생들에게 종합설계 이전에 내장형을 수강하는 것을 추천해 주고 싶습니다. | ||
최*리 | 최*리 | ||
− | + | ||
+ | 라즈베리파이를 이용한 프로젝트를 진행해본 경험이 없어 주제를 정할 때 주제의 난이도를 예상하기 어려웠습니다. 파이어베이스나 데이터베이스 관련 지식이 전혀 없어서 초반에는 어려웠지만 좋은 경험이 되었으며 더 활용해 보고 싶다는 생각이 들었습니다. 또한 파이어베이스가 아닌 MySQL도 사용해보고 싶다는 생각이 들었습니다. 안드로이드 스튜디오에서 주로 파이어베이스를 접근하다보니 안드로이드 어플도 조금 살펴볼 수 있었는데 시간이 부족해 어플의 기능을 더 좋게 만들지 못한 것 같아 아쉽습니다. 기구부의 경우 직접 제작하는 과정이 새로웠습니다. 예상과 다르게 동작을 하거나 예상치 못한 상황이 생기는 경우가 생겼으며 이를 해결하는 데에 어려움을 겪었습니다. 기구부를 더 빨리 만들고 미리 테스트를 충분히 해두지 못한 점이 아쉽습니다. 프로젝트를 진행하면서 팀워크가 중요하다는 것을 다시 한번 느꼈습니다. | ||
==부록== | ==부록== |
2021년 6월 20일 (일) 16:50 기준 최신판
프로젝트 소개
프로젝트 명
BIG(Barcode-Identification-Guaranteeing) Private Storage Box - 바코드 인증 방식의 개인용 무인 택배함 시스템 설계
프로젝트 기간
2021.4.5~2021.6.21
팀 소개
서울시립대학교 기계정보공학과 (20164300**) (이*하) (팀장)
서울시립대학교 기계정보공학과 (20164300**) (남*준)
서울시립대학교 기계정보공학과 (20164300**) (박*호)
서울시립대학교 기계정보공학과 (20184300**) (최*리)
GITHUB
어플리케이션, 잠금장치 모듈, 바코드 인식 모듈, 도난 감지 모듈 소스코드
6x3equals18 깃허브
프로젝트 개요
용어 정의
1. 바코드
- 컴퓨터로 판독 가능한 1차원 선형 코드 및 2차원 매트릭스 코드를 통칭한다.
2. 기구부
- 직접 제작한 택배함의 모형을 명칭한다.
3. 데이터베이스
- Firebase의 Firestore Database(비관계형 데이터베이스)와 Storage(데이터 저장소)를 통칭한다.
프로젝트 요약
바코드를 사용하는 개인용 무인 택배함 시스템을 개발하여 사용자와 택배기사 모두 간편하게 택배를 주고 받을 수 있도록 한다. 사용자는 어플리케이션을 통해 인터페이스를 제공받으며 어플리케이션을 통해 택배함과 관련한 다양한 기능을 이용할 수 있다. 무인 택배함의 잠금장치를 통해 사용자의 물품을 안전하게 보관하고 개인 정보 노출 사고를 방지할 수 있으며, 함께 탑재된 도난 시도 감지 기능으로 수령자의 부재 시 발생할 수 있는 도난 사고를 예방하거나 빠르게 조치할 수 있도록 할 수 있도록 도와준다. 택배 기사는 송장 번호 바코드를 스캔하여 잠금장치를 해제함으로써 부재중인 사용자와 연락하거나 무인 택배함의 비밀번호를 설정하고 알려주어야 하는 등의 추가적인 상호작용 없이 손쉽고 빠르게 배송을 완료할 수 있다.
프로젝트의 배경 및 기대효과
배경
1. 증가하는 1인 가구 및 택배 이용량
- 1인 가구가 점점 증가하고 있고, 택배 이용횟수 역시 증가하는 추세이다. 대부분의 1인 가구는 경제활동인구이므로 택배를 직접 받는 데 어려움이 있다. 따라서 수령자 부재 시에 택배 기사가 택배를 문 앞에 놓고 가는 경우가 빈번하고, 이는 도난 사고와 개인 정보 노출 사고로 이어질 위험이 있다. 그뿐 아니라, 부재중 택배 수령은 택배 이용 시 사용자와 택배 기사 모두에게 가장 큰 불편함을 주는 요소이다.
2. 공공 무인 택배함 사용 시 어려움
- 공공 무인 택배함은 택배 수령자에게 부재 시 발생할 수 있는 ‘도난 사고’의 위험과 ‘개인 정보 노출 사고’의 위험으로부터 어느 정도의 안전성을 제공한다. 하지만 공공 무인 택배함의 보급률은 그리 높지 않고, 1인 가구의 경우에는 접근성 역시 현저히 낮다. 공공시설이기에 철저한 관리가 필요하지만, 실제 운영 시에 미수령 물품에 대한 관리가 제대로 이루어지지 않아 이용 가능한 무인 택배함을 찾기 어려울 때가 있다.
- 공공 무인 택배함은 택배 수령자뿐만 아니라 택배 기사에게도 불편함이 있다. 택배 기사들이 공공 무인 택배함을 이용할 때마다 비밀번호를 설정하고 사용자에게 그 비밀번호를 전달해야 하는 과정을 거쳐야 하므로 시간적인 손해가 생긴다. 이는 수많은 택배를 정해진 시간 안에 배송해야 하는 택배 기사에게 매우 큰 번거로움으로 다가온다.
3. 개인용 무인 택배함 사용 시 불편함
- 공공 무인 택배함의 불편함을 해결하고자 개인용 무인 택배함 역시 등장하였다. 이러한 제품들은 개폐를 위해 열쇠나 비밀번호를 사용한다.
- 열쇠형 무인 택배함은 한 번 택배함을 닫은 이후에는 열쇠를 사용하여 열어야 하므로, 2개 이상의 택배를 수령하기 어렵다는 문제점이 있다. 비밀번호형 무인 택배함은 사용자가 비밀번호를 사전에 택배 기사에게 전달해야 하므로 보안을 위해 주기적인 비밀번호 변경이 필요하고 이는 이후에 또 다시 새로운 비밀번호를 택배 기사에게 전달해야 한다는 번거로움이 있다.
기대효과
1. 도난 사고 및 오배송, 개인 정보 노출 사고 방지
- 무인 택배함을 열 수 있는 바코드는 사용자가 어플리케이션을 통해 생성할 때마다 갱신이 되는 사용자용 고유 QR코드와 사용자의 물품의 송장 번호를 담고 있는 바코드 두 가지이다. 따라서 어플리케이션 사용자와 물품을 가지고 있는 택배 기사만이 택배함을 열 수 있으므로 택배 배송 이후 발생할 수 있는 도난 사고와 개인 정보 노출 사고 등을 방지할 수 있다. 또한, 오배송된 물품의 바코드로는 택배함을 열 수 없으므로 택배 기사의 실수로 발생하는 오배송 사고를 예방할 수 있다.
- 또한, 도난 시도 감지 메커니즘을 통해 도난 시도가 감지되면 어플리케이션을 통해 사용자에게 알림을 전송하여 사용자가 도난에 대해 신속한 대처를 할 수 있도록 도와준다. 이후 일정 시간 간격으로 택배함 내부를 촬영하여 데이터베이스에 저장하고 사용자 어플리케이션을 통해 촬영된 이미지를 확인할 수 있도록 한다.
2. 사용자와 택배 기사 모두의 편리한 사용
- 사용자는 어플리케이션을 통해 생성되는 QR코드를 사용해 택배함을 간편하게 열 수 있다. 또한 사용자가 어플리케이션을 통해 주문한 물품의 송장 번호를 등록하면 해당 바코드 정보가 데이터베이스에 저장되어 택배 기사가 해당 물품을 배송할 때 사용자와의 추가적인 연락 없이도 택배함을 열 수 있고, 사용자는 택배함에 해당 물품이 도착했을 때 어플리케이션을 통해 도착 알림을 받을 수 있다. 이러한 택배함의 독립적 사용은 사용자와 택배 기사 간 불필요한 상호작용을 줄이며 택배 기사와 사용자의 추가적인 부담을 줄일 수 있다.
목적 계통도
1. 편의성
- 개인용 무인 택배함은 사용자의 집 문 바로 앞에 비치를 할 수 있기 때문에 주거 건물의 공공 무인 택배함이 없어 무인 택배함을 사용하기 위해서는 먼 거리를 이동해야 하는 1인 가구들에게 지리적으로 높은 수준의 접근성을 제공할 수 있고, 사용자 어플리케이션을 통해 택배 송장 번호를 등록하거나 알림을 확인하는 등 어느 곳에서든 원격으로 택배함에 접근할 수 있다.
- 또한 바코드 스캔 인증 방식을 채택하여 수령자와 배송자 모두 직관적으로 택배함을 사용할 수 있게 한다.
2. 실용성
- 바코드 인증 방식과 사용자 어플리케이션을 활용한 개인용 무인 택배함은 수령자가 도착 예정인 물품의 송장 번호를 어플리케이션을 사용해 등록함으로써, 수령자와 배송자의 독립적인 사용이 가능하게 하여 무인 택배함의 비밀번호 및 기타 정보들을 전달하는 등의 불필요한 상호작용을 제거할 수 있다.
- 의류나 개인 용품 등 비교적 크지 않은 물품의 배송이 잦은 1인 가구의 특성을 고려하여 택배함의 크기를 선택하고, 2단으로 접고 펼 수 있도록 제작함으로써 집 앞 공간을 낭비하지 않고 효율적으로 사용할 수 있다.
3. 보안성
- 기구적 장치와 잠금 장치를 사용하여 제품 자체의 도난 및 물품의 도난을 방지하고 정확한 바코드 스캔과 데이터베이스를 통한 인증 과정을 거쳐 인증이 성공한 경우에만 택배함을 개방함으로써 제품의 보안성을 강화한다. 쉽게 생성이 가능한 바코드의 특성을 고려하여 사용자의 개인용 QR코드는 사용자가 어플리케이션을 통해 생성한 이후 일정 시간이 지난 후에는 무효화되어 임의의 바코드를 사용한 비정상적인 접근 시도를 차단하고 택배함을 개인화하여 사용할 수 있게 한다.
4. 경제성
- 시중에 판매되고 있는 열쇠형 및 비밀번호형 개인용 무인 택배함들은 크기와 기능에 따라 기본 10 ~ 20 만원의 가격대를 형성하고 있다. 제작 비용은 이를 초과하지만 바코드 인식 기능 및 사용자 어플리케이션 활용 등 추가적인 기능을 고려하고 프로토타입 제작 비용임을 감안했을 때, 실제 제품의 가격은 다른 경쟁 제품과 근소한 차이라고 할 수 있을 것이다. 거의 동일한 가격에 추가적인 기능을 추가함으로써 제품의 경제성을 추구하고자 한다.
동작 시나리오
정상 시나리오
사용자가 송장 번호를 어플리케이션에 등록하고 등록된 택배가 오는 상황을 가정한다. 택배기사는 송장 번호 바코드를 바코드 인식 모듈에 스캔하면 라즈베리파이에서 송장 번호를 바탕으로 데이터베이스에 해당 번호가 있는 지 확인한다. 해당 송장 번호가 데이터베이스에 있고 Valid 필드가 True인 경우 잠금장치를 해제한다. 이후 데이터베이스에 택배 도착 정보를 저장하고 어플리케이션으로 FCM을 전송하여 사용자는 택배가 도착했다는 알림을 받을 수 있다.
오동작 시나리오
바코드 인식 모듈에 바코드를 인식했지만, 잠금장치가 해제되지 않는 경우는 3가지로 정리할 수 있다. 1) 올바른 송장 번호가 데이터베이스에 저장되어있지만, 바코드 인식 모듈에서 바코드를 잘못 판독한 경우, 2) 잘못된 송장 번호가 데이터베이스에 저장된 경우, 3) 사용자와 택배기사 외에 다른 사람이 바코드 인식을 시도하는 경우이다. 3가지 경우 모두 사용자에게 해당 정보를 알려 조치할 필요가 있으므로 라즈베리 파이에서 바코드 스캔 정보와 데이터베이스 내용이 일치하지 않은 횟수를 카운트하고 10초 이내에 바코드 인식 실패 횟수가 3회인 경우 데이터베이스로 해당 정보를 저장한다. 이후 데이터베이스에서 사용자 어플리케이션으로 FCM을 전송하여 사용자가 어플리케이션을 통해 알림을 확인할 수 있게 한다.
도난 시도 감지 시나리오
진동 센서 모듈에 진동이 감지되면 진동 센서 모듈은 아날로그 출력 신호를 내보낸다. 라즈베리파이는 아날로그-디지털 컨버터를 통해 진동 센서 모듈의 측정값을 입력받고 라즈베리파이에서 도난 시도 감지를 위해 별도로 설정한 진동 세기의 임계 값과 비교한다. 설정한 임계 세기 값 이상의 측정값이 지속되면 도난 시도로 감지하여 데이터베이스로 도난 시도 감지 정보 및 카메라가 촬영한 내부 이미지를 전송한다. 또한, 라즈베리파이는 사용자 어플리케이션에 도난 시도 감지 알림을 보내 사용자가 이를 알 수 있도록 한다.
구현 내용
역할분담 및 추진체계
역할분담
추진체계
시스템 구성
전체구성도
기구부 설계 및 구현
420mm x 420 mm 크기의 아크릴 판재를 레이저가공기를 사용해 절단하여 택배함의 기본적인 구성 요소들을 제작하였다. 내부 함, 외부 함, 택배함의 문이 있는 앞판과 사용자 가구의 현관문과 부착될 뒷판을 각각 제작하였고, 아래 그림에서 볼 수 있듯 내부 함과 외부 함에 각각의 턱을 만들고 앞판은 내부 함에, 뒷판은 외부 함에 부착하여 내부 함과 외부 함이 분리되지 않도록 제작하였다.
1. 기구부 설계
2. 기구부 구현
데이터베이스
1. 데이터베이스 구조
- 2. 사용자 인증
- 어플리케이션을 통해 입력받은 아이디와 비밀번호를 사용하여 Firebase의 Authentication에서 사용자 UID를 확인할 수 있다. Firestore의 UserList라는 Collection에 접속하여 앞서 확인한 사용자 UID를 Field로 가지는 Document의 이름을 찾아 그 이름과 같은 이름을 가진 Collection에 접속한다. 이 때 접속한 Collection의 이름 즉, 사용자의 UID를 필드로 가진 Document의 이름은 사용자가 회원가입시 등록한 택배함 고유의 이름이다.
- 위와 같은 인증 과정을 통해 하나의 택배함만 고정적으로 사용가능한 것이 아니라 여러 사용자가 각자의 택배함을 등록하여 사용할 수 있도록 하였다.
- 3. 사용자 정보 및 FCM 토큰
- 사용자의 회원가입과 동시에 생성되는 UserAccount Document는 사용자의 계정과 택배함에 대한 정보를 담고 있다. 그 중 Token은 사용자가 어플에 로그인할 때마다 업데이트되도록 설정되어있다. Token은 메세지를 수신하도록 앱을 등록하며 받는 등록토큰으로 어플에 FCM(Firebase Cloud Messaging)을 전송할 때 앱을 구분해주는 용도로 사용한다. 사용자가 로그인하는데 사용한 기기가 바뀌거나 앱을 삭제한뒤 다시 설치하는 등의 경우에서 값이 바뀌기 때문에 로그인할 때마다 Token을 업데이트 해준다. 이를 통해 택배함에 설치된 라즈베리파이에서 FCM을 보내고자 할 때 해당 택배함에 마지막으로 접근한 어플이 설치된 기기로 FCM을 보내게 된다.
- 4. 개인용 QR코드 및 송장 번호 바코드
- 사용자가 택배함을 열기 위해 어플에서 QR코드를 생성하면 QRcode라는 Document에 생성된 QR 코드가 저장되고 valid값이 true가 된다. 15초가 지나면 valid가 false로 업데이트 되어 더 이상 사용할 수 없게 된다.
- 어플에서 송장 번호(code)와 택배 내용(Info)를 입력하게 되면 해당 택배와 관련된 내용들이 등록시간과 택배내용을 이름으로 갖는 Document가 생성되며 Document 하위 Field에 저장된다. 저장되는 내용에는 Date, Info, code, valid가 있는데 이중 code와 valid의 경우 필드의 이름을 QRcode라는 Document아래의 필드명과 동일하게 두어 라즈베리파이에서 유효한 code값을 찾기 쉽도록 하였다. 송장 번호 바코드의 valid는 해당 바코드로 함이 열리게 되면 false로 업데이트된다. Date의 경우 value로 바코드 등록 시각을 가지고 있어서 등록 시각을 기준으로 한달이 지나면 valid가 false인 택배에 대한 document를 삭제하는데 사용한다. 어플에서 배송 완료된 목록을 확인하기 위해 한달의 시간을 두도록 하였다.
- 5. 로그
- 로그가 등록된 시간을 key값으로 하여 map의 형태로 로그를 저장한다. 각각의 map, 즉 로그안에는 Code, Date, Event, Info를 저장한다. Code에는 해당 Event가 발생한 택배의 코드를, Info에는 택배의 내용을 저장한다. 어플리케이션에서 로그 목록 창을 들어갈때마다 Log안의 map 중 최근 10개를 제외하고 삭제한다.
- 6. Storage
- 도난 시도 감지 후 촬영한 이미지는 촬영 시각 뒤에 0~4까지의 숫자를 붙인 이름으로 라즈베리파이에서 5장씩 전송한 사진은 Firebase Storage에 저장 된다.
회로 구현
1. 바코드 인식 모듈
- 사용자 개인QR코드와 택배 송장 바코드를 스캔하여 얻은 정보를 USB를 통해 라즈베리 파이로 전송한다.
2. 릴레이모듈
- 라즈베리파이의 GPIO를 통해 입력이 들어오면 솔레노이드 회로에 전류가 흐를 수 있게 제어한다.
3. 솔레노이드 잠금장치
- 잠금장치에 전류가 흐를 때 솔레노이드의 Thrust Pin이 뒤쪽으로 들어가 잠금이 해제된다.
4. 전원 공급 장치
- 솔레노이드 잠금장치는 라즈베리파이보다 높은 12V 전압에서 동작한다. 따라서 높은 전압의 전원을 공급하기 위해 사용된다.
5. 문닫힘 감지 센서
- 자석을 이용하여 자석센서가 가까워지면 1을 출력한다. GPIO에서 값을 읽어 문이 닫혔는지 파악할 수 있다.
6. 진동 감지 센서
- 측정된 진동 세기 값을 출력한다.
7. AD 컨버터
- 진동 감지 센서로부터 입력된 값을 디지털 출력으로 변환하여 라즈베리파이로 입력한다.
8. 카메라 모듈
- 도난 시도가 감지되면 일정 주기로 특정 횟수만큼 택배함의 내부를 촬영한다.
9. 네오픽셀
- 택배함 내부가 어두울 경우 카메라 모듈로 촬영한 영상을 확인하기 어려울 수 있다. 따라서 촬영하기 전에 네오픽셀 LED 를 켜고 사진 촬영이 끝나고 LED 를 끄도록 한다.
10. 데이터베이스
- 사용자 개인 바코드 정보와 송장번호를 저장하며 잠금장치 개폐에 관한 로그를 저장한다. 또한 도난 시도 감지 상황의 경우 택배함 내부를 찍은 사진을 저장하고 FCM을 전송한다.
소프트웨어 설계 및 구현
잠금장치 및 바코드 스캔 모듈
도난 시도 감지 및 카메라 모듈
1. 도난 시도 감지 알고리즘
- 가. 진동 세기의 임계값과 진동 횟수의 임계값
- 진동 세기 임계 값
- 아날로그-디지털 컨버터를 통해 라즈베리파이로 입력되는 진동 센서 모듈의 측정 값의 이상 진동 여부 판단 기준. 측정 값을 이상 진동으로 판단하면 이상 진동 감지 횟수를 증가시킨다.
- 진동 세기 임계 값
- 진동 횟수 임계 값
- 이상 진동 감지 횟수와 비교하여 최종적으로 도난 시도 여부를 판단하는 기준. 최초로 이상 진동이 감지된 이후 일정 시간 내에 이상 진동 감지 횟수가 진동 횟수 임계 값에 도달하면 도난 시도가 발생한 것으로 간주한다. 만약 도달하지 못하면 다시 이상 진동 감지 횟수를 초기화한다.
- 진동 횟수 임계 값
- 나. 진동 측정 시간 및 임계값의 선정
- 진동 측정 시간
- 간헐적으로 발생하는 진동에 의해 도난 시도 판단이 이뤄지지 않도록 하기 위해 최초 이상 진동을 감지하여 타임스탬프를 생성한 이후 20초 동안을 도난 시도 감지 측정 시간으로 설정했다.
- 진동 세기 임계 값
- 택배함에 여러 종류의 진동이나 충격을 주었을 때 진동 센서 모듈로부터 측정되는 값을 확인하였다. 어떠한 진동이나 충격이 없는 상황에서는 14~15의 값이 측정되었고, 순간적인 충격이나 지속적인 진동에는 300~600의 값이 측정되었다. 상대적으로 큰 값을 이상 진동으로 판단하기 위해 400을 진동 세기의 임계 값으로 설정했다.
- 진동 횟수 임계 값
- 반복적인 실험을 통해 20초 동안 6000번의 이상 진동이 감지되면 도난 시도로 판단하도록 설정했다.
- 진동 측정 시간
- 다. 도난 시도 감지 알고리즘 플로우차트
2. 카메라 모듈
- 가. 택배함 내부 촬영
- 도난 시도 감지 알고리즘에 의해 도난 시도 판단이 이뤄지면 네오픽셀 조명을 켜고 5초 간격으로 택배함 내부를 5번 촬영한다.
- 나. 촬영 이미지 저장
- 카메라 모듈로 촬영된 이미지는 매 촬영마다 파이어베이스의 저장소로 전송되고 추후 사용자는 어플리케이션을 통해 저장된 이미지를 확인할 수 있다.
어플리케이션
1. 로그인 및 회원가입
어플은 사용자의 이메일주소와 비밀번호를 입력받는 로그인 화면으로 시작한다. 최초 사용자는 회원가입 후 로그인이 가능하다. 사용자는 회원가입 화면에서 이메일과 비밀번호, 택배함 이름을 입력하여 데이터베이스에 사용자 정보를 등록할 수 있다. 이때 택배함 이름은 구입한 택배함의 고유한 이름이다. 회원가입한 정보로 로그인 후 택배함과 관련한 기능을 사용할 수 있다.
2. 메인화면
사용자는 메인화면에서 ‘QR코드’ 생성, ‘택배등록’, ‘택배목록’ 확인, ‘로그목록’ 확인, ‘회원탈퇴’의 기능들을 사용할 수 있다.
2-1. QR코드
메인화면에서 QR코드 버튼을 누르면 사용자는 택배함을 열기 위해 사용되는 코드를 발급받는다. 해당 QR코드는 랜덤한 문자열로 생성되며, 15초의 유효기간이 지나면 화면에서 사라진다. 이때 나타난 화면의 ‘REFRESH’버튼을 통해 QR코드를 재생성 할 수 있다. QR코드 화면은 구글에서 제공하는 ‘Zebra Crossin(Zxing)’라이브러리를 활용하여 구현하였다. https://github.com/zxing/zxing
2-2. 택배등록
택배등록은 배송예정인 택배의 송장번호와 택배에 대한 간단한 설명을 입력하여 이루어진다. 송장번호는 택배기사가 택배함의 잠금장치를 해제할 때 사용되고, 택배내용은 택배목록에서 사용자가 택배를 식별하는데에 쓰인다.
2-3. 택배목록
택배목록은 ‘배송전’과 ‘배송완료’목록으로 나뉜다.
2-4. 로그목록
로그목록에서는 택배함 개폐, 도난 시도 감지, 바코드 3회 오류 등과 같은 택배함과 관련된 상호작용들을 확인할 수 있다. 도난 시도 감지의 경우 데이터베이스로부터 당시의 사진(5장)을 다운받을 수 있다. 로그목록은 최대 10개 항목이 시간순서대로 정렬된다.
2-5. 회원탈퇴
더 이상 택배함을 사용하지 않는 사용자는 회원탈퇴를 통해 데이터베이스에서 사용자와 관련된 정보를 전부 삭제할 수 있다.
프로젝트 결과
최종 결과물
미구현 내용
프로젝트 평가
평가항목
평가결과
1. 바코드 스캔 - 잠금 해제 응답 시간
바코드 스캐너에 바코드가 스캔된 이후 솔레노이드 잠금장치를 해제하는 함수를 호출하기 전까지 걸린 시간을 20회 반복 측정했다. 1000ms 보다 빠르도록 개발 목표치를 설정하였고 평가 결과 16.35ms로 개발 목표치 보다 낮음을 확인할 수 있었다. 바코드 스캔에 걸리는 시간과 잠금장치 회로에서 잠금해제 신호를 받고 솔레노이드 잠금장치가 열리는 시간을 정확하게 측정하는 것에는 어려움이 있었지만 모두 포함하여 측정하더라도 1000ms 보다 낮은 것을 확인할 수 있었다.
2. 잠금 장치 정상 작동률
사용자 QR 코드 또는 valid가 true인 송장 번호 바코드일 때 정상적으로 잠금 해제 되는 지, valid가 false인 송장 번호 바코드일 때 잠금 해제가 되지 않는 지를 1회로 설정하여 총 20번 반복 측정했다. 평과 결과 20회 모두 정상적으로 동작하였기에 개발 목표치에 이르렀다고 할 수 있다.
3. 도난 시도 감지 메커니즘 정확도
사용자와 택배기사가 택배함을 사용하는 상황과 도난 시도를 가정한 상황을 설정했다. 사용자와 택배기사가 택배함을 사용하는 상황에 도난 감지가 작동하지 않고 도난 시도를 가정한 상황에서 도난 감지가 작동 하는 경우를 정상 작동으로 판단하였다. 총 20회 실험 중 11회 성공하여 목표로 한 80%에는 달성할 수 없었다. 대부분 도난 상황이 아닌 상황에서 도난 감지가 작동하여 실패했다. 목표달성에 실패한 원인으로 초기 10회 실험에서의 정확도는 70%였지만 실험의 후반부로 갈수록 진동 감지 센서가 작은 진동에서 작동하여 정확도가 낮아졌다.
4. 바코드 인식 정확도
바코드에 실제로 저장된 데이터와 라즈베리파이에서 인식한 값이 일치하는 지를 100회 반복 측정하였고 택배 송장 바코드에 주로 사용하는 EAN 13타입과 QR코드를 평가에 사용하였다. 정확도는 100%로 바코드에 저장된 정보와 다르게 스캔되는 경우는 없을 것으로 예상할 수 있다.
5. 어플리케이션 편의성
25명 대상으로 설문 조사를 진행하였다. 문항에 대한 평가 점수는 1점(전혀 아니다.)부터 5점(매우 그렇다.)까지로 설정했다.
느낀점
이*하
평소 불편함을 느꼈던 주제로 프로젝트를 진행했기 때문에 더욱 재미있게 프로젝트를 진행했던 것 같습니다. 이번 프로젝트를 통해 제품 설계 과정에 대한 전반적인 이해 뿐 아니라 경험도 함께 얻을 수 있었고, 실제로 프로토타입을 제작하여 결과물을 만들어내는 프로젝트가 처음이었기 때문에 더욱 기억에 많이 남을 것 같습니다. 물론 처음이다 보니 일정을 계획하고 계획한 일정을 그대로 소화하는 것에 어려움을 겪기도 하고 각자에게 업무를 배분하는 것에 미숙하기도 했던 것 같습니다. 또한 팀장으로서 스스로의 부족한 모습도 많이 보게 되었고 이를 계기로 팀워크와 팀장의 역할에 대해 더욱 많은 것을 느끼고 배울 수 있었던 것 같습니다. 언젠가 이러한 프로젝트를 다시 하게 된다면 이번 프로젝트 경험을 토대로 더욱 자신 있게 진행할 수 있을 것 같습니다.
남*준
프로젝트를 시작하면서 가장 중요하게 생각한 부분은 팀워크였다. 이러한 유형의 팀단위 프로젝트는 경험해본 적이 없었기 때문에 팀워크가 결과물에 가장 큰 영향을 미칠 것이라고 생각하였다. 서로의 역량과 흥미 등을 파악하여 역할을 나누고, 지속적으로 정보를 교환하면서 프로젝트를 진행하였고, 그 결과 혼자 했을 때는 불가능한 만족스러운 결과물을 얻을 수 있었다. 이러한 팀프로젝트의 과정들이 나에게는 하나의 팀스포츠처럼 다가왔다. 팀스포츠에서는 모든 선수들이 우승이라는 목표를 향해 각자의 부분에서 최선을 다한다. 서로가 가진 재능과 조건들은 다르지만 서로의 부족한 점은 채워주고, 뛰어난 것은 배우면서 같이 성장한다. 나 또한 이 프로젝트를 통해서 팀원들 덕분에 많은 것을 배우고 성장할 수 있었고, 팀워크의 의미를 되새길 수 있었다.
박*호
설계 및 시뮬레이션은 많이 해봤지만 설계부터 제작은 처음이라 흥미로우면서도 어려움도 많았습니다. 부품이 제대로 동작하지 않은 경우도 많았고 사용 방법이 자세하지 않은 경우도 많았지만 팀원과 함께 해결하는 것이 도움이 되었고 팀워크가 중요하다는 것을 많이 배웠습니다. 또한, 역학적 해석이 항상 필요하다는 것도 알 수 있었습니다. 이번 프로젝트에서 어려움이 많았지만 다음 학기에는 더 높은 수준의 프로젝트를 완성도있게 진행해보고 싶어졌습니다. 이 과목을 통해 다양하게 많은 것을 배울 수 있었고 다른 학생들에게 종합설계 이전에 내장형을 수강하는 것을 추천해 주고 싶습니다.
최*리
라즈베리파이를 이용한 프로젝트를 진행해본 경험이 없어 주제를 정할 때 주제의 난이도를 예상하기 어려웠습니다. 파이어베이스나 데이터베이스 관련 지식이 전혀 없어서 초반에는 어려웠지만 좋은 경험이 되었으며 더 활용해 보고 싶다는 생각이 들었습니다. 또한 파이어베이스가 아닌 MySQL도 사용해보고 싶다는 생각이 들었습니다. 안드로이드 스튜디오에서 주로 파이어베이스를 접근하다보니 안드로이드 어플도 조금 살펴볼 수 있었는데 시간이 부족해 어플의 기능을 더 좋게 만들지 못한 것 같아 아쉽습니다. 기구부의 경우 직접 제작하는 과정이 새로웠습니다. 예상과 다르게 동작을 하거나 예상치 못한 상황이 생기는 경우가 생겼으며 이를 해결하는 데에 어려움을 겪었습니다. 기구부를 더 빨리 만들고 미리 테스트를 충분히 해두지 못한 점이 아쉽습니다. 프로젝트를 진행하면서 팀워크가 중요하다는 것을 다시 한번 느꼈습니다.