Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 6539|回復: 6
打印 上一主題 下一主題

汽車抬頭顯示器 Gearuino DIY

[複製鏈接]
跳轉到指定樓層
1#
發表於 2014-8-26 08:30:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


我的第一臺車Citroen C2有個超級大的液晶顯示目前時速, 當時我連HUD都覺得沒必要去加裝, 因為光用眼角餘光去喵就很清楚現在的時速, 我甚至覺得C2比我現在Fiesta上的HUD還要好判讀, 原因就在於C2的液晶字體真的很大, 比擋風玻璃上的HUD還要好辨識.


除了時速顯示以外, C2由於是自手排變速箱, 並且配有換檔撥片, 所以有檔位顯示是很自然的一件事情, 換了小肥Fiesta後, 對於沒有換檔撥片/檔位顯示這件事情耿耿於懷, 沒有換檔撥片真的很難超車啊....


好吧, 換檔撥片DIY加裝應該是不太可能, 那檔位顯示總有可能吧?

這就是目前我在Arduino上的開發需求, 我覺得非常適合作為我在Arduino的第一個Project.

因為是開發檔位顯示, 又為了依循Arduino的傳統, project後面一定要uino一下, 所以我稱此project為Gearuino.

2#
 樓主| 發表於 2014-8-26 08:31:56 | 只看該作者

目前Gearuino的Roadmap如下:


  • 七段顯示器的選擇以及顯示
  • Arduino與藍芽的溝通
  • Arduino與OBD2的溝通(目前採用OBD2轉藍芽的Solution)
  • 時速的顯示
  • 檔位的顯示
  • Arduino與有線OBD2的溝通

六個步驟的Roadmap皆已完成, 用了大概三個月去開發...算久嗎? 應該吧...不過看在我第一次接觸單晶片開發, 標準放寬一點吧~~哈!


既然Roadmap都完成了, 所以Gearuino就要結束了? 當然不, 還有第二階段, 不過稍晚再整理出來. 先回顧一下第一階段的Gearuino做出了什麼東西.



  • 七段顯示器的選擇以及顯示

    故事要從這片板子說起
    選擇這Arduino的原因很簡單, 他不只用C開發, 而且語法類似Java, 提供豐富的Library, 資源豐富且很多都是開源, 所以最適合個人開發了.

    接著就開始我人生第二次插麵包版了.

    三顆共陽七段顯示器, Arduino搭配電晶體驅動, 吃掉了十個I/O(幾乎是Arduino UNO的全部I/O), 想也知道這不會是最後呈現的方案, 只是作為熟析單晶片的功課而已.



    在車上顯示的狀態.


    最後是改用MAX7219去驅動七段顯示器. 最多可以驅動到八顆七段顯示器, 還可以串接多顆7219驅動更多的LED.
  • Arduino與藍芽的溝通

    單晶片跟藍芽的溝通是很簡單的, 聽說跟UART是一樣的簡單,  但其實我也沒有碰過UART, 所以不知道什麼是簡單...無論如何, 藍芽控制起來真的很簡單, 只是可能要稍微瞭解一下藍芽晶片的AT指令才會比較順利.
    我用的藍芽晶片是拍賣上最便宜, 只支援Serial Port Profile(SPP)的產品, 不到台幣兩百元.

  • Arduino與OBD2的溝通(目前採用OBD2轉藍芽的Solution)

    Arduino要跟OBD2溝通, 一定要透過ELM327去轉換, 而Arduino跟ELM327之間用簡單的UART就可以溝通了.



    但是我的ELM327是藍芽版本的, 無法用有線的方式去連接(但是這問題後來解決了), 所以只好讓我的Arduino接上藍芽. 透過ELM327去跟OBD2溝通也是簡單的一行指令, 況且我目前只需要時速轉速等等資訊的擷取, 因此並不難; 只是我這個人很懶, 想說這種東西一定有人寫過, 所以找到網路上的兩個Arduino用ELM327的library:

    ArduinoOBD
    Arduino ELM327 Library

    最後我是選擇了 Arduino ELM327 Library , 但我是用Software Serial, 所以還要做適當的改寫, 至於選擇的原因就不贅述.
  • 時速的顯示

    與OBD2串起之後, 顯示時速就不是難事了, 只要跟ELM327要到時速, 再把數據丟去七段顯示器, 就這麼簡單.

    第一版原型在車上顯示的樣子, 非常巨大, 接下來的步驟是小型化.
  • 檔位的顯示

    檔位的顯示才是這整個Project最有趣的地方, 標準OBD2是沒有檔位的資訊可以擷取的(或許非標準的OBD2有資訊可以撈).
    不過我的目標是讓大多的車輛都可以顯示檔位, 所以在標準OBD2 pid的基準下, 利用時速和轉速等等資訊就可以推算出檔位; 個人測試之後還算蠻準確的, 只是偶爾會有檔位震盪的狀況, 稍微修正即可.  只是檔位顯示還需要再輸入車輛的資訊, 等於專車專用, 不是很方便, 往後的目標是朝向自動推算檔位的方式.
  • Arduino與有線OBD2的溝通

    有線溝通與小型化是同步進行的.
    目前是先把顯示模組與控制模組設計在不同洞洞板上. 顯示模組先以時速的顯示為基本要求, 接著再增加檔位, 節氣門, 油耗等等資訊. 越多資訊需要越多七段顯示器, 但是與控制模組之間的溝通僅需要兩條線(再加上供電和地, 總共四條), 因此不斷升級顯示模組的同時, 控制模組不需要做任何更動.

    最後顯示模組定案之後,  再將控制模組整合到顯示模組, 使其只有一張洞洞板.


    最後簡述一下為何以及怎麼用有線的方式與OBD2連線.

    原本我就有一組OBD2-藍芽的轉換模組, 是用來讓手機跟OBD溝通用的. 所以一開始的Gearuino是用藍芽與OBD2溝通而且經測試ok. 但是Gearuino需要吃電, 還是要另外從點煙器或者保險絲拉12V來供電, 還是少不了一條線. 因此一了百了, 最後還是決定用有線的方式與OBD2相連, 且一併供電.

    如要改用有線方式, 原本的藍芽OBD恐怕不適用, 腦筋開始轉向去拍賣買有線ELM327來改裝, 但有天突然看到奇摩部落格(現在已終止服務)有篇文章提到, ELM327經過小修改就可以在藍芽以及有線間切換, 因此我開始研究手上的那顆藍芽OBD.

    我手上的藍芽OBD其實包含兩個模組, 分別是ELM模組以及藍芽模組, 而ELM與藍芽之間只有四條線相連, 分別是TX/RX/12V/地, 所以很簡單的我只要把ELM的這四條線拉去我的Arduino, 就完成了, 完全不用改線路, 也不用動烙鐵去修改ELM模組的PCB.

3#
 樓主| 發表於 2014-8-26 08:37:09 | 只看該作者

Gearuino是我學習Arduino後的第一個專案, 這計畫從13年的11月開始到14年8月終於結束了.....當然中間也空了兩三個月完全沒動.

中間也改版了兩次, 目前完成品是第三版, 實體如下:



Gearuino跟一般抬頭顯示器不一樣的地方在於, 它可以顯示檔位, 這對很多純自排車來說, 非常難得, 檔位的顯示也讓超車時能有個譜, 知道油門該踩多重, 退多少檔, 才能拉上多少轉速.


這其實也是我DIY HUD的利基點之一, 否則直接買市面上現成的就好了.

而第二個利基點是可以自己選擇字體的大小, 但後來發現亮度足夠的七段顯示器, 最大大概只做到0.56", 再上去普遍偏暗.



這是實際裝置在車上的樣子, 左上是時速, 右上就是檔位, 左下是油耗顯示, 右下也是油耗, 只是以數字顯示.



這是另外一個實際使用狀況, 旁邊是既有使用的HUD, 但是已經有些數字損壞, 所以才有DIY HUD的構想.



Gearuino的構造如上, 包括一個OBD轉USB的接頭, 以及Gearuino的主體.

Gearuino主體包括了Arduino Pro mini, 兩顆Max7219控制7個七段顯示器和兩個Bar LED.

右下角還有五個按鈕可以切換每組LED的顯示功能, 像是水溫, 進氣溫度, 節氣門角度等等OBD有提供的資訊, 大多可以顯示.


其實Gearuino在開發時遇到最大的難點在於七段顯示器的選用。

七段顯示器的顏色有 亮紅, 綠,  黃, 橘以及高亮紅(或綠), 經過實際測試結果, 高亮紅堪用, 至於高亮綠比較難找, 還沒有實際上車試過.


DIY的東西美觀度本來就比不上量產產品, 但是功能上卻可以自由發揮, 有任何想法只要一點時間, 一點構思, 實現出來都不難.

接下來若有閒暇時間, 應該會著手進行第四版, 僅有時速和檔位顯示, 並且盡量縮小體積.

4#
發表於 2014-8-26 15:46:28 | 只看該作者
你玻璃上有貼反光膜嗎?
5#
 樓主| 發表於 2014-8-27 00:06:12 | 只看該作者
你玻璃上有貼反光膜嗎?
io64227 發表於 2014-8-26 15:46


沒有ㄟ~不太喜歡狗皮膏藥的感覺
但也因此字有點疊影
6#
發表於 2014-8-27 08:29:00 | 只看該作者
請問你
在那裏可以找到 OBD2 通訊碼
我也想為我的寶馬 加一個 自製 HUD
7#
 樓主| 發表於 2014-8-27 13:57:27 | 只看該作者
請問你
在那裏可以找到 OBD2 通訊碼
我也想為我的寶馬 加一個 自製 HUD
io64227 發表於 2014-8-27 08:29


如果你用elm327這顆ic去轉can bus的訊號給arduino, 用 elm327-library 這個library就可以幫你做到obd之間溝通的事情了.剩下的就是呼叫library裡面, 看是要車速...水溫...進氣.....只要是標準obd pid, 應該都可以讀出來
   
標準obd pid可以參考wiki OBD-II PIDs .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-9-30 18:21 , Processed in 0.195681 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表