星期日, 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月 25, 2013

淘寶和露天

最近分別在淘寶和露天各買了一樣東西, 一個是先付款(信用卡), 一個是店到店(7-11取貨付款), 基準點有點不同, 但是我們著眼在運輸時間上就好:

淘寶(上海 to 新竹)
露天(高雄 to 台中)

耗時

耗時
11-18 14:15 發貨

11-21 16:42 寄貨

11-18 19:20 已收件
11-18 21:54 快件在上海
11-19 02:15 快件在上海集散中心装车
11-19 20:57 快件在深圳集散中心装车
11-20 06:13 快件在桃園集散中心装车
11-20 08:30 正在派件...
05:05
11-22 06:14 商品離店
13:32
11-20 10:27 印章
39:07
11-23 07:02 貨到門市日
24: 48
總耗時44:12
總耗時38:20

以總耗時來說, 淘寶當然比較慢, 但也僅僅慢了6小時不到....
更何況他是從上海到深圳, 再空運到台灣桃園, 然後再宅配到新竹....總里程破千公里, 效率之高...

淘寶的貨品的空等期是相當短的, 也就是說貨品被閒置等待到下一階段的空檔時間, 其實並不多, 大致上大概就只有發貨和收件之間的五個小時. 收件之後就開始漫長的運輸階段, 而且大陸的司機是不用睡覺的, 半夜都在載貨...

再來看看露天, 16:42到7-11寄貨後, 要等一天來一次的物流車(還是兩次?), 這一等就是13小時, 接著理貨之後, 才開始短暫的貨運行程, 但是高雄到台中也耗掉了一天~
放置在7-11的空等期其實很長, 畢竟便利商店的配送服務本來就是附加在物流車之下, 物流車不是專職做店到店貨運的工作, 主要還是週期性的補給便利商店為主, 效率才會如此之差. 
以便利商店來說是善用資源, 以我們的角度來說, 為了方便在家附近取貨, 但是得用時間來換.

再回頭看看淘寶, 淘寶的店家服務的是全大陸的網民, 所以出貨量相對也大, 貨運公司也願意專門上府收件, 且收件後就開始派送了~
也因為對岸網拍的發達, 貨運業的效率以及密度也相對高, 才成就這樣的效率....

或許下次應該用台灣貨運跟大陸貨運對決.

星期二, 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先玩起(多麼市儈啊...哈)


    星期一, 10月 22, 2012

    對生活無感 是一種很糟糕的現象


    不知道從什麼時候開始, 我有種, 這世界差不多就是這樣的港絕.
    電視劇...差不多就是這樣演, 結局差不多就是這樣啊...
    表演...差不多就是這些橋段, 戲碼差不多就是這樣啊...
    旅遊...差不多就是這些景色, 出國差不多就是這樣啊...
    生活...差不多就是做這些事, 人生差不多就是這樣啊...

    差不多...研究所之後開始有這種港絕吧?
    畢竟研究所算是我人生另外一個跳躍, 視界和人生體悟的跳躍.
    所以研究所畢業之後, 相對平穩的生活讓我懷疑, 人生差不多就是這樣而已.


    現在想想是很恐怖的一件事情.
    因為覺得差不多是這樣, 所以停止思考.


    今年初, 我跟我老婆第一次出國, 鄰近的香港和澳門.
    老實說出去之前我沒有抱太大的期待, 反正就是出國嘛...
    再前一次出國, 好像是我國中還國小的時候, 快要20年前了(驚!)
    這次出去回來, 你以為我要跟你說原來國外是多麼不一樣嗎?
    你以為我要跟你說這世界原來還這麼大?

    不...我還是要說, 原來出國真的差不多是這樣.
    但是有一點不一樣了.

    我體悟到雖然差不多, 但是那一點點的差別, 就是差別.
    那一點點的差別, 是值得花心思去體認的.
    這時候的差不多, 可能就是差很多了.

    我沒辦法講什麼大道理, 但是我告訴自己, 下次還是要出國, 要繼續去發掘那一點點的差不多.

    Blog是什麼?

    好久沒有寫寫blog...自從有了臉書和噗浪之後....

    記得以前常在DCView的達人部落格分享色彩相關的資訊, 不過大概是我文筆不太好, 又或者是寫的太艱深, 觀眾不太多...後來慢慢的就陳寂了.

    色彩學是我研究所才學到的一門知識, 我自認我還算有兩把刷子, 不過可能也就只有兩把而已, 工作上堪用但是要闖出點名堂可能還太早, 所以之前積極的想在達人部落格分享些色彩學的觀念, 分享的同時也是自我學習, 因為要找資料, 確立整個文章的邏輯性.

    另外研究所時所發展出來的色彩管理軟體,  其實我也很想積極的修改成易用, 甚至成為另外一套第三方色彩管理軟體(譬如ArgyllCMS), 不過沒有足夠的堅持發展下去, 變成我的刷子還是只有應用在工作上而已...相當可惜.

    好了, 人不能只能嘆息, 也不能這麼快就放棄, 該來好好計劃一下2013年該做些什麼了.


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

    iPhone 14 Pro vs Olympus EM10 MkII 中篇

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