星期三, 8月 26, 2015

NavSpark Mini初體驗


NavSpark是之前在indiegogo上集資成功的專案, 成品是Arduino+GPS, 32bit mcu, 並且體積相當小(大概就Arduino Nano的大小)

之後出了一片NavSpark mini, 是NavSpark的相容版, 硬體規格一樣, PCB更小, 當然pin out也比較少, 但是一些小專案應該夠用了, 而且還是內建GPS receiver (但是天線要外接)
現在原廠在推廣NavSpark mini, 索取一片只需要運費9usd, 非常划算.
我週五下單, 隔周三就到貨, 收的是國際運費, 但是用的是本地快遞(新竹寄到新竹), 就當作用運費贊助這間公司了(有附發票XD).



收到貨後有兩片PCB, 分別是NavSpark mini主板以及USB-UART轉板, 這片轉板是走Android手機常用的micro USB而非mini USB, 電平3.3V, 接上吃3.3V的NavSpark mini的剛剛好.
若是用自己的USB-UART轉板, 就要特別注意電壓的部分, 免得把NavSpark mini燒了

接著就是準備開發環境, 首選當然是Arduino IDE, 但是Arduino IDE原生是不支援NavSpark mini的, 你有兩種選擇:
  1. 從NavSpark官網下載支援的Arduino IDE 1.5.6 載點
  2. 從Boards Manager下載NavSpark的支援 NavSpark原廠說明
第一種我啟動不了, 第二種我可以用, 就懶得管第一種發生甚麼問題了...

按照原廠接線圖接好, 就可以用Arduino IDE燒錄了.
剛玩了一下就出問題, 怎麼樣都燒不進去



爬文之後才發現, NavSpark mini是可以選擇要不要燒GNSS library進去的(Global Navigation Satellite System).

如果燒錄時選擇不要GNSS library, 就不會有boot-loader(所以boot-loader是放在GNSS library裡面的....), 那下一次就無法讓Arduino IDE直接透過USB做燒錄的動作.
(我不懂這樣的邏輯是甚麼, 誰說不要GNSS就用不到boot-loader? )

The Non-GNSS library does not have boot-loader code within, thus program compiled with Non-GNSS library needs to run from recovery ROM mode to load code

NavSpark的boot方式有ROM Mode以及Flash Mode,  對應mcu韌體的載入來源.
如果沒有燒boot-loader到Flash, 就只能改用ROM Mode還原boot-loader,
為了改用ROM Mode, NavSpark mini的BOOT_SEL就身負這樣的重責大任

BOOT_SEL: Default unconnected, internally pulled-high, Venus822A runs program from internal Flash memory. Whenconnected to GND, Venus822A runs program from internal ROM memory. When improperly written user code hangsthe system, it would be necessary connect BOOT_SEL to GND and recover from ROM mode to load corrected code.
所以short BOOT_SEL到GND, 就可以讓NavSpark mini從ROM memory拉回原本預先燒好的code, 當然boot-loader也包含在內, 只要遵循以下的步驟:

1. Connect BOOT_SEL pin to GND to run program off internal ROM memory.
2. Check state of GPIO4 and GPIO5, these two pins determine baud rate used for UART1 (USB) communication when
booting from internal ROM memory. See next section on how to set command and code upload baud rate to use
for Arduino IDE in case GPIO[5:4] connected to differ from default 2’b11.
GPIO[5:4] = 2’b00 for 9600
GPIO[5:4] = 2’b01 for 4800
GPIO[5:4] = 2’b10 for 38400
GPIO[5:4] = 2’b11 for 115200 (default)
3. Press the reset button and release it to restart the LEON3 processor.
4. Use Arduino IDE to do the code upload procedure with the correct binary code.
5. Once code upload completes, disconnect BOOT_SEL from GND to run from Flash memory, press the reset button
and release it to restart.

到此應該可以正常燒錄了?!
其中標示紅色的第二步驟最為重要, 由於GPIO4/5決定ROM Mode的baud-rate, 在不設定的狀況是被認定為接地的, 所以預設的baud-rate會是9600, 用Arduino IDE因為baud-rate設定不同事無法燒錄的.
因此需要在未上電的狀況下, 將GIPO4/5接在3.3V再上電, 確保GPIO[5:4]是在高電位讓baud-rate設定在115200bps.
若已經上電再去接GPIO4/5後reset是沒有效果的.

如果用不到GNSS library, 這樣每次燒錄就是要不斷的short BOOT_SEL, reset... 燒錄....
如果不差GNSS library佔掉的記憶體的話, 我看燒錄還是直接放GNNS library進去吧...

[附註] NavSpark Error code對應的意義(參考這裡):
1 - Can't open firmware binary file.
2 - Parameter error, unsupported baud rate.
3 - Can't open COM port.
4 - Sent download command but receive no ACK response
6 - Loader program sent binary file size command but receive no ACK response
7 - Sent firmware in 8KByte block but receive no ACK response
8 - No END command received, denoting Flash checksum error

[資源]

星期一, 12月 22, 2014

兩輪自走車 Bala (Part 2)

這是目前Bala的結構, 已經可以透過手機控制, 能做基本的前進後退轉彎了.

目前馬達的轉速偵測, 是在輪上以紅外線Sensor判斷輪圈的肋骨, 所以走一圈有5個pulse, 以轉速控制來說非常不夠. 目前已經尋覓好直接在馬達上偵測轉速, 轉一圈有50個pulse, 精準度提高了10倍.

除了轉速控制, 姿態控制也還沒納入, 所以操縱起來非常困難.
有可能加速過猛, 導致車子翻了一圈,

而現在採用的馬達控制IC(也就是雙H橋IC)是選擇L9110S, 但是這顆IC沒有剎車的功能, 所以當馬達不轉的時候車子還會繼續滾動, 這個時候車子是在不受控的狀態, 因此改用支援電子剎車的IC是有必要的.

所以接下來首要進行開發的步驟有:

  1. 高精準的馬達PID轉速控制
  2. 根據姿態決定加速
  3. 馬達電子剎車

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

星期三, 8月 06, 2014

兩輪自走車 Bala (Part 1)

一切都要從這張草圖開始


Bala是甚麼? Bala其實就是台語發音的 "拔辣", 也就是芭樂的發音. 同時"拔辣"也代表手榴彈的意思. 因為這台自走車一開始就是要設計成手榴彈外觀的造型, 才叫作 Bala.

作這台Bala, 一來是因為想要在室內跟兒子玩遙控車 但是四輪遙控車在室內不好操控, 迴轉半徑過大, 兩輪車就沒有這樣的問題, 但是市面上較少兩輪車, 除了 Sphero-2b 和 Jumping-Sumo. 但說到底還是自己做比較有趣(但是不見得比較省錢...)
 二來這是跟好朋友討論, 要一起進行的Arduino專案, 也是彼此最有交集的目標.

起初進行的是結構設計, 從完全沒有概念到下面初始的設計

依照上述概念設計, 稍作了修正的第一台原型底盤

目前的試跑結果:

  1. 底盤太寬太軟(材質應該為ABS), 所以行進偶有不太穩定的情形, 可把馬達位置內縮, 縮短底盤長度因應.
  2. 由於尚未做任何加速度/陀螺儀修正, 所以無法穩定減速, 動態也不穩定.
  3. 兩個輪分別由各自的馬達控制, 馬達因為製造誤差/組裝等等因素, 相同的pwm驅動下, 轉速卻不一致, 因此無法跑直線, 也無法穩定剎車(想像兩顆馬達在不同時間點停下, 路線就偏掉了)

接下來首要任務就是處理兩輪馬達轉速差異的問題.

星期日, 4月 20, 2014

Poorboy's Polish with Sealant

Poorboy's Polish with Sealant是我第一支使用的封體劑。
在這之前只用過
  • 美光 NXT 2.0 液態臘
  • Soft 99氟素270天保護水蠟(白色車用)













對於車漆保護我個人著重兩大部分: 易洗性 撥水性

易洗性其實也是指隔離效果,如果隔離的好,髒污 鳥屎 果實汁液比較不會滲透到漆面,用水或者洗車泡沫應該就可以帶走。

撥水性個人覺得純粹是爽度而已,看到車漆表面的青蛙蛋就是爽。撥水常常提到荷葉效應,使水珠不易停留在車漆表面,能輕易帶走灰塵,所以又會有所謂的自潔能力,但是自潔能力是不可能強到下過一場雨之後,表面還是乾淨如新。自潔能力可能有強弱之分,但是再怎麼強,也不可能讓一場雨洗禮後的車漆,我會放在那邊不趕快洗一洗...

NXT 2.0隔離很好,髒污容易洗掉,也能隔離不太誇張的鳥屎。撥水性在剛打完時也是滿點, 但是洗完車或者下完雨之後, 撥水性衰退的很快...所以每次洗完車都打上NXT 2.0, 才能保持在最佳狀態。

Soft 99氟素則是跟NXT 2.0完全相反的產品, 他的隔離性不太好,髒污容易吸在車漆上,對於鳥屎幾乎完全沒有保護效果,但是撥水性卻是爆表的好,不管怎麼洗都是粒粒分明的水珠,我曾經試著上完氟素後洗四次車(約一個月),水珠跟剛上過氟素幾乎一樣挺,這點大推。

Poorboy's Polish with Sealant

對於這兩個產品我都不是很滿意,因此開始尋覓新的蠟品,價位希望能控制在一千以內,我找到了 Poorboy's Polish with Sealant,它很特別,既可以拋光,又可以當封體,而且封體之後可以馬上上蠟,很適合我這個時間有限的人士操作。

我找不太到這款封體的中文使用心得,雖然可以拋光又可以封體,但是沒看到詳細的中文介紹,所以只好找上英文資源,網路上找到比較詳細的介紹在
http://www.detailedimage.com/Poorboys-World-M1/Polish-with-Sealant-P25/16-oz-S1/

節錄在此:
Poorboy's Polish with Sealant

Polish with sealant is an easy to use product that cleans, seals, and protects, all in one step. Polish with Sealant is designed for detailers and people with new or well maintained cars looking for an easy way to remove fine scratches, light oxidation and the normal wear and tear from every day driving of their vehicles. Polish with Sealant can be applied by hand or machine with relatively little effort. Polish with Sealant can be applied as often as needed without build-up. One coat can last up to three or four months with proper maintenance. For vehicles with deeper scratches or heavy oxidation, we recommend our SSR line (Super Swirl Removers) prior to using Polish with Sealant. Polish with Sealant can also be topped with either Waxes or other Sealants for a deeper, wetter and longer lasting shine.

Poorboy's Polish with Sealant(簡稱PwS), 基本上它是AIO(All in One的產品) 只要一個步驟就可以達到清潔、除紋、保護的三重功效,而且它可以因不同的使用方式達到拋光+封體或者純封體的作用。
底下是它的使用說明

DIRECTIONS: Shake Bottle Well Methods of Applications:

  1. By Hand: In the SUN or SHADE, pour a small amount on a soft terry cloth. Work a small section at a time. Rub back and forth until you see it shine. Turn cloth to clean side or use a microfiber cloth and buff out to your liking.
  2. By orbital or professional buffers: Apply to a dry pad and prime the pad with a small amount of product. Apply a small circle around the pad and spread at a low speed until the area has been coated. Turn up the speed (where applicable) and work the product until a shine appears. For new and better finishes we recommend foam pads to prevent swirl marks.
  3. For use as a glaze or sealant only (no paint correction), use a sponge applicator by hand, or a foam finishing pad by machine, and lightly apply a thin even coat. Remove or buff with a soft cotton or microfiber cloth.

拋光+封體

要達到拋光+封體的效果,以機器低轉速使封體覆蓋在車漆上。接著調高轉速,提高溫度使封體逐漸變透明,便完成拋光+封體。
然而拋光+封體的使用方式, 根據原廠的回答, 會因為高溫使的封體的效果變差, 建議拋完後再用機器打上薄薄一層, 達到純封體保護的效果。

此外, 原廠也提到, 這是款" a pad dependent product ", 會因為採用的海綿而有不同的效果. 過去我都是用藍色氣動海綿上蠟, 上蠟可以但是拋光的效果很不好, 後來我詢問台灣的賣家, 建議用黑色氣動海綿拋光, 確實有增加效率, 但還是很花時間, 不過至少確保不會拋過頭。沒有拋光經驗的用家可以先考慮試試看黑色氣動海綿。

純封體

如果要做純封體,不論手上或者機器上,只要上薄薄一層PwS在車漆上,再用微纖布下蠟即可。

結論

目前我使用心得是,PwS的隔離效果相當不錯,停留一個禮拜的鳥屎都能用水沖掉,撥水則普通,或許可以找撥水效果好的蠟上在封體,讓隔離以及撥水都達到一定的水準!

星期五, 4月 11, 2014

用Arduino Uno燒錄Arduino Pro Mini (Use Arduino Uno to burn Arduino Pro Mini without remove MCU!)

In above article we can use Uno to burn Pro Mini, but we should remove mcu on Uno first, for smd version Arduino it is unrecoverable.
Even in DIP package version, it is not easy if you don't have corrected tool and skill!

I found a method can keep mcu on the board, and burn to Mini success!

  1. Connecting the pin with Uno and Mini
    1. Uno 5V to Mini Vcc
    2. Uno Ground to Mini Ground
    3. Uno Rx to Mini Rx
    4. Uno Tx to Mini Tx
  2. Connect Uno's Reset to Ground
  3. Plug USB to UNO
  4. Compile and upload Sketch, when Arduino IDE show "Uploading...",press the Mini's Reset button one or twice.
  5. If press in right timing, IDE will show "Done uploading", then Sketch is uploaded!

會玩Arduino的人手上一定不會只有一片板子, 基本的Arduino Uno一定會來一片, 然後再視情況來個附加功能的Arduino yun, 或者縮小版本的Arduino  Nano~~~~

我也一樣, 為了縮小體積, 先後購入了Arduino Nano、Atiny85開發版(相容Digispark),  還有最近到手的Arduino Pro Mini。Nano其實體積還是有點大, Atiny85的腳位對我而言又不足, Pro Mini看起來是一時之選。
但是Pro Mini拿掉了USB to TTL, 無法接上USB直接upload sketch, 是最大的問題, 但也因此能降低成本縮小體積。因此再接上一片FTDI的USB to TTL是大部分人會採用的解決方案。

我比較反骨, 想要連USB to TTL也省下來, 而且之前看到這篇文章 Arduino as an USB to TTL adapter , 把Uno拿來控制HC-05藍牙模組, 確定Uno也可以當作USB to TTL Adapter(Uno上面就有一顆ATmega16u2作為USB to TTL)。但是搞了許久卻不得其門而入, 無法讓Uno燒錄Sketch到Pro Mini去... 找中文資源並沒有完全相同議題的文章, 英文方面的討論也都模糊不清。最後終於找到完全一樣議題的文章, 有兩篇:

http://www.instructables.com/id/Uploading-sketch-to-Arduino-Pro-Mini-using-Arduino/
http://www.instructables.com/id/Arduino-Examples-2-Use-an-Arduino-as-a-FTDI-Progr/
這兩篇的方法基本上是一樣, 但是第一篇較清楚。
細節請自己點下連結去看, 在此就不做翻譯了。

但上述提的方法需要把Uno上面的ATMEGA328P先拔掉, 讓Uno的ATmega16u2可以直接透過TX/RX接到Mini Pro, 個人覺得有點麻煩, 難道燒錄的時候還要先拆掉MCU...如果拆時不小心折到腳不就哭出來了...
最後發現控制HC-05時要把Reset接到Ground, 讓MCU進入Reset Mode, 可以讓Uno板上的Rx/Tx直接接到ATmega16u2, 但是又需要Reset接到Pro Mini的DTR作通知傳輸的動作, 造成兩難, 所以最後總結的方案就是:


  1. 接好Uno與Pro Mini之間的接腳
    1. Uno 5V到Mini Vcc
    2. Uno Ground到Mini Ground
    3. Uno Rx到Mini Rx
    4. Uno Tx到Mini Tx
      (Rx對Rx..Tx對Tx...就是這樣接沒錯, 若是Rx對Tx的方式接, 會失敗, 千萬注意!)
  2. 把Uno的Reset接到Ground
  3. Uno接上USB, 此時Uno與Mini都會上電
  4. 編輯好Sketch, 編譯並且上傳, 當Compile完成之後, Arduino IDE會出現"Uploading..." 此時按1~2下Mini的 Reset, 代替原本的DTR, 就會開始Upload.
  5. 若按下Mini的 Reset時機正確, IDE顯示 "Done uploading", 完成!
    按下的時機要多測試幾次.
雖然每次Upload都要按下Reset有點麻煩, 不過若是偶爾拿Uno應急, 也不用去拔掉MCU, 算是一個折衷的方案! 提供給大家試試!!!




星期六, 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月 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陣營. 好, 上面都是題外話, 反...