自製「物理運算平台」:Arduino微電腦

27
分類 機器人, 硬體與DIY
標籤

自製「物理運算平台」:Arduino微電腦
文∕趙英傑

Arduino是一個「開放式硬體(open source)」微電腦控制板,你也可以稱它「物理運算(physical computing)平台」,聽起來很酷吧!任何人都可以在arduino.cc網站下載免費的線路圖和PCB版佈線圖,自己DIY一個Arduino,例如,底下的照片是筆者稍加修改後的自製Arduino控制板。

自製的Arduino微電腦控制板

基本上,微電腦控制板就像是一個具有大腦和神經線,但是沒有感官和行動能力的物體。我們可以替它加上眼睛(如:紅外線或超音波感測器)、耳朵(如:麥克風)和手腳(如:伺服馬達),再加上自行撰寫的控制程式,就能做出各種自動控制應用。例如,加上溫度感測器和一些控制線路,以及判斷條件的程式碼,就能讓Arduino自動控制電風扇的運轉;加上伺服馬達∕步進馬達,以及感測器,即可組裝一台自走車或機器人。

Arduino控制板的硬體很簡潔,沒有什麼特殊的設計,除了開放式硬體架構之外,重點在於它提供了一個基於C/C++的程式語言來控制Arduino,並且有Windows, Mac OS X和Linux等跨平台環境的程式編輯工具。除了當成可獨立運作的微電腦控制器之外,它也能透過許多愛好者開發出的程式模組,和電腦上的其他程式語言通訊,例如:Flash ActionScript, Processing, Python, PHP,…等等。

微電腦自動控制的專業人士,大多優先選擇「組合語言」來撰寫程式,因為組合語言的執行速度快,而且佔用的記憶體空間小。但是對於業餘電子愛好者來說,組言語言深奧難懂,而且普通的電子專案也不需要對執行效能和記憶體空間錙銖必較。因此,以業餘玩家為訴求的微處理產品,大多選用C或BASIC等比較平易近人的高階語言來控制。

例如,基於PIC單晶片處理器、風靡歐美的Basic Stamp系列產品採用BASIC語言,麻省理工學院(MIT)的HandyBoard(同樣也提供免費的線路圖和跨平台的程式語言編輯環境)採用Interactive C(註:這個語言也有適用於樂高機器人的版本,可在BotBall網站下載)、HandyBoard Cricket更提供了圖像式Logo語言編輯環境,讓小朋友也能輕鬆駕馭微電腦!另一個知名的開放式硬體Wiring,也是採用類似C語言的語法,它的程式語言就叫做Wiring。實際上,Arduino的程式編輯器和語言,就是從Wiring借來的。

如果嫌高階語言不專業,您也可以安裝Atmel公司的AVR Studio開發工具,用組合語言或者AVR C語言撰寫Arduino的程式。

Arduino、Freeduino和Boarduino

"Arduino"取自11世紀北義大利的一個國王的名字。這個專案最早由Massimo Banzi, David Cuartielles, David Mellis和Nicholas Zambetti等人開始,目前已經發展出許多不同的版本,詳細的功能比較和外觀照片請參閱這個網頁。雖然說Arduino是個「開放式硬體」平台,但這群設計者並未完整提供歷代所有版本的PCB佈線圖。有了佈線圖,才能順利製作出印刷電路板,雖然使用者也可以自行繪製,但總不及現成的方便。如果用戶想要新版的Arduino,最簡便的方式就是在網站上購買現成的(或半成品)Arduino。

有鑑於此,有人建立了一個略帶諷刺的"Freeduino"網站,提供等同於較先進的Arduino Diecimilia版本的佈線圖免費下載。就在我製作好Arduino之後不久,Arduino的官方部落格終於在10/22日提供Arduino Diecimilia和Arduino BT(具備藍芽通訊功能)的PCB版資料,但目前還是沒有外觀尺寸類似Basic Stamp的Mini版本的佈線圖。

Arduino採用Atmel公司的AVR系列微處理器,舊版採用ATMEG8,內建的記憶體容量為8KB,新版本採用ATMEGA168,記憶體有16KB,並且多了一些輸出∕輸入埠。Wiring的硬體比較網頁提供了幾個知名微處理器控制板的功能比較。

另一個從Arduino衍生出來的控制板"Boarduino",把板子做成適合直接插在麵包板上做實驗的尺寸,也有提供PCB佈線圖,並且採用ATMEGA168處理器,若有興趣嘗試自己動手做Arduino,這也是個不錯的選擇。

相關網站連結:

延伸閱讀

自製「物理運算平台」:Arduino微電腦” 有 27 則回應:

  1. dull-boy

    請問老師你可以賣我一個Arduino微電腦控制板嗎?
    這是否是把flash程式發佈的swf檔,放到Arduino微電腦控制板USB相對應的硬碟裡,然後開啟硬碟裡的swf檔,就能送信號給Arduino微電腦控制板嗎?
    老師有出有關flash控制Arduino微電腦控制板相關的書籍嗎?
    或是否請老師推薦相關的書籍給我,能用flash程式透過Arduino微電腦控制板,控制電子零件硬體這很實用。

  2. 1. 我沒有在賣Arduino,如果不要求美觀或者形式,其實自己組裝一個也很簡單。拍賣網站上也可以買到現成的。
    2. Flash的swf檔和Ardunio之間的通訊,需要透過Socket Server軟體來轉換。
    3. 我目前仍在忙著專案開發,今年內沒有寫作計畫。
    4. 國外有幾本ardunio的相關書籍,像O’Reilly出版社的 Making Things Talk, Getting Started with Arduino 以及 Programming Interactivity等書籍的評價都很好。

  3. dull-boy

    拍賣找不到,雖然本身略懂一點電子但是英文程度不好所以才想跟老師買一咕:shock:
    既然老師無法賣我,那我也只好自己去摸索了==
    老師請問像諸如滑鼠連點程式或一些類似的自動程式,下載後開啟資料夾裡面含有dll檔、DAT檔…等等檔案的這些程式是用什麼軟體做出來的呢?
    相關的程式語言正確學名叫什麼?是C++嗎?

  4. 很多程式語言都可以建立「動態連結程式庫(DLL)」,C++, Visual Basic, C#, Delphi… 基本上,只要是在Windows系統的通用程式開發工具都辦得到。

  5. Mabus

    :shock:
    真厲害!!!

    大大您是軟硬通吃呀!!!

    真是令我望塵莫及…

  6. 沒有啦… arduino的創造者才厲害

    ps. 我認識很多前輩都沒有部落格,也鮮少露臉,他們才是真正的大內高手。

    • 其實你可以用麵包板自己組一塊Arduino,今天稍後我再更新文章。

    • 今天更新文章時想到,如果用麵包板自行組裝Arduino,你還需要燒錄器和連接電腦的轉接線…若無焊接電子零件的經驗,建議買個現成的Arduino板。我沒有賣,但是網拍上有很多賣家。

      have fun!
      jeffrey

  7. hans

    您好~ 最近在研究 自製控制板

    想請教~ 上述自製版的材料資訊 是要哪裡找呢>”<?

    還是您能夠寄給我~

    能發現這網站 真的很開心 很多資料都有阿 很棒 感謝筆者的用心

    • 如果你打算自己洗電路板,可以在電子材料行購買感光PCB、顯影劑、蝕刻劑…等材料,但是過程有點繁瑣。假如只要少量製作,強烈建議用萬用PCB板(洞洞板)直接焊接零組件即可。全部材料都可以在電子材料行或網拍購得。

      have fun!
      jeffrey

  8. hans

    這些東西 我們都有~ 未來 會自己洗電路板出來

    不過 目前是想了解 一塊 自製版 需要的零件是那些 會先用麵包板模擬一次~

    才想跟您請教一下 零件部分 有沒有詳細的介紹@@

  9. hans

    有做了些許的研究 不過對於 上面的板子上的材料 實在還是不是很清楚

    所以想麻煩您 可以提供一下資訊~~~ 再麻煩您囉

    • 上文提及的Arduino官方部落格裡面有這塊板子的電路圖,電路圖裡面就有完整的零件列表。

      thanks,
      jeffrey

    • Arduino官網的Products選項,表列了所有產品,點選其中一個產品,例如Arduino UNO,即可連到該商品的說明頁(http://arduino.cc/en/Main/ArduinoBoardUno),在商品的說明頁裡面,包含電路圖(Schematic)的下載連結。

      thanks,
      jeffrey

    • 你畫圈的部份是排插、電容和電壓調節元件。

      thanks,
      jeffrey

  10. jimmy

    老師好
    能否請問在程式中要傳送一個和
    是不是寫成下面這樣?

    Serial.write(0x0D); /*或者 Serial.write(13); */
    Serial.write(0x0A); /*或者 Serial.write(10); */

    而按下Ctrl-z \ ESC
    是不是要寫成下面這樣?
    Serial.write(26);

    謝謝

    • 送出CR和LF,使用prinln()指令即可,像這樣:

      Serial.println();

      另外,ESC的ASCII是27,請再測試看看。

      thanks,
      jeffrey

  11. jimmy

    您好
    當傳送一個AT指令給MODEM時通常會有回傳
    請問如何讀取這個回傳?

    例如 我輸入AT 會回傳 OK
    所以程式如下\

    if (Serial.available(){
    char val=Serial.read();
    Serial.print(val);
    }

    觀察Serial監視口
    AT
    y

    ‘應該回覆OK
    但卻看到y

    不知是何原因?

    • 請問AT指令後面要加上什麼結尾?例如,當你用一般的序列埠通訊程式測試時,後面有指定NL或CR結尾嗎?例如:

      Serial.print(“AT\n”);

      thanks,
      jeffrey

  12. Yuhao Chang

    老師您好,
    我想DIY一個俱有CCD(行車記錄器那種),可以循環錄影,並且存成mp4的檔案格式,影片檔存在SDCARD裏面,然後有個按鍵,按下之後能夠以按下的時間點為基準,截取前後各30秒的影片,另存成一個檔案,然後把這個檔案透過藍牙介面傳輸到電腦或是智慧型手機~

    請問用Arduino可以做出上述的功能嗎?能不能請老師給我一些方向,該準備哪些材料,謝謝。

    • hi yuhao:

      普通的Arduino只是一個8位元的微控器,不具備圖像處理晶片,主記憶體也很小,連拍照都有問題,更遑論錄影了。

      如果要DIY行車記錄器,你需要高階的嵌入式裝置開發板或者Raspberry Pi,像這個老外的Raspberry Pi Dash Camera網站有完整的DIY說明,只是整個費用將是市售的行車記錄器數倍的價錢。

      have fun!
      jeffrey

  13. Yuhao Chang

    謝謝老師,

    請問那如果我只要單純能夠讀取SDCARD上面的檔案,然後可以透過藍牙或是WIFI傳輸,這樣用Arduino可以辦到嗎?如果可以要購買哪些材料?

    請不吝賜教,謝謝。

    • SD記憶卡採用SPI介面,Arduino也有現成的SD程式庫,提供建立資料夾(mkdir)、開檔(open)、寫入文字檔(println)、關檔(close)、刪除(remove)…等操作指令。

      底下的程式片段取自adafruit網站的Micro SD Card Breakout Board Tutorial教學文件(文章裡面有列舉材料和延伸應用,例如GPS座標記錄器):

      have fun!
      jeffrey

  14. Yuhao Chang

    謝謝老師,

    我試試看,有問題再向您請教,謝謝。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">