Files
driving-risk-flow-scoring/README.md
T
2026-08-03 04:05:18 +09:00

2.0 KiB

OBD CAN 기반 운전 성향 분석

차량 OBD-II CAN 데이터를 받아 운전 점수를 계산하는 시스템 설계 자료입니다.

속도, RPM, 조향각, 브레이크 값을 기준으로 급가속, 급제동, 급조향, 저속 지속 같은 상황을 나눕니다. 결과는 TFT 화면에 점수와 상태로 표시하는 구조로 잡았습니다.

기간

  • 2026.01.06 ~ 2026.01.19

맡은 부분

  • MCP2515 기반 CAN 통신 회로 구성
  • Arduino와 TFT, SD, RTC 모듈 연결
  • 차량 OBD-II 환경에서 데이터 요청/응답 확인
  • 점수 화면과 기록 구조 설계

사용한 것

  • Arduino
  • C/C++
  • MCP2515
  • CAN
  • UDS
  • OBD-II
  • Adafruit_ILI9341
  • SD
  • DS1302

데이터 흐름

  1. OBD-II 포트에서 CAN 프레임을 받습니다.
  2. MCP2515가 CAN 프레임을 Arduino로 넘깁니다.
  3. Arduino가 UDS 응답 payload를 바이트 위치와 스케일 값으로 변환합니다.
  4. 변환한 속도, RPM, 조향각, 브레이크 값을 점수 계산에 사용합니다.
  5. TFT 화면에 현재 값, 점수, 운전 상태를 표시합니다.

평가 기준

위험 행동

  • 급가속
  • 급제동
  • 급조향
  • 고속 상태의 급조향
  • 고RPM 유지
  • 위험 행동 반복

흐름 방해

  • 저속 지속
  • 평균 속도 대비 낮은 속도 유지
  • 감속 뒤 회복 지연

정체 보호

  • 정체 상태에서는 흐름 방해 감점을 제외합니다.
  • 정체 상태에서는 급가속/급제동 기준을 별도로 둡니다.
  • 정체가 끝나면 일반 평가 상태로 돌아갑니다.

자료

  • IMAGE/CAN_3.png: CAN 요청/응답 흐름
  • IMAGE/CAN_!.png: ECU / CAN ID 맵
  • IMAGE/CAN_2.png: payload 바이트 매핑
  • IMAGE/FSM.png: 상태 전환 흐름
  • IMAGE/HW.png: 하드웨어 구성

한계

  • 차량마다 DID와 payload 위치가 달라 그대로 재사용하기 어렵습니다.
  • 정체 판단은 속도 기반이라 실제 도로 상황과 다를 수 있습니다.
  • 차종별 CAN 맵을 따로 분리해야 다른 차량에 맞추기 쉽습니다.