공통 프로젝트를 겪으며 희귀했던 IoT 프로젝트 희망자가 멸종되다시피 해버렸다.
이유로는 프로젝트 비용과 공통 때 들려오던 고통의 소리로 인한 두려움이 컸다.
이전 팀에서의 Embedded 담당자 1명만 있는 상황에서 4명을 구해야하는 상황에 처해버리고 말았다.
개발 실력과 상관없이 열심히 하면 괜찮다는 생각으로 열심히 하는 모습이 보기 좋았던 친구 하나를 팀원으로 받아들였다. 이후로는 해당 팀원 덕에 하루 만에 팀원이 다 구해졌다.
팀원 구하는 보법이 달랐다.
팀원들 중 몇 명은 수상이 프로젝트의 목적이 되어가고 있었다. 이로 인해 팀 회의 내내 갈등을 빚게 되었다.
프로젝트에 대한 결과가 좋으면 수상은 따라온다라는 가치관을 가지고 있었던 나와는 회의 내내 충돌이 있을 수 밖에 없었다.
특히, 발표를 먼저 생각하고 프로젝트 주제를 정하려고 하다보니 회의가 길어지고 도돌이표가 되는 경우가 많았다.
계속된 충돌 끝에 합의점을 찾는 데 성공하였다.
이 과정에서 분위기가 좋지는 않았지만 발표의 임팩트를 위해 음성 인식을 추가하여 진행하기로 하였다.
프로젝트 주제는 초기에 선정하였던 가전 제품 자동 제어로 결정되었다.
프로젝트가 결정됨에 따라 필요한 요소들을 생각하게 되었다.
비 IoT 가전에 IoT 기능을 추가하기 위해 가전에 신호를 주는 기기(이이하 리모트 기기)와 해당 기기에 명령을 전달하는 허브 기기(이하 허브)를 주로 하여 모바일로 제어를 하기로 하였다.
| 기능ID | 기능명 | 세부작업 예시 | 선행작업 | 우선순위 |
|---|---|---|---|---|
| EM-HUB-001 | IR Signal 수신 → Data화 | 리모컨 IR 신호 수신 → 저장 가능한 Data로 변환 | 1 | |
| EM-HUB-002 | 중앙 제어 시스템 | 전체 IoT 시스템 통합 관리 | EM-HUB-001, EM-HUB-003, EM-HUB-004, EM-HUB-005 | 1 |
| EM-HUB-003 | Device 등록 관리 | Device 인증 및 등록, 발견 | 1 | |
| EM-HUB-004 | 명령 라우팅 | 명령 수신/분배, 명령 실행 상태 확인 | EM-HUB-003 | 2 |
| EM-HUB-005 | 데이터 관리 | 센서 데이터 수집·집계, 데이터 분석/처리 | EM-HUB-001 | 2 |
| EM-HUB-006 | 이벤트 처리 | 시스템 이벤트 감지, 자동화 Trigger, 알림 관리 | EM-HUB-004, EM-HUB-005 | 3 |
| EM-HUB-007 | IR 데이터베이스 | IR 신호 패턴 저장, 디바이스별 IR 코드 관리 | EM-HUB-001 | 3 |
허브 관련 명세
| 기능ID | 기능명 | 세부작업 예시 | 선행작업 | 우선순위 |
|---|---|---|---|---|
| EM-GW-001 | MQTT 브로커 연결 관리 | 연결 설정, 재연결, 연결 상태 모니터링 | 1 | |
| EM-GW-002 | 센서 데이터 중계 | 센서 데이터 수신·검증·전처리 → HUB 전달 | EM-GW-001 | 1 |
| EM-GW-003 | 시스템 상태 모니터링 | 상태 수집, 로그 기록, HUB 보고 | EM-GW-001 | 3 |
| EM-GW-004 | 메시지 라우팅 | Topic 기반 메시지 분류, 우선순위 관리, 메시지 큐 관리 | EM-GW-001 | 2 |
통신 관련 명세
| 기능ID | 기능명 | 세부작업 예시 | 선행작업 | 우선순위 |
|---|---|---|---|---|
| EM-MAT-001 | IR 신호 분석 | 수집 IR 신호 분석(파형, 프로토콜) | EM-HUB-001 | 1 |
| EM-MAT-002 | 제어별 IR 신호 정규화 | IR 신호 패턴화 | EM-MAT-001 | 2 |
| EM-MAT-003 | IR 신호 복원·시각화 | IR Data 복원 후 시각화 | EM-MAT-001 | 2 |
| EM-MAT-004 | 분석 결과 배포 | 분석 결과 Packaging → MFC 배포 | EM-MAT-002 | 1 |
| 기능ID | 기능명 | 세부작업 예시 | 선행작업 | 우선순위 |
|---|---|---|---|---|
| EM-MFC-001 | Matter Hub Log Monitoring | Hub Data Log 모니터링 | EM-HUB-002 | 3 |
| EM-MFC-002 | IR 신호 제어 | IR 제어로 학습 상태 확인 | EM-MFC-003, EM-IR-002 | 2 |
| EM-MFC-003 | IR 신호 학습 Session 제어 | 학습 시작/종료 제어 | 2 | |
| EM-MFC-004 | IR 신호 시각화 | 생성 신호 Template GUI 표시 | EM-MFC-003 | 2 |
| EM-MFC-005 | IR 신호 저장 명령 | Template를 Server로 전송 | EM-MFC-003 | 2 |
IR 신호 라우팅 관련 명세
| 기능ID | 기능명 | 세부작업 예시 | 선행작업 | 우선순위 |
|---|---|---|---|---|
| EM-SENSOR-001 | 센서 데이터 수집 | 센서 읽기, 검증, 변화 감지 | 1 | |
| EM-SENSOR-002 | MQTT 데이터 발행 | JSON 변환, Topic별 발행 | EM-SENSOR-001 | 2 |
센서 관련 명세
위와 같이 명세서가 만들어졌다. (글쓴이의 역할과 관련된 명세만 작성)
맡은 역할은 허브 디바이스 제작과 모니터링 툴이 되었다.
개발보드가 Raspberry Pi 4b 임에 따라 pigpio를 이용하여 센서 제어를 했다. 해당 라이브러리를 통해 us 단위 제어를 간편하게 할 수 있었다. 해당 과정에서 차후 기능 확장이 가능하게 Interface로 추상화하여 구현하게 된다.
모니터링 툴은 최근 학습하고 있었던 MFC 프레임워크를 사용하기로 했다.
기술 선정과 함께 다양한 Diagram을 그려가며 프로젝트에 대한 팀원 간의 싱크를 맞추어 갔다.
허브 디바이스 개발에 있어서는 큰 어려움이 존재하지 않았다. 하지만, IR 신호 수신 거리에 따라서 IR 신호에 노이즈가 발생하여 정확한 프로토콜을 알기 어렵다는 점이 발생하였다.
이를 해결하기 위해 K-Means를 기반으로 하여 ML 모델을 만들어보기로 했다. 브랜드와 기기, 0을 나타내는 신호(Zero), 1을 나타내는 신호(One)가 IR 신호의 Header에 포함됨을 이용하여 브랜드와 기기를 구별해보려했다.
ML 모델의 동작 과정은 다음과 같다.
- Data 수집 (IR 신호 Protocol 하나 당 약50개 이상)
- Data Mapping (IR 신호와 Brand & Device를 Mapping)
- K-Means 활용 Data 분류 (Mapping된 Data를 Clustering)
- 표준화된 Data 선정
- 기존의 신호와의 유사도를 측정하여 DB에 반영
이렇게 DB에 반영된 Data를 통해 새로운 IR 신호가 hub 디바이스를 통해 등록되었을 때, 어느 Brand, 기기인지 추가적인 입력 없이 쉽게 알 수 있게 되었다.
예상대로 학습 단계에 있었던 MFC 기술에 대한 숙련도 부족이 발목을 잡았다. 특히 시간이 오래 걸렸던 문제는 MQTT Thread로 인한 UI Freeze 현상이었다.
MFC에서는 다른 Thread에서 UI에 직접 제어를 시도하게 되면 UI Thread와 교착상태가 발생하여 Freeze 현상이 발생함을 알게 되었다.
원인 분석을 위해 로그와 가설, 단일 모듈 테스팅을 시행하였다. 로그를 통해 MQTT Thread의 문제임을 파악하고 단일 모듈 테스팅을 통해 MFC와 MQTT Thread 사이에서의 문제임을 알 수 있었다. (MQTT와 MFC를 분리한 상태에서는 양쪽 모두 이상이 없었음)
이에 따라 직접 제어를 시도하는 방식에서 PostMessage를 이용한 비동기 방식으로 전환하였다.
해당 과정을 걸친 이후, Hub Device에 들어오는 신호와 온습도 가공 데이터, IR 신호 데이터를 실시간으로 확인할 수 있게 되었다.
자동 제어를 위한 ML 모델을 개발해야할 필요성이 있었다.
특정 데이터를 토대로 명령을 확정해야하기 때문에 ML 모델의 기반은 Decision Tree로 하려했다.
입력 데이터는 열 스트레스 지수와 예상 불만족률, 제어 명령으로 결정했다. 해당 데이터들은 2초마다 측정되며 Timestamp를 기준으로 CSV 파일로 Hub Device에 저장되고 있다. (CSV Parser를 구현해 자동화했다.)
출력 데이터는 제어 명령 기록이 있는 기기와 IR 신호로 결정하였다.
ML 모델의 동작 과정은 다음과 같다.
- 온습도 가공 데이터 & 제어 로그 데이터 mapping
- 제어에 따른 20분 뒤의 예상 불만족률 추출
- 추출한 예상 불만족률 중 최적의 상태 추출
- 제어 명령 결정 이후 출력 데이터 반환
해당 과정을 통해 Hub Device 내에서 20분마다 사용자의 데이터를 이용하여 개인화된 자동 제어를 이루어낼 수 있었다.
발표 순간에 음성 인식이 동작하지 않아 모든 시연이 불가능해지는 문제가 발생했었다. 다행히 미리 녹화해놓은 영상으로 대체할 수 있던 상황이 있었다.
원인은 마이크에 대한 권한이 다른 기기로 이양되어 모바일에서 안 되었던 것으로 생각된다.
'의욕'이란 요소가 팀워크에 얼마나 큰 영향을 끼치는 알게 되는 프로젝트였다.
비교적 의욕이 떨어지는 팀원 두 명이 있었다보니 전체적으로 사기가 저하되어 목표한만큼의 퀄리티가 나오지 않았다.
특히 일정이 지연되는 문제가 잦아 마감 직전에 작업을 쳐내야하는 소요가 있었다.