新書預告:超圖解Arduino互動設計入門(暫定)

文∕趙英傑

約莫一年前的今天,我開始著手規劃有關Arduino互動設計的書籍,期間經歷一些事情,工作斷斷續續,最近終於陸續將稿件交給編輯審閱,在撰寫的過程中,我也曾將幾個單元請沒有電子、電機背景的人士試讀,並獲得許多寶貴的意見。

本書將由《旗標出版股份有限公司》出版發行,採雙色印刷,適合高中以上,沒有電子電路基礎,對微電腦、電子DIY及互動裝置有興趣的人士閱讀。

打好基礎,超圖解電子電路觀念

對於實驗用到的電子電路觀念,本書以圖解的方式解說,清楚易懂。例如以下是二級體元件的概念圖解:

二極體元件圖解

又如,書本範例採用一個「串列轉並列」的74595 IC,有別於傳統使用時脈圖的解說方式,筆者用工廠的生產線來比喻此IC的內部運作情況,最後再導入時脈圖並加註說明,此為系列解說圖中的一張:

74595 IC內部運作方式

超圖解程式設計觀念

對於Arduino用到的程式設計觀念,一樣使用圖解的方式讓讀者了解,例如以下是解說字元與字串陣列的圖解:

字元與字串陣列圖說

底下則是處理「拍手控制」的程式流程圖解:

偵測拍手的程式流程

擬真手繪電路組裝圖

本書以手繪方式呈現各式電子元件以及接線,並提示元件的辨識方法(如:電阻的色環),讓讀者按圖完成接線。同時,書本也會提供對照的電路圖,讓讀者熟悉正規的電路圖,以便能看懂其他電子電路相關資源,進而自行組裝電路。此為聲音感測(麥克風訊號放大)電路的圖解:

麥克風放大器的麵包板組裝電路

有個知名的繪製麵包板電路的免費軟體,稱為"Fitzing",能輕易地完成麵包板電路上的佈線圖,但我想要在書本上強調手繪與DIY的質感,所以並未採用這個軟體,也因此增長寫作時間。

素材不設限、創意大無限

有人拿Arduino和樂高機器人(LEGO MINDSTORMS)套件來比較。

樂高積木可以堆積出千變萬化的創作,但前提是,所有零件的規格都必須是「樂高積木」。以馬達為例,樂高公司只提供幾種選擇。

相較之下,在Arduino上,我們可以轉接任何形式的馬達(甚至油壓動力裝置),表現形式也較不受限。你可以拆解電器或玩具,將它改造或添加新的功能,甚至運用廢棄的材料,用最廉價的方式,展現與眾不同的驚豔。例如,把電動挖土機玩具,改裝成手機藍牙遙控車,或者替家裡的電器加上Arduino與網路卡,從遠端遙控或監控。

原本平凡無奇的玩具或電器,會因為你的巧思灌注,在你的手中獲得新的生命。它可以是具有正經、嚴肅的實際功用,也可以是很單純、童稚的趣味。

下圖是改造田宮模型出品的六腳昆蟲,將原本的線控改成手機藍牙無線遙控的樣子:

藍牙遙控田宮六腳昆蟲

正因為Arduino沒有嚴格限制周邊介面的規格,即便是相同系列的商品,控制方式(程式碼寫法)可能不一樣。

例如,有個常見的馬達控制IC,型號是L298N。市面上採用這一款IC的馬達控制板有數種不同的形式。為了避免讀者買到的控制板和筆者的不同,本書除了介紹橋式馬達控制介面原理,以及L298N的接腳與功能之外,也列舉兩種常見的接線方式與控制板:

L298N馬達控制板之一

L298N馬達控制板之二

如此一來,讀者可以使用現成的馬達控制板來組裝,也能自行DIY。

樂高積木的感應器和控制器都是「黑盒子」,使用者不需要了解其內部的原理,只要辨別「信號輸入」和「訊號輸出」端子。相較之下,Arduino的玩家多少都要懂一點電子電路。

沒有僵化的規則、沒有標準答案

筆者最初的規劃與寫作方向側重於DIY:自己組裝Arduino微電腦控制板、自己組裝網路卡、各種感測器與控制器、改造現有的玩具和家電…等等。但有鑑於本書的讀者定位在高中職以上的初學人士,要讓設計學院的學生自行焊接每個元件,無論是在課堂或者家裡,對教師和學生,都是一大挑戰。

底下是筆者製作的幾個小型Arduino微電腦控制板,我大都採用俗稱「洞洞板」的萬用電路板來製作,這樣可以省去佈線、感光、蝕刻、裁切和鑽孔等繁瑣的步驟(註:感光和蝕刻過程使用的化學藥劑也有害環境)。

各種自製的Arduino微電腦板

底下這一款則是用現成的IC轉接板來改造、製作微型的Arduino微電腦板:

自製的微型Arduino板

這些自製的板子,除了一個之外,都沒有出現在書裡面。為了降低讀者學習Arduino的門檻,書本的實作單元,幾乎都採用市面販售的標準Arduino微電腦板

市售的Arduino微電腦板

本書的核心是Arduino微電腦,但每個單元所涉及的背景知識並不限於微電腦,以「網路控制家電」或者「家庭自動化」為例,書本內容不只是介紹如何組裝硬體,然後開始寫程式。

關於製作網頁所需的HTML語言概念、網頁表單,還有網路的基礎概念,像是通訊協定、IP位址和MAC實體位址、傳遞訊息的GET和POST方法…等等,都要有一定的基礎,才能通盤了解從瀏覽器連線到Arduino微型網站伺服器之間的控制過程。

底下是筆者在「網路控制家電」單元中的網路基礎部分所繪製的一張圖解說明:

網路裝置連線

這張圖後來被拆分,並補充其他圖解來說明網路連線的相關概念。

Arduino + Flash 互動更精采

Flash是一款優秀的多媒體開發工具,它具備存取電腦上的麥克風攝影機的功能,因此,互動設計師可以用Flash製作出體感互動影片,例如「擴增實境版的時尚魔女遊戲機台」,以及「把Webcam網路攝影機畫面轉換成ASCII文字的Flash影片」(雖然和本書無絕對關係,但筆者要強調,Flash不只能做網頁動畫,也可以用來開發iPhone, iPad和Android等行動電話和平板電腦的App,請參閱:Android手機系統適用的開放原始碼紅外線快門與縮時攝影控制器)。

有些互動效果是Flash本身辦不到的,例如,隨著環境光源或者溫度變化的互動影片。替Arduino接上光敏電阻並與Flash連結,就能讓電腦隨著光線強弱,展現撥雲見日的動畫效果,抑或讓荷花動畫隨著光線逐漸明亮而張開花瓣,甚至讓小女生表現從「雙手掩面」到展現「陽光般燦爛的笑容」等互動影片效果。

隨著環境光源變化的荷花

本書將以Flash的ActionScript 3.0語言以及三個互動影片,示範與說明Flash和Arduino的整合互動方式。Flash部分的主程式碼,筆者已包裝成獨立的外部類別程式檔(.as檔),本單元著重在Flash與Arduino的溝通介面程式解說。

書本目錄

目錄與章節名稱暫定如下,除第一章尚未動筆,其餘章節各約完成90%,實際內容將視編輯需要而調整。書名、頁數和定價都未定案。

  • Ch1 Arduino掀起微革命
  • Ch2 認識電子零組件
    電子工作入門
    圖說電子零件
    認識與使用萬用電錶
    基礎焊接
  • Ch3 Arduino程式設計入門
    開關電路
    人體紅外線感應電路
  • Ch4 霹靂燈與控制結構程式
    跑馬燈與LED七段顯示器
  • Ch5 序列埠通信
  • Ch6 條碼音樂盒與拍手控制開關
    光感應與聲音互動實驗
    類比信號處理
  • Ch7 LED廣告看板動畫
    LED矩陣與SPI通訊
  • Ch8 LCD顯示器實驗
  • Ch9 製作數位量尺與環境監測器
  • Ch10 製作自走車
    直流馬達與變頻控制技術
  • Ch11 用Wii控制器操控機器手臂
  • Ch12 萬用紅外線遙控器製作
  • Ch13 手機藍牙遙控機器人製作
    物聯網與無線電波通訊實驗
  • Ch14 RFID與Flash互動遊戲製作
    自訂Flash通訊格式
    使用標準Firmata通訊格式
    Flash調光旋鈕
    Arduino + Flash互動遊戲
  • Ch15 微網站與網路遙控家電實驗

124 thoughts on “新書預告:超圖解Arduino互動設計入門(暫定)

  1. http://www.hobbyist.co.nz/?q=ethernet-shield-w5100

    這是我查到的資料,我的英文比較差,請老師幫忙看看,有沒有幫助
    裡面似乎有提到,官方版網卡跟Arduino結合真的會有問題
    問題應該是出在重置reset之上

    如果確定是這個原因,那我實在不知道老師的W5100為什麼可以結合上傳資料
    有可能是因為您的網卡線路並非是與官方版相同的因素 (書上有寫是非官方版的W5100)
    我才想這問題應該只有官方版的才會這樣。

  2. 我剛剛又重新翻了一次第15章,老師您的網卡上reset是選擇性連接,
    但是官方版W5100應該是強制性做好,所以才導致您的網卡可以結合上傳,
    反而我的官版結合後無法使用……

    只是這樣官方版的W5100反而讓我覺得很掉漆….

  3. 老師,我今天將Arduino UNO接上外接12V的變壓器,結果,整個微網站幾分鐘內就say byebye,我試者拔除網路跟電源線後,再次啟動微網站,又是幾分鐘後就Game Over。

    心想,怎麼昨晚在家裡用USB供電,整個網站很正常,也可以使用超過1小時,怎麼在公司這麼快就掛了,後來一摸機板,哎喲! 真不得了….. 盪到我連手都沒辦法摸了。

    看起來Arduino雖然可以輸入12V的電壓,但是整體的散熱反而變成大問題……

    1. 剛才測試Arduino Mega 2560加上與官方設計相同的W5100網路卡,上傳程式碼也不需要先取下網路卡,根據arduino.cc官網的說明,Arduino Ethernet Shield R6版有針對第3版的UNO重新設計過。

      另外,關於過熱的問題,建議採用小一點的電流輸出的電源供應器。其實使用手機的USB充電器就夠用了。

      thanks,
      jeffrey

  4. 老師,再跟您請教一個問題,我是UNO+W5100+四路繼電器(低電平時亮),當我接上D1,D10,D12,D13都會使得繼電器的LED燈打開,使得繼電器已經作動(但是我什麼指令都沒做,USB接電就亮了),可是使用D2~D9,D11卻可以正常使用繼電器,我這下就令我很困惑了,不知道問題可能出在哪裡? 繼電器我確定沒問題,我交叉比對過,繼電器只要接某些角位就會自動點亮。您有想法嗎?

    1. 我們通常都不使用D0和D1,因為它們和USB序列埠相連(請參閱5-5頁);W5100乙太網路卡採用SPI介面(請參閱8-11頁),因此D10~D13也不能用。官方的W5100乙太網路卡上面還有一個SD記憶卡介面,它的晶片選擇腳連接到D4,如果你的程式有使用SD記憶卡,那麼,D4也不能用。

      最後,官方W5100乙太網路卡的D0和D1腳位附近,有兩個未焊接的接點,以”INT”標示。如果將這兩個接點焊接起來,它將連接D2腳和W5100晶片的INT腳,但由於Ethernet程式庫並未支援INT腳位,因此預設並不相連,所以可以自由使用D2。

      thanks,
      jeffrey

  5. 老師,我透過您書中控制家電開關的章節,利用四路繼電器板子,想要控制4個家電,我使用其中三個繼電器,本來是控制鐵門的上下跟暫停,因為很少用暫停,所以我就改接風扇了,而我想網路開啟風扇30分鐘會自動關閉。程式依據老師章節範例撰寫,只是多加一個選項,因為我想定時30分鐘,所以用delay()函數來寫,問題是風扇是會自動跑30分鐘,但是在這30分鐘之內,我就無法開啟或關閉鐵門,正確來說,是連微網站都進不去……請問老師,有什麼辦法可以讓某個選項直接執行30分鐘或是1小時,而網站也不會因為執行程式碼,所以無法點選其他選項呢??

    if (strcmp(name, “DOOR”) == 0) {
    server << " 家裡的”;
    if (strcmp(value, “Up”) == 0) {
    server << " 鐵捲門已經打開。”;
    digitalWrite(UP_DOOR, HIGH);
    digitalWrite(DOWN_DOOR, LOW);
    digitalWrite(STOP_DOOR, LOW);
    delay(1000);
    digitalWrite(UP_DOOR, LOW);
    }
    else if (strcmp(value, “Down”) == 0) {
    server << " 鐵捲門已經關閉。”;
    digitalWrite(DOWN_DOOR, HIGH);
    digitalWrite(UP_DOOR, LOW);
    digitalWrite(STOP_DOOR, LOW);
    delay(1000);
    digitalWrite(DOWN_DOOR, LOW);
    }else {
    server << "風扇開啟。”;
    digitalWrite(STOP_DOOR, HIGH);
    digitalWrite(DOWN_DOOR, LOW);
    digitalWrite(UP_DOOR, LOW);
    delay(1800000);
    digitalWrite(STOP_DOOR, LOW);
    }

    1. 在dealy()的暫停期間,微處理器將呈現「完全放空」狀態(請參閱13-38頁)。我想,大概有三種方式可以解決你的問題:

      • 請參考13-39頁的時間差異比較程式,透過millis()取出當前的「毫秒」時間值。不過,在長時間不關機的運作場合,採用millis()要考慮到時間值溢位的問題。millis()函數的傳回值類型是unsigned long(正長整數),最大只能存放到4294967295(請參閱3-18頁),換算下來,大概每隔50天它會歸零(註:1000秒=1毫秒,換算成天數:4294967295 / 1000 / 60 / 60 / 24 = 49.71天)。
      • 既然你透過乙太網路遙控繼電器,那麼,可以向網路「時間伺服器」查詢當前的時間,然後再與你預設的定時開、關時間比對,這樣就能做到比較精準的控制。Arduino的編輯器有內建一個查詢時間伺服器的範例,位於主功能表的「檔案→範例→Ethernet→ UdpNTPClient」,我剛剛測試了一下,這是它傳回的時間資料:

        UdpNTPClient範例傳回的時間資料

      • 外加一個即時鐘(Real Time Clock,簡稱RTC)電路,像是DS1307模組,它可以讓我們設定與讀取時間值,不會佔用Arduino的運算時間,也沒有資料溢位的問題。

      have fun!
      jeffrey

  6. 您好 我想請問一下 如果要 自製 Arduino的板子 相關資訊要去哪裡找呢>”<?

    最近在找 如何自製Arduino的板子 相關材料 電路圖 等等的 如果您有相關資訊方便與我分享嗎~?

  7. 趙英傑老師您好:
    正在拜讀大作,不過因為居住地點的問題,想請您列出大作所用到的零件表
    以供學員一口氣買足,以免舟車勞頓之苦,
    另外,老師您有在北部開授此書的課程嗎?
    光是操作,心中有一堆疑惑(ex:放大器的工作原理…),希望可以上課有機會討論
    謝謝您撥冗回覆

    1. hi john:

      好的,我下週會整理一篇書本的零件表。
      呃~拍謝我沒有在北部開課。我不是專職老師,嚴格來講,也稱不上老師,您的問題我會在此盡力答覆。

      thanks,
      jeffrey

  8. 老師您好:
    想請教您使用UNO如何操作多個SPI
    日前買了Ethernet board,想要插上RFID(MFRC522)製作門禁系統
    可是不太清楚要怎麼實作
    請問老師是否能指點迷津
    謝謝~

    1. 你可以在這個網站下載MFRC522的程式庫,它裡面包含數個範例檔,以ReadAndWrite.ino(讀寫RFID)為例,原程式定義的晶片選擇(SS)和重置(reset)腳位,分別是10和9:

      #define SS_PIN 10
      #define RST_PIN 9

      Arduino官方的以太網路擴充板,第10腳用於Ethernet晶片選擇,第4腳用於SD記憶卡的晶片選擇,因此你需要將RFID模組的SS和Reset接在其他腳位,例如3和2腳:

      #define SS_PIN 3
      #define RST_PIN 2

      其餘的SPI接線就按照一般的接法即可。

      thanks,
      jeffrey

    2. 老師您好:
      謝謝老師的回覆
      我對於SPI和IIC還不是很懂
      僅知道IIC有透過定址方式`,用SDA和SCL兩條line作爲資料傳輸
      SPI則是透過SS選擇slave,用MISO和MOSI作爲資料傳輸方向
      兩者都有使用clock(不知道我這樣的理解有沒有錯誤@@“)

      所以我比較不懂的是
      如果我裝了兩個SPI裝置,同時設兩個SS_PIN爲HIGH會發生什麼事呢?
      有相對應的IC可以使用嗎?
      還有IIC的slave位址設定,如何讓Arduino和IIC裝置彼此都知道呢?
      有特定IC需要使用嗎?

      網路上都只能找到控制LED的教學
      沒有看到操作多個Sensor(SD卡、RFID 讀卡器、溫度感測器)這種的
      麻煩老師指點一下

      謝謝老師~

    3. 阿傑:

      I2C裝置的位址已燒寫在晶片本身,請參閱11-11頁的【表11-1:比較I2C與SPI介面】。

      thanks,
      jeffrey

  9. 趙老師您好,
    最近星際大戰推出,心中的原力小惡魔又蠢蠢欲動了,想像您請教一下硬體的問題,如果我想拿Arduino來製作LED伸縮電路的話,有辦法這樣做嗎?
    目前是想說單顆LED的驅動電壓電流為藍光3.2V 20mA,如果10顆Led一串接,組合7組,共70顆。將Arduino的接腳拿出來分別接上7組LED串,令這7組以走馬燈或是伸縮的方式作業。

    如此一來,電壓要麼就乘以10變成 32V 20mA,不然就只能走電流10倍3.2V 200mA,這觀念對嗎?

    但是Arduino的接腳最高不是只能承受40mA的電流?? 這樣不就無法用Arduino來控制串接的LED?? (除非獨立電源用繼電器控制)

    1. hi bullets:

      通常LED不會連續串接好幾個,因為若其中有個燒毀或故障,造成斷路,整串LED就都不發光,而且要查出究竟是那一個故障,也很困難;其次是要找到符合需求的直流電壓模組也很麻煩。

      所以市售的LED燈條,都是用並聯,或者串連兩、三個LED再並聯:

      LED燈條電路

      依照你的需求計算消耗電流,再用較大功率的電晶體(如:TIP120)控制。

      May the force be with you!
      jeffrey

  10. 趙老師您好,
    原來是我誤會伸縮電路的接法,想一想確實是LED並聯才對。如果以7組LED,每組10顆藍光…. 我翻閱您書中的資料,4-30頁,以一顆LED來說 3.2V 20mA的歐姆定律來算,(5-3.2)/0.02=90歐姆電阻,就是一顆藍光LED搭配90歐姆電阻,可以正常插在Arduino的板子上,那10顆並聯的藍光LED應該怎麼搭配板子上的訊號呢?

    我主要是不清楚10顆並聯應該怎麼搭配基板去控制明滅,因為怎麼想10並聯的電流不是會高達200mA嗎? 電阻只有9歐姆….. 但是200mA插上基板的訊號腳位,基板晶片應該馬上就燒掉了吧??

    因為是電子學的門外漢,所以很多東西都不是很清楚,需要請您多擔待。

    1. 我有重新翻閱10-21頁,電晶體的那頁,我有使用過繼電器控制家電開關,所以電晶體的概念和繼電器很接近,只是電晶體的尺寸和控制電流都比較小……

      所以應該是獨立電源給每一組並聯的LED,然後中間用電晶體當作開關,再利用Arduino去連接電晶體嗎?

      如果我要控制8組LED,就要使用8組電晶體囉??

    2. 沒錯!電流量超過微控器所能負荷時,就得藉由電晶體驅動。
      挑選電晶體時,最好選擇Ic(集極電流)值為負載電流兩倍以上的型號。
      假設你的計算結果是200mA,那麼電晶體的Ic至少要400mA。
      所以10-38頁的表10-7列舉的電晶體型號,大都符合需求。

      如果你要分別開關8組LED,就需要連接8個電晶體。

      have fun!
      jeffrey

  11. 趙老師 您好,

    我再請教一下,我想用18650的鋰電池當LED的供電源,但是因為18650的電壓變化是 4.3-3.0V左右,所以如果我要另外增壓穩壓元件嗎?

  12. 老師想請問一個問題
    最近用arduino控制五個繼電器模組,並接了五個110v 65ma的燈炮
    原本我一次用一個繼電器模組 外接一個燈炮都沒事
    一次接了五個之後 arduino就燒了,我是用12v 3a的變壓器給arduino供電的
    而繼電器的型號是srd-05vdc-sl-c(低電位觸發的)
    我五個繼電器的vcc和gnd都是接arduino上的5v和gnd
    五個繼電器的訊號線分別接到arduino 的數位腳上

    而我用的繼電器模組是這一顆,上面有寫要DC 5V 65ma
    http://imgur.com/a/kWrid

    是因為arduino 的總輸出不能超過多少ma嗎?超過就會燒掉了?

    還是說其實 我用一個額外的5v 1a的變壓器 給五個繼電器模組供電
    不要用arduino板子上本身的5v供電 其實就ok了?

    1. hi milk:

      ATmega328微控器每個I/O腳最高輸出40mA(參閱4-21頁);繼電器要透過電晶體驅動並且最好加上消除反電動勢(16-35頁)的二極體,如果你採用16-39頁的電晶體電路驅動繼電器,Arduino只需要輸出0.7mA。

      thanks,
      jeffrey

  13. 老師您好 !

    關於W5100過熱問題有什麼方法可以解決?我是用官方W5100以太網路卡,當利用它作為webserver使用了一段時間,它就開始工作遲緩不受控制.

  14. 老師您好,於書本互動設計入門2中,對於機器昆蟲章節需要自製Arduino 板,這裡需要跟馬達控制板,與藍芽模組結合
    看不懂這裡應該如何自製Arduino 板,因為書上沒有說明,有沒有細電路圖可以參考,感謝指導

  15. 老師您好,電路位於附錄B的B-4頁,確實有麵包板Arduino的說明,但如果要裝金排針的接線法,這個部分卻沒有,機器昆蟲章節上有這個自製Arduino插圖,上頭有畫出兩種金排針(10Pin ,4p or 5P),因為是新手不知如何下手,能麻煩把這個部分說明一下嗎? 感謝您。

    1. 哦~請看一下B-7頁的處理器接腳說明,除了麵包板上的必要接線(如:重置、石英振盪器…),其他的接腳就直接拉出來用。像我的自製Arduino板的藍牙接在數位9和10,也就是直接接在處理器的15, 16腳,其餘L298N控制板的接腳,則分別接在數位2,3, 5~8,也就是處理器的4,5, 11~14。

      thanks,
      jeffrey

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *