顯示具有 Gearuino 標籤的文章。 顯示所有文章
顯示具有 Gearuino 標籤的文章。 顯示所有文章

星期一, 8月 25, 2014

Gearuino '04-08

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



目前完成品是第三版, 實體如下:


兩個版本的佈局差不多, 最大的差別是第三版的七段顯示器全部採用0.56"的尺寸, 因為大於0.56"的都太暗了, 不符白天行車使用.

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

這其實也是我DIY HUD的利基點之一, 否則直接買市面上現成的就好了.
而第二個利基點是可以自己選擇字體的大小, 但後來發現亮度足夠的七段顯示器, 最大大概只做到0.56", 再上去普遍偏暗.


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


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


Gearuino的構造如上, 包括一個OBD轉USB的接頭, 以及Gearuino的主體.
Gearuino主體包括了Arduino Pro mini, 兩顆Max7219控制7個七段顯示器和兩個Bar LED.
右下角還有五個按鈕可以切換每組LED的顯示功能, 像是水溫, 進氣溫度, 節氣門角度等等OBD有提供的資訊, 大多可以顯示.

其實Gearuino在開發時遇到最大的難點在於七段顯示器的選用。
七段顯示器的顏色有 亮紅, 綠,  黃, 橘以及高亮紅(或綠), 經過實際測試結果, 高亮紅堪用, 至於高亮綠比較難找, 還沒有實際上車試過.

最後為了避免紅色的PCB板造成反光, 影響到行車, 所以用黑色厚紙卡手工作了簡單的外殼:


DIY的東西美觀度本來就比不上量產產品, 但是功能上卻可以自由發揮, 有任何想法只要一點時間, 一點構思, 實現出來都不難.
接下來若有閒暇時間, 應該會著手進行第四版, 僅有時速和檔位顯示, 並且盡量縮小體積.

星期六, 3月 01, 2014

RF遙控器 for Gearuino Part1

曾經覺得抬頭顯示器搭配無線遙控器應該是很屌的主意, 可惜已經有人作出來了

雖然如此, 自己土砲一個還是有樂趣的.

原本的方案是想要用藍芽做出遙控器, 但是藍芽耗電以及體積都是問題, 最後找到一般遙控器常採用的433MHz無線發射器, 體積小很多, 塞在方向盤遙控器裡不是問題.左邊為藍芽模組, 右邊為433MHz無線發射模組:


下面這是我所採用的方向盤遙控器, 已經將按鍵修改為電阻矩陣鍵盤(MCU沒那麼多I/O可以來解碼9個按鍵):


找到無線模組後, 就是決定MCU了.原本是打算用Arduino Micro或者Mini之類的模組:


不過體積略大了一點, 塞到方向盤遙控器有點困難.
所以後來找到更小的ATTiny(其實也沒有差很多)
上面是ATmega328P的模組, 下面是ATTiny85的模組:


但或許因為製程的關係(?), ATmega328P比較省電!
在1MHz, 1.8V下:
ATmega328P 200uA
ATtiny85/V: 300uA

但為了搞定ATTiny, 可是耗費了一番功夫.
首先, ATTiny不好買, 一開始我買到ATTiny13...容量太小...除非我自己去建Library..... 不是不願意, 而是花點錢就可以解決的問題, 還是花錢吧(我又沒有要量產...), 所以想法子改買ATTiny45或85.
但ATTiny真的很不好買, 最後我買到燒好Bootloader而且還有板子的ATTiny85, 如下圖:


這是由一家BlackBox的台灣公司出品的Arduino相容板, 或許應該說Digispark相容板會更精確(底下會再詳細說明), 這家的東西其實都挺有意思的, 但是Sales的回答卻讓我覺得很沒Sense.....
因為方向盤遙控器的電力來源只有一顆CR2025, 電壓僅有3V, 所以我要想辦法用3V去驅動這片板子, 板子上的有Regulator可以降壓到5V, 卻無法把3V昇到5V去驅動ATTiny(我也不想這麼做, 會吃掉額外的電), 跟Sales詢問有無方法可以用3V驅動, 結果Sales順便推銷了他們家的昇壓板, 要我把3V先昇上5V來驅動這塊ATTiny....用電池供電這是多麼沒效率的做法......

為了讓3V可以驅動, 只好自己想辦法, 多了解這塊板的硬體設計....
這塊BlackBox的ATTiny85板並沒有個響亮的名稱,暫且就叫BloackBox吧. 從BlackBox的英文網站宣稱, 是相容Digispark的板, 但後來被人家吐嘲硬體腳位不同, shield並不通用, 後來才改為"Digispark 軟體相容".

所以我深入去了解Digispark又是何方神聖, 簡單的說, 他是基於ATTiny85的板子, 其生態類似Arduino, 延用Arduino的IDE, 並且有自己的shield....和自己的Bootloader, Digispark所採用的Bootloader叫"Micronucleus", 最神的地方就是內含V-USB, 以軟體的方式模擬USB運作, 使的沒有USB晶片的ATTiny可以透過V-USB, 直接跟電腦溝通, 但也因為沒有UART轉USB的晶片, 無法造出一個UART, 因此Aduino的Serial指令都無法使用, 除錯得用其他方式.

但是這塊BlackBox的ATTiny85板又跟Digispark長的差很多, Digispark如下:

後來我發現, Blackbox的板子其外貌比較接近同樣是基於ATTiny的Adafruit Trinket(但Layout並不同). 上為Adafruit Trinket, 下為Blackbox:
考古結束, 重點是如何讓BlackBox可以在3V下運作, 我們在下回分曉.






星期日, 1月 05, 2014

Gearuino '14-01

目前Gearuino的Roadmap如下:

  1. 七段顯示器的選擇以及顯示
  2. Arduino與藍芽的溝通
  3. Arduino與OBD2的溝通(目前採用OBD2轉藍芽的Solution)
  4. 時速的顯示
  5. 檔位的顯示
  6. Arduino與有線OBD2的溝通
六個步驟的Roadmap皆已完成, 用了大概三個月去開發...算久嗎? 應該吧...不過看在我第一次接觸單晶片開發, 標準放寬一點吧~~哈!
既然Roadmap都完成了, 所以Gearuino就要結束了? 當然不, 還有第二階段, 不過稍晚再整理出來. 先回顧一下第一階段的Gearuino做出了什麼東西.

  1. 七段顯示器的選擇以及顯示

    故事要從這片板子說起

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

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

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



    在車上顯示的狀態.


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

  3. Arduino與藍芽的溝通

    單晶片跟藍芽的溝通是很簡單的, 聽說跟UART是一樣的簡單,  但其實我也沒有碰過UART, 所以不知道什麼是簡單...無論如何, 藍芽控制起來真的很簡單, 只是可能要稍微了解一下藍芽晶片的AT指令才會比較順利.

  4. 我用的藍芽晶片是拍賣上最便宜, 只支援Serial Port Profile(SPP)的產品, 不到台幣兩百元.


  5. 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, 所以還要做適當的改寫, 至於選擇的原因就不贅述.

  6. 時速的顯示

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

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

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

  8. 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, 打完收工, 謝謝收看!!!

星期二, 11月 19, 2013

OBD-II Simulator for Gearuino

做OBD-II的相關開發, 當然要有支援OBD-II的車子一台.
儘管我有一台支援OBD-II的車, 還有OBD-II轉藍芽的設備, 也可以讓Arduino順利透過藍芽與外部溝通. 但是...
總不能每次開發的時候, 都要我坐在車裡吧=.=

所以有一個OBD-II模擬器是很合理的一件事情.
硬體模擬器都要額外花錢買, 而且不便宜!不符合DIY的精神, 去去~
所以朝向軟體模擬器, 而且必須要免費的, 才是正確的方向.

目前接觸到最適合的OBD-II模擬器是 OBDSim
然而OBD-II軟體模擬器最一開始的目的, 就是提供 OBD-II診斷軟體, 可以在不接上實車進行開發, 所以OBDSim需要com0com這套軟體, 虛擬出兩個com port, 這兩個com port是彼此對連的. OBDSim接上一頭, 診斷軟體接上另外一頭, 就可以讓診斷軟體以為透過com port是連接到車上的OBD-II.

問題是上述提到的作法適合的是軟體開發, 我做Arduino開發算是硬體(精確點算是韌體), 該如何搭配OBDSim???
兩個做法:
1. 使用Arduino的模擬器, 接上虛擬com port.
2. 讓OBDSim直接輸出到實體com port,  然後接到Arduino去

採用模擬器的方案, 目前看來就是 VirtualBreadBoard 最適合.
但是要錢...所以....pass.
跳到輸出到實體com port的方案~ 到實體com port並不難, OBDSim改個設定即可, 但是要怎麼從com port到Arduino?
直接輸出到Arduino的USB? 這樣很難debug, 我需要Arduino透過USB輸出debug資訊啊....
所以OBDSim應該要接到Arduino上的SoftwareSerial, 我才有辦法順利Debug.
因為手邊還有一張Arduino, 把接到OBDSim的那張切成USB to TTL adapter, 然後tx/rx接到SoftwareSerial的tx/rx,  就完成了.

切成USB to TTL adapter的作法請參考  Arduino as an USB to TTL adapter

[2015/12/2更新]
上述是模擬一個具備OBD功能的com介面, 適合用來測試透過com連接OBD的軟硬體.
若我想要用CAN-BUS去讀取OBD相關PID的話, 上述方法就行不通了.
Arduino-OBD2-Simulator 具備OBD功能的CAN-Bus介面, 適合CAN-Bus Shield的測試.

簡單說, 你需要兩張CAN-Bus Shield, 將Simulator放在Shield-A, 將Simulation Code燒錄在Arduino-A並且連接上Shield-A, 再將你自己的Sketch燒在Arduino-B並且接上Shield-B, 兩張Shield以CAN-Bus相連就完成了.

星期日, 11月 17, 2013

Gearuino開發資源

Arduino眾多的資源就不再整理, Google一下Arduino就看不完, 更何況Arduino官網本身就提供很豐富的資料看都看不完.

對於Gearuino這個比較狹隘的應用, ELM327絕對是必要的一個元件.
ELM327是ELM Electronics.公司, 是一顆基於PIC18F2480單晶片所開發的IC, 他最主要的功能就是把車上的OBD2協定轉為UART, 讓我們可以簡單的存取車上ECU提供的資訊.

關於ELM327以及OBD2, 在Wikipedia有簡單的介紹.
而Arduino與ELM327的應用在網路上極少, 但也不是那麼難找, 目前找個幾個較多人討論的有:

Loguino是我今天才找到的應用, 他開發的主要目的是基於Arduino的硬體去收集資料, ELM327只是該項目的其中一個應用, 而我只要可以善加利用所提供的ELM327 Library即可.

OBD-II for Arduino主要是銷售給Arduino使用的OBD-II硬體, 並且提供相對應Library及硬體接線.

OBDuino是個較為完整的項目, 主要目的是提供里程電腦的功能, 作為里程及油耗顯示等等功能. 

Loguino由於剛接觸到目前還在評估中.
OBD-II for Arduino所提供的EM327 Library相當簡單, 也適合我的應用, 但是到目前為止還沒辦法順利讓Arduino接上ECU, 目前還在檢查哪個環節出了問題.
OBDuino除了ELM327的Library外, 也提供了相當完整的人機介面, 對於我的需求來說, 太過複雜, 稍微評估之後初步已被我排除. 

要是以上三者的ELM327 Library都不適合我使用, 不排除自己開發Library,  反正ELM327的溝通方式也不算太複雜(只是懶的開發而已...)

最後補一下開發會用到的工具:
Simulator for Arduino

Gearuino

上一篇文章提完Arduino和Raspberry Pi的抉擇之後, 又回到原本的問題:

我要拿Arduino做什麼?

中間其實有很多故事, 但是瑣碎到我也懶的去提, 簡單的說, 我想把車子現在的檔位顯示在擋風玻璃上!


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

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

好吧, 換檔撥片DIY加裝應該是不太可能, 那檔位顯示總有可能吧?
這就是目前我在Arduino上的開發需求, 我覺得非常適合作為我在Arduino的第一個Project.
因為是開發檔位顯示, 又為了依循Arduino的傳統, project後面一定要uino一下, 所以我稱此project為Gearuino.

目前Gearuino的Roadmap如下:

  1. 七段顯示器的選擇以及顯示
  2. Arduino與藍芽的溝通
  3. Arduino與OBD2的溝通(目前採用OBD2轉藍芽的Solution)
  4. 時速的顯示
  5. 檔位的顯示
  6. Arduino與有線OBD2的溝通
目前項目1,2已經完成, 再找個時間整理, 會放在Google Code上.

Arduino?Raspberry Pi?

2013年是平淡的一年, 工作上我自認沒有太大突破, 也暫時找不到可以突破的方向.
只好往不同的領域去開發~

這一年接觸到對我來說新的概念, 是以前有想過但是從未接觸的領域: 單晶片開發.
對於念電機和部份資工的人這可能一點兒都不新鮮,  但是對於我這個搞軟體軟到不能在軟的人而言, 真的是很新鮮.

早先在研究所的時候, 就有接觸到USB轉RS232這東西,  心裡想著若透過RS232去外接一些電器+繼電器(Relay)、Sensor, 或許可以搞一些自動化家電的東西, 但是必須接著龐大的電腦感覺就只是個DIY的玩具, 不是很實際的應用, 有殺雞用牛刀的感覺, 所以這念頭停留在心中幾次之後就消散了.

在今年, 接觸到樹苺派這玩意兒, 差一點就下單了, 但是又想想, 樹苺派會不會又只是另外一台電腦而已? 買來接電視上上網, 是不是就沒有其他用途?
這樣的疑惑讓我暫緩了敗家的慾望, 畢竟我不想買了個玩具只是用來殺時間, 我想 "真正做出點東西", 記得上一次一個完整的作品是 iBus ( mobile01連結 ), 也已經是大學時候的東西了, 研究所涉及色彩管理並且也開發相當多的程式碼, 但是從來沒有整合起來並且包裝為軟體, 所以自iBus之後是一切空白.

看了看2012年寫給自己的文章:

  • 2013年來到之前, 把surfplurk定版(或者改成weplurk更好 ?)
  • 2013開始發展自己的螢幕校正色彩軟體(技術已經有了, 就剩包裝)

  • surfplurk在兒子出生的那幾天奠定了開發基礎, 並且開發到可以運作( surfplurk ), 但最後在公司網路老是阻擋我軟體的運作下, 宣告放棄(對plurk API存取太頻繁會被IT擋掉五分鐘...)
    螢幕校正色彩軟體更不用說, 在自己也缺乏需求下, 根本沒有開始過.(我開發東西都是以自己非常需要用到為前提)

    看來2012年許的願望都泡湯了, 回頭再來談談單晶片.

    就在思考樹苺派在軟體開發以外的出路時, 我了解到樹苺派提供了GPIO, 並且可以可以享用Arduino的資源, 而且網路上相當多文章在比較樹苺派和Arduino, 隨著時間過去, 我越來越了解兩者之間的差異性, 詳細的差別就不在這邊帶出, 簡單的說: Arduino適合簡單而純粹的應用, 樹苺派適合較為複雜(不論是軟體或硬體的複雜度)而且需要整合的應用.

    Arduino只要新台票400就買的到, 所以我決定從Arduino先玩起(多麼市儈啊...哈)


    iPhone 14 Pro vs Olympus EM10 MkII 中篇

    時間來到2022年, 我的S20+因為綠線事件, 立馬被我淘汰了, 同時我也正計畫購入Mini Countryman, 很殘念的是該車系統只支援CarPlay而不支援Android AUTO, 所以我也開始考慮要不要從Android換到Apple陣營. 好, 上面都是題外話, 反...