《超圖解Arduino 互動設計入門》第三版內容更新說明

《超圖解Arduino 互動設計入門》第三版封面

作者:趙英傑
出版社:旗標科技股份有限公司
出版日期:2016.12.24
頁數:656頁,雙色印刷。
定價:NT$680

本書已授權Arduino原廠發行多國語言版本。

自第一版推出三年多,感謝眾多讀者和老師的支持與推薦。Aduino原廠(arduino.org)執行長Federico Musto先生,在上海的某間書店翻閱到本書後,大為讚賞,到台灣與筆者聯繫,讓本書有機會推廣到國際舞台,2017年第一季英文版將率先問市。

本書的目標是讓高中以上,沒有電子電路基礎,對微電腦、電子DIY 及交互裝置有興趣的人士,也能輕鬆閱讀,進而順利使用Arduino 控制板完成互動應用。因此,實驗用到的電子和程式觀念,皆以手繪圖解的方式說明。

第三版插圖更新

本書DIY實驗單元的控制板,採用主流的Arduino UNO。書中所有插圖都是筆者採用Adobe Flash軟體手繪完成(註:Flash在2015年末更名為Animate CC),零組件也全都改用手繪插圖取代照片。

底下是第二版裡的可變電阻照片:

可變電阻照片

第三版的可變電阻手繪插畫:

可變電阻手繪插畫

第三版的Arduino Uno控制板依據arduino.org生產的版本繪製,並修正插孔和編號之間的視差,圖說字體也換成更易讀的樣式。

第三版的Arduino Uno控制板

這是第二版書籍的Arduino Uno控制板插圖:

第二版書籍的Arduino Uno控制板插圖

除了控制板和零組件,第三版裡的許多Arduino IDE軟體開發工具,以及「序列埠監控視窗」截圖,也改用手繪方式呈現,讓圖像更清晰銳利。這是第二版採用的IDE及「序列埠監控視窗」螢幕截圖:

Arduino IDE截圖

Arduino IDE截圖

序列埠監控視窗截圖

這是第三版的手繪介面:

Arduino IDE手繪插圖

 

Arduino IDE手繪插圖

 

序列埠監控視窗手繪插圖

第三版內容更新

第二版第17和18章中的Flash互動單元主題,在第三版以PDF格式收錄在光碟,當作附錄G和H。第三版重新改寫17和18章,加入觸控按鍵以及門禁系統應用等主題。這兩個章節的內容改编自筆者網站的下列文章:

第三版書籍第10章的「動手做10-4:使用atoi()轉換字串成數字」單元,補充「序列接收字元」的說明,取自筆者網站的「Arduino序列埠通訊程式Serial.read()讀取到 ÿ 字元的補充說明」這篇貼文。

第14章的藍牙控制單元,明確採用HC-05和HC-06模組,並依筆者網站的下列貼文改寫:

第7章新增一個「串聯兩個74HC575」單元,改寫自筆者網站的「串入並出的IC 74HC595補充說明:串聯多個74HC595 的Arduino程式示範」。

第1章的Arduino控制板簡介,參考「Arduino傳奇故事:開發秘辛」這篇貼文改寫。

延伸閱讀

70 thoughts on “《超圖解Arduino 互動設計入門》第三版內容更新說明

  1. 赵老师您好,我是大陆读者,偶然的机会看到这个网站,果断通过台湾代购购买了《图解lot》《图解auduino》第三版,非常喜欢您的作品!请问您网站介绍的程序实例不是arduino IDE平台界面,用的是什么平台界面哪?感觉很好。谢谢

  2. 赵老师又要出第3版了,太厉害了,第二版(简体版)还在手中品味,物联网的那本(繁体版)最近刚从淘宝上买到,大陆书店没有销售!
    我心中有个一直有个疑惑,向赵老师请教下:
    芯片引脚输出高电平时,最大输出电流参数是怎么得来的?为什么会有这个最大电流限制?输出高电平依我的理解相当于有一个5V的电源正极直接引出吗?极端点如果我把它直接接地不行吗?或者说将它直接接一个LED或者电机不行吗?

    还请赵老师解释下,谢谢,期盼赵老师的回复

    1. 非常感谢!

      假设微控制器是把水力转变成机械动力的水车,若衔接在水车的负载太大,可能会造成水车的传动轴、齿轮断裂;同样地,微控制器通过电能运作,依照逻辑演算结果输出信号。

      如果微控制器要达成高功率信号输出,就像把晶体管9013替换成TIP120一样,芯片的体积和发热量都会增加。你也可以想像成微控制器的体积太小,无法容纳大水管,只能通过小水管传递信息,所以它的驱动能力也有限。

      thanks,
      jeffrey

  3. 赵老师您好,本书3版,第4-3页,开关的打开和关闭图,发光二级管的状态区别表示是不是更好?

    1. 嗯,不过,假如拿掉LED旁边的两个箭号,那个符号就变成一般的二极管而不是LED了。

      thanks,
      jeffrey

  4. 第5-11页,“偶数(EVen):当资料位元有奇数个1时,同位检查位元将被设定成0,补成偶数。”,应该是设定成1吧?

  5. 赵老师您好,本书6-9页光敏电阻程序中有一处印刷错误:if (ans >=700){……},变量ans 应该是val。 另外,val = analogRread(A0)…… digitalWrite(13,HIGH)…… 既然定义了变量Cds = A0; LED = 13; 上述函数变量A0和13是否由Cds和LED替换为好?

  6. 纠错:7-15页 “将74HC595的三个接脚都设定成输出”,应为: “将Arduino的三个接脚都设定成输出”。
    “最后再把「输出致能」设置为高电位……” ,应为 “最后再把「暂存器时脉」设置为高电位……”

    1. 非常感谢!我会将句子改成:「将Arduino连接74HC595的三个接脚都设定成输出:」

      thanks,
      jeffrey

  7. 老师您好,9-19页的程序中,用74HC595,库文件用LiquidCrystal_SR3W.h (三线),按照头文件的说明接线,结果16×2LCD只显示前8行,后半屏是空的,请老师指教为盼。

  8. 感谢老师指引,您的推荐使我知道了LCD驱动,不仅可并行、I2C串行、寄存器移位串行(FMalpartida的库),还可以SPI串行。74HC595 SPI程序测试后,现象依旧,估计可能是LCD 问题,待买新的后再做测试。

  9. 老师您好,上次我提问的1602LCD显示一半的问题,果然是LCD出问题,今天买到新的后,已验证,再次感谢老师指导!

  10. 我有個程式不知道怎摸打 我是個高中生
    我們再找有沒有隱藏密碼的密碼
    比如說 98 41 86 52 764 53
    隱藏密碼為4.5
    實體密碼順序為123
    只要密碼裡成立就可以開鎖

    1. 可以用迴圈從輸入密碼的第一個字開始讀取、比對,如果找到目標字元,就先把它存入一個陣列。
      先把比對目標存入一個陣列,例如:{‘4’, ‘5’}
      並且宣告一個空白的陣列
      從第一個字元開始讀取密碼,若比對到目標值,則將它存入空白陣列,再往下比對第2個字元…
      比對完畢後,再確認空白陣列的值和目標密碼是否一致(確認順序)\

      或者,不用建立空白陣列,而是宣告一個預設值為0的整數。
      只要遇到比對正確的字元,就將整數值加1,
      若後面沒有遇到其他比對值,就不累加整數,
      因為是從頭開始比對,所以順序不用再確認。
      假設目標密碼是兩個字元,
      整數值也應該是2。

      大概就這樣吧~

      thanks,
      jeffrey

  11. 老師你好 !
    我剛試著第二版的範例檔案名為diy16_3_1.ino在編輯器中執行Verify見出現以下error請解答謝謝!

    Arduino: 1.8.1 (Windows 7), Board: “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    In file included from C:\backup\arduino\sample\ch16\diy16_3_1\diy16_3_1.ino:6:0:
    :
    :

    exit status 1
    ‘htmlHead’ was not declared in this scope

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  12. 老師您好 !

    我依照您的指示用了arduino 1.6.13版並更新了第二版書中的範例diy16_3_1.ino中所需要的程式庫而編譯亦完成,但仍然出現一句問題….

    WARNING: Category ‘Language’ in library ArduinoStreaming is not valid. Setting to ‘Uncategorized’

    這句是什麼問題 ? 請老師指教謝謝 ! 另外想請教編輯器版本是不是不可用比1.613新的版本 ? 怎選擇合適的編
    輯器版本 ?

    1. 那個警告訊息的意思是「Streaming程式庫的語言分類是無效的,設定成’未分類’」,你可以忽這個訊息。

      Arduino 1.6.2版本之後內建一個程式庫管理員(Library Manager),因應這項更新,程式庫資料夾裡面多了一個描述程式庫的檔案 library.properties。例如,Mifare RFID-RC522模組的MFRC522程式庫資料夾,就包含library.properties,其內容如下:

      關於library.properties的詳細說明,請參閱葉難翻譯的Arduino IDE 1.5:程式庫規格書

      至於IDE版本,我自己並沒有習慣立即更新到最新版,因為新版本的程式編譯器採用的語法版本可能和現有的程式不完全相容,所以我的電腦安裝了兩個版本,一個是用手動安裝(下載ZIP格式直接解縮使用)的新版本,另一個則是測試後沒發現問題的舊安裝版本(目前採用的是1.6.13)。

      thanks,
      jeffrey

  13. 老師您好!

    那個steaming程式庫我copy了隨書附送光碟內的這個程式庫就没有再出現這個警告了,我覺得上載程式到arduino前没有奇怪的警告字眼出現會比較好.

  14. 趙老師您好,請問英文版也會在台灣發行嗎?希望在台灣也能買得到。另外,由於您的書真的鉅細彌遺、深入淺出,我們學校的國二、國三,人手皆一本作為指定教材,目前上課最大的問題是,做投影片時需要一直拿手機拍書的圖片,如果能提供投影片或式圖片檔等教學資源,就更方便了。最後還是要感謝您出了這本書,讓學生更容易上手了!

    1. 感謝彭老師的支持,本書第二版有提供教師簡報檔,第三版的簡報檔會在開學前編輯完成。至於英文版,將來可以在arduino.org網站購買,但是通路和銷售端的詳細情況我也不是很清楚。

      我會把老師的e-mail轉交給本書的編輯黃晰暐先生,請黃兄提供老師教學資源網站的網址和帳號,謝謝您!

      thanks,
      jeffrey

  15. 老師您好!
    由於不同函式庫裡面還會再#include其他的函式庫,因此在有些範例裡使用的函式,無法在它#include的函式庫裡找到。

    請問有沒有辦法根據範例裡使用的函式尋找其所在的.cpp與.h檔案。

    1. 請問是哪一個範例執行有問題?

      C語言的前置處理程序具備條件判斷式,以底下的敘述為例,若已再其他程式中定義SAMPLE,則引用A.h,否則引用B.h:

      thanks,
      jeffrey

    2. 老師您好
      我使用WiFiClient這個範例,裡面只有#include ,但我在這個函示庫.h與.cpp內均無找到
      localIP()、status()這兩個函式,但範例沒有問題,想請問該如何尋找這兩個函式的所在位置?
      謝謝!

  16. 趙老師,

    你好!
    我是第二版的讀者, 照書做實驗 , 獲益良多!

    有一問題想請教老師:
    書裏, page 10-34, 自走車以 ” byte dir = 0; // 記錄行車狀態, 0 代表 ‘前進’ , 1 代表 ‘右轉’ ”
    我是新手, 不了解為何程式中 dir 毋須設定 : 0 代表 ‘前進’ , 1 代表 ‘右轉’ ;
    但程式卻知道 0 代表 ‘前進’ , 1 代表 ‘右轉’;
    可否請老師進一步說明, 謝謝!

    1. 自走車的狀態碼是由我們(程式設計人員)自行決定的,當dir為0時,執行處理前進的程式碼;當dir為1時,執行右轉的程式。0和1本身沒有意義,你也可以改成2和3或其他數字,但是條件判斷式也要跟著修改。

      thanks,
      jeffrey

  17. 趙老師,我有一個問題。

    我想要問在「超圖解Arduino互動設計」當中的diy15_3的程式,我拿宿舍的網路線插上Arduino板,電源插筆電的USB,在序列埠視窗上顯示 : My IP address: 192.168.1.113。再來利用diy15_2的程式碼,但是將192.168.1.113 做ping的反應卻沒有回應。
    然後用Arduino的WebServer的範例檔案,在序列監控埠視窗顯示 “server is at 255.255.255.255” 或者有時候會變成 “server is at 0.0.0.0″,在Chrome也無法顯示網頁,請問這個問題該怎樣解決比較好。

    1. 校園和宿舍網路應該都是用動態IP,請把setup()部份的程式替換成15-29頁的程式碼。

      thanks,
      jeffrey

  18. 從第一版到第三版我都有入手.我們是Openlab.Taipei 在寶藏巖駐村的社群團體,每週三晚上六點會舉行”週三來碗Arduino”的活動,很多時候會向初學者介紹這本書,甚至空間有存放書本讓前來對Arduno有興趣的朋友參考,對於趙老師的作品相當有興趣,在此希望能邀請趙老師到Openlab.Taipei 實體空間作分享或非正式的拜訪遊玩,不知道要如何聯絡,借此地向趙老師提出邀請…如有打擾敬請原諒
    社團臉書https://www.facebook.com/groups/openlab.taipei/
    發文者臉書https://www.facebook.com/lovemouse520
    寶藏巖社團空間營運者臉書https://www.facebook.com/honki?fref=ufi
    謝謝您!!

    1. 謝銠鈑您好:

      久仰大名!也非常感謝您的分享~我住在台中,也許暑假期間我會帶小孩北上過去玩玩。

      thanks,
      jeffrey

    1. 咦……請問你的書是幾月出版的版本?我的是一月的版本,4-19頁的圖說,電阻和LED都有畫出引腳:

      4-19頁的插圖

      thanks,
      jeffrey

  19. 老師你好:
    第三版,3-17頁的 【long ans = 4000 * 100; // 計算結果 : 6784】中的 long,應改成 int 。

  20. 趙老師您好
    自四年前迄今,拜讀一二三版受益良多,在第三版的附錄C的實作程式DIYappC,關於下面這個部分,除了書上的程式碼跟光碟裡的程式碼不同之外,內容也有點不理解:
    if (turnOn) { // 如果 LED 目前是點亮的…
    // 比較現在時間與之前記錄的時間
    diffTime = millis() – oldTime;
    // 如果時間差大於或等於延遲時間(10 分鐘)…
    if (diffTime >= delayTime) {
    turnOn = false; // 設定為「關閉 LED」,(至此都可以理解)
    }
    } else { // 若設定為「關閉 LED」,(這裡開始不懂了……,為何要關閉LED呢?)
    digitalWrite(ledPin, LOW); // 關閉 LED
    digitalWrite(stopPin, HIGH); // 相當於「按著」停止鈕
    delay(100); // 經 0.1 秒後…
    digitalWrite(stopPin, LOW); // 「放開」停止鈕, 構成「按一下」的動作

    感謝您費心解惑。
    讀者趙天覺

    1. hi tanj:

      非常感謝你的支持,也謝謝你的慧眼,嗯~那個 “若設定為「關閉 LED」” 部份的else敘述應該要搬家,如下:

      thanks,
      jeffrey

  21. 請問三版有收錄nrf24l01的使用方式嗎
    (三公分短短的那種)
    因為手上二版並無收錄
    其他手上書籍收錄也不完整
    而且中文網站上也不詳盡
    請問老師會做相關書籍或網站嗎
    或是有推薦書籍
    謝謝老師

    1. nRF24L01已經有人編寫相關的Library. 如果我沒記錯的話,Arduino與nRF24L01之間的溝通,比較多人使用的library好像是RF24和Mirf(不過這個是好幾年前的事了…不確定現在有沒有更好用的Library…),這二個在Github上都可以找到。如果你想自己先試試看的話,可以下載下來嘗試。
      如果要比較進階或是全盤了解這個模組的使用和原理,就要等Cubie將它收錄在新版的書藉裡或是PO到這個Blog了~~~
      呵呵~~~我也在期待中~~~

  22. 老師你好
    我是初學者,我購買了你的第三版超圖解ARDUINO互動設計 ! 因為我想如何利用 ARDUINO組件製作光劍的控制程式及音效, 不知道是否可以引導我一個初步的方向讓我可以去實行嗎 ?謝謝

    1. DIY光劍這個話題在Arduino官方討論區挺熱門的,像這個討論串就有80多頁。發起討論的作者也公開他的光劍(USaber)原始碼

      在原始碼網頁有提到主要元件,除了Arduino和光劍本體之外,主要的感測器和電子元件包括:

      • 振動和加速度感測器:例如SW-200D振動開關和MPU-6050加速度感測器。
      • 聲音播放器:例如DFPlayer(MP3播放器)

      另外,搜尋關鍵字Arduino Lightsaber也可以找到許多範例。

      願原力與你同在!
      jeffrey

發表迴響

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