복수전공인 전자전기공학부의 마지막 수업인 캡스톤디자인
에서 '화장지 잔량 검출 시스템'을 만들고 있습니다.
동국대학교 전자전기공학부의 캡스톤디자인
은 타 대학들과 마찬가지로 아두이노와 외부 전원을 이용해서 간단한 동작을 수행하는 프로그램을 만드는 것이 수행과제입니다.
임베디드 관련해 주전공인 컴퓨터공학과와 복수전공인 전자공학과에서 배운 내용을 모두 담은 의미 있는 결과를 남기고 싶은 욕심이 생겼습니다. 따라서 단순히 'pass'를 받기 위한 의미 없는 결과물이 아니라 실제로 시중에 판매할 수 있는 퀄리티를 가진 결과물을 만들기로 목표를 세웠습니다.
처음 세운 목표는 다음과 같습니다.
sleep mode
및 watchdog timer
사용 :: 전자공학 지식, ARM 지식WiFi & BLE
통신 모두 이용 + 웹서버 구축 :: 네트워킹 지식MbedOS, FreeRTOS, zephyr
) 이용 :: 운영체제(OS) 지식, 멀티프로세싱 지식Tensorflow lite micro
) 이용 :: 머신러닝(ML) 지식하지만, 프로젝트를 약 3주간 진행하면서 모든 과정마다 후술할 실수와 시행착오를 겪고 있습니다. 부끄러움과 자괴감이 심해져서 프로젝트 수행에 지장이 생기기 시작한 이 순간에 잠시 시간을 내서 글을 적습니다. 이 두서없는 기록이 미래의 저에게 긍정적인 영향을 주고, 스쳐 지나가는 독자분께 조금이나마 위로가 되길 바랍니다.
프로젝트 준비물 구매 과정에서 많은 실수가 있었습니다. 저희 팀에게 할당된 지원금은 50만원으로, 간단한 동작을 구현하는 프로젝트이기 때문에 적지않은 금액입니다. 하지만, 위 목표를 달성하기 위해서는 저전력으로 구동하면서 RAM과 Flash 용량이 큰 보드가 필요합니다. 이때 저지른 실수가 바로 제대로 자료조사를 하지 않고 바로 구매한 것입니다. 지금 생각하면 대체 뭐가 그렇게 급했나 싶습니다. 단 한시간도 채 고민하지 않고 바로 장바구니에 보드와 소자를 넣고 구매했습니다.
처음에 구매한 보드는 Arduino
사의 Nano 33 IoT
와 Nano Every
입니다. Nano 33 IoT
는 WiFi와 BLE를 동시에 지원하는 NINA W10
모듈이 탑재돼 host로 적합하다고 판단했고, client는 BLE와 서보모터만 연결하면 되므로 Nano Every
가 적합하다고 판단했습니다. 웹서버를 구축하기 위해서 라즈베리파이4B 2GB
모델을 구매했고 7인치 디스플레이 케이스도 함께 구매했습니다.
외부 배터리는 리튬폴리머 배터리와 충전 및 보호회로 내장 모듈인 TP4034
를 구매했습니다.
소자는 시중에서 흔히 구할 수 있는 적외선 거리센서와 서보모터를 구매했습니다. 기타 준비물로 배터리 홀더와 케이스 그리고 점퍼케이블을 구매했습니다.
하지만, 다음과 같은 문제들이 발생했습니다.
Nano 33 IoT
는 TinyML
을 구동할 수 없음
Nano 33 IoT
의 CPU는 ARM Cortex-M0+
기반의 SAM D21
입니다.Nano 33 BLE Sense
의 CPU는 ARM Cortex-M4
입니다.Nano 33 IoT
의 최대 동작주파수가 48MHz
인 반면,Nano 33 BLE Sense
의 최대 동작주파수는 64MHz
로 더 빠릅니다.Nano 33 BLE Sense
는 SIMD 명령어를 지원하고 FPU (Floating Point Unit)가 탑재돼있습니다.Nano 33 BLE Sense
는 TinyML
을 구동할 정도의 좋은 HW 스펙을 가지고 있지만, Nano 33 IoT
는 그렇지 못합니다.Nano 33 BLE Sense
와 Wemos D32 Pro
를 2개씩 구매했습니다.가용 인가 전압을 전혀 고려하지 않음
Nano 33 IoT
는 3.3V
핀을 통해 최소 에서 까지 전압을 인가받을 수 있습니다. 하지만, 권장 전압은 입니다. Nano 33 IoT
는 Vin
핀을 통해 최소 에서 까지 전압을 인가받을 수 있습니다.Nano 33 IoT
를 제대로 동작시킬 수 없습니다. 왜냐하면, 리튬폴리머 전지가 가득 충전될 때 를 가지기 때문입니다.도구를 전혀 구비하지 않음
이렇게 준비물을 구매하는 과정에서 많은 실수가 있었습니다. 프로젝트의 목표를 거대하게 잡은 것에 비해 자료조사와 준비가 너무 허술한 것이 치명적인 원인이었습니다. 결과적으로 지원금 50만원을 모두 사용하고, 예상하지 못했던 준비물은 사비로 구매하는 등 여러 문제를 낳았습니다.
정말 뼈아픈 교훈을 얻었습니다. 세밀하고 체계적으로 필요한 물품을 정리하지 않은 제 자신에게 많은 실망을 했습니다.
RTOS를 사용할 필요가 없음
Nano 33 IoT
같이 고성능의 MCU를 구비할 필요가 없습니다.소자 동작 전압을 고려하지 않음
Nano 33 IoT
에서는 작동시킬 수 없습니다.HC-SR04P
와 IMU-100
을 구매했습니다.WiFi와 BLE를 동시에 사용할 수 없음
치명적이었습니다. MCU에 내장된 radio가 1개라서 서로 다른 bandwidth를 사용하는 Wi-Fi와 BLE는 동시에 동작할 수 없습니다.
따라서 radio 모듈이 2개 있는 보드를 이용하거나 switching 방법 (하나 On하면 다른 하나 Off)을 이용해야 합니다.
이 문제는 저전력 동작에 큰 문제를 유발합니다.
예를 들어, 한 시간에 한 번씩 현재 휴지 잔량을 BLE를 통해 client에, WiFi를 통해 라즈베리파이에 전송한다고 했을 때를 가정하면,
이런 불필요한 과정이 반복됩니다. 통신에서 가장 많은 전력을 소모하는 때가 connection을 수립하는 과정이기 때문에 치명적입니다.
이기종 간 BLE 연결이 힘듦
Nano 33 IoT
와 Nano Every
에 연결된 BLE 4.0 모듈인 HM-10
을 BLE 연결할 예정이었습니다.Nano 33 IoT
의 BLE를 사용하기 위해서 Arduino
에서는 <ArduinoBLE>
라이브러리를 제공합니다.Nano 33 IoT
를 peripheral device (server)로 사용하든 central device (client)로 사용하든 HM-10
에 데이터를 전송할 방법이 없었습니다.간단한 프로젝트라고 생각했는데 이 정도로 애를 먹으리라고는 생각하지 못했습니다. 여러모로 스스로에 대한 실망과 무력감에 지치는 새벽입니다. 잘 이겨낼 수 있었으면 좋겠습니다.
아직 진행 중인 프로젝트입니다. 앞으로 추가 실수가 있을 때마다 여기에 항목을 추가할 예정입니다. 바라건대 항목이 더 추가되지 않기를 바랍니다.
선생님의 velog 포스팅을 보고 많이 배우고 있습니다. 응원하겠습니다.