아두이노로 자동차 대시보드를 완성하다 - 2편
브레드보드로 상당히 많은 컴파일과 수정을 거치면서 주문한 OLED도 도착하였고 몇가지 센서들도 도착하였습니다.
완전체로 프로그램 수정과 보완작업을 거치면서 여러차례 차에서도 데이터값 추출, 표시 등을 직접 테스트하며 디버깅을 하였습니다.
이 과정에서 예상치 못했던 문제가 생기게 되었습니다.
우선 차량용 OBD2 단자를 통해서는 상당히 많은 양의 정보가 제공되고, freematics사의 OBD2아답터는 이 정보들을 아두이노로 전달하는 역할을 하는것인데 여기서 문제가 생겼습니다.
freematics의 제품정보상에서 제공되는 PID정보를 아래처럼 소개하고 있습니다.
상당히 여러가지 정보를 뽑아낼 수 있는데, 이외에도 표준 PID값을 통해 추가적인 정보도 뽑아낼수 있게 됩니다.
위키피디아를 통해 확인하면 100여개 이상의 매우 다양한 정보들이 표준 OBD2정보를 통해 제공됨을 알 수 있습니다.
https://en.wikipedia.org/wiki/OBD-II_PIDs
문제는 아두이노에서 데이터를 뽑아낼때, 위 그림에 적혀 있는 정보들이 나오지 않는 다는 것이었습니다.
시리얼 모니터로 확인해보면 데이터가 실시간으로 정상적으로 나오는 것은 몇가지 되지 않고, 일부는 데이터값이 나오긴하나 아주 긴시간(약 10초 정도) 딜레이가 생기거나(엔진 load), 아예 값이 나오지 않는것이 대부분이었습니다. (주행거리 등)
wikipedia에서 PID리스트를 인쇄해서 제가 원하는 값 10여개를 하나하나 PID값으로 넣어서 테스트 해 보았으나 정상적으로 출력되는 것은 속도, 엔진RPM, 배터리전압, 엔진가동시간, 엔진흡기온도, 냉각수온도 뿐이였습니다.
이러한 문제가 정상은 아닌데, freematics에 영어가 짧은 관계로 문의하진 못하고 이정도로도 필요한 정보는 대부분 나오는거여서 이 정보만으로 데시보드를 구현하려고 정리하였습니다.
우여곡절 끝에 데이터 추출문제를 정리하고 브레드보드로 프로그램 완성도를 높여 차에서도 실주행 테스트를 1~2번 거치면서 보완하였습니다.
제차는 2009년식 투싼ix로 기본모델이여서 에어컨에 온도표시가 없어 4번 아두이노에 온도센서도 추가하였습니다.
생각 같아선 자이로센터와 GPS까지 연결하고 싶었으나 일단 기본기능을 구현하고자 다 배제하고 OBD2정보만 표시하는것으로 하였습니다.
실 주행 테스트까지 마친 후 PCB작업을 진행하였습니다.
PCB는 5*7사이즈 2개로 하나의 PCB에는 액정 4개를, 나머지 하나는 아두이노 4개를 연결하는 것으로 2층 구조로 작업을 했습니다.
PCB에서 액정하고 아두이노 분리가 가능하도록 헤더핀으로 자리를 잡고 납땜하였습니다.
전원선을 연결하고, 아두이노에서 액정으로 연결되는 4선, 아두이노간 통신을 위한 배선을 납땜해 주었습니다.
온습도센터도 전원과 데이터선을 아두이노에 배선해주고, 센서위치는 액정과 PCB사이 공간에 배치해 주었습니다.
PCB 두개를 겹치면서 쇼트가 나지 않도록 신용카드 하나를 적당히 짤라서 중간부분에 스페이서처럼 넣어 주었습니다.
첫번째와 두번째 사진에서 보면 아두이노는 마이크로 USB단자 부분을 바깥쪽으로 향하게 해서 조립후에도 프로그램 수정이 용이하도록 자리를 잡아 주었습니다.
바깥으로 뺀 4선 커넥터는 전원선 +,-와 OBD2 아답터로 부터 오는 데이터선 RX, TX 4선을 연결하기 위한 커넥터 선입니다.
조립후에도 프로그램은 계속 업데이트를 해 나갔습니다.
이렇게 완성시킨 후 차에서 테스트를 하는 과정중에 계속 속도와 RPM쪽 액정이 멈추는 문제가 생겼고, 원인을 찾을수가 없어서 납땜이나 회로문제 같아서 전체 PCB작업을 다시 하였습니다. TT
다시 신중하게 납땜한 PCB에서도 동일한 증상이 발생하여, 이것저것 원을을 찾아본 결과 이 문제는 전원문제로 확인했습니다.
회로상으로 전원은 아두이노의 VCC에 공급하였는데, 이상하게도 VCC에 전원을 공급할때 1,2번 액정이 멈추는 문제가 생겼고, VCC가 아니라 USB포 단자에 USB케이블로 연결할때는 전혀 이런 현상이 일어나지 않았습니다.
원인을 찾을 수는 없지만 어쩔 수없이 전원은 USB단자에 공급하는 것으로 일단락 지었습니다.
(이후에 아두이노 UNO에서도 비슷한 경험을 한차례 더 하게 되었는데, 원인은 전혀 모르겠네요)
위에 설명대로 전원선은 USB로 하고 마운트에 붙여서 차에 장착하였습니다.
최종적으로 화면 4개에 뿌리는 정보는 1-속도, 2-RPM, 3-냉각수온도, 배터리전압, 엔진가동시간, 엔진흡기온도, 4-실내온습도, 주행거리(주행거리는 계산으로 산출) 가 되었습니다.
실 주행영상입니다.
액정을 통해 뿌려지는 정보는 약 초당 10프레임정도 되는것 같습니다.
RPM처럼 매우 빠르게 변하는 값도 초에 10번 정도면 크게 어색하지 않아 이정도면 만족스러운것 같습니다.
지금 현재 전원 공급문제가 약간 남아 있는데, 이것을 처리하기 위해 추가 부품을 몇개 주문해 놓은상황이라 다음 연재에서 작업 후 소개하도록 하겠습니다.
그런데 어제밤에 CAN-BUS 쉴드, 액정 등을 알리에서 주문한 상태라 왠지 이 프로젝트를 CAN쉴드로 처음부터 다시 시작할것 같은 기대반 걱정반이 듭니다. ㅎㅎ
'아두이노' 카테고리의 다른 글
아두이노로 GPS 신호를 직접 처리(분석) 하기 (3) | 2019.03.10 |
---|---|
아두이노로 자동차 대시보드를 완성하다 - 3편 (10) | 2019.02.09 |
아두이노로 자동차 대시보드를 완성하다 - 1편 (4) | 2019.02.09 |
3축 지자기장(자이로)센서 GY-273 HMC5883L 제대로 작동하지 않는다면 (0) | 2019.01.11 |
아두이노(arduino)로 자동차 ODB2를 통해 자동차 속도 표시하기 - (2부 구현편) (4) | 2018.12.10 |