00 팀 소개
01 프로젝트 소개
02 프로젝트 설계
03 프로젝트 구현
04 프로젝트 결과
마무리
Rapid Automated Integrated Logistics
빠르고 자동화된 통합 물류관리 시스템
| 이름 | 주요 역할 | 상세 |
|---|---|---|
| 최원호 (팀장) | 프로젝트 총괄 | DB / 발표자료 / 시퀀스 다이어그램 |
| 김종명 (팀원) | 설계 | 통신 / SW,HW 아키텍쳐 / 서버 |
| 김지연 (팀원) | GUI | GUI / 발표자료 / 시퀀스 다이어그램 |
| 박효진 (팀원) | 시스템 통합 | 창고, 보안 기술 구현 |
| 박태환 (팀원) | 기술 조사 | 분류기 기술 구현 |
| 분류 | 기술 |
|---|---|
| 개발환경 | |
| 언어 | |
| UI | |
| DBMS | |
| 협업 |
물류 자동화 시스템을 주제로 선정한 이유는 크게 3가지가 있습니다.
첫 번째는 온라인 쇼핑이 증가하고 오프라인 매장 수가 감소하면서 전자상거래가 증가하면서, 해당 주제에 수요가 증가했습니다.
두 번째는 쿠팡이나, 여러 소셜 커머스에서 시행하는 당일 배송으로 인해 짧은 배송시간 수요가 증가했습니다.
세 번째는 각종 기술, 로봇, IoT, 인공지능 등의 발달로 물류 자동화 시스템의 접근성이 높아졌습니다.
이로 인해 물류 자동화 시스템은 앞으로 고성장할 서비스로 판단되었고 사업성이 좋은 아이템으로 생각되어 해당 주제를 선정하게 되었습니다.
| 번호 | 설명 |
|---|---|
| 1 | 물류센터의 입고, 분류, 저장, 출고 과정을 자동화하고 싶다. |
| 2 | 물품을 식품과 비식품으로 분류하고, 식품은 온도별로 보관하고 싶다. |
| 3 | 입고, 출고 및 보관 중인 재고를 수치적으로 시각화해서 한눈에 파악하고 싶다. |
| 4 | 많은 물품을 효율적으로 저장하고, 보관 종류에 따라 다른 창고에 분류 보관하고 싶다. |
| 5 | 창고의 온도는 자동으로 관리되며, 필요 시 온도 조절이 가능해야 한다. |
| 6 | 물품의 유통기한을 파악하고, 물품마다 유통기한 상태를 관리하고 싶다. |
| 7 | 유통기한이 5일 미만인 물품은 경고 알림을 받고, 시각적으로 표시하고 싶다. |
| 8 | 유통기한이 지난 식품은 자동으로 폐기물 처리장으로 분류되며, 알림을 받고 싶다. |
| 9 | 직원들의 출입기록 확인 및 과거 기록 조회 기능이 필요하다. |
| 10 | 물류센터 내부를 실시간 영상으로 모니터링하고 싶다. |
저희는 정의한 사용자 요구사항을 크게 3가지로 구분 할 수 있었습니다.
'분류 / 재고,환경 관리 / 직원 출입 관리' 이렇게 3가지로 구분되었습니다.
사용자 요구사항을 3가지를 각각의 역할에 맞게 정의하여 프로젝트를 설립하였습니다.
| SR_ID | Category | Name | Description | Priority |
|---|---|---|---|---|
| SR_01 | 분류 | 분류장치 원격 제어 기능 | 입고하는 물품들을 분류하는 장치를 원격으로 작동/정지함. 분류할 물품이 없을 때 일정 시간 경과 시 자동 종료됨. |
R |
| SR_02 | 분류 | 물품 분류 기능 | 입고된 물품을 다음 기준에 따라 분류하고 해당 창고로 이동: 냉동, 냉장, 상온, 비식품, 오류물품(분류되지 않은 물품) |
R |
| SR_03 | 분류 | 물품 정보 인식 기능 | 물품의 분류 정보, 판매자, 보관 온도, 유통기한을 인식 후 저장 | R |
| SR_04 | 분류 | 분류대 물품 개수 확인 기능 | 분류 위치별로 분류된 물품 개수를 집계하여 확인 | R |
| SR_05 | 분류 | 분류중 정지 방지 기능 | 입고 종료 시 분류중인 물품이 있으면 알림 표시되며 작동 유지 입고/분류중인 물품 없을 경우 종료 |
R |
| SR_06 | 분류 | 비상 정지 기능 | 입고 중 비상 정지 버튼 누르면 컨베이어/분류기 즉시 정지 입고 수량 남아있어도 강제 정지 가능 |
O |
| SR_07 | 분류 | 입고 상태 실시간 모니터링 기능 | 입고 시작/종료/알림 상태를 모니터에 실시간 반영 | R |
| SR_09 | 환경관리 | 보관창고 모니터링 기능 | 보관창고의 물품 리스트, 창고별 온도, 선반별 상태 모니터링 | R |
| SR_10 | 환경관리 | 온도 제어 기능 | 창고별 온도 기준 설정 및 자동 냉방/난방 장치 작동 | R |
| SR_11 | 환경관리 | 온도 실시간 모니터링 기능 | 보관창고 온도 원격 실시간 모니터링 | R |
| SR_12 | 환경관리 | 온도 이상 감지 및 알림 기능 | 온도가 설정값을 벗어나면 경고 및 알림 작동 설정값 범위로 복귀 시 경고 해제 |
R |
| SR_13 | 입출입관리 | 출입증 확인 기능 | 등록된 출입증인지 확인 미등록 출입증이 3회 인식되면 경고 알림 발생 |
O |
| SR_14 | 입출입관리 | 출입문 제어 기능 | 출입증의 허가 여부에 따라 출입문 자동 제어 | O |
| SR_15 | 입출입관리 | 출입 기록 관리 기능 | 출입 기록 저장 및 열람 기능 제공 | O |
| SR_16 | 재고관리 | 물품 입출고 실시간 확인 기능 | 물품의 입고량 및 출고량 실시간 확인 | R |
| SR_17 | 재고관리 | 유통기한 관리 기능 | 물품 유통기한 확인 및 경과 시 관리자 알림 전송 | O |
| SR_18 | 재고관리 | 유통기한 경과 물품 처리 기능 | 유통기한 경과 물품에 대한 알림 및 처리 | O |
| SR_19 | 재고관리 | 창고 재고량 표시 기능 | 창고의 현재 적재량 실시간 모니터링 | R |
| SR_20 | 재고관리 | 창고 선반 위치 지정 기능 | 창고 내 빈 선반 위치 자동 확인 후 지정 | R |
기능 리스트를 요약하면 크게 3가지로 나눌 수 있습니다.
물품의 분류를 담당하는 분류 기능(컨베이어 벨트)
물품의 재고 보관과, 온도 등의 환경을 담당하는 재고 환경 관리 기능(창고)
직원의 출입을 담당하는 출입 관리 기능(보안)
추가적으로 위 3가지 기능을 모니터링하고 제어하는 GUI 가 있겠습니다.
SC_01 - 분류 작업 제어 시나리오 [클릭]
📌 트리거
- 관리자가 GUI에서 "분류시작", "분류종료", "일시정지" 버튼 클릭
- 컨베이어 벨트 입구 IR 센서에 물품 감지
- 10초간 물품 미감지
👥 참여자
- GUI
- API Server
- Service Layer
- TCP Handler
- Sort Controller (ESP32)
🟢 A. 분류 시작 시나리오
-
시작 명령 발생
- 관리자가 GUI에서 "분류시작" 버튼 클릭
- GUI에서 REST API 요청 전송:
POST /api/inbound/start
-
시스템 상태 확인
- Service Layer는 현재 분류기 상태 확인
- 상태가 RUNNING일 경우
→ WebSocket 메시지 전송:
{"event_type": "info", "message": "이미 작동 중입니다", "auto_dismiss": 1000}
→ 요청 중단 - 상태가 PAUSED일 경우
→ 일시정지에서 재개 작업 진행 - 상태가 STOPPED일 경우
→ 정지에서 시작 작업 진행
- 상태가 RUNNING일 경우
- Service Layer는 현재 분류기 상태 확인
-
하드웨어 제어 명령 전송
- TCP Handler가 Sort Controller로 메시지 전송:
SCst\n - Sort Controller 작업:
- 컨베이어 벨트 모터 ON
- 바코드 스캐너 ON
- 센서 활성화
- 응답 전송:
SRok\n
- TCP Handler가 Sort Controller로 메시지 전송:
-
GUI 상태 업데이트
- 상태를 RUNNING으로 변경
- WebSocket 메시지 전송:
{"event_type": "status_update", "status": "running"} - GUI 반영:
- 상태: 작동 중 (녹색)
- "분류시작" 버튼 비활성화
- "분류종료", "일시정지" 버튼 활성화
🔴 B. 분류 종료 시나리오
-
종료 명령 발생
- GUI에서 "분류종료" 클릭 →
POST /api/inbound/stop - 또는 Sort Controller가 10초 미감지 감지 →
SEas\n
- GUI에서 "분류종료" 클릭 →
-
시스템 상태 확인
- 상태가 RUNNING 또는 PAUSED가 아닐 경우
→ WebSocket 메시지 전송:
{"event_type": "info", "message": "분류기가 작동 중이 아닙니다", "auto_dismiss": 1000}
→ 중단
- 상태가 RUNNING 또는 PAUSED가 아닐 경우
-
대기 물품 확인
- 대기 물품 수 > 0일 경우
→ WebSocket 경고 메시지 전송:
{"event_type": "warning", "message": "아직 처리 중인 물품이 있습니다", "auto_dismiss": 1000}
→ 종료 중단 - 대기 물품 없음 → 다음 단계 진행
- 대기 물품 수 > 0일 경우
-
하드웨어 제어 명령 전송
- TCP Handler → Sort Controller:
SCsp\n - Sort Controller 작업:
- 컨베이어 벨트 모터 OFF
- 바코드 스캐너 OFF
- 센서 비활성화
- 응답 전송:
SRok\n
- TCP Handler → Sort Controller:
-
GUI 상태 업데이트
- 상태를 STOPPED로 변경
- WebSocket 메시지 전송:
{"event_type": "status_update", "status": "stopped"} - GUI 반영:
- 상태: 분류 종료 (회색)
- "분류시작" 버튼 활성화
- "분류종료", "일시정지" 버튼 비활성화
🟡 C. 일시정지 시나리오
-
일시정지 명령 발생
- GUI에서 "일시정지" 버튼 클릭 →
POST /api/inbound/pause
- GUI에서 "일시정지" 버튼 클릭 →
-
시스템 상태 확인
- 상태가 RUNNING이 아닐 경우
→ WebSocket 메시지 전송:
{"event_type": "info", "message": "분류기가 작동 중이 아닙니다", "auto_dismiss": 1000}
→ 중단
- 상태가 RUNNING이 아닐 경우
-
하드웨어 제어 명령 전송
- TCP Handler → Sort Controller:
SCps\n - Sort Controller 작업:
- 컨베이어 벨트 모터 OFF
- 스캐너 및 센서는 ON 상태 유지
- 응답 전송:
SRok\n
- TCP Handler → Sort Controller:
-
GUI 상태 업데이트
- 상태를 PAUSED로 변경
- WebSocket 메시지 전송:
{"event_type": "status_update", "status": "paused"} - GUI 반영:
- 상태: 일시정지 (노란색)
- "분류시작" 버튼 활성화 (재개 용도)
- "분류종료" 버튼 활성화
- "일시정지" 버튼 비활성화
SC_02 - 바코드 기반 자동 분류 시나리오 [클릭]
📌 트리거
- 컨베이어 벨트 입구 IR 센서에 물품 감지
👥 참여자
- Sort Controller (ESP32)
- TCP Handler
- Service Layer
- DB
- GUI
📦 1. 물품 감지 및 카운트 증가
- Sort Controller의 입구 IR 센서가 물품 감지
- Sort Controller는 TCP 메시지를 TCP Handler로 전송
- 메시지에는 센서 ID(entry), 감지 상태(1=감지됨) 포함
- TCP Handler는 메시지를 Service Layer로 전달
- Service Layer는 입고 대기 물품 수를 1 증가시킴
- Socket.IO를 통해 GUI에 업데이트된 카운트 전송
- GUI는 다음과 같이 표시
- 대기 물품 수를 1로 업데이트
- 진행 표시줄 반영
🔍 2. 바코드 스캔 및 분류
- 물품이 ESP32-CAM 위치에 도달 → Sort Controller가 바코드 스캔 수행
- 스캔된 바코드 정보를 TCP 메시지로 전송
- TCP Handler → Service Layer로 메시지 전달
- Service Layer는 바코드 파싱 수행:
- 보관 종류: 첫 1자리 (1: 냉동/A, 2: 냉장/B, 3: 상온/C)
- 물품 번호: 다음 2자리
- 유통기한: 다음 6자리 (YYMMDD 형식)
- 물품 번호에 따라 창고 결정 (A/B/C)
- DB에서 해당 창고의 빈 선반 위치 조회
- 가장 번호가 작은 선반 위치 할당
- TCP Handler가 Sort Controller에 분류 명령 전송
- 분류 구역 정보 포함 (A/B/C/E)
⚙️ 3. 분류 실행 및 결과 처리
- Sort Controller는 명령 수신 → 서보모터 작동
- 지정된 구역으로 물품 밀어냄
- 분류대 IR 센서가 물품 통과 감지
- 감지 결과를 TCP 메시지로 전송 → Service Layer로 전달
- Service Layer는 다음 작업 수행:
- 대기 물품 수 1 감소
- 처리된 물품 수 1 증가
- DB에 물품 정보 저장 (분류, 창고, 유통기한 등)
- Socket.IO를 통해 GUI에 분류 결과 및 카운트 전송
- GUI는 다음 항목 업데이트:
- 대기 수량
- 처리 수량
- 물품 로그에 새 항목 추가
🔀 선택 분기점
- 물품 분류:
- 물품 번호에 따라 A/B/C 창고 중 하나로 지정
- 분류 감지:
- IR 센서 감지 성공 → 분류 완료
- 감지 실패 → 물품 분실 처리
❗ 예외 상황 - 바코드 오류
- Sort Controller가 바코드 인식 실패 시 오류 이벤트 전송
- Service Layer는 오류 물품을 E 분류대로 이동 지시
- GUI에 바코드 오류 알림 표시 (Socket.IO 메시지)
SC_03 - 창고 온습도 모니터링 및 제어 시나리오 [클릭]
📌 트리거
- 정기적(5초 간격) 환경 센서 측정
- 관리자 온도 기준치 변경 시
👥 참여자
- Env Controller
- TCP Handler
- Service Layer
- DB
- GUI
🌡️ 1. 창고별 상태 확인
-
기준치: 사용자가 고정된 범위 내에서 설정한 온도
-
고정된 범위:
- 냉동 창고(A): -25℃ ~ -15℃
- 냉장 창고(B): 0℃ ~ 10℃
- 상온 창고(C): 15℃ ~ 25℃
-
기준치 설정 플로우:
- GUI에서 기준치 설정 (고정 범위 내)
- API Server → Service Layer → TCP Server → Env Controller로 기준치 전송
-
온도 측정 및 상태 판단 (Env Controller에서 5초 주기 실행):
- 대기 모드: 기준치 ±2℃ 이내
- 냉방 모드:
- 1단계: 기준치 +2℃ 초과 ~ +4℃ 이내
- 2단계: 기준치 +4℃ 초과 ~ +6℃ 이내
- 3단계: 기준치 +6℃ 초과
- 난방 모드:
- 1단계: 기준치 -2℃ 미만 ~ -4℃ 이내
- 2단계: 기준치 -4℃ 미만 ~ -6℃ 이내
- 3단계: 기준치 -6℃ 미만
- 경고 상태: 고정된 min/max 범위 벗어난 값
-
결과 전송:
- Env Controller → TCP Handler → Service Layer → API Server → GUI
- 포함 정보:
- 창고 ID
- 측정값
- 온도 제어 단계
- 정상/경고 상태
- 시간
-
경고 상태인 경우:
- DB의
temp_warning_logs테이블에 기록 (창고 ID, 온도, 발생 시각)
- DB의
🖥️ 2. GUI 표시
-
대시보드:
- 창고 ID, 측정값, 상태 표시
- 상태 색상:
- 정상: 녹색
- 경고: 빨간색
-
창고환경 페이지:
- 창고 ID, 측정값, 온도 제어 단계, 상태 표시
- 제어 단계 색상:
- 냉방: 파란색
- 난방: 빨간색
- 정지: 회색
- 상태 색상:
- 정상: 초록색
- 경고: 빨간색
💨 3. 팬 제어 명령 결정
-
Env Controller는 온도 제어 단계에 따라 팬 속도 및 LED 상태 조절
-
냉방 모드:
- 팬 작동 (단계별 세기 증가)
- 파란색 LED ON
- 빨간색 LED OFF
-
난방 모드:
- A, B 창고: 팬 정지 + 모든 LED OFF
- C 창고: 팬 작동 (단계별 세기 증가) + 빨간색 LED ON + 파란색 LED OFF
-
정지 모드:
- 팬 정지 + 모든 LED OFF
-
처리 후 TCP Handler → Service Layer로 제어 단계 전송
🚨 4. 경고 상태 처리
-
경고 상태 발생 시:
- Service Layer → Env Controller로 경고 명령 전송
- Env Controller는 노란색 LED 깜빡임 및 부저 작동
-
정상 상태 복귀 시:
- 경고 장치 비활성화 명령 전송 (LED 및 부저 OFF)
🔀 선택 분기점
-
온도 상태에 따라:
- 정상 / 경고 / 위험 상태 → GUI 및 LED 표시, 팬 제어 방식 변경
-
팬 제어 모드:
- 냉방: 파란 LED, 팬 작동
- 난방: 빨간 LED, 팬 작동 (C 창고만)
- 정지: 팬 OFF, 모든 LED OFF
❗ 예외 상황
-
센서 오류:
- 측정값 비정상 시 이전 값 유지
- 오류 상태 GUI 표시
-
통신 장애:
- 10초 이상 데이터 미수신 시 장애 표시
- 자동 재연결 시도
SC_04 - RFID 기반 출입 관리 시나리오 [클릭]
구성도는 크게 '분류 / 창고 / 보안' 으로 나눌 수 있겠습니다.
분류는 물품을 분류해주는 컨베이어 벨트 주변 부품들로 구성되어 있습니다.
- DC모터 : 컨베이어 벨트를 가동
- 전면 IR 센서 x1 : 물품이 벨트 위에 올려져있는지 감지
- esp캠 : QR코드를 스캔
- 서보 모터 : 물품을 분류
- 물류대 IR 센서 x4: 해당 물류대 물품 진입 확인
창고는 재고관리와 환경관리를 위한 부품들로 구성되어 있습니다.
- 온도계 : 창고 온도 측정
- DC 모터 (팬) : 창고 온도 관리
- 부저 : 온도 이상 시 알림
- LED : 온도 이상 표시 및 팬 가동중 표시
- OLED : 각 창고 모니터링
보안은 출입관리를 위한 부품들로 구성되어 있습니다.
- RFID 센서 : 카드를 태그
- LED : 카드 스캔 결과를 알림
테스트 결과에 대해서 설명해주세요.
문제점 및 개선 방안에 대해서 설명해주세요.
| 이름 | 소감 |
|---|---|
| 최원호 | 프로젝트를 진행하며 설계의 중요성에 대해 깊이 고민하게 되었습니다. 우리가 일상 속에서 마주하는 단순해보이는 물건들도, 결국 사람의 피조물입니다. 그 안에는 안전과 성능을 보장하기 위해 치밀한 설계 과정이 있었음을 깨달았습니다. 프로젝트를 통해 단순히 기술이나 동작 자체에만 집착해서는 안되며, 그 이면에 담긴 설계의 섬세함과 철학을 이해하고 디자인하는 태도가 무엇보다 중요하다는 것을 배웠습니다. |
| 김종명 | |
| 김지연 | |
| 박효진 | |
| 박태환 |



























