2014年2月8日 星期六

玩樂無窮的 Arduino

2013年尾才開始鑽研 Arduino 。誰知不玩由可,一玩就不能自拔,實在太吸引我了。最初我是看了一些關於 Arduino 的新聞,心想這麼細小的 IC可以做那麼多的事情,實在太牛了吧…對於我不是電子系出身的,這些新聞看了便算,不會當作一回事。後來,因工作方面需要弄一個溫度數據收集器,來即時監測整個 Server Room的不同區域的溫度,這時我就想起 Arduino 了。於是在網上查了一下有關 Arduino的玩法,看過後給我的感覺是—就是這麼簡單!?於是在淘寶買了一塊 UNO R3 和一些感應器,玩了一個星期後便著迷了。以一個人機界面的工程而言,要我編寫個界面用於電腦顯示是一件很容易的事,但如何去用程式驅動硬件就很困難了(也許之前也沒接觸過 8051,也不熟電子零件) 。但當我接觸了 Arduino後,這個再也不是問題了。

下圖為是在面包板上複製Arduino


Arduino給我的感覺是:

很容易入門 
Arduino 板子上分清楚:Power接口、Digital I/O接口和 Analog I/O接口。透過程式控制 Digital I/O 高低電位、讀取 I/O 接口的數值,來使不同特性的感應器和電子零件產生作用即成。

硬件連接方面也很簡單
我在這裡嘗試簡單地說說我在這幾個月來所收集的資料和我的理解。

電源連接。首先看清楚正負極,若要給電驅動的電子零件,就在Power接口接上。如果Arduino本身不夠電流或電壓,去驅動電流較大的電子零件或電器時,可以加外接電源如:外接變壓器或較高容量的電池 (記著要 Common Ground)

感應器連接。如果你的工程需要接收Arduino板子和電腦以外的訊息,例如:溫度、濕度、光度、磁場、濃煙、紅外線、Orientation…等等,就要接上感應器。可按不同需要,零敏度等選擇感應器。再根據該感應器的接腳接上VCCGNDI/O腳即可。

控制連接。要產生高或低電位來控制的,就接上 Digital I/O。要讀入電壓降,就接 Analog I/O。要果讀入較大電流電壓就要先加個分流電阻。如果要驅動電流較大的電子零件或電器產品,就要選擇先接上 NPN Transistor、光耦、繼電器等等…再利用Digital I/O接口加以開關。如果Digital I/O接腳不夠,可以接個 74HC595(Output Only) 74HC4067PCF8574…等等來擴展。如果要輸出PWM值也可直接透過Arduino 本身已有的 PWM pin輸出,如果不夠 PWM pin,可以接TLC5940來擴展。

下圖為我自製的兩組PCF8574擴展板與 Arduino UNO 合體照:


摩打(馬達) 連接。不要直接接上 Arduino板子,因為會燒掉Arduino板子的。你可以透過NPN Transistor、光耦、繼電器等等…如果你要控制摩打又要向前又要向後又或者要控制步進Servo Motor時,請利用 L298 / L295 IC來驅動比較容易及合適。

USB連接。如果你是自製Arduino板子,又或者是 Arduino Pro Mini Microduino…等,沒有USB接口的板子。可以加個 PL2303CH340CP2102FTDI…等的USB Module…再網上流存,FTDI的最穩,但亦最貴。根據本人實測,PL2303CP2102也不錯,可選有 DTR腳引出的那種(如要作成 Auto Reset)。將 VCC接上板的 VCCGND接上板的 GNDTX接上板的 RXRX接上板的 TXDTR接上 104pf陶瓷電容,電容另一隻腳Reset腳。如果是自製板子請於 Reset腳同時另接 10k電阻,電阻另一端接到 VCC

Arduino 的程式 Framework 很簡單很容易令人理解 
一般的開發者,如果已經懂 C / C++則即可上馬,完全無痛。Arduino 的程序很簡單,主要有兩個函式:void setup() void loop()setup()就是把要預設的東西,通通放到這裡就是了。例如:pinMode(led, OUTPUT); 簡單而言就是 Initialization... 初始化所有設定。loop()簡單不過,就是不停重覆又重覆運行…除非你個 program bug又或者 memory overflow,如果不是的話,它是會不停地運行直至電源給拔掉才會停止。

我下次會嘗試以我消化之後的角度去談談如何複製 Arduino…

沒有留言:

張貼留言