2014/03/18

新書發表:Arduino輕鬆入門:範例分析與實作設計

書名:Arduino輕鬆入門:範例分析與實作設計
作者:我
頁數:456頁
出版日期:2014年2月19日
出版社:博碩文化(書號PG21403
ISBN:978-986-201-870-5
印刷:單色

一本從零開始介紹Arduino的入門書,不管是硬體還是軟體方面,都從最基本的層級開始講解,希望能引導初學者快速入門Arduino這套熱門的電子原型開發平台,打造您心中醞釀已久的專案。

★從零開始介紹Arduino這套電子開發平台。
★有硬有軟,電子零件與程式碼完全掌握。
★逐步學習,基本的LED與開關,直到溫濕度感測器、馬達、紅外線、無線傳輸、等等技術。
★介紹各種感測器,偵測氣溫、濕度、壓力、彎曲程度、等等。
★解說何謂驅動電路,如何掌控大電壓與大電流,操控馬達製作雙輪電動車。
★提供豐富詳實的範例,快速引領上手。
★容易看懂的電路圖,按圖施工,保證成功。
★從簡單的程式碼著手,慢慢邁向更複雜的功能,提供原始碼檔案下載。
★收錄有趣的小遊戲專案:包括石頭砸雞蛋、打鼓機、肺活量測試機、請你跟我這樣做。

書裡的電路圖,使用一套名為Fritzing的開放原始碼軟體來繪製,所有原始程式碼與電路圖檔案(彩色),都可到GitHub下載只需點按「Download ZIP」即可全部打包下載,書籍章節內也會註明個範例專案的所在路徑。

內容大綱:


1章,Arduino導論,從零開始介紹Arduino這套開放原始碼電子原型開發平台,自造者(Maker)運動、歷史源流、細數官方推出的開發板、以及各種相容產品與模組,然後介紹Arduino的軟體部分並在各作業系統上安裝驅動程式,本章結束之時,您面前就會有一套準備就緒的軟硬體開發環境。

2章,介紹閱讀本書需要的電子零件與設備,包括電阻、二極體、各種晶片、等等,以及手邊需備齊的工具。若讀者已有經驗,可跳過這一章。

3章,正式進入Arduino的領域,這一章將從基礎開始講解如何運用最基本的零件:LED與開關,並開發軟體程式,一步一步介紹關於硬體與軟體的各種概念。

4章,廣泛介紹各種「輸入」,包括數位輸入與類比輸入,諸如可變電阻、光敏電阻、壓力感測器、磁力感測器、等等,皆有其適合的運用場合。

5章,介紹各種「視覺」輸出元件,包括可發出各種色彩的RGB LED、能顯示數字的七段顯示器、LED矩陣、以及文字型LCD;加上前一章的輸入裝置後,我們就可以製作各種有趣的小專案。

6章,介紹「聽覺」方面的零件,包括能發出基本逼逼聲的蜂鳴器,加裝其他輸入裝置製作簡單的玩具鋼琴,然後是電容式麥克風,使得電路也能感知聲音大小。

7章,除了人為的輸入形式,電子電路也能偵測周遭世界的各項環境數值,包括氣溫、濕度、大氣壓力、海拔高度、等等,運用這些感測器,就能隨時監控植栽的狀況、家居環境的溫度變化、記錄並觀察氣象、等等有趣的專案。

8章,紅外線這種無線傳輸技術,運用領域非常廣泛,價格低廉且用法簡單,這一章將試著讓Arduino遙控家裡的電器、接收紅外線遙控器並解讀指令,最後會介紹動作偵測器,可用來建構保全系統,監控不明入侵者。

9章,介紹各種電力來源,以及如何驅動大電壓與大電流,介紹電晶體、達靈頓配對、穩壓器、準位調節器與相關原理。

10章,馬達是非常重要的致動器,能將電能轉為機械能,風扇、電動玩具車、光碟機、等等,裡頭都有馬達,本章將介紹直流馬達、步進馬達、伺服馬達的原理與用法,並運用直流馬達製作能自行避開障礙物的超音波自走車。

11章,想要達成萬物聯網的夢想,就需要各種傳輸技術,本章將介紹藍牙、以太網路、WiFi

12章,除了購買非常方便的Arduino開發板之外,我們也能在麵包板(或洞洞板)上建構屬於自己的Arduino,本章將介紹USB轉序列傳輸介面、ISP燒錄器、自行製作便宜的並列埠燒路線。

13章,這是最後一章,介紹本書未能收錄的主題,以及在讀完本書後,下一步可往哪些方向。

附錄A,列出與微控制器開發相關的詞彙與簡短描述。
附錄B,比較UnoLeonardo這兩塊主流開發板的差異。
附錄CArduino核心函式的參考資料。
附錄D:介紹Arduino IDE的設定與目錄結構。
附錄E:各範例專案所需零件材料列表。


勘誤表:

如果您發現書中有任何錯誤,還請留言告知,謝謝。

嚴重程度:高

頁數:291
位置:表10.3
修正: 應互換粉紅線與黃線對應的Arduino腳位,將「對應Arduino腳位11的驅動腳位」與「對應Arduino腳位10的驅動腳位」互換

【2016.04.03新增】
頁數:177
位置:圖6-12
修正: 圖中的82kΩ電阻,其一腳接到5V,錯了,應接到GND。

頁數:180
位置:圖6-13
修正: 圖中的82kΩ電阻,其一腳接到5V,錯了,應接到GND。


【2016.05.29新增】
頁數:263
位置:圖9.15的電路圖錯了,其中二極體(1N4001)的接法錯了
修正: 請見下圖,或到GitHub

嚴重程度:低

頁數:144
位置:所需零件裡的「8×8 陰極單色LED 矩陣」
修正: 將「陰極」改為「共陰極」

頁數:150
位置:程式碼5.9裡面的註解「將資料快閃記憶體裡,不佔用SRAM」
修正: 將「將資料」改為「將資料放進」

頁數:171
位置:第一行末端「音量強落」
修正: 將「強落」改為「強弱」

頁數:174172
位置:倒數第三行的「2 號計時器則負責腳位11 與3 的PWM」
修正: 將「2 號計時器」改為「2 號計時器(Timer 2)」

頁數:183
位置:6.6 Wave擴充版裡的「由一塊音訊負責解碼檔案」
修正: 將「音訊」改為「音訊晶片」

頁數:228
位置:程式碼8.2裡的註解
修正: 在「Uno是 3 Leonardo是 13 」的「3」與「Leonardo」之間插入逗號「,」

頁數:360
位置:12.2的第一行裡的「第一章」
修正: 將「第一章」改為「第1章」

頁數:368
位置:零件材料裡的電阻,忘記寫上色環
修正: 將「220Ω電阻」改為「220Ω電阻(色環:紅紅棕)」;將「470Ω電阻」改為「470Ω電阻(色環:黃紫棕)」

頁數:387
位置:倒數第三行的「Lego Mindstorm」
修正: 將「Lego Mindstorm」改為「Lego Mindstorms」

【2014.04.16新增】
頁數:308
位置:第一段第四行後面,「比較」重複了
修正: 將「選購時請比較比較能驅動...」改成「選購時請比較能驅動...」

頁數:321
位置:程式碼10.13裡的註解
修正:將「假定當電流從BACKWARD流向FORWARD 輪子往前轉」的「往前轉」改成「往後轉」

頁數:328
位置:程式碼10.17裡的註解
修正:將「假定當電流從BACKWARD流向FORWARD 輪子往前轉」的「往前轉」改成「往後轉」

【2014.08.17新增】
頁數:64
位置:第二段,第二行與第四行,圖編號錯了(有兩處)
修正: 將「圖3.3」改成「圖3.5」(有兩處)

【2014.12.18新增】
頁數:200
位置:倒數第二段,程式庫Timer的網址
修正:若照書中網址下載,將會下載1.x版,但書中範例使用的是2.x版;請改到2.x版的網址https://github.com/JChristensen/Timer/tree/v2.1下載,或是直接使用本書原始碼網站(https://github.com/yehnan/arduino_book_yehnan)裡提供的Timer程式庫。

【2015.04.27新增】
頁數:266
位置:倒數第二段,第三行,有個錯字
修正: 將「答靈頓」改成「達靈頓」

【2016.01.13新增】
頁數:43
位置:第一段第三行,圖標號錯了
修正: 將「圖2.8」改成「圖2.9」

頁數:43
位置:第二段最後一行,圖標號錯了
修正: 將「圖2.9」改成「圖2.10」

頁數:44
位置:第二段第二行,圖標號錯了
修正: 將「圖2.11」改成「圖2.12」

34 comments:

  1. Anonymous17/3/14 15:40

    使用書中範例ch10_stepper輸入負數, 28BYJ-48無法逆轉.
    比對馬達規格與stepper library, 發現library是用2相激磁(4拍), 不是用規格建議的1-2相激磁(8拍).
    將2相激磁的順序由1010-0110-0101-1001改為1100-0110-0011-1001, 即可順利正逆轉.
    如要改為1-2相激磁, 激磁順序為1000-1100-0100-0110-0010-0011-0001-1001.
    *2相激磁轉一圈步數為(360/5.625)/2*64=2048
    *1-2相激磁轉一圈步數為(360/5.625)*64=4096
    以上皆已改stepper.cpp驗證過

    ReplyDelete
    Replies
    1. 謝謝回報錯誤,我將會再確認一次,然後寫在這一篇的勘誤表裡。

      謝謝。

      Delete
    2. 謝謝你的指正,我確認過後,不需要修改Stepper.cpp,結果如下:

      表10.3有錯誤,粉紅與黃的接法應互換。
      粉紅 原本 對應 Arduino 腳位 11 的驅動腳位,請改為「10」。
      紅 原本 對應 Arduino 腳位 10 的驅動腳位,請改為「11」。

      圖10.9的電路圖是對的,程式碼10.2(ch10_stepper)也是對的,輸入正數會正轉,負數會逆轉。


      再次感謝指正。

      Delete
    3. Anonymous17/3/14 21:19

      版主回應好快! 此例剛好改硬體或改軟體皆可, 因我以前本業是IC設計, 如出錯時較傾向改軟不改硬^^
      另請教p.290轉動一圈的步數:512步, 是如何得知的? 謝謝您花功夫出了一本很棒的arduino入門書.

      Delete
    4. 從產品網站得知http://www.adafruit.com/products/918,實際上,一圈是32*16.032=513.024步。

      哪裡,謝謝購買。

      Delete
  2. Anonymous17/3/14 22:06

    那這樣p.290(搭配1/64減速齒輪箱), 1/64要改為1/16才對.
    我是使用28BYJ-48 5VDC, 它配的才是1/64減速齒輪箱.
    http://arduino-info.wikispaces.com/SmallSteppers

    ReplyDelete
    Replies
    1. 規格其實滿混亂的。
      在http://forums.adafruit.com/viewtopic.php?f=31&t=41608有打開這顆步進馬達的照片,其馬達核心的確是8步,搭配1/64齒輪箱後得到512。
      不過產品網頁卻寫著32-Step 1/16 Gearing(正確數值是16.032)。

      所以我書上寫著「搭配1/64減速齒輪」,也不能算錯orz。
      事實上,該產品網頁修改過,以前曾經寫著「48-Step 1/16 Gearing」。

      至於「512步」,寬鬆一點來說是對的,但若不斷地叫步進馬達轉512步,那麼就會越來越偏移。

      感謝提供資訊。

      Delete
  3. 你好葉難大大,我是剛學arduino的新手,剛參考了你的文章,定時timer令led閃亮
    想弄一個定時器,是要發聲的,大大可幫一下忙,寫個簡單的程式碼來參考一下嗎?
    我已e-mail了你 我的email是lhyedmond, 謝謝感激不盡。

    ReplyDelete
  4. 上述174頁的修正,應為172頁

    ReplyDelete
  5. Anonymous14/8/14 23:46

    63頁需更動圖3.3=>需更動圖3.5

    ReplyDelete
    Replies
    1. 找不到你說的地方耶,可以請您再確認一次嗎?

      Delete
  6. Anonymous17/8/14 22:31

    打錯是64頁
    需更動圖3.3連接開關腳位(但是圖3.3沒有開關)
    因該是圖3.5才有開關

    ReplyDelete
  7. Anonymous17/8/14 22:35

    請問我用20Mhz的震盪器可以取代16Mhz嗎?

    ReplyDelete
    Replies
    1. Arduino很早以前使用的微控制器只能跑到16 MHz,後來的皆可跑到20 MHz,但為了相容起見,仍維持16 MHz。

      技術上是可以的,但應該需要修改fuse與其他設定,若真的改為20 MHz,連帶地有些東西也會跟著變動,可能造成某些程式、某些擴充板出問題。

      Delete
  8. This comment has been removed by the author.

    ReplyDelete
  9. 想請問葉難
    Arduino的thread要如何運用
    例如我用紅外線程式庫
    感測按鈕為1 為步進正轉
    感測按鈕為2 為步進反轉
    遇到的問題是當馬達再轉動時,無法再接收紅外線的輸入訊號
    懇請指教

    ReplyDelete
    Replies
    1. 「Arduino輕鬆入門:範例分析與實作設計」書中介紹的程式庫AccelStepper,應可達到你的要求。

      Delete
    2. Okay I'll get one : )

      Delete
  10. 請問 3.6 的小遊戲,5V 拉到麵包板上方後並沒有接到開關,如何對開關供電?
    謝謝!

    ReplyDelete
    Replies
    1. 3.6有寫了,第69頁,
      「省掉了開關需要的下拉電阻...將運用Arduino開發板內建的上拉電阻」

      Delete
    2. Hi Yehnan,

      如 ch03_repeat_after_me_bb 這張圖,圖中的 5V 接到麵包板上方後並沒有與開關或任何元件導通。
      這樣看起來開關只有接地跟 input pin 而已?

      謝謝!如有誤解敬請見諒

      Delete
    3. 是的,圖中5V接線,其實可以去掉。

      「省掉了開關需要的下拉電阻...將運用Arduino開發板內建的上拉電阻,便可省下外接的電阻」,換句話說,就是由Arduino內部提供的上拉電阻(接到5V)連接到開關的某一邊。

      程式碼裡需使用pinMode(pin_number, INPUT_PULLUP)來啟動Arduino內部提供的上拉電阻。

      Delete
    4. Hi Yehnan,

      了解了。感謝 :)
      這個上拉電阻真好用,電路可以簡潔很多

      Delete
  11. 第43頁第一段第三行:或是使用如圖2.8的洞洞板.....
    應改為圖2.9
    第43頁第二段最後一行:尖嘴鉗、斜口鉗、剝線鉗,如圖2.9所示
    應改為圖2.10
    第44頁第二段第二行:最起碼只需要如圖2.11的烙鐵....
    應改為如圖2.12

    ReplyDelete
  12. 請問 我們要如何用arduino透過繼電器控制陽極鎖來讓他斷電開門 有沒有一些參考資料

    ReplyDelete
    Replies
    1. 不就是用arduino控制繼電器,而繼電器接到陽極鎖。
      繼電器和陽極鎖,大概都應使用外部電源,與arduino的電源分開。

      Delete
    2. 那繼電器如何控制陽極鎖呢?

      Delete
    3. 嗯,陽極鎖的電源線接電源,接地線接到繼電器的NC(normal close),繼電器的接地線路接地。
      當繼電器處於平時狀態,陽極鎖可取得電源,於是上鎖。
      當arduino發出訊號給繼電器時,繼電器的NC就不會接到接地,於是陽極鎖沒電,就會開鎖。

      大概是這樣吧,要看實際產品而定。陽極鎖裡是不是已經有繼電器呢?

      Delete