본문 바로가기
아두이노

아두이노로 자동차 대시보드를 완성하다 - 1편

by 구루가 되고픈 2019. 2. 9.

아두이노로 자동차 대시보드를 완성하다 - 1편

 

 

이전 글에서 자동차의 OBD2 단자의 차속신호를 아두이노로 받아서 차량 속도를 표시하는 작업을 진행하였습니다.

 

https://clemencyking.tistory.com/2

https://clemencyking.tistory.com/3

 

그러나 역시 뭔가 많이 부족하고 제가 도전하고자 했던 최종 목표는 아니었기에 결국은 새로 프로젝트를 시작했고 재료 주문과 프로그래밍, 회로작업까지 약 2달정도의 시간이 걸려서 90%정도를 완성하게 되었습니다. TT

 

목표하는 그림은 아래처럼 여러정보를 동시에 표시하는 것이었습니다.

 

 

 

우선 이번 작업은 차량정보를 제공해 주는 freematics사의 OBD2아답터를 사용하는 것으로 OBD2아답터를 통해서 차량정보를 손쉽게 가져올 수 있게 됩니다.

 

freematics 홈페이지를 방문해 보면 상당히 다양한 OBD2아답터를 판매하고 있는데 제가 구매한 것은 아두이노용 가장 기본모델인 Freematics OBD-II UART Adapter V1를 구매하였습니다.

 

거금 25달러가 들었고, 운송료까지해서 대략 30달러 초반대였던거 같습니다.

 

배송은 한 2주정도 걸린것 같습니다.

 

freematics사에서 판매하는 아두이노용 차량용 아답터들

 

freematics.com

 

 

저렴하면서 기본기능을 제공하는 v1모델

OBD-II UART Adapter V1

 

 

이 모델은 아두이노에 UART 통신을 통해 데이터를 전달하며 freematics에서 제공하는 라이브러리를 통해 표준 ODB코드 값을 가져올 수 있습니다.

 

또한 OBD를 통해 전원까지 아두이노에 공급할 수 있게 되어 있어 아두이노 연결에 매우 용이하도록 되어 있습니다.

 

제가 구현하고자 하는 구상은 이렇습니다.

 

대략적인 회로 파트연결도

 

데시보드를 통해 표시할 데이터는 속도, RPM, 냉각수온도, 엔진가동시간, 주행거리, 배터리전압을 표시하기로 하고 표시할 정보들이 많기 때문에 1.3인치 OLED 액정 4개를 사용하기로 합니다.

 

OLED는 선연결이 적은 I2C방식으로 하였고, 아두이노도 4개에 각각 연결하여 데이터 처리와 표시를 담당하게 됩니다.

 

아두이노는 크기가 작고 연결이 용이한 micro pro로 하였습니다.

 

참고로 micro pro는 레오나르도의 미니버전입니다.

 

우노하고 MCU가 다르고 일부 특성이 다릅니다.

 

1.3인치 oled
아두이노 micro pro 핀맵

 

 

아두이노 개수를 줄이기 위해 아두이노 1개에 액정 2개를 연결할 계획이었으나, OLED액정의 I2C주소값을 변경하려고 납땜질 하다가 액정하나를 태워먹고 그냥 아두이노 1개에 OLED 1개씩 연결하기로 하였습니다.

 

우선 OBD2아답터를 통해서 온 데이터선은 1번 아두이노에 연결합니다.

 

1번 아두이노는 아답터로부터 온 데이터에서 원하는 값들을 뽑아내고, 액정에 속도값을 표시하고, 나머지 값들을 2, 3, 4번 아두이노에게 전달합니다.

 

2번 아두이노는 1번으로부터 RPM값을 전달받아서 액정에 RPM을 표시합니다.

 

3번 아두이노는 1번으로부터 냉각수온도, 엔진가동시간, 배터리전압, 주행거리 4개 값을 전달받아서 액정에 표시합니다.

 

4번 아두이노는 1번으로부터 엔진부하값을 전달받아서 액정에 표시합니다.

 

OBD2아답터와 1번 아두이노는 hardware serial로 연결됩니다.

 

그렇기 때문에 1번 아두이노와 2, 3, 4번 아두이노 연결은 software serial로 처리하였습니다.

 

 

우선은 하드웨어적인 회로 연결을 브레드보드와 점퍼선을 사용하여 구성하였습니다.

 

(아두이노에 헤더핀을 잘못 납땜해서 아두이노가 브레드보드에 거꾸로 꽂혔습니다.

아두이노가 거꾸로 꽂아져 있다보니 일일이 핀번호를 그림을 놓고 세어가면서 찾으라 엄첨 애먹었습니다.  TT)

 

 

브레드 보드 테스트 회로구성

 

 

OLED 하나를 태워먹고, 추가주문했으나 도착하는데까지 시간이 걸려서 3개만 꽂아서 작업을 진행했습니다.

 

여기서 부터가 프로그래밍 하는데 상당히 긴 시간이 소요되었습니다.

 

우선  각 OLED마다 표시정보가 그래픽으로 표시하는 부분을 디자인하고 구현하는데 좀 애를 먹었습니다.

 

특히 RPM표시는 아날로그 게이지 느낌으로 처리하다보니 상당히 많은 컴파일을 통해 위치를 잡아나갔습니다.

 

제가 사용하는 노트북이 거의 10년전 모델이어서 컴파일 실행시키면 업로드까지 약 3~4분이 걸리는 정도여서 컴파일 몇번만 하면 1시간이 훌쩍 지나가서 상당히 많은 시간이 걸려버렸습니다. TT

 

아무튼 1번부터 4번까지 각 아두이노 별로 각각 필요한 프로그램을 작성해서 넣어주고, 4개의 OLED가 원하는 정보가 정상적으로 보일때까지 프로그램을 수십번 뜯어 고쳤습니다.

 

특히 1번에서 2번으로는 RPM값만 전달하기 때문에 시리얼값으로 보내기만 하면 되는데 3번 아두이노로는 4개의 데이터값이 넘어와야해서 4개 값을 특수기호로 구분자로 넣어서 보내고 3번 아두이노에서 이 문자열을 받아서 다시 데이터값으로 추출해내는 방법으로 처리하였습니다.

 

이후의 작업과 테스트 그리고 코드는 다음 연재에서 소개하도록 하겠습니다.