依章節排序的《超圖解Arduino互動設計入門》勘誤與內文補充

本文將按章節,列舉《超圖解Arduino互動設計入門》書籍的內容勘誤與補充說明,技術文件資料與相關軟體下載說明,請參閱另一篇文章

第二章 認識電子零件與工具

2-3頁,第二段最後的單位”mA”,正確中譯為「毫安培」。

第三章 Arduino互動程式入門

3-18頁,表3-1,類型boolean佔用記憶體大小寫著「1位元」,實際是佔用8位元。

第四章 開關電路與LED跑馬燈效果

4-16頁,程式碼當中的"++"運算子語法補充說明:

“++”代表「加1」;另外有個”–”(兩個連續減號),代表「減1」。因此,底下這兩行敘述的意思是一樣的:

click ++;
click = click + 1;

此外,”+=”代表「加上某數」,假如要替click的值加1,寫法如下(其用意和上面兩行相同):

click += 1;

除了”+=”,還有”-=”, “*=”和”/=”這樣的寫法,相當於:

// 變數值減2,等同:click = click – 2;
click -= 2;

// 變數值乘3,等同:click = click * 3;
click *= 3;

// 變數值除4,等同:click = click / 4;
click /= 4;

以上這些運算子統稱為指定運算子(assignment operator)

4-20頁,倒數第三段第二行,「源流(Source Sink)」正確是「源流(Source Current)」。

第五章 序列埠通信

5-4頁,第一行「序列埠通訊視窗」,正確是「序列埠監控視窗」。

5-10頁,中間的圖說「封包(package)」,正確是「封包(packet)」。

第七章 LED七段顯示器

7-3頁,儲存七段顯示器數字代號的陣列,更正為底下紅色字體部分:

儲存七段顯示器數字代號的陣列

補充說明:使用shiftOut()函數傳輸序列資料

Arduino程式開發工具提供一個shiftOut()序列資料輸出函數(應該說「資料位移輸出」比較妥當),能一次傳送一個位元組(8個位元)資料傳給74HC595,而我們只需負責打開和關閉74HC595的並列資料輸出閘門,不用理會其他細節。

shiftOut()函數的語法如下:

shiftOut()函數指令圖說

其中的「位元順序」代表資料位元的傳送順序,以傳遞虛構的ledData變數值為例,這兩者的差異請參閱下圖。至於要用哪一種方式傳送,取決於74HC595資料輸出端的電路接法(參閱下文說明)。

LSBFIRST與MSBFIRST比較

根據本單元的七段顯示器資料設定,應該以"LSBFIRST"(最低位元先傳送):

設定"LSBFIRST"(最低位元先傳送)

7-6頁,中間的圖解,"abcdefg"的順序有誤,更正如下:

在Arduino的埠D輸出七段LED訊息

第八章 LED矩陣與SPI介面控制

8-10頁,MAX7219的要點補充說明:需要搭配「共陰極」LED;在MAX7219的規格書「一般說明」(第一段文字)寫著:”common-cathode display drivers”(共陰極)驅動器。

8-16頁8-17頁的MAX7219矩陣LED麵包板的第7腳,接線有誤,正確是:

組裝MAX7219 LED矩陣電路麵包板

8-35頁,「動手做8-6」的LED矩陣逐字捲動效果程式,並無法顯示文字,請在此下載更新後的diy8_6程式,程式修訂說明請參閱此留言

補充說明:使用MemoryFree.h程式庫檢查剩餘的主記憶體空間

Arduino有個MemoryFree.h程式庫,可檢查目前可用的記憶體量。下載並存入libraries資料夾之後,可在程式中透過MemoryFree.h的freeMemory()函數,傳回可用的主記憶體位元組(byte)數。如範例程式所示:

#include <MemoryFree.h>   // 引用程式庫

// 佔用14位元組的字串資料(含結尾的null字元)
char str[] = "Hello, world!";

void setup() {
   Serial.begin(9600);
}

void loop() {
   Serial.println(str);
   Serial.println(freeMemory());  // 顯示剩餘的記憶體量
   delay(1000);
}

用類似的方式,執行舊的diy8_6程式,序列監控視窗將顯示負值,代表記憶體空間不足:

剩餘的記憶體數量

在更新後的程式上測試,則得到如下的結果:

剩餘的記憶體數量

第九章 LCD顯示器+溫濕度感測器+超音波感測器

9-25頁:第二段,600µs (毫秒…,正確的單位名稱是微秒。

並接式LCD中,初始化LCD程式庫,設定接腳的程式有誤,9-5頁的接線圖是正確的。9-6頁的程式碼有誤:

錯誤的初始化LCD程式庫,設定接腳的程式。

正確的LCD資料腳位設定敘述如下:

正確的初始化LCD程式庫,設定接腳的程式。

影響的內文(頁數):9-6, 9-7, 9-12, 9-18和9-23

9-10頁,設定日文片假名文字的程式碼,要加上NULL結尾(請參閱5-14頁說明):

在LCD模組上顯示日文

9-16頁的串列連接LCD顯示模組,最好在74LS164 IC的電源和接地端,加上一個100nF (104)的電容,以便濾除雜訊干擾。

串列連接LCD顯示模組麵包板

9-18頁,串接式LCD模組的程式宣告當中的接腳設定,需改成底下的紅色字體:

序列LCD模組的腳位設定

第十章 變頻控制LED燈光和馬達

10-9頁,timer 2 對應的腳位是數位311腳,其PWM頻率設定語法為:

TCCR2B=TCCR2B & 0b11111000 | 0×02;

10-22頁,NPN型的電晶體將負載接在C腳(集極),PNP型電晶體…,應改成「NPN型的負載接在電源端;PNP型的負載接在接地端。

10-24頁,倒數第二段最後一行,「反電動式損害電晶體」,正確是「反電動勢…」。

10-31頁,第一段第一行中的「表 10-4 」,正確是「表 10-5」。

第十三章 製作光電子琴與MIDI電子鼓

13-4頁:表13-1上方的說明文字,「對照表(單位.png) Hz)」,當中的 ".png)" 是多餘的。

第十四章 手機藍牙遙控機器人製作

14-10頁,實驗說明裡的「序列埠通訊視窗」,正確是「序列埠監控視窗」。

14-12頁:內文提到的AccessPort軟體,並未收錄在書本DVD光碟,請讀者到AccessPort的官網(sudt.com)下載

光碟裡的diy14_1.ino程式內容誤植成diy15_2,diy_14_1.ino的程式碼如下(請參閱14-12頁):

#include <SoftwareSerial.h>
SoftwareSerial BT(10, 9); // 接收, 傳送

const byte ledPin = 13;
char val;     // 儲存接收資料的變數

void setup() {
  pinMode(ledPin, OUTPUT);
  BT.begin(9600);
  // 藍牙連線成功後,發佈「準備好了」訊息。
  BT.println("BT is ready!");
}

void loop() {
  if (BT.available() ){
    val = BT.read();
    switch (val) {
      case '0':  // 若接收到0...
        digitalWrite(ledPin, LOW); // 關閉LED
        break;
      case '1':  // 若接收到1...
        digitalWrite(ledPin, HIGH); // 點亮LED
        break;
    }
  }
}

第十五章 網路與HTML網頁基礎+嵌入式網站伺服器製作

15-27頁:底下的程式片段:

錯誤的HTML片段

正確是:

正確的HTML片段

第十七章 Arduino +Flash整合互動應用

17-34頁:書本裡的程式是正確的,但是光碟的”接接樂Firmata.fla”程式有誤(main場景的34~38行):

function receiveData(e):void  // 接收Arduino的資料
{
   var n:Number = Number(e.data);
   bian.moveX(n * 0.54);
}

請將上面的敘述改成書本17-34頁的敘述:

function readAnalog(e:ArduinoEvent):void  // 接收Arduino的資料
{
   var n:Number = Number(e.value);
   bian.moveX(n * 0.54);
}

然後,在25行的這一行敘述:

var a:Arduino = new Arduino("127.0.0.1", 5331);

後面新增底下的敘述(請參閱17-33頁說明):

a.addEventListener(ArduinoEvent.ANALOG_DATA, readAnalog);

第十八章 RFID無線識別裝置與問答遊戲製作

18-10頁,RFID麵包板電路組裝圖中的蜂鳴器元件是多餘的。

附錄B 燒錄ATmega微處理器的開機啟動程式(boot loader)

B-4頁補充說明,使用UNO板燒錄Bootloader(開機啟動程式),在插上10uF電容之前,請先上傳B-13頁說明的ISP程式。上傳ISP之後,執行燒錄之前,請從Arduino軟體的「工具→板子」選單,選擇要燒錄的bootloader版本,以B-2的範例而言,請選擇Arduino Duemilanove w/ATmega328

B-7頁:第一段倒數第二行,「參閱動手做 B-2」,正確是「動手做 B-1」。

B-9頁,電路圖的正確接法如下:

B-12頁,圖片中的”DTS”標示,正確是”DTR”。

附錄D 中斷處理與交流電調光器製作

D-12D-14頁的動手做D-1單元,所採用的「零交越檢測元件」,正確的編號是H11AA1(書本內文多寫了一個1),接MOC3020M第1腳的電阻是它內部LED的限流電阻,電路圖上畫的是180Ω,但我實際在板子上焊接的是1KΩ電阻(如下圖)。其實跟外部的LED一樣用470Ω電阻或330Ω就好了,180Ω也可以。

焊接在萬用PCB板的交流電調光器

更新後的調光器電路圖:

交流電調光器電路圖

D-13頁:4N25電路圖底下的「接TRIAC的T1腳」,正確是「接TRIAC的A1腳」。有些廠商的TRIAC元件用A1和A2來標示陽極腳位,有些則標示成T1和T2(代表Terminal 1, 終端腳1)。

D-13頁,4N25的橋式整流電路正確是:

4N25零交越檢測電路

為了避免橋式整流器部分接錯,同時減少接線,可以採用現成的「橋式整流器」,如下:

4N25零交越檢測電路

橋式整流器有多種耐電壓和安培規格,選購時,至少選用400V/1A。它的外觀有圓有扁,上面有交流和+, -符號。

D-13頁,修正交流電調光器,燈泡閃爍的問題,請參閱「使用TimerOne程式庫改寫Arduino交流電調光器程式」說明。

附錄E 使用App Inventor開發Android App

"BTRobotControl.apk"(藍牙遙控機器人APP)無法送出「左轉」訊息,請參閱這篇文章,下載修正之後的APP和原始檔。

Posts created 467

151 thoughts on “依章節排序的《超圖解Arduino互動設計入門》勘誤與內文補充

  1. 老師您好:

    在第十六中提到了使用繼電器開關,所以我在網路上不同的商家買了一路及二路的繼電器,
    使用時確發現,不同繼電器開關時機相反.

    實驗中我想要當我按下銨鈕後,繼電器啟動外部燈源10秒後又自動關閉,外部廻路我是接在NO的方式.
    只有一個商家買到的繼電器是如同我想的方式在運作,

    換上另一商家的一路或二路繼電器,確是一開始繼電器就啟動,當我按下按鈕時,外部電源滅了10秒後又再度亮燈,
    想請問老師這是那裡須要調整呢?

    1. hi gogo:

      我需要看過繼電器模組的電路圖才能確認,請提供購買的連結讓我看看。

      thanks,
      jeffrey

    2. 我看了兩個繼電器模組的介紹,其中一個是低電位觸發,一個是高電位或低電位觸發(可透過跳帽調整)。所以,如果你的程式碼原本是用高電位(HIGH)代表「開」,就改成低電位(LOW)即可。

      thanks,
      jeffrey

  2. 請敎老師:

    我想要在同一片Mega 2560板子上,搖控多個裝置(如電視,冷器,投影機),但這些裝置都位於家中的不同角落.
    而發射器和接收器在發射接收時,角度徧差如果過大時,收到的訊號也常常無法啟動設備.
    PS : 最後Mega 2560會放在家中另一機櫃裡.

    問題:
    1.須在Mega 2560上裝幾個紅外線發射器?目前我只查到只能在同一板子上裝一個發射器.
    2.因設備(如電視,冷器,投影機)位於不同位置,我該如何正確安裝紅外線發射器才可正確搖控它們呢?
    3.還須注意那些?

    1. 若以我家的電器用品分散程度來看,我應該會用數個DIY的Arduino板,分別裝在被控制的家電附近,因為它們分散的距離不小(類似子、母機的概念)。

      不過,紅外線跟可見光一樣,都可被折射,所以如果輸出功率夠大,加上環境許可,發射角度應該可以克服。實際的紅外線LED數量和安裝方式,我想每個環境都不同,沒有標準答案。

      have fun!
      jeffrey

  3. 老師您好
    我參照您的 交流電調光器製作 遇到一個問題 ,在未接負載時的兩端電壓會隨著我的程式的設定值而變化,但我加上負載後,電壓便會hold在120v左右,請教一下,為什麼會這樣?

    1. 鹵素燈泡可以調光,但因為你提到未接負載時,調光器電壓可以調整,所以調光電路應該沒問題。你方便用一般燈泡測試看看嗎?

      thanks,
      jeffrey

  4. 如果我 H11AA1 那組線路沒加,只接MOC3020M及BTA12-600C 這兩組電路,是否能正常動作?

  5. 作者,你好
    有一個問題想請教:
    第二版的10-30頁的表10-5, 這個表是否是指明馬達A的控制方式?
    表中第3行的輸入1B, 是否應該是輸入2A?? 煩請說明, Thanks.

    1. hi duke:

      表10-5代表一組輸入端(EN, 1A和1B)的狀態,所以是1A沒錯,謝謝!

      thanks,
      jeffrey

  6. 老師您好,
    P8-15上方的MAX7219和LED矩陣電路圖中,在SEG D那裡顯示23腳,但MAX7219只有22腳,我查了Datasheet,發現MAX7219跟MAX7221一起介紹,而MAX7221有24腳,不知SEG D在23腳是否因此而來?

    初學看不太懂Datasheet,它的圖左標明僅MAX7221第12腳用來做LOAD(CS),而圖右13-24腳不知兩者是否相同,怕焊下去會出現問題。

    請協助,謝謝!

    1. hi leo:

      MAX7219和MAX7221功能相同,主要是MAX7221可減少電磁干擾,並具備完整的SPI介面,它們都有24個接腳。書上的電路圖是正確的,謝謝!

      thanks,
      jeffrey

    1. hi houng:

      我查了一下MOC3020M系列規格書,這兩者的差別在於3020M的順向電流容許30mA,3023M只容許5mA。

      所以,為了保險起見,連接此IC第一腳的限流電阻要大一點。

      thanks,
      jeffrey

    1. 看起來可以。

      另外,我白天有其他工作,通常無法即時回覆訊息(若是外出旅遊,可能會有數天無法回信),我一有空就會處理,所以你不需要重複多次留言。不便之處請見諒!

      thanks,
      jeffrey

  7. 您好 在勘誤表中// D-13頁,4N25的橋式整流電路正確是:// 其二極體橋式整流電路圖還是錯的,依照圖中二極體方向交流電路不構成回路,正確應該是將4顆二極體方向接為圖中的相反方向就可以正確整流。

    1. 感謝告知!二極體圖片上下畫反了,已經在去年刷次的第二版書籍還有第三版D-15頁修正了。

      thanks,
      jeffrey

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top