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
Monolith v2 Documentation v1.0.0