본문 바로가기

자동차 속도 기반 IoT 장식 만들기 06 - 실차 테스트 결과와 방향 전환, OBD2에서 GPS+가속도 센서로

@밀양박씨!2026. 5. 1. 02:26

1. 드디어 실차 테스트

4편까지 시뮬레이터 슬라이더로만 검증했던 Carpybara를 이번에는 실제 차량 두 종류에 연결해봤습니다. 내연기관차와 전기차(아이오닉5), 결과가 완전히 달랐습니다.



2. 내연기관차 — 정상 작동

 

내연기관차 OBD2 포트에 Veepeak 동글을 연결하니 예상대로 잘 동작했습니다. ELM327이 CAN 프로토콜을 자동 감지(ATSP0)하고, 표준 PID들이 깔끔하게 응답했습니다.

  • 속도(010D), RPM(010C), 냉각수 온도(0105), 연료량(012F), 부하(0104), 전압(0142) 모두 수신 확인
  • 캐릭터가 실제 속도에 맞춰 걷기 → 달리기로 전환되는 것 정상 확인
  • 주행 중 HUD 수치가 실시간으로 업데이트되고 웹 리모컨과도 동기화됨
  • ODO 미터도 22F40D → 22A6 → 0131 → 0121 폴백 순서로 정상 조회

내연기관차에서는 OBD2 구현이 기대한 대로 완전히 작동했습니다.


3. 어바인 스펙트럼 센터에 있는 리비안 매장 방문하기

 

전기차에서도 작동하는지 확인하기 위해 어바인 스펙트럼센터에 위치한 리비안 매장에 방문했습니다.
해당 매장에서 리비안 직원분께 피드백을 받고, 운이 좋아 실제 리비안 자동차를 운전하며 테스트를 할 수 있는 기회를 얻었습니다!

 

하지만,

4. 전기차(리비안& 아이오닉5) — 제대로 작동하지 않음

같은 동글을 리비안 자동차와 아이오닉5 OBD2 포트에 꽂으니 문제가 연달아 터졌습니다.


1. ELM327 동글의 EV CAN 버스 통신 불안정

ATSP0 자동 감지로는 연결 자체가 불안정했습니다. EV는 ISO 15765-4 CAN 기반이지만 동글에 따라 CAN 속도(500Kbps vs 250Kbps) 협상이 실패하는 경우가 있어, 연결이 됐다 끊겼다를 반복했습니다.


2. 제조사 확장 PID(220101) 바이트 오프셋 불일치

BMS 데이터 파싱을 위해 바이트 오프셋을 하드코딩했는데, 실차 응답과 맞지 않았습니다.

#define EV_BMS_CURR_BYTE  4   // 배터리 전류
#define EV_BMS_VOLT_BYTE  6   // HV 전압
#define EV_BMS_SOC_BYTE   9   // SoC
#define EV_BMS_TMAX_BYTE 29   // 최고 셀 온도

ECU 소프트웨어 버전이나 트림에 따라 응답 포맷이 다를 수 있고, ATS0(공백 제거) 상태에서 멀티프레임 헤더 처리 방식도 동글마다 달랐습니다.


3. 고정 버퍼 오버플로

롱 프레임 허용(ATAL) 이후 220101 응답이 160바이트를 초과할 때 내부 버퍼(g_rx[160])가 잘리면서 파싱이 엉켰습니다.

 

 



5. 그래서 OBD2 자체를 안 쓰기로 했다

내연기관차에서 잘 동작했음에도 OBD2를 완전히 포기한 이유는 한 가지입니다. EV OBD2 확장 PID는 제조사·모델·연식마다 규격이 다르고 공개 문서도 부족합니다. 아이오닉5에 맞게 오프셋을 수정해도 다른 EV, 다른 연식에서는 또 틀립니다. ICE 전용으로 남겨두자니 EV가 계속 늘어나는 현실에서 의미가 없고, 결국 차종마다 수동 설정을 요구하는 프로젝트가 되어버립니다.

그래서 OBD2 의존을 완전히 없애기로 했습니다.



6. 새 방향 — GPS + 가속도 센서

캐릭터를 움직이게 하는 데 진짜 필요한 건 속도가속·감속 느낌입니다. 이 두 가지는 OBD2 없이도 얻을 수 있습니다.

항목 기존 (OBD2 BT) 변경 (GPS + IMU)
속도 OBD2 PID 010D GPS NMEA $GNRMC
가속/감속 없음 MPU-6050 가속도계
방향 전환 감지 없음 MPU-6050 자이로
차종 의존성 있음 (ICE/EV 분기 필요) 없음 — 모든 차량 동작
연결 안정성 BT 페어링 + 프로토콜 협상 I²C / UART 유선 — 확실
부팅 후 대기 BT 연결까지 최대 10초 GPS 첫 Fix 후 즉시



추가할 하드웨어

  • GPS 모듈: ATGM336H 또는 NEO-6M (UART, NMEA $GNRMC 파싱으로 속도 취득)
  • IMU 모듈: MPU-6050 (I²C, 가속도 3축 + 자이로 3축)

기대 효과

  • ICE·EV 구분 없이 어떤 차량에서도 동작
  • Bluetooth 페어링·OBD2 프로토콜 협상 제거 → 부팅 즉시 데이터 수신
  • 급가속·급정거·코너링을 IMU로 감지해 캐릭터 리액션 추가 가능
  • GPS 데이터로 최고속도·평균속도·이동 거리 통계도 구현 가능



7. 다음 편 예고

다음 편에서는 ESP32에 GPS 모듈과 MPU-6050을 연결하고, GPS 속도를 기존 OBD2 속도 자리에 대입해 애니메이션을 구동하는 과정을 다룰 예정입니다.



8. 느낀 점

내연기관차에서 잘 됐다고 해서 전기차도 된다는 보장은 없었습니다. CAN 버스 통신 한 단계 아래까지 제어권이 없으면 차종에 종속될 수밖에 없고, 그 종속성을 없애는 것이 오히려 더 좋은 설계라는 결론에 이르렀습니다. 실패가 방향을 바꿨고, 바뀐 방향이 더 범용적입니다.

밀양박씨!
@밀양박씨! :: 박씨의 개발블로그

lovebotw049 님의 블로그 입니다.

목차