ALL PROJECTS
도구프로토타입

OBD-II CAN Tester

실시간 차량 CAN 데이터를 분석·시각화하는 OBD-II 진단 도구

차량 OBD-II 데이터를 수집하고 하이브리드 주행 상태를 시각화하는 실시간 진단 시스템

차량 OBD-II 포트에 연결해 RPM, 속도, 흡기온도, 스로틀 포지션, MAF, 냉각수 온도 등 6개 PID를 비동기로 수집하고, Tkinter·Matplotlib GUI에서 실시간 그래프로 시각화하는 차량 진단 도구. 단순 수치 출력에 그치지 않고, RPM과 속도 패턴을 바탕으로 EV·Hybrid·Stop 주행 상태를 추론하는 로직. 2012 Toyota Prius 실차 환경에서 테스트했으며, 자동차 도메인과 실시간 데이터 처리를 함께 다루는 개인 관심사가 반영된 프로젝트.

OBD-II 데이터 수집, 비동기 polling, 실시간 그래프 UI와 하이브리드 상태 판별 로직 구현을 담당

Automotive DataGUI DevelopmentReal-time Visualization

Problem

차량 내부에는 풍부한 데이터가 흐르지만, 운전자나 개발자가 이를 실시간으로 확인하고 주행 상태를 해석하기는 어려운 점. OBD-II로 접근할 수 있는 값도 raw 형태라, 의미 있는 상태로 읽어 내려면 별도의 가공과 시각화가 필요한 영역.

Solution

OBD-II 포트에서 주요 PID 6종을 비동기로 수집하고, 실시간 그래프와 하이브리드 상태 판별 UI로 차량 상태를 시각화하는 도구. 수집한 raw 데이터를 도메인 규칙으로 해석해 'EV 모드인지, 엔진이 도는지, 정차인지'를 사람이 읽을 수 있는 상태로 변환하는 로직.

Key features

비동기 PID 수집

obd.Async를 활용해 RPM·속도 등 6개 차량 데이터를 끊김 없이 주기적으로 수집하고, 수집 지연이 UI를 막지 않도록 한 설계.

실시간 그래프

Matplotlib 기반 3x2 그래프로 각 PID를 1초 간격으로 갱신해, 주행 중 변화하는 차량 상태를 실시간으로 관찰할 수 있는 뷰.

하이브리드 상태 판별

RPM과 속도의 조합을 기준으로 EV MODE, Hybrid MODE, Stop 상태를 추론해, raw 수치를 운전 맥락의 상태로 해석하는 로직.

Tech stack

프론트엔드
TkinterMatplotlib
백엔드
Python
도구
OBD-IICANobd.Async

Architecture

data.py가 OBD 연결·수집 계층을, ui.py가 Tkinter·Matplotlib 기반 GUI를, main.py가 둘을 잇는 스레드 구조를 담당하는 구성. 수집과 렌더링을 분리해 실시간성과 GUI 메인스레드 제약을 함께 만족하도록 한 설계.

Metrics

2012 Toyota Prius 실차 테스트테스트 환경

Learnings

하드웨어 인터페이스, 실시간 데이터 polling, GUI 메인스레드 제약, 도메인 기반 상태 해석을 한 프로젝트 안에서 동시에 다룬 경험. 특히 raw 데이터를 의미 있는 상태로 번역하는 도메인 로직이 단순 수집보다 더 큰 가치를 만든다는 점.