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,76832,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,6482,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馬達之後,經過行星齒輪組減速,再配上夾頭,就可以轉動鑽頭了。

2013年9月21日 星期六

Tear down: ASUS A8J Notebook (Part III)

再接續前二篇
Tear down: ASUS A8J Notebook (Part I)
Tear down: ASUS A8J Notebook (Part II)
這篇就是把剩下的DVD Player跟銀幕拆開來看看

首先是Player,可以看之前拆過的 Tear down DVD player,都長得差不多。
軌道是一邊驅動,一邊承靠,再用彈簧推向基準一側。
只是筆電的DVD player比較薄,而且try 盤退出的機構是用電磁鐵拉開彈簧,以便彈出。


還有一個地方,就是SD卡按壓彈出的機構,如下圖所示:
把位置"1"的藍色柱子往左邊壓,順著軌道,會繞過倒勾型的路徑彈到的"2"的位置。
同理,在位置"2"的時候,向左邊壓,順著軌道,會繞過倒勾型的路徑彈回到"1"的位置。

2013年9月19日 星期四

Tear down: ASUS A8J Notebook (Part II)

因為筆電的照片太多了,所以分成好幾篇來PO。
上一篇「ASUS A8J Notebook (Part I)」從背後拆了筆電,現在要看正面的鍵盤。

先是按鍵的結構,在「X」型的塑膠結構中間帶有橡膠的按鈕。
按鍵的下方還有微小的Metal Dome。

而整個鍵盤組是可以拆下來成為一個模組的。
(下面另外發現一張音效卡:Intel NH82801GNM)

2013年9月17日 星期二

Tear down: ASUS A8J Notebook (Part I)

這次要拆的是一台液晶銀幕已經壞掉的notebook,ASUS A8J。
不過我知道很多朋友對筆電十分的熟悉,再請各位不吝提出指正。

首先看看四大件,下面是(A) 底座base與 (B) 鍵盤面殼;
上面兩個是(C)銀幕的框與(D)銀幕本身。

先從(A) 筆電的底部開始看起:
左下角是放鋰離子電池的空間,向右邊是Intel Wireless 3945ABG無線網卡;右下角則是硬碟(被我先拿走了)。左上角先是十分扁平的離心扇 (因為離心扇有高靜壓的特性,對流阻很大的筆電內部空間十分適合),同時也用銅做熱導體把CPU的熱也傳出來。CUP為Intel Core2 Duo T5600;最中間的地方是放RAM的空間,右上角蓋子的下方,則是ATM的顯卡。


2013年8月31日 星期六

Tear down: Pioneer VSX 455 Receiver

我並沒有在玩音響,但我老爸在我小時候不知道為什麼買了一組音響放在家裡。那個時候我才有初步的概念,原來音響是需要(1)音源如CD Player;(2)放大器或稱擴大機;(3)喇叭。不過後來我們並沒有深入真正了解,因為玩音響是很燒錢,而且我們真的不懂音樂。

過了十幾年,這台擴大機終於壽終正寢了。也不能說完全不能用,但就是有幾個功能壞掉了。但有鑑於它並不是什麼好到非休不可的機器,所以我也就拿來拆看看裡面了。

首先我先上網找了一點資訊,有關Pioneer VSX 455 Receiver的規格:
Dolby Digital 5.1
The VSX-455 is a Dolby Digital 5.1-ready digital audio receiver. Dolby Digital 5.1-capable receivers can be used to power a high-quality digital listening environment similar to that found in movie theaters. The 5.1 channel audio means that the receiver is capable of five audio channels at one time, designed for left, center, right, left surround and right surround speakers and a sixth low-frequency effects channel.
喔~~~原來這是用來配五聲道的擴大機,不過只是數位的。看來應該算是十分入門的一款。

The VSX-455 receiver is capable of up to 110 watts per each speaker channel. The receiver includes pre-output speaker channels for five surround sound speakers, including a center speaker channel. There is also a pre-output speaker channel dedicated for the connection of a subwoofer speaker.
嗯嗯,銘版上也的確是寫總共250W的輸出。

The VSX-455 receiver features a number of inputs for connecting both audio and video input devices. These can be used to connect things like additional CD, Tape, Blu-Ray, DVD and other media devices using A/V connectors on the back of the receiver. The VSX-455 has three available audio inputs and two available video inputs.
喔~~~看來可以接的東西真的很多也,連Blu-Ray都有,這可是十幾年前的產品也!

好吧,接下來就是正式地來拆它了!


2013年8月7日 星期三

Tear down: 遙控車

最近花了很多時間在關心社會上的大小事,Try Cell 倒是荒廢了一陣子。
今天就把之前還沒有寫完的tear down寫一寫,主題是玩具遙控車。
這是家裡小朋友的,因為壞掉希望我幫他修理好,就所以順道拆開來看看。


首先來看架構圖,由電源由電池上來之後,到電路板&無線接收器,
然後後驅馬達,並加有差速器提供左右輪不同速的自動調整。
前面的馬達則是提供轉向,並非伺服,只有原始中位、左、右等三個位置。