2016년 6월 8일 수요일

OBD-II (On-Board Diagnostics) 로 자동차 정보 보기 - 4편 (사용 가능한 PID 값은?)

Embedding Navigation 도 갖춰 졌으니 dashboard 를 제대로 꾸미려면 OBD-II 에 대해 좀 더 공부를 해야 겠다는 생각이 들었다.

specification 문서를 직접 보면 제일 좋겠으나 wiki 에 잘 정리 되어 있어서 wiki 를 활용했다.

확인한 방법은 Arduino OBD 예제 코드중 PID Test 하는 배열 범위를 spec 에 나와있는 모든 값 0x00 ~ 0xC4 까지 모두 찍어 봤다. 추가로 범위 외 값까지 다 찍어 봤으나 C4 이후의 값는 N/A 로 나왔기 때문에 의미가 없다.

그 많은 PID 중에 내가 사용할(읽을) 수 있는 값은 아래 20개 이다. arduino obd github 에도 20개 값을 사용할 수 있다고 나와 있기는 한데, 목록과 좀 다르다. 하나하나 살펴보고 가장 우선순위가 높은 의미 있는 값 8개 정도를 dashboard 에 사용하려고 한다.

우선 화면부터 대충 꾸며 봤다. 화면 배치에 8개의 게이지가 사용되었다. Vertical Gauge 도 넣어 봤는데 UI 에 일관성이 떨어져서 모두 Circle 로 했다. 음.. 뭔가 공돌이 스러운 UI 인데... 지도를 전체로 덮고 Gauge 를 최소로 줄여 볼까... 읔.. 아무래도 이건 내 영역이 아닌듯.
PID 공부전에 대충 꾸며본 화면
[엔진 분당회전수0x0C] PID_RPM=747, 최저값 = 0, 최대값 16,383.75, 단위 rpm
설명이 필요없는 기본이자 필수 값. 공회전시에 700~800 정도의 값이 측정됐다.

[자동차 속도 0x0D] PID_SPEED=0, 최저값 = 0, 최대값 255, 단위 km/h
역시 필수 값, 멈춰 있었기에 0.

[엔진 작동시간 0x1F] PID_RUNTIME=274, 최저값 = 0, 최대값 65,535, 단위 seconds
Linux 치면 uptime 정도 되려나, 274초는 시동을 켠 지 4분 34초 지났다는 의미.

[운행거리 0x31] PID_DISTANCE=12410, 최저값 = 0, 최대값 65,535, 단위 km
운행거리인데, 계기판에는13,057 이 나오는 것을 보면 뭔가 차이가 있는 것 같은데, reset 버튼을 누르면 0 로 바뀌나? 한번 해 봐야 겠다. 최대값이 65,535 km 라는 것도 좀 의아하다. 십만 넘는 차들이 보통인데 6만 까지 밖에 없다는 것은 reset 이후의 거리가 맞는 듯 하다. 총 달린 거리는 중고차 판매할 때 해킹의 위험성이 있어서 그런가...

[MIL 과 함께 운행거리 0x21] PID_DISTANCE_WITH_MIL=0, 최저값 = 0, 최대값 65,535, 단위 km
Malfunction Indication Lamp
MIL 이라함은 위 아이콘처럼 이상신호를 알려주는 램프인데... 왜 운행거리와 함께 보여주지? 단위도 km 인것을 보면 그냥 거리를 나나태는 것 같은데... 너무 많이 달려서 경고를 주나? 흠.. 쉽게 추측되지 않는 의미다.

>> [추가 : 2016.06.09] clien.net 에서 <짱아TM님>이 'MIL 점등후 주행거리' 라고 알려 주었다. 이제 깔끔하게 이해가 된다.

[엔진의 부하 0x04] PID_ENGINE_LOAD=14, 최저값 = 0, 최대값 100, 단위 %
엔진에 얼마만큼의 부하가 걸리는지 알 수 있다. 가만히 서 있는데도 14% 나 나오네..

[흡입공기 압력 0x0B] PID_INTAKE_MAP=102, 최저값 = 0, 최대값 255, 단위 kPa
고등학교 기술시간에 4행정 기관을 배웠던것 같은데.. 뭐였더라 (흡기/압축/폭발/배기) 였던가. 여기서 흡기가 영어로 intake 이니 Intake Manifold Absolute Pressure 라함은 흡기때 입력되는 공기의 압력일거 같다. 대기압이 100 이니까 비슷~하네.

[흡입공기 온도 0x0F] PID_INTAKE_TEMP=51, 최저값 = -40, 최대값 215, 단위 
Intake MAP 과 마찬가지로 흡기의 온도 겠지. 51도면 꽤 높다.

[엑셀 페달 위치 0x49] PID_ACC_PEDAL_POS_D=14, 최저값 = 0, 최대값 100, 단위 %
직관적으로 페달 위치를 말하는 것 같은데, 초기 사용자설정의 페달위치인지 밟으면 올라가는 것인지 좀 자세히 알아 볼 필요가 있다.

[대기압 0x33] PID_BAROMETRIC=100, 최저값 = 0, 최대값 255, 단위 kPa
자동차에 대기압이 왜 필요한가 했더니, 엔진에 흡입되는 산소의 양이 온도, 습도, 밀도, 대기압에 따라 달라지기 때문에 대기압도 중요한 변수가 된다.

[촉매 온도 0x3E] PID_CATALYST_TEMP_B1S2=111, 최저값 = -40, 최대값 6,513.5, 단위 
Catalyst 라는 어려운 영어는 촉매를 뜻한다. 자동차 촉매를 검색해 보니 배출가스를 줄이는 역할을 하는 삼원촉매장치라는 것이 나오는데 아마도 이것을 말하는 것이 아닐까.

[배출가스 환원장치 0X2C] PID_COMMANDED_EGR=0, 최저값 = 0, 최대값 100, 단위 %
배기가스에서 질소산화물의 양을 낮추기 위해 제조회사에서 엔진에 결합한 장치를 EGR (Exhaust Gas Recirculation) 이라고 한다. 0% 일때는 특별한 command 를 실행하고 있지 않고 100% 일 경우 열심히 일을 하는 것으로 보인다.

[엔진 냉각수 온도 0x05] PID_COOLANT_TEMP=84, 최저값 = -40, 최대값 215, 단위 

[스로틀 위치 0x11] PID_THROTTLE=0, 최저값 = 0, 최대값 100, 단위 %
스로틀이라함은 흡입 공기량을 조절하는 것인데, 이것이 완전 열려 있으면 차가 엄청 달려 나갈 것이다. Absolute 와 Relative 위치값이 제공된다.

[상대 스로틀 위치 0x45] PID_RELATIVE_THROTTLE_POS=0, 최저값 = 0, 최대값 100, 단위 %
Absolute Position 과 달리 상대적인 혹은 (학습된) position 값을 준다.


[스로틀 작동기? 0X4C] PID_COMMANDED_THROTTLE_ACTUATOR=0, 최저값 = 0, 최대값 100, 단위 %   
이 값이 0이면 스로틀이 완전 닫히고, 100 이면 완전 열릴 command 상태이다.

[MAF 공기흐름 비율 0x10] PID_MAF_FLOW=18, 최저값 = 0, 최대값 655.35, 단위 grams/sec
Mass Air Flow Sensor (공기질량 센서) 로 부터 측정된 공기 흐름 비율
      
[컨트롤 모듈 전압 0x42] PID_CONTROL_MODULE_VOLTAGE=14, 최저값 = 0, 최대값 65,535, 단위 V
컨트롤 모듈에 입력되는 전압, 일반적으로 배터리 전압.

[배출가스 환원장치 에러 0x2D] PID_EGR_ERROR=99, 최저값 = -100, 최대값 99.2, 단위 %
배출가스 환원장치 명령의 에러율이라고 하는데, 음수값은 실제 명령받은 것보다 적게, 양수값은 그보다 크다라고 설명이 되어 있다. 음.. 번역을 잘못한건가. 새차이고 정차중인데 99 라는 수치가 나온다는 것은 양수가 더 좋은 의미인가. 이건 좀 더 알아 봐야 겠다.

[웜업 횟수 0x30] PID_WARMS_UPS=255, 최저값 = 0, 최대값 255, 단위 count
Scan 툴에 의해 Diagnostic Trouble Code (DTC), 일명 고장코드가 Clear 된 Cycle 값을 의미한다고 하는데, 문장 그대로 이해 하면 고장 코드가 255번 clear 되었다는 것 같은데, 이것 역시 EGR Error 와 같이 값이 좀 이상하다. 좀 더 공부가 필요 할 듯.
그런데... 이상하다. PID 목록에 FUEL LEVEL 이 분명히 있는데 값이 들어 오지 않는다. Mode 1 값을 모조리 다 찍어 봤는데 나오지 않는다는 것은 proprietary 값이 존재 한다는 것인가? RPM, Speed 와 같이 정말 기본중에 기본값인것 같은데 얻을 수 없다니 좀 당황스럽다.

일단 PID 공부는 이쯤 해 두고, Fuel Level 만 집중적으로 파 봐야 겠다.

댓글 없음: