산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

부품 및 소모품

부품수량비고
아두이노 우노 (Arduino UNO R3)1메인 컨트롤 유닛 (바이크 탑재)
u-blox NEO-7M GPS 모듈1위치, 속도, 고도, 위성 정보
LM35DT 온도 센서1외부 기온 측정 (아날로그 출력)
TMP006 적외선 온도 센서 (스파크펀)1후면 타이어 표면 온도 비접촉 측정
HC-05 블루투스 모듈1아두이노 ↔ 윈도우 폰 통신
초음파 거리 센서 HC-SR042프론트/리어 쇽업소버 스트로크 측정
ADXL345 3축 가속도계 (스파크펀)1G-포스, 린 각도(뱅크), 윌리 각도(피치) 산출
두카티 몬스터 6951테스트 차량 (임의 바이크 적용 가능)
스파크펀 프로토실드 키트1회로 기판용
하프 사이즈 브레드보드1프로토타이핑용
9V 배터리 + 클립1씩독립 전원용 (파워뱅크 대체 가능)
점퍼 와이어1세트
루미아 650 (윈도우 10 모바일)1UWP 앱 실행 디바이스

소프트웨어 및 앱

프로젝트 개요

모토GP 중계에서 보는 실시간 텔레메트리(속도, 린 각도, G-포스, 타이어 온도 등)를 아두이노와 애저 클라우드로 구현했습니다. 바이크에 장착된 컨트롤 유닛이 초당 2회 센서 데이터를 수집 → 블루투스로 윈도우 폰 전송 → 3G/4G로 애저 IoT 허브 업로드 → 스트림 애널리틱스로 SQL DB 저장 → 웹앱으로 실시간 대시보드 표시 → 머신러닝으로 주행 스타일 분석까지 통합된 엔드투엔드 시스템입니다.

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템
모토GP 스타일 텔레메트리 화면 예시

수집 데이터 항목

시스템 워크플로우 (7단계)

  1. 데이터 수집: 컨트롤 유닛(아두이노)이 초당 2회 센서 읽기
  2. 블루투스 전송: HC-05로 윈도우 폰에 시리얼 스트림 전송
  3. 폰 표시 & 클라우드 업로드: UWP 앱에서 실시간 게이지 표시 + 3G/4G로 애저 IoT 허브 전송
  4. 스트림 애널리틱스: IoT 허브 데이터 수신 → SQL 애저 DB 테이블에 저장
  5. 웹앱 대시보드: SQL DB 데이터를 엔티티 프레임워크로 읽어 실시간 차트 표시 (인증 필요)
  6. 머신러닝: 축적된 데이터로 주행 스타일 분류 모델 학습/예측
아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

하드웨어 상세 구현

1단계: 블루투스 통신 (SoftwareSerial)

HC-05를 클래스 2, SPP 프로파일, 슬레이브 모드로 설정. 기본 이름 'HC-05'를 변경 권장.

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11);  // RX, TX
void setup() { BTSerial.begin(9600); }
void loop() { BTSerial.print("데이터 문자열"); }

2단계: GPS 통신 (TinyGPS++ 라이브러리)

NEO-7M, 56채널, 10Hz 업데이트. SoftwareSerial + TinyGPS++로 파싱.

#include <SoftwareSerial.h>
#include <TinyGPS++.h>
SoftwareSerial ss(12, 13);
TinyGPSPlus gps;
void loop() {
  while (ss.available() > 0) {
    if (gps.encode(ss.read())) {
      if (gps.location.isValid()) {
        double lat = gps.location.lat();
        double lon = gps.location.lng();
      }
    }
  }
}

3단계: 가속도계 ADXL345 (I2C/SPI)

13비트 분해능, ±16g. I2C 인터페이스 사용. 초기 루프에서 중력 벡터 기준점(오프셋) 캘리브레이션 후 상대값 사용.

// 첫 루프에서 기준점 저장
if (i == 0) { refXg = Xg; refYg = Yg; refZg = Zg; i = 1; }
Xg -= refXg; Yg -= refYg; Zg = Zg - refZg + 1;  // Z축에 1g 보상

// 롤(린 각도) & 피치(윌리 각도) 계산
roll  = -(atan2(-fYg, fZg) * 180.0) / M_PI;
pitch =  (atan2(fXg, sqrt(fYg*fYg + fZg*fZg)) * 180.0) / M_PI;

축 정의: Z=중력 방향, Y=진행 방향, X=측방향

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

4단계: 타이어 온도 - TMP006 적외선 센서

비접촉 온도 측정 (4~16μm 적외선). 타이어 폭 160mm → 반경 80mm → 권장 거리 ≤40mm (R/2). I2C 통신, Adafruit_TMP006 라이브러리 사용.

float objt = tmp006.readObjTempC();  // 대상 물체 온도 (타이어)
float diet = tmp006.readDieTempC();  // 센서 자체 온도 (외부 기온 대체 가능)
아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

5단계: 외부 기온 - LM35DT

아날로그 출력, 10mV/°C 선형 특성. 아두이노 아날로그 핀으로 읽기.

int sensor = analogRead(A1);
float millivolts = (sensor / 1023.0) * 5000;
float celsius = millivolts / 10;

6단계: 쇽업소버 스트로크 - HC-SR04 초음파 (NewPing 라이브러리)

음파 왕복 시간으로 거리 측정. 신규 라이브러리 NewPing.h로 고성능 구현.

#include <NewPing.h>
NewPing sonar(2, 3, 200);  // Trig, Echo, 최대거리(cm)
int ReadPositionPing() {
  unsigned int uS = sonar.ping();
  return sonar.convert_cm(uS);
}

UWP 앱 (윈도우 10 모바일)

데이터 프로토콜

아두이노 → 폰 전송 문자열 포맷 (파이프 구분, START/END 마커):

$START|40.909409|N|9.520008|E|8|2|2016|15:46:42|0.09|0.000000|0|0|-0.21|0.00|0.00|-0.02|0.98|-|0.00|35.19|29.58|16|10|$END|

파싱 후 인덱스별 의미: 0=START, 1=위도, 2=N/S, 3=경도, 4=E/W, 5=월, 6=일, 7=년, 8=시각, 9=속도, 10=고도, 11=위성수, 12=HDOP, 13=롤, 14=피치, 15=Xg, 16=Yg, 17=Zg, 18=오디오(미사용), 19=거리, 20=외부온도, 21=타이어온도, 22=프론트쇽, 23=리어쇽, 24=END

UI 구성

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

윈도우 10 모바일 배포 (WinAppDeployCmd)

  1. 폰을 '개발자 모드'로 설정 (업데이트 및 보안 → 개발자용)
  2. USB 연결 → PIN 코드 확인
  3. 비주얼 스튜디오 → 프로젝트 우클릭 → 스토어 → 앱 패키지 생성 → 로컬 패키지(ARM) 빌드
  4. 생성된 .appxbundle 파일 경로 복사
  5. 관리자 CMD에서 실행:
    WinAppDeployCmd install -file "경로\파일.appxbundle" -ip 127.0.0.1 -pin PIN코드

애저 클라우드 구성

1. IoT 허브 생성

2. 스트림 애널리틱스 작업 생성

3. 웹앱 + SQL 애저 생성

4. 디바이스 ID 등록

콘솔 앱으로 Microsoft.Azure.Devices NuGet 패키지 사용해 디바이스 ID 생성 및 키 발급.

string connectionString = "IoT허브연결문자열";
string deviceId = "myDucatiMonsterDevice";
Device device = await registryManager.AddDeviceAsync(new Device(deviceId));
// device.Authentication.SymmetricKey.PrimaryKey 가 디바이스 키

웹 애플리케이션 (ASP.NET, 엔티티 프레임워크)

반응형 대시보드로 모든 텔레메트리 실시간 차트 표시. 데모 계정: demo / demo.

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템
아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

커스텀 도메인 구매/연결도 애저 포털에서 간단 설정 가능.

실차 장착 (두카티 몬스터 695)

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템
아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

머신러닝 (애저 ML 스튜디오)

학습 실험

  1. SQL 애저 데이터 임포트 (불량 데이터 필터링: 속도>3, 쇽>0, 롤±60° 등)
  2. Split Data로 학습/테스트 분할
  3. Train Model: 타겟 필드(예: 주행 스타일 클래스) 지정, 알고리즘 선택
  4. Score Model → Evaluate Model로 성능 평가

결과: Two-Class Decision Forest 알고리즘이 Accuracy, Precision, Recall, F1 모두 1.0 근접으로 최적 성능.

예측 실험 (웹 서비스화)

  1. 학습 실험을 예측 실험으로 변환
  2. Multiclass Decision Forest로 다중 클래스 분류 (예: SAFE DRIVING, HIGH STRESS HIGH SPEED 등)
  3. 웹 서비스 배포 → 테스트 버튼으로 실시간 추론 가능
아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

발견된 인사이트

최종 결론 및 향후 개선 방향

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

질문과 피드백 환영합니다. 즐거운 메이킹 되세요! :-)

코드

회로도

아두이노, GPS, 다중 센서로 구현하는 실시간 모터바이크 텔레메트리 시스템

MotorbikeProject.fzz (프리츠링 파일)

제조공정

  1. 센서 텔레메트리 2.0.1: Azure IoT Hub를 활용한 고급 온도 모니터링
  2. 아두이노와 초음파 센서를 이용한 AI 기반 장애물 회피 시스템
  3. NeoPixel 링과 Arduino로 만드는 인터랙티브 자이로스코프 LED 디스플레이
  4. DIY 아두이노 USB 게임 컨트롤러 - 나만의 고성능 게임패드 만들기
  5. DIY 구름 의상: LED 스트립, 아두이노 나노 & 스파크펀 부품으로 만들기
  6. 산업용 라인 팔로잉 로봇: 자재 이송용 아두이노 기반 자율 주행 로봇
  7. Pixie: 아두이노 기반 네오픽셀 손목시계 – 세련된 DIY LED 타임피스
  8. 스마트 아두이노 물병: 실시간 음수량 모니터링 및 알림
  9. 아두이노와 주소 지정 LED 스트립으로 만드는 DIY 홀리데이 그림자 극장
  10. 휴대용 원격 감시 카메라 로봇 시스템