2013年11月29日 星期五

Tear down: 台熱牌烘衣機 (by邵彥翔)

文:邵彥翔

這是一台只比我小幾歲的台熱牌萬里晴烘衣機,記得小時候要穿的制服還沒乾的時候就靠它,雖然它應該有二十歲了,但該有的功能都還沒壞,不像現在很多的設計,很容易壞,壞了也不讓你拆;不讓你修,送去修也只是叫你換一個新的比較划算,也許這就是為什麼後來台熱牌被賣給其他公司吧!

首先開始拆機器背後的螺絲,將最外層「進氣熱管的保護殼」拆掉,拆掉後可以看到進氣的氣管,將外面空氣吸入,經過加熱後送入滾桶內烘衣。

再來可以看到安裝滾桶中心軸的軸承座,但軸承座固定在外板的壞處就是拆卸時需要小心,一不小心,滾桶會失去一側的支撐掉下來。另一個concern的點是不容易對心,造成另一邊支撐的負擔,久了可能同心度會偏掉。

拆下加熱器後,再來拆下最後一層大背板,螺絲的數量有點出乎我意料之外的超多(果然是以前舊式的設計啊~),好不容易拆下大背板與滾桶後,就可看到內部的配置。
 

2013年11月25日 星期一

3D printer: Shower Frame

今天要做的是修理浴室的蓮蓬頭架!

在強調消費的時代,很多東西壞了就不修了,但我一直覺得這樣很可惜。
因為可能只是壞了其中一部分,卻要整組丟掉,頗為浪費。
不過以前維修時最大的麻煩是沒有零件可以替換,只能買新的。
但現在有了3D印表機之後幫忙我們解決了一部分的問題,至少有些塑膠件是可以自己做的。

這星期發現用了快7年的蓮蓬頭架裂開了,蓮蓬頭就沒有辦法架在上面了。

不過這個東西不是什麼高科技產品,應該可以自己來修理。
所以秉持著「動手做」的精神,我決定自己印零件來替換。
首先就拆下外蓋,把裡面的螺絲卸下。

把壞掉裂開來的部分,自己重新畫一個CAD檔
雖然畫CAD不是件難事,但還是有一些小細節要注意。

2013年11月21日 星期四

AC伺服馬達 vs 步進馬達

2014.01.14更新

馬達的學問既深又廣,很多時候只知有人這麼用,但卻為什麼要這麼用,不知其所然。有天我隨口說出了:「機械手臂很少用步進馬達做的。」立刻被人質疑,而我也不知道真正原因。為此我認真地重新了解一次,也順道做筆記在這。

先有一個基本的概念是步進馬達因為原理的關係 (詳見步進馬達的介紹),所以通常不會加迴授的encoder來偵測位置與轉速,此又稱為Open Loop。相反地,其它馬達因為不是"極對極"的準確定位,所以通常會加encoder來迴授控制,以達精確的定位。打個比喻,步進馬達是扶著欄桿走的瞎子,伺服馬達是裝了眼睛的行人。

回到討論的命題:機械手臂很少用步進馬達做的。
所以我整理了各項比較的項目如下表,很明顯地伺服相較於步進馬達,性能的確比較好。不管是響應、扭矩、速度範圍、重量、震動、溫升等等。但最重要的是,如果把機構手臂真的裝上步進馬達,靜止的時候也許東西還拿得住,但若移動的過程中,扭矩是會下降的。速度越快,扭矩越小,會造手臂整個失步下垂的危險。我想這才是其中最主要的考量。

此外步進馬達就算不動時,也是要耗能的。所以有些需要stand by的設備,不適合使用步進馬達。

但回過頭來說,步進在緩慢移動,固定負載的情況下,因為沒有Overshot的問題,就十分適合在靜止時不能有抖動的地方。

其它更多應用上的考量,可以依下列特性進行思考。


2013年11月13日 星期三

利用LabVIEW做人機介面,再透過Arduino來控制機器手臂

相關閱讀

(1) Project:利用3D printer製作6軸機械手臂 (1)

(2) Project:利用3D printer製作6軸機械手臂 (2)

(3) Project:利用3D printer製作6軸機械手臂 (3) 最終回的測試

(4) 利用LabVIEW做人機介面,再透過Arduino來控制機器手臂

(5) 利用Matlab做逆向運動學以控制6軸Robotic Arm

-----------------------------------------------------------------------------------

7月的時候,曾經用3D印表機印出一隻塑膠的機器手臂,
那時是單純用Arduino+可變電阻來控制。

但這種方法不甚方便,有時想要從PC端控制,想要做演算,想要與其它裝置結合等等。
所以我一直想要用LabVIEW來控制機器手臂,這樣未來在LabVIEW上想做什麼就做什麼。

以下是我在LabVIEW裡拉的線,以及人機介面的部分:

2013年11月8日 星期五

3D Printer:名片座 (半客製化的概念)

想說在公司裡的名片都被在紙盒裡面,要拿的時候還要四處找放在那裡。
所以就想幫同事印個名片座,這樣就可以放在明顯的地方,以方便拿名片。

不過那天有人跟我提起半客製化的概念,剛好這個主題有關。
因為名片座的功能都是一樣的,只是需要多個名字來區別這是誰的名片座。
所以我把這個產品分成兩個部分,一是「座」的部分,另一個是「名牌」的部分。
而「座」的部分十分適合開模量產,名牌的部分就用3D印表機來製作,最後再組裝起來。


事實上,這不是什麼特別的概念,所有人都想得到。
甚至目前客製化機器也都是如此的概念,用量產出來的套件組裝成客製化的機械。
但是,目前量產的產品並沒有真的用「世界唯一」的零件來組裝。
一來是成本的考量,二來是大家還沒有想像得到到底什麼量產的產品適合做。

不過,我想一定有一些產品適合的,就例如這個名片座一樣。 
大家來想想吧!

 


2013年11月4日 星期一

Tear Down豪邁125: (一) Overview

原本Teardown的主角一向都只有桌子般的大小,
這次換一個比較大的系統,就是摩托車--豪邁125。

這是我大學買的第一台摩托車,用自己家教的$$買下來的二手車。
到現在也十年過去了,加上原本的年紀,大概也十五、六年了。
車上還貼著NTU93年度的停車證,好懷念。

為了紀念這一台摩托車,我決定以好好地拆解它,留下引擎留念。
在拆解之前先畫一個大的function diagram,也讓大家對摩托車有一個概念。
     P.S. 因為我並非專業玩車的人士,若有人有業界的專業經驗再請不吝指教。

目前我自己拆開來的心得主要分成三大部分:

第一是動力系統:從最源頭的引擎,把動力傳到傳動皮帶上,經過自動的調整張力機構,再經由齒輪箱變速之後,傳到後輪驅動。當然油箱也算在這裡。

2013年11月3日 星期日

3D printer:行星斜齒輪

之前有介紹過行星齒輪的東西(Teardown: 手動電鑽 & 行星齒輪組)
這次嘗試要印的東西就是行星斜齒輪,本次設計是來自大學好友李聚儒。細部的設計圖就不多寫了,就只交待齒數比,如下圖,可獲得5.45倍的減速比。


下面是印完之後的轉動的影片

其中太陽輪的細部照片,列印時設定的精度為每層0.15mm。
不過目前我覺得這個模數(1.5)印出來的效果還不錯。

下圖是行星輪

對行星輪近拍表面的狀況(未打磨之前)

2013年10月13日 星期日

用3D印表機印卡扣 (Print snap by 3D printer)


這次要印的是溫度顯示計的固定卡扣,此物是要安裝在機台面板上的,而上面白色的東西就是要用來抵住面板一側的卡扣環。很不幸地,這個東西也是經常失連的朋友。

不過沒關係,這次要嘗試的,就是用3D印表機來印這個卡扣,來看這麼微小的東西,印表機的表現如何。 下面是所建的CAD圖,做出有彈性臂的卡勾。

接下來就是印出實體


2013年10月12日 星期六

用3D印表機印螺帽 (Print Nut)

在網路有看過有人用3D pinter印螺帽,但我一直懷疑其列印出來的可用性,包括其精度與強度。不知是否可符合使用者的目標。但這次因為工作上的需要,手上有一個氣壓調壓閥的固定螺帽不見了!

就在想要不要請加工廠車一個M17 pitch 1mm 的螺帽,不如就先用3D printer來試試看,剛好是驗證的好時機。這就不是3D Printer的真諦嗎!Maker的精神嗎!所以就自己量了一下,畫一個螺母,要注意不要旋錯方向喔!
 

實際印出來了,看起來還不錯。

2013年10月10日 星期四

Print Eiffel Tower


想要印艾菲爾鐵塔很久了,從一開始買3D印表機之後就想印了。第一次是從Thingiverse那下載圖檔來印的,不過發生幾個問題,就是中間的互相交叉的truss在被skeinforge切片之下,無法印出帶有結構強度的truss,都只是變成"牽絲"的細線,看起來就很醜。

後來那時候我用CAD再重新畫一個艾菲爾鐵鐵,把中間的truss加粗,並且拿掉太細的細節裝飾,反正也印不出來。然後就拿下去切片生G-Code出來了,但印出來的效果還是不甚滿意,因為我的3D 印表機目前最高也只能印120mm,換算高寬比(23:10),底座也只才52mm^2,再換算到中間相交的Truss寬度還不到 1 mm,這無法是一個有效的結構 (1 mm的壁厚也許還可能有用,但1mm的Truss效果真的不好)。
 
後來我就把一座切成四個部分,如下圖,邊長等比例放大0.8倍 ( 邊長乘1.8 )。印出來的效果

2013年10月8日 星期二

Arduino與PC的通訊 (Serial.begin)

上一篇「在LabVIEW之中連結Arduino (二) by VISA」中用到Arduino的Serial語法。
所以我就找了一下Arduino序列通訊的語法整理在這一篇之中。

最主要的有四個指令:

Serial.begin ( ) - 開啟 Serial Port 並設定通訊速率 (baud rate)

Serial.print ( ) - 傳送資料到外部電腦
Serial.read ( ) - 接收來自外部電腦的資料
Serial.available ( ) - 取得 Serial Port 可讀取的資料位元組數目 (number of bytes),如果 Serial port 有資料進來,Serial.available ( ) 會回傳大於 0 的數值。

而我們主要的目標就是希望可以從Arduino傳資料到PC去,也可以從PC傳資料到Arduino來。
以下有三個範例來試試。

1. 將Arduino的值傳到 PC (Arduino >> PC)
如下圖接一個可變電阻來進行測試,
然後在Serial Moniter (紅色箭頭指的地方)查看在量測到的數值。
更進一步就可以參考「在LabVIEW之中連結Arduino (二) by VISA」
把這個資料傳到LabVIEW去處理。



Code
       void setup ( ) {
         Serial.begin(9600);
       }
       void loop() {
         int val = analogRead( 3 );      // 把Pin 2讀到的值寫入val的參數裡
         Serial.println(val);                  // 把參數 val 的值傳出去
       }


2013年10月6日 星期日

在LabVIEW之中連結Arduino (二) by VISA

有了第一篇「在LabVIEW之中連結Arduino」,我就更進一步想了解LabVIEW底下的程式怎麼寫的。一看原來是把Arduino當作VISA來撰寫程式,所以我就上網找看別人如何更直接用LabVIEW裡的VISA功能連結Arduino。參考的影片如下:
https://www.youtube.com/watch?v=giubFyJeZ-8

說明一下他的觀念:
(1) Arduino本來的運作就是出現在裝置管理員裡的 COM 通訊埠,用這通訊埠跟PC做溝通。
(2) 所以可以在語法裡靠著 Serial.begin 系列來達成與PC溝通的工作。
(3) 然後LabVIEW就是把這溝通的內容抓進來,用VISA的子功能來執行。
(4) VISA Read得到的就是字串的內容,再到LabVIEW裡自行轉換。

做法如下:
(1) 連結上Arduino,先接一個按鈕來測試。

Arduino範例18:用Arduino測試紅外線模組

上一篇「IR Sensor Module:用Arduino測試紅外線模組 (一)」是用半成品的TSOP-1738來接收紅外線。這一篇更懶惰,要直接買整個包裝好的模組,方便到一個不行。其中的比較器是LM393,整個性能更穩定。這個售價約100 NTD的模組,號稱可用中間電阻調整檢測距離 2~60cm,檢測角度為35°。


接線就更簡單了,也不用特別要求輸出38k Hz的光波,
固定供與5V~3.5V的電源就可以直接從Vout收到訊號。

2013年10月3日 星期四

Arduino範例17:用Arduino+LabVIEW 測試紅外線收發 (TSOP-1738)

這一陣子想嘗試一些露天拍賣賣的一些模組
包括紅外線、超音波、霍爾元件、溫度感測、陀螺儀等等
真的覺得這個時代太方便了,以前這些感測器都還要自己配適合的電路
現在都有人直接做好一個模組在販賣了,而且品質比自己兜的穩定多了,價格也十分便宜!

參考網站:
http://coopermaa2nd.blogspot.tw/2011/03/1.html
http://coopermaa2nd.blogspot.tw/2011/03/irremote.html

一開始我也先去光華買了:
(1) 38k Hz的紅外線接收器 TSOP-1738
(2) 紅外線二極體發射器,波長940nm

如下接圖:
 

2013年9月28日 星期六

Arduino範例16:讓超音波量測結果顯示在 LCD 銀幕上

P.S.感謝本次程式由林群鈞指導撰寫

繼「Arduino: 使用 16x2 的 LCD 銀幕」、「Arduino: 測試超音波模組(HC-SR04)」
這次要結合這兩項東西,讓量測的結果顯示在LCD的銀幕上。
詳細的LCD 規格與 HC-SR04的規格請參考前面兩篇。

接線圖
LCD端的接法跟上一篇一樣,至於HC-SR04則把Pin腳移到Pin6與Pin7上。


2013年9月26日 星期四

Arduino範例15:使用 16x2 的 LCD 銀幕

實驗目的:本篇要應用Arduino 與 16x2 的 LCD 銀幕連接。

依照經驗,這種網路上買的不知名LCD銀幕至少都可以支援ASCII的文字。而除了顯示訊息外,IDE裡的 example 還有教我們還可以做訊息捲動 (往左和往右捲動)、顯示游標等。

接線圖
以下我整合Pin腳說明與接線圖,特別注意的是Pin 3要接一個可變電阻,來調背光強度,不然程式Loading進去之後,有可能看不到顯示的字。

另外將 LCD 的 RS, Enable, D4, D5, D6, D7 依序接到 12, 11, 5, 4, 3, 2 等腳位上,這是被子程式寫好的腳位,要改就要連 <LiquidCrystal.h>一起改,所以先不要動。


程式碼很簡單,因為<LiquidCrystal.h>都已經寫好了,我們只需要 lcd.write() 或 lcd.print() 就可以把字顯示在上面了。

2013年9月25日 星期三

Arduino範例14:測試超音波模組(HC-SR04)

這次要使用的超音波模組是HC-SR04,這是網拍上最常見的模組。
另外有人可能也會買到3 Pin的模組 (我查不到型號),那就是trig與echo同一個Pin。
回到HC-SR04來看,我找到它的型錄,了解一下它的用法:

Ultrasonic ranging module HC - SR04 provides 2cm - 400cm non-contact
measurement function, the ranging accuracy can reach to 3mm. The modules
includes ultrasonic transmitters, receiver and control circuit. The basic principle
of work:
  • Using IO trigger for at least 10us high level signal. 
  • The Module automatically sends eight 40 kHz and detect whether there is a pulse signal back.
  • IF the signal back, through high level , time of high output IO duration is the time from sending ultrasonic to returning.
  • Test distance = (high level time×velocity of sound (340M/S) / 2. 
  • When tested objects, the range of area is not less than 0.5 square meters and the plane requests as smooth as possible, otherwise ,it will affect the results of measuring.
  • Suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.

給trig pin一個10 us TTL pluse, 模組會發射8個40k Hz的聲波出去,然後量測訊號是否回來。如果有收到TTL的高電位訊號,那Echo會送出超音波來回的時間,使用者再自己計算音速換算距離。也就是「距離(cm) = 時間(us) / 2(來回) /29.1 (m/s轉換cm/us)」。其它要注意的是量測物體最好大於0.5公尺平方,而trigger時間最好大於60ms,以免trig與echo干擾。


註:什麼叫TTL pulse可參考以下網址
http://digital.ni.com/public.nsf/allkb/ACB4BD7550C4374C86256BFB0067A4BD

接線圖
接線的方法很簡單,就把 Trig 接上要送 10 us 的Pin腳。Echo 接到要收訊號的 Pin腳。



2013年9月24日 星期二

一些常用的Arduino語法筆記

看了Arduino的範例程式也好一陣子,但最近因為單純一行一行下來的command flow不夠用。
就上網找了一些語法的網站來看,如下:
1. 官方:http://arduino.cc/en/Reference/HomePage
2. 中文語法手冊:http://www.game7777.net/doku.php?id=arduino:arduinoreference

因為自己不太懂,所以給自己留一點筆記:

一般會先做(1) Pin腳的宣告,(2) void setup (),(3) void loop ()
然後跟資料定義有關的:int, unsigned int, log, const, #define
跟loop結構有關的:if...else架構,while迴圈,for迴圈

int
整數是基底資料型別,佔用2位元組。
整數的範圍為-32,768到32,767( -2^15 ~(2^15)-1)。
整數類型使用2的補數方式存儲負數。
最高位元通常為符號位元,表示數的正負。
其餘位被“取反加1”(此處請參考補數相關資料,不再贅述)

unsigned int
unsigned int(無符號整型)與整型資料同樣大小,佔據2位元組。
它只能用於存儲正數而不能存儲負數,範圍 0~65,535 (2^16) - 1)。

無符號整型和整型最重要的區別是它們的最高位元不同,既符號位元。
在Arduino整型類型中,如果最高位是1,則此數被認為是負數,
剩下的15位為按2的補數計算所得值。

long
長整數型變數是擴展的數位存儲變數,它可以存儲32位元(4位元組)大小的變數,
從-2,147,483,648到2,147,483,647。

const
const關鍵字代表常數。
它是一個變數限定詞,用於修改變數的性質,使其變為唯讀狀態。
這表示該變數就像任何相同類型的其他變數一樣使用,但不能改變其值。
如果嘗試為一個const變數賦值,編譯時將會報錯。
const關鍵字定義的常數,遵守 variable scoping 管轄的其他變數的規則。
這一點加上使用 #define 的易犯錯誤,使 const 關鍵字成為定義常量的一個的首選方法。

#define
#define它允許程式設計師在程式編譯之前給常數命名。
在Arduino中,定義的常數不會佔用晶片上的任何程式記憶體空間。
在編譯時編譯器會用事先定義的值來取代這些常數。
然而這樣做會產生一些副作用, 例如,一個已被定義的常量名已經包含在了其他常數名或者變數名中。 在這種情況下,程式內的常數將被 #defined 定義的數值或字串所取代。
通常情況下,優先考慮使用 const 關鍵字替代 #define 來定義常數。

例子
#define ledPin 3
//在編譯時,編譯器將使用數值 3 取代任何用到 ledPin 的地方。

注意:
在#define 聲明後不能有分號。
如果存在分號,編譯器會拋出語義不明的錯誤,甚至關閉程式。
#define ledPin 3; //這是一種錯誤寫法
同樣的,在 #define 聲明中包含等號也會產生語義不明的編譯錯誤從而導致關閉程式。
#define ledPin = 3 //這是一種錯誤寫法

if(條件判斷語句)和 ==、!=、<、>(比較運算子)
if 語句與比較運算子一起用於檢測某個條件是否達成,如某輸入值是否在特定值之上等。

2013年9月23日 星期一

在LabVIEW之中連結Arduino

在單獨使用Arduino的板子一陣子之後,
想說來練習一下用LabVIEW來連接Arduino,把Arduino當作低階的DAQ卡來使用。
所以就上網找了一些參考資料:

題外話:
玩了一陣子之後,發覺網路上的神人實在是太多了
我這種機械底子的人跟本看不到這些寫程式神人的車尾燈……

言歸正傳,參考資料裡其實寫得很清楚了,該如何弄了:

第一,你本來就要有LabVIEW的程式(2009以上) + VISA模組 (這非預設的)
第二,你要有Arduino 的 IDE程式與板子
第三,安裝JKI VI Package Manager (VIPM),這是要給LabVIEW下載Arduino的模組
第四,用VIPM下載LabVIEW Interface for Arduino
第五,Arduino上需要另外安裝一個檔案才能與LabVIEW做序列溝通。
    在<您的LabIVEW安裝資料夾>\vi.lib\LabVIEW Interface for Arduino\Firmware\LVIFA_Base中,
    找LVIFA_Base.ino這個檔案,透過Arduino IDE load到你的Arduino板子上。
第六,最後打開LabVIIW看到下圖,就代表成功了。

不過在開始使用前,要先去裝置管理員或LabVIEW的Max裡看看設備是否都連上線了。
還有LVIFA_Base.ino是否已經load進去了。

首先先來寫一個範例,架構主要分成三個部分:
(1) Initial:定義port、Serial begin、Board type等等初使條件
(2) While Loop:原本程式中void setup ()與void loop ()都在這裡寫
(3) Close:結束loop時,還要再關掉通訊

心得:
1. 有這個東西真的很方便,就可以直接寫LabVIEW做Arduino的及時通訊
    而我也打算用LabVIEW對上次的製作的機械手臂做控制。
2. 基本這個套件的底層還是用VISA在寫的,把Arduino當作通訊序列的裝置在溝通。
    但這樣底層的溝通就容易發生未知的情況,尤其是Data Flow與Command Flow之間的轉換。
3. LabVIEW能夠支授的子程式不多,例如超音波Arduino就有現成有人寫好的Ultrosonic.h
    但LabVIEW只有少少的幾樣,如Servo motor、Stepper motor幾樣常用的。
    對於快速開發將會耗太多時間在自己寫子VI上。
           
以上供各位參考

2013年9月22日 星期日

Teardown: 手動電鑽 & 行星齒輪組

這一篇的主題為拆解手動電鑽,如下圖所示。
這種電鑽好用在有高的減速比,讓使用者不僅僅可以放鑽頭,高速鑽穿東西。
也可以用來鎖自攻螺絲,這種帶有pitch的螺紋而需較慢鑽入的緊固件。

首先打開側邊的外殼,所有的元件就一目瞭然。
對照下面的方塊圖來解說:以電池當作電源,經過開關來決定驅動與否。
電流進入到DC馬達之後,經過行星齒輪組減速,再配上夾頭,就可以轉動鑽頭了。