Monolith v2#

개요#

모노리스는 TMA-1 데이터로거와 웹 기반 Control Hub로 구성된 무선 데이터로깅 플랫폼입니다.

Formula Student 및 Baja Student 대회에 참가하는 학생들의 차량 데이터 수집을 위해 개발되었으나, 다른 분야의 데이터 계측이나 ESP32 개발 보드로도 활용할 수 있습니다.

모든 소스코드와 하드웨어 설계도가 GitHub에 공개되어 있으며, 비상업적 용도에 한해 🍺Beerware License로 자유롭게 사용할 수 있습니다.

기능#

📡 무선 통신 지원

📀 10 Hz 데이터로깅

💡 웹 기반 데이터 분석 도구

모든 무선 통신 기능은 Wi-Fi 연결이 필요합니다. 차량에서 사용하기 위해서는 드라이버가 Wi-Fi 핫스팟을 켠 휴대폰을 가지고 타야 합니다.

미리보기#

v1 대비 변경사항#

Do It Yourself!#

모노리스 TMA-1은 회로도와 PCB 레이아웃이 모두 device/hardware 에 공개되어 있습니다. PCB를 직접 제작해 사용하는 것을 권장합니다.

TMA-1 PCB 제작#

  1. Release에서 monolith-{version}.zip을 다운받고 압축을 해제합니다.
  2. JLCPCB에서 pcb/gerbers/GERBER-monolith.zip을 업로드합니다.
  3. 하단의 PCB Assembly 스위치를 켭니다.
    • Mark on PCB에서 2D barcode with 5*5mm, Specify Position을 선택합니다.
    • 다른 옵션은 건드릴 필요가 없습니다. 기판 색상만 원하는 대로 선택합니다.
  4. BOM-monolith.csvCPL-monolith.csv를 업로드하고 기판을 주문합니다.
  5. PCB에 Molex 5569-04A2(39300040) 커넥터 8개를 납땜합니다.
  6. CR1220 배터리와 SD 카드를 삽입합니다.
  7. 펌웨어 업로드 항목으로 이동합니다.
⭐ PCB 제작 팁

PCB 제작 팁

PCB 제작비를 줄이려면 BT1 CR1220 배터리 홀더, L1 전원부 인덕터, U2 ESP32 모듈을 조립 항목에서 제외하고, 해당 부품을 따로 구매해 직접 납땜하세요.

BT1L1을 빼면 부품 종류 1개당 extended component fee $3 을 아낄 수 있습니다.

특히, ESP32-S3 모듈은 조립하려면 Economic PCB Assembly 대신 Standard PCB Assembly가 필요해 가격이 두 배가 됩니다.

ESP32 모듈은 초심자에게는 직접 납땜하기가 다소 어려울 수 있으나, 이렇게 하면 $60로 완성된 PCB 5장을 생산할 수 있습니다.

반드시 ESP32-S3-WROOM-1 모듈을 사용해야 하며, 8MB 이상의 PSRAM이 내장된 모듈(R8/R16)은 사용할 수 없습니다. 그냥 가장 저렴한 ESP32-S3-WROOM-1-N4 를 사용하면 됩니다.

PCBA Qty를 5에서 2로 조정하면 완성된 기판이 2장만 오는 대신 $20 정도를 추가로 절약할 수 있습니다.

펌웨어 업로드#

  1. 3.3V UART to USB 컨버터를 준비합니다.
    • ⚠️ 컨버터에는 RX, TX 외에도 DTR, RTS 핀이 반드시 있어야 합니다.
    • ⚠️ 5V 컨버터는 별도의 3.3V 전압 선택 스위치가 없다면 사용할 수 없습니다.
  2. 보드의 UART 커넥터에 2x3 2.54mm 핀 헤더를 납땜합니다.
  3. 모노리스의 각 핀을 다음과 같이 연결합니다.
    • 3V3, GND, DTR, RTS: 컨버터에 있는 같은 이름의 핀과 연결
    • RX, TX: 컨버터의 핀과 서로 교차하여 연결 (RXTX)
  4. esptool을 다운받고 압축을 해제합니다.
  5. Release에서 monolith-{version}.zip을 다운받고 압축을 해제합니다.
  6. esptool 바이너리를 압축을 해제한 firmware/ 디렉터리로 복사합니다.
  7. 터미널을 열어 firmware/ 경로로 이동한 뒤 다음 명령을 실행합니다.
    ./esptool --chip esp32s3 -b 460800 --before default-reset --after hard-reset write-flash "@flash_args"

서버 준비#

TMA-1과 Control Hub가 서로 통신하려면 MQTT 서버(브로커)가 필요합니다.

기본 서버 v2.monolith.luftaquila.io는 무료로 제공되며, 등록된 사용자만 이용할 수 있습니다. 사용하려면 mail@luftaquila.io 로 학교명과 원하는 채널 이름 및 채널 키를 보내주세요.

다만, 기본 서버는 예고 없이 운영이 중단되거나 장애가 발생할 수 있습니다.

직접 서버 배포하기

서버 배포

기본 서버를 사용하지 않는다면 상용 MQTT 브로커를 사용하거나 아래 가이드를 따라 직접 서버를 배포해 사용할 수 있습니다.

아래 가이드는 DNS, 방화벽 등 서버 관련 지식이 어느 정도 있다고 가정합니다.

Docker EngineNode.js가 설치된 리눅스 머신이 필요합니다. 없다면 여기서 무료로 인스턴스를 만들 수 있습니다.

이론상 Docker Desktop과 Windows 머신으로도 할 수 있지만, 테스트해본 적은 없습니다.

아래 명령을 실행합니다. <YOUR_CHANNEL_NAME>은 사용할 이름으로 변경합니다.

sudo apt install -y mosquitto
git clone https://github.com/luftaquila/monolith.git

cd monolith/web
npm install
npm run build

cd ../server/config
# set your channel key as the password
mosquitto_passwd -c mosquitto.passwd <YOUR_CHANNEL_NAME>

cd ..
cp .env.example .env
vi .env # set `ACME_EMAIL` and `DOMAIN_NAME` to your own

sudo docker compose up -d

사용법#

TMA-1#

모노리스 PCB의 8개 커넥터는 모두 Molex 5569-04A2(39300040)입니다. 상대물은 Molex 5557-04R(39012040)이고, 해당 커넥터의 터미널은 Molex 5556T(39000038)입니다.

각 커넥터의 핀 배치는 PCB에 표기되어 있습니다. 잘못 연결하면 장치가 영구적으로 손상될 수 있으니 주의합니다.

Specifications#

MINTYPMAXUNIT
Supply Voltage5.536V
Power Consumption0.51W
Digital Input Voltage058.5V
Analog Input Voltage (1)-0.37.2V
Accelerometer Range-88g
Gyroscope Range-500500°/s

(1) When voltage divide jumper is connected. 1/2 for AIN5, AIN6 and channels with no jumper.

Wi-Fi#

TMA-1의 무선 통신 기능(실시간 텔레메트리 및 데이터 다운로드 등)을 사용하기 위해서는 2.4GHz Wi-Fi 연결이 필요합니다.

데이터로깅 기능은 Wi-Fi 연결이 없어도 동작합니다. 오프라인으로 사용하려면 주행 이후 SD 카드를 분리하여 PC에 마운트하면 됩니다.

다만 TMA-1의 내부 시계는 네트워크를 통해 SNTP로 자동 동기화되므로, 최소한 한 번은 인터넷에 연결해 시간을 동기화해야 합니다.

초기 설정#
  1. 장치에 전원을 공급합니다.
  2. 첫 부팅 시 Monolith v2 XXXXXX 라는 자체 Wi-Fi AP가 생성됩니다. 비밀번호는 monolith입니다.
  3. 해당 AP에 연결하고 브라우저에서 http://192.168.4.1에 접속합니다.
  4. TMA-1이 주행 중 연결할 휴대폰(드라이버가 들고 탈 휴대폰)의 핫스팟 정보를 Wi-Fi SSIDWi-Fi Password에 입력합니다.
  5. Server Address에 사용할 서버 주소를 입력합니다.
  6. 이메일로 보낸 것과 동일한 값을 Device NameDevice Key에 입력합니다.
  7. Save를 클릭하고 Reboot를 클릭합니다.

재부팅 이후 TMA-1은 설정된 Wi-Fi로 연결을 시도합니다.

초기화#

Wi-Fi와 서버 설정을 초기화하려면 PCB의 RST 점퍼를 3초 이상 합선시켰다가 뗍니다. Wi-Fi, 서버, 디바이스 이름과 키 등 모든 설정이 초기값으로 복원됩니다.

초기화 후 위 초기 설정 단계부터 다시 진행합니다.

전원 및 CAN#

PWR/CAN 포트는 TMA-1에 전원을 공급하고 CAN 통신 라인을 제공합니다.

전원 핀은 VIN, GND이며, 동작 중 약 0.5W(40mA @12V)를 소모합니다.

PCB의 CAN 120Ω 점퍼를 합선시키면 CAN 버스의 TMA-1측 종단 저항이 활성화됩니다. 사용 중인 CAN 버스의 종단 저항 구성에 맞게 설정합니다.

CAN 버스의 양 끝단에는 120Ω 저항이 각 1개씩 있어야 하며, 이에 따라 CANHCANL 사이의 저항은 60Ω이 되어야 합니다.

GPS#

TMA-1은 외장 GPS 모듈을 지원합니다.

GPS 포트를 UART 방식 GPS 모듈에 아래와 같이 연결합니다.

현재 지원하는 GPS 모듈은 U-BLOX NEO-6M/7M/8M 모듈입니다. 추후 필요에 따라 다른 모듈도 추가될 수 있습니다.

디버그 출력#

DEBUG 포트는 기본적으로 비활성화되어 있으며, 사용자의 필요에 따라 커스텀할 수 있습니다.

기록된 로그를 콕핏 디스플레이 등 다른 MCU에 내보내기 위해 설계되었습니다.

전기적으로는 단순히 여분의 3.3V 0.5A 전원 레일과 GPIO 2개를 제공하는 커넥터이며, 사용자가 사용하기 나름입니다.

디지털 및 아날로그#

TMA-1은 4개의 디지털 입력 채널과 6개의 아날로그 입력 채널을 제공합니다. 또한, 총 2.5A를 공급할 수 있는 5V 전원 레일 5개를 제공합니다.

디지털 입력#

디지털 채널은 순간적인 과전압은 버틸 수 있지만, 연속 입력 전압은 8.5V까지로 제한됩니다.

아날로그 입력#

아날로그 채널의 최대 입력 전압은 3.6V입니다.

한편, AIN1 ~ AIN4 채널은 선택 가능한 1/2 전압 분배 회로를 가지고 있습니다. PCB에서 각 AIN 채널에 달린 점퍼를 합선시키면 전압 분배 회로가 활성화되며, 최대 입력 전압이 7.2V로 늘어납니다.

따라서, 최대 5V 전압을 출력하는 센서는 점퍼를 합선시킨 경우에만 사용할 수 있습니다.

AIN5와 AIN6에는 전압 분배 회로가 없으며, 최대 입력 전압은 3.6V로 고정됩니다.

Control Hub#

Control Hub는 https://v2.monolith.luftaquila.io 에서 무료로 사용할 수 있습니다.

Live Telemetry#

실시간 텔레메트리를 사용하려면 먼저 Device Configuration 탭에서 서버 정보를 설정해야 합니다.

또한, 수신되는 CAN 데이터를 보려면 먼저 UI Configuration 탭에서 CAN Decoder를 설정해야 합니다.

서버를 잘 설정했고 TMA-1이 네트워크에 연결되어 있다면 모든 기능은 알아서 잘 작동합니다.

Console#

사용자 이벤트나 CAN 메시지를 장치로 전송할 수 있습니다.

Data Viewer#

주행 데이터를 열람하려면 먼저 기록을 다운로드해야 합니다. Device Configuration 탭의 Data Downloader 섹션을 참고해 데이터를 다운로드합니다.

기록된 CAN 데이터를 보려면 UI Configuration 탭에서 CAN Decoder를 먼저 설정해야 합니다.

UI Configuration#

Live Telemetry와 Data Viewer의 각 카드의 표시 여부를 조정하거나 입력 신호의 이름과 단위, 배율을 설정할 수 있습니다.

변경 사항을 적용하려면 페이지를 새로고침해야 합니다.

Import/Export#

현재 UI 설정을 내보내고 다른 기기나 브라우저에서 가져올 수 있습니다.

Display#

Live Telemetry 및 Data Viewer에서 각 카드의 표시 여부를 제어합니다.

Units#

아날로그 및 CAN 데이터에 사용할 사용자 정의 단위를 관리합니다.

Digital#

채널 이름을 변경할 수 있습니다.

Analog#

CAN#

CAN 메시지 디코더를 관리합니다. 디코더는 CAN 페이로드에서 유효한 데이터를 추출합니다.

Device Configuration#

Control Hub가 연결할 서버와 장치 설정을 변경합니다.

장치가 인터넷에 연결되어 있다면 설정값을 자동으로 불러옵니다.

Server#

모든 값은 TMA-1 - 초기 설정 단계에서 장치에 입력한 값과 일치해야 합니다.

저장 버튼을 누르면 자동으로 서버에 연결합니다.

Device#
Inputs#

디지털 및 아날로그 입력 채널의 로깅 여부를 제어합니다.

CAN#

FilterMask에 대한 자세한 내용은 ESP32-S3 API ReferenceAcceptance Filter 항목을 참고하세요. 기본 설정은 모든 CAN 메시지를 허용합니다.

GPS#
Danger Zone#
Data Downloader#

파일 목록을 불러온 뒤, 원하는 파일의 다운로드 버튼을 눌러 해당 파일을 다운로드합니다.

Development#

직접 소프트웨어를 고쳐 사용하고 싶은 경우에만 필요합니다.

세부 사항

펌웨어

  1. GitHub 저장소에 ⭐를 누릅니다.
  2. ESP-IDF를 설치하고 아래 명령을 실행합니다.
git clone https://github.com/luftaquila/monolith.git
cd monolith/device/firmware
make build
make run   # build & flash

Control Hub

  1. GitHub 저장소에 ⭐를 누릅니다.
  2. 아래 명령을 실행합니다.
git clone https://github.com/luftaquila/monolith.git
cd monolith/web
npm install
npm run vite
npm run build

스폰서#

모노리스의 모든 PCB는 PCBWay로부터 프로토타이핑을 지원받아 완성되었습니다.

PCBWay의 경우 PCB 색상으로 흰색과 검은색, 매트 색상을 선택하면 구리 간 최소 간격이 0.22mm 이상이어야 합니다. 가장 최근에 지원받은 v2 mini PCB의 경우 가속도 센서로 사용되는 MPU-6500의 핀 간격이 0.2mm입니다. 검은색으로 주문했으나 이러한 이유로 불가하다는 메일을 받았고, 가장 간단한 해결책은 색깔을 초록, 파랑, 빨강, 보라 중 하나로 변경하는 것이라 가장 안 흔한 보라색으로 선택했습니다.

이후 견적 안내, BOM 리스트, 부품 문제 안내 메일을 순서대로 받았고 정상적으로 주문되었습니다. 제작이 완료된 후에는 보드 실물 사진을 다시 메일로 받았고, 주문부터 배송 출발까지는 정확히 2주 소요되었습니다.

배송받은 PCB는 10장 모두 정전기 방지 포장재에 한 장씩 개별포장되어 왔는데, 항상 뽁뽁이에 감겨 오는것만 보다 개별포장된걸 보니 놀라웠습니다. 테스트해본 기판은 정상작동했고, 모든 SMD 부품은 솔더브릿지같은 문제 없이 잘 실장되어 왔습니다. 실장하지 않은 부품에도 풋프린트 위에 납이 입혀져 와 손으로 납땜하기 쉬웠으며, 보라색 색깔도 아주 맘에 들었습니다.

Monolith v2 Documentation v1.0.0