星期一, 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, 打完收工, 謝謝收看!!!

Mr.Color飛機模型用Color 與 水性AQUEOUS HobbyColor 對照表

          最近跟兒子一起研究長谷川的飛機模型, 其中說明書中採用的模型漆色號以Mr.Color硝基漆為主, 水性漆AQUEOUS 為輔. 很多Mr.Color有的顏色, AQUEOUS 都沒有, 前100的色號大致上都有對應到, 但Mr.Color 300號以後的都是特...