[일기] 스스로 실망하는 중입니다

Embedded June·2021년 5월 3일
0

들어가며

복수전공인 전자전기공학부의 마지막 수업인 캡스톤디자인에서 '화장지 잔량 검출 시스템'을 만들고 있습니다.

동국대학교 전자전기공학부의 캡스톤디자인은 타 대학들과 마찬가지로 아두이노와 외부 전원을 이용해서 간단한 동작을 수행하는 프로그램을 만드는 것이 수행과제입니다.

임베디드 관련해 주전공인 컴퓨터공학과와 복수전공인 전자공학과에서 배운 내용을 모두 담은 의미 있는 결과를 남기고 싶은 욕심이 생겼습니다. 따라서 단순히 'pass'를 받기 위한 의미 없는 결과물이 아니라 실제로 시중에 판매할 수 있는 퀄리티를 가진 결과물을 만들기로 목표를 세웠습니다.

처음 세운 목표는 다음과 같습니다.

  1. 최소 전력 사용하기 위한 sleep modewatchdog timer 사용 :: 전자공학 지식, ARM 지식
  2. WiFi & BLE 통신 모두 이용 + 웹서버 구축 :: 네트워킹 지식
  3. RTOS (MbedOS, FreeRTOS, zephyr) 이용 :: 운영체제(OS) 지식, 멀티프로세싱 지식
  4. TinyML (Tensorflow lite micro) 이용 :: 머신러닝(ML) 지식

하지만, 프로젝트를 약 3주간 진행하면서 모든 과정마다 후술할 실수와 시행착오를 겪고 있습니다. 부끄러움과 자괴감이 심해져서 프로젝트 수행에 지장이 생기기 시작한 이 순간에 잠시 시간을 내서 글을 적습니다. 이 두서없는 기록이 미래의 저에게 긍정적인 영향을 주고, 스쳐 지나가는 독자분께 조금이나마 위로가 되길 바랍니다.


1. 프로젝트 준비물 구매과정

프로젝트 준비물 구매 과정에서 많은 실수가 있었습니다. 저희 팀에게 할당된 지원금은 50만원으로, 간단한 동작을 구현하는 프로젝트이기 때문에 적지않은 금액입니다. 하지만, 위 목표를 달성하기 위해서는 저전력으로 구동하면서 RAM과 Flash 용량이 큰 보드가 필요합니다. 이때 저지른 실수가 바로 제대로 자료조사를 하지 않고 바로 구매한 것입니다. 지금 생각하면 대체 뭐가 그렇게 급했나 싶습니다. 단 한시간도 채 고민하지 않고 바로 장바구니에 보드와 소자를 넣고 구매했습니다.

처음에 구매한 보드는 Arduino사의 Nano 33 IoTNano Every 입니다. Nano 33 IoT는 WiFi와 BLE를 동시에 지원하는 NINA W10 모듈이 탑재돼 host로 적합하다고 판단했고, client는 BLE와 서보모터만 연결하면 되므로 Nano Every가 적합하다고 판단했습니다. 웹서버를 구축하기 위해서 라즈베리파이4B 2GB 모델을 구매했고 7인치 디스플레이 케이스도 함께 구매했습니다.

외부 배터리는 리튬폴리머 배터리와 충전 및 보호회로 내장 모듈인 TP4034를 구매했습니다.

소자는 시중에서 흔히 구할 수 있는 적외선 거리센서와 서보모터를 구매했습니다. 기타 준비물로 배터리 홀더와 케이스 그리고 점퍼케이블을 구매했습니다.

하지만, 다음과 같은 문제들이 발생했습니다.

  1. Nano 33 IoTTinyML을 구동할 수 없음

    • 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 SenseSIMD 명령어를 지원하고 FPU (Floating Point Unit)가 탑재돼있습니다.
    • 결과적으로, Nano 33 BLE SenseTinyML을 구동할 정도의 좋은 HW 스펙을 가지고 있지만, Nano 33 IoT는 그렇지 못합니다.
    • [결론] :: Nano 33 BLE SenseWemos D32 Pro를 2개씩 구매했습니다.
  2. 가용 인가 전압을 전혀 고려하지 않음

    • 보드가 수용할 수 있는 외부 전압에 대한 고려를 일체 하지 않았습니다.
    • Nano 33 IoT3.3V핀을 통해 최소 2.7V2.7V에서 3.9V3.9V 까지 전압을 인가받을 수 있습니다. 하지만, 권장 전압은 3.3V3.3V입니다.
    • Nano 33 IoTVin핀을 통해 최소 4.5V4.5V에서 21V21V 까지 전압을 인가받을 수 있습니다.
    • 따라서, 3.7V3.7V의 리튬폴리머 전지로는 Nano 33 IoT를 제대로 동작시킬 수 없습니다. 왜냐하면, 리튬폴리머 전지가 가득 충전될 때 4.2V4.2V를 가지기 때문입니다.
    • 개당 2만원이 넘는 보드라 함부로 태워버리는 모험을 강행할 수 없었습니다.
    • [결론] :: 18650 리튬이온 건전지 4개, 리튬이온 건전지 충전기, AA 건전지 6개를 구매했습니다.
  3. 도구를 전혀 구비하지 않음

    • 전원을 인가하고 제품을 만들어서 실제로 시뮬레이팅하기 위해서는 납땜을 해야하지만, 기초적인 납땜 도구가 전혀 없었습니다.
    • 처음 보드를 샀을 때, 둘 다 모두 핀헤더가 없이 배송되는 바람에 프로젝트를 진행할 수 없었습니다.
    • [결론] :: 납땜 도구 세트를 구매했습니다.

이렇게 준비물을 구매하는 과정에서 많은 실수가 있었습니다. 프로젝트의 목표를 거대하게 잡은 것에 비해 자료조사와 준비가 너무 허술한 것이 치명적인 원인이었습니다. 결과적으로 지원금 50만원을 모두 사용하고, 예상하지 못했던 준비물은 사비로 구매하는 등 여러 문제를 낳았습니다.

정말 뼈아픈 교훈을 얻었습니다. 세밀하고 체계적으로 필요한 물품을 정리하지 않은 제 자신에게 많은 실망을 했습니다.

2. 프로젝트 수행 과정

  1. RTOS를 사용할 필요가 없음

    • 사람들이 RTOS를 사용하는 이유는 크게 두 가지입니다.
      1. 굉장히 수행시간에 예민한 프로그램을 만들 때
      2. 여러가지 소자를 다루고 복잡한 동작을 다뤄야 해서 순차적인 실행으로는 제대로 된 동작을 할 수 없을 때
    • 하지만, 본 프로젝트는 위 두 가지 모두 해당되지 않기 때문에 RTOS를 사용할 필요가 없습니다.
    • 따라서 Nano 33 IoT 같이 고성능의 MCU를 구비할 필요가 없습니다.
    • 불필요한 절차를 공부 목적을 위해 넣는 것이 좋은지, 아니면 효율을 위해 넣지 않는 것이 좋은지 많은 고민을 했습니다. 지금도 고민하고 있습니다.
  2. 소자 동작 전압을 고려하지 않음

    • 정말 초보적인 실수입니다.
      소자의 동작 전압을 고려하지 않아서 소자를 사용할 수 없었습니다.
    • 휴지 잔량을 계산하기 위해 적외선 거리측정 센서를 이용할 계획이었습니다.
    • 하지만, 적외선 거리측정 센서는 5V에서 작동하기 때문에 Nano 33 IoT에서는 작동시킬 수 없습니다.
    • 따라서 같은 기능을 수행하는 초음파 거리측정 센서들 중 3.3V에서 작동하는 소자인 HC-SR04PIMU-100을 구매했습니다.
  3. WiFi와 BLE를 동시에 사용할 수 없음

    • 치명적이었습니다. MCU에 내장된 radio가 1개라서 서로 다른 bandwidth를 사용하는 Wi-Fi와 BLE는 동시에 동작할 수 없습니다.

    • 따라서 radio 모듈이 2개 있는 보드를 이용하거나 switching 방법 (하나 On하면 다른 하나 Off)을 이용해야 합니다.

    • 이 문제는 저전력 동작에 큰 문제를 유발합니다.
      예를 들어, 한 시간에 한 번씩 현재 휴지 잔량을 BLE를 통해 client에, WiFi를 통해 라즈베리파이에 전송한다고 했을 때를 가정하면,

      1. BLE를 통해 client에게 휴지 잔량 데이터를 전송합니다.
      2. BLE 연결을 끊습니다.
      3. WiFi 연결을 수립합니다.
      4. WiFi를 통해 웹서버에게 휴지 잔량 데이터를 전송합니다.

      이런 불필요한 과정이 반복됩니다. 통신에서 가장 많은 전력을 소모하는 때가 connection을 수립하는 과정이기 때문에 치명적입니다.

  4. 이기종 간 BLE 연결이 힘듦

    • Nano 33 IoTNano Every에 연결된 BLE 4.0 모듈인 HM-10을 BLE 연결할 예정이었습니다.
    • Nano 33 IoT의 BLE를 사용하기 위해서 Arduino에서는 <ArduinoBLE> 라이브러리를 제공합니다.
    • 자료조사를 진행하며 열심히 공부하며 connection을 만드는 것은 성공했습니다.
    • 하지만, Nano 33 IoT를 peripheral device (server)로 사용하든 central device (client)로 사용하든 HM-10에 데이터를 전송할 방법이 없었습니다.

결론

간단한 프로젝트라고 생각했는데 이 정도로 애를 먹으리라고는 생각하지 못했습니다. 여러모로 스스로에 대한 실망과 무력감에 지치는 새벽입니다. 잘 이겨낼 수 있었으면 좋겠습니다.

아직 진행 중인 프로젝트입니다. 앞으로 추가 실수가 있을 때마다 여기에 항목을 추가할 예정입니다. 바라건대 항목이 더 추가되지 않기를 바랍니다.

profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

1개의 댓글

comment-user-thumbnail
2021년 6월 21일

선생님의 velog 포스팅을 보고 많이 배우고 있습니다. 응원하겠습니다.

답글 달기