本文補充《超圖解Arduino互動設計入門》書籍的技術文件資料下載連結、勘誤以及目錄大綱。
《超圖解Arduino互動設計入門》的目標是讓高中以上,沒有電子電路基礎,對微電腦、電子DIY 及互動裝置有興趣的人士,也能輕鬆閱讀,進而順利使用Arduino 控制板完成互動應用。因此,實驗用到的電子和程式觀念,皆以手繪圖解的方式說明。
書中涉及某些較深入的概念,或者和「動手做」相關,但是在實驗過程中沒有用到的相關背景知識,都安排在各章節的「充電時間」單元(該單元的左上角有一個電池充電符號),像第三章 3-26 頁「記憶體類型說明」,讀者可以日後再閱讀。
《超圖解 Arduino 互動設計入門》基本資料:
- 作者:趙英傑
- 出版社:旗標出版股份有限公司
- 出版日期:2013.04.04
- 定價:NT$680
各大網路書店與購物商場連結:
內容勘誤
【2013/04/07 更新】
- 9-25頁:第二段,600µs (毫秒…,正確的單位名稱是微秒。
- 13-4頁:表13-1上方的說明文字,「對照表(單位.png) Hz)」,當中的 ".png)" 是多餘的。
- 14-12頁:內文提到的AccessPort軟體,並未收錄在書本DVD光碟,請讀者到AccessPort的官網(sudt.com)下載。
- 15-27頁:底下的程式片段:
正確是:
- D-13頁:4N25電路圖底下的「接TRIAC的T1腳」,正確是「接TRIAC的A1腳」。有些廠商的TRIAC元件用A1和A2來標示陽極腳位,有些則標示成T1和T2(代表Terminal 1, 終端腳1)。
【2013/04/08 更新】
- 5-4頁,第一行「序列埠通訊視窗」,正確是「序列埠監控視窗」。
- 14-10頁,實驗說明裡的「序列埠通訊視窗」,正確是「序列埠監控視窗」。
- 18-10頁,RFID麵包板電路組裝圖中的蜂鳴器元件是多餘的。
- 附錄E,"BTRobotControl.apk"(藍牙遙控機器人APP)無法送出「左轉」訊息,請參閱這篇文章,下載修正之後的APP和原始檔。
【2013/04/20 更新】
- 10-24頁,倒數第二段最後一行,「反電動式損害電晶體」,正確是「反電動勢…」。
- 10-31頁,第一段第一行中的「表 10-4 」,正確是「表 10-5」。
【2013/04/27 更新】
- B-7頁:第一段倒數第二行,「參閱動手做 B-2」,正確是「動手做 B-1」。
【2013/04/30 更新】
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);
【2013/05/13 更新】
第九章並接式LCD中,初始化LCD程式庫,設定接腳的程式有誤,9-5頁的接線圖是正確的。9-6的程式碼有誤:
正確的LCD資料腳位設定敘述如下:
影響的內文(頁數):9-6, 9-7, 9-12, 9-18和9-23。
【2013/05/19 更新】
- 5-10頁,中間的圖說「封包(package)」,正確是「封包(packet)」。
- 10-22頁,NPN型的電晶體將負載接在C腳(集極),PNP型電晶體…,應改成「NPN型的負載接在電源端;PNP型的負載接在接地端。」
【2013/06/29 更新】
- 8-16頁與8-17頁的MAX7219矩陣LED麵包板的第7腳,接線有誤,正確是:
- B-4頁補充:使用UNO板燒錄Bootloader(開機啟動程式),在插上10uF電容之前,請先上傳B-3頁說明的ISP程式。上傳ISP之後,執行燒錄之前,請從Arduino軟體的「工具→板子」選單,選擇要燒錄的bootloader版本,以B-2的範例而言,請選擇Arduino Duemilanove w/ATmega328。
【2013/07/18 更新】
- 10-9頁,timer 2 對應的腳位是數位3和11腳,其PWM頻率設定語法為:
TCCR2B=TCCR2B & 0b11111000 | 0×02;
-
D-13頁,4N25的橋式整流電路正確是:
為了避免橋式整流器部分接錯,同時減少接線,可以採用現成的「橋式整流器」,如下:
橋式整流器有多種耐電壓和安培規格,選購時,至少選用400V/1A。它的外觀有圓有扁,上面有交流和+, -符號。
【2013/07/21 更新】
- D-13頁,修正交流電調光器,燈泡閃爍的問題,請參閱「使用TimerOne程式庫改寫Arduino交流電調光器程式」說明。
【2013/08/28 更新】
- 2-3頁,第二段最後的單位”mA”,正確中譯為「毫安培」。
- 3-18頁,表3-1,類型boolean佔用記憶體大小寫著「1位元」,實際是佔用8位元。
- 4-20頁,倒數第三段第二行,「源流(Source Sink)」正確是「源流(Source Current)」。
- B-12頁,圖片中的”DTS”標示,正確是”DTR”。
【2013/09/10 更新】
B-9頁,電路圖的正確接法如下:
【2013/11/07 更新】
7-6頁,中間的圖解,"abcdefg"的順序有誤,更正如下:
8-10頁,MAX7219的要點補充說明:需要搭配「共陰極」LED;在MAX7219的規格書「一般說明」(第一段文字)寫著:”common-cathode display drivers”(共陰極)驅動器。
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程式,序列監控視窗將顯示負值,代表記憶體空間不足:
在更新後的程式上測試,則得到如下的結果:
D-12到D-14頁的動手做D-1單元,所採用的「零交越檢測元件」,正確的編號是H11AA1(書本內文多寫了一個1),接MOC3020M第1腳的電阻是它內部LED的限流電阻,電路圖上畫的是180Ω,但我實際在板子上焊接的是1KΩ電阻(如下圖)。其實跟外部的LED一樣用470Ω電阻或330Ω就好了,180Ω也可以。
更新後的調光器電路圖:
資料文件與視訊影片下載
- 最新版本的Arduino開發工具軟體,請到Arduino官方網站下載。
- 第五章提到的ASCII字碼對照表,請參閱維基百科的ASCII條目。
- Arduino創始人在TED大會的演說 (Massimo Banzi: How Arduino is open-sourcing)
- 導演Rodrigo Calvo和Raul Alejos拍攝了一部紀錄片Arduino: The Documentary(有英文和西班牙文字幕),由Arduino的創始者訴說Arduino的誕生過程,還有運用Arduino製作出開放軟/硬體原始碼的3D印表機"MakerBot"的創辦人Zach Smith,和其他互動設計師的訪談紀錄,以及在工廠大量生產Arduino微電腦的片段。
電子零組件的技術資料下載
原本計畫收錄在書本光碟鋰的技術資料文件,為避免涉及著作權問題,在此提供連結(皆為PDF格式)。
第三章「Arduino互動程式設計入門」,ATMEL公司的"Efficient C Coding for AVR"(直譯為:AVR 晶片的高效 C 程式設計)技術文件
第六章「類比信號處理」,運算放大器(OP-Amp)技術文件:LM358和LM741。
第七章「LED七段顯示器」,8位元位移暫存器(shift register)74HC595。
第八章「LED矩陣與SPI介面控制」,SPI介面的8個七段顯示器,或者一個8×8 LED矩陣顯示器驅動IC,MAX7219。
第九章「LCD顯示器+溫濕度感測器+超音波感測器」:
- HD44780 相容的LCD文字顯示器技術文件。
- 74LS164串入並出位移暫存器(Serial-In Parallel-Out Shift Register)
- DHT11溫濕度感測器
第十章「變頻控制LED燈光和馬達」
- 直流碳刷馬達:
- 電晶體:
- H橋式馬達驅動IC:L298N
第十二章「紅外線遙控與縮時攝影控制器」,紅外線遙控訊號接收元件TSOP4838
第十三章「製作光電子琴與MIDI電子鼓」,TCRT5000紅外線反射型感測器
附錄C,光耦合元件,PC817
附錄D,TRIAC元件,BTA12-600B
《超圖解Arduino互動設計入門》目錄
第一章 認識Arduino
- Arduino 微電腦板
- Arduino 的相關軟體
- Arduino 開發環境安裝
- 上傳「LED 閃爍」範例程式
第二章 認識電子零件與工具
- 電壓、電流與接地
- 微電腦板的電源供應器
- 電阻
- 電容
- 二極體
- 發光二極體(LED)
- 看懂電路圖
- 電子工作必備的量測工具:萬用電錶
- 用麵包板組裝實驗電路
第三章 Arduino 互動程式設計入門
- Arduino 程式設計基礎
- 動手做 3-1 寫一個 LED 閃爍控制程式
- 用「變數」來管理程式碼
- 認識數字系統
- 不變的「常數」
第四章 開關電路與LED跑馬燈效果
- 認識開關
- 讀取數位輸入值
- 改變程式流程的if條件式
- 動手做 4-1 用麵包板組裝開關電路
- 動手做 4-2 跑馬燈範例程式一
- 撰寫迴圈程式
- 動手 做4-3 跑馬燈範例程式二:使用for迴圈
- 認識陣列
- 動手做 4-4 跑馬燈範例程式三:使用陣列變數
- 使用埠口操作指令與位移運算子製作跑馬燈程式
- 動手做 4-5 跑馬燈範例程式四:使用位移運算子
第五章 序列埠通信
- 並列與序列通訊簡介
- 處理文字訊息:認識字元與字串資料類型
- 從Arduino傳遞序列訊息給電腦
- 動手做 5-1 從序列埠監控視窗觀察變數值
- 從 Arduino 接收序列埠資料
- 動手做 5-2 從序列埠控制LED開關
- switch…case 控制結構
第六章 類比信號處理
- 讀取類比值
- 動手做 6-1 從序列埠讀取「類比輸入」值
- 認識光敏電阻與分壓電路
- 動手做 6-2 使用光敏電阻製作小夜燈
- 壓力感測器與彎曲感測器
- 電容式麥克風元件與運算放大器
- 動手做 6-3 自製麥克風聲音放大器(拍手控制開關)
- 動手做 6-4 拍手控制開關改良版
第七章 LED七段顯示器
- 七段顯示器
- 動手做 7-1 連接 LED 七段顯示器與Arduino板
- 使用積體電路簡化電路
- 動手做 7-2 序列連接七段顯示器
第八章 LED矩陣與SPI介面控制
- 建立自訂函數
- 動手做 8-1 建立自訂函數
- 認識變數的有效範圍
- LED矩陣簡介
- 認識SPI介面與MAX7219
- 動手做 8-2 組裝LED矩陣電路
- 顯示單一矩陣圖像
- 動手做 8-3 在矩陣LED上顯示音符圖像
- 動手做 8-4 在序列埠監控視窗輸出矩形排列的星號
- LED矩陣動畫與多維陣列程式設計
- 動手做 8-5 在矩陣 LED 上顯示動態圖像
- LED 矩陣跑馬燈
- 動手做 8-6 LED矩陣逐字捲動效果程式
- 將常數保存在「程式記憶體」裡
第九章 LCD顯示器+溫濕度感測器+超音波感測器
- 認識文字型 LCD 顯示模組
- 動手做 9-1 在 LCD 顯示器上顯示一段文字
- 動手做 9-2 在 LCD 上顯示自訂字元符號
- 動手做 9-3 串列連接 LCD 顯示模組
- 數位溫濕度感測器
- 動手做 9-4 製作數位溫濕度顯示器
- 認識超音波
- 動手做 9-5 使用超音波感測器製作數位量尺
第十章 變頻控制LED燈光和馬達
- 調節電壓變化
- 類比輸出(PWM)指令和預設頻率
- 動手做 10-1 調光器
- 動手做 10-2 隨機數字與燭光效果
- 動手做 10-3 透過序列埠調整燈光亮度
- 動手做 10-4 使用atoi()轉換字串成數值
- 認識直流馬達
- 齒輪箱 / 滑輪組和動力模型玩具
- 認識電晶體元件
- 動手做 10-5 電晶體馬達控制與調速器
- 控制馬達正反轉的H橋式馬達控制電路
- 動手做 10-6 自動迴避障礙物的自走車
第十一章 使用Wii搖桿控制機械手臂
- 認識伺服馬達
- 動手做 11-1 自製機械手臂
- 認識Wii左手把的通訊介面:I2C
- 動手做 11-2 透過I2C介面串連兩個Arduino板
- 動手做 11-3 在I2C介面上傳送整數資料
- 動手做 11-4 讀取Wii左手把的搖桿、按鈕與加速度計值
- 動手做 11-5 使用Wii左手把控制機械手臂
- 改造伺服馬達成連續360°旋轉
第十二章 紅外線遙控與縮時攝影控制器
- 認識紅外線
- 動手做 12-1 偵測人體移動
- 紅外線遙控
- 動手做 12-2 使用IRremote程式庫解析紅外線遙控值
- 動手做 12-3 使用紅外線遙控器控制伺服馬達
- 動手做 12-4 從Arduino發射紅外線遙控電器
- 運用紅外線遙控照相機
- 動手做 12-5 遙控照相機拍攝縮時影片
第十三章 製作光電子琴與MIDI電子鼓
- 發音體和聲音
- 使用tone()函數發出聲音
- 動手做 13-1 演奏一段瑪莉歐旋律
- 使用#define巨集指令替換資料
- 認識反射型與遮光型光電開關
- 動手做13-2 光電子琴製作
- 認識MIDI
- MIDI訊息格式
- 動手做 13-3 透過 Arduino 演奏 MIDI 音樂
- 動手做 13-4 透過「虛擬 MIDI」介面演奏音樂
- 動手做 13-5 製作 MIDI 電子鼓
第十四章 手機藍牙遙控機器人製作
- 電波、頻段和無線傳輸簡介
- 認識藍牙(Bluetooth)
- 動手做 14-1 使用軟體序列埠程式連接Arduino與藍牙模組
- 動手做 14-2 用Android手機藍牙遙控機器人
第十五章 網路與HTML網頁基礎+嵌入式網站伺服器製作
- 認識網路與IP位址
- 網域名稱、URL網址和傳輸協定
- 動手做 15-1 認識網頁與HTML
- 網路的連線標準與封包
- 認識HTTP協定
- 連接乙太(Ethernet)網路卡
- 建立Arduino微型網站伺服器
- 動手做 15-2 建立微型網站伺服器
第十六章 網路家電控制
- 使用Webduino程式庫建立微型網站
- 自訂錯誤訊息網頁與超連結設定
- 動手做 16-1 監控遠端的溫濕度值
- 傳遞資料給網站伺服器
- 動手做 16-2 建立網頁表單
- 認識傳遞資料的 GET / POST 方法和查詢字串
- 動手做 16-3 建立接收 POST 表單資料的自訂命令
- 動手做 16-4 從瀏覽器控制遠端的燈光開關
- 控制家電開關
- 動手做 16-5 使用繼電器控制家電開關
第十七章 Arduino +Flash整合互動應用
- Arduino + Flash = 多元互動媒體
- 動手做 17-1 測試Arduino與Flash連線
- 動手做 17-2 「接電子零件」互動遊戲
- 認識Arduino的String(字串)程式庫
- 動手做 17-3 Flash燈光開關和調光器
- 使用Firmata在Flash和Arduino之間傳遞資料
第十八章 RFID無線識別裝置與問答遊戲製作
- 認識條碼與RFID
- RFID 模組介紹與標籤讀取實驗
- 動手做 18-1 讀取RFID標籤
- 儲存與比對RFID編碼
- 動手做 18-2 使用RFID控制開關
- 動手做 18-3 使用RFID進行Flash問答遊戲
附錄A 認識焊接工具:焊錫、電烙鐵及焊接助手
- 焊接工具
- 動手做 A-1 基礎焊接練習
- 動手做 A-2 焊接鱷魚夾
- 印刷電路板及萬用板
- 動手做 A-3 焊接電路板
- 動手做 A-4 活用USB電源供應器
附錄B 燒錄ATmega微處理器的開機啟動程式(boot loader)
- 動手做 B-1 使用Arduino控制板燒錄ATmega328韌體
- 動手做 B-2 用麵包板組裝Arduino微電腦實驗板
附錄C 改造 3C 小玩意的控制鈕
- 認識光電耦合元件
附錄D 中斷處理與交流電調光器製作
- 輪詢 VS 中斷
- 調整交流電的輸出功率
- 動手做 D-1 交流電調光器電路
附錄E 使用App Inventor開發Android App
- 準備App Inventer開發環境
- 建立第一個App Inventor專案:聲音播放程式
- 藍牙遙控機器人App的程式碼說明
謝謝老師的指導。
義全0422
請教老師:
我實做diy17_1時,
1.flash出現以下訊息
** Auduino **連線到127.0.0.1:5331…
** Auduino **建立連線
a~
a~
2. SerProxy顯示如書中17-11頁
那是表示連線成功,為何可變電阻傳輸的數值,變成亂數?
謝謝老師。
請先透過Arduino的序列埠監控視窗,觀察Arduino傳出的序列值(連線速率請調整成57600bps),如果同樣也是顯示亂數的話,代表可變電阻沒有接好。
另外,也請參閱這一篇留言,處理Windows 8.1/10的問題。
thanks,
jeffrey
老師您好,請問我想自行焊接與燒錄程式作程自製arduino在PCB洞洞板上,那麼驅動Atmega328p-pu的5V電源用什麼方式比較適當?(例如:和調USB線…等)要焊在哪個腳位?
hi jacky:
ATmega328的主電源接腳是7和8,詳細的接線請參閱B-7頁說明,5V電源我主要使用三種方案:
1. 焊接一個USB插座(或A-14頁的排針),連接手機的USB電源供應器。
2. 使用4個1.2V充電電池,如14-19頁所示。
3. 連接5V行動電源。
have fun!
jeffrey
老師您好,我買的是這款(http://goods.ruten.com.tw/item/show?21435056729868)的晶片但不知道為什麼,用B-8的方式上傳會出現已下錯誤:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xff
:
是不是我bootloder沒燒好,還是晶片買錯?我直接把他插在市售arduino板上(也就是把原有的晶片拆下換上這片)也是出現以上錯誤訊息,而且上傳時只有RX燈閃一下而已。如果用B-10方法接電腦會無法辨識裝置更不用說上傳。線在13腳的燈有閃(是不是代表bootloder燒錄成功)但程是就是無法上傳,望請老師解答,感激不盡:)
hi jacky:
應該是bootloader燒錄有問題,請問在燒錄之前,控制板類型你有改成”Arduino Duemilanove”(Arduino軟體功能表的「工具→板子→Arduino Duemilanove」)嗎?
補充說明:自製的Arduino板,控制板類型也相當於”Arduino Duemilanove”。
thanks,
jeffrey
請教老師:
我用了8個光敏電阻來感測
但A0-A5不夠用
1.我把2個光敏電阻的信號線同時連接A1.結果只感應到其中1個.無法2個信號都收到.?
2.光敏電阻的信號可以用digital的腳嗎?
謝謝老師!
請改用其他Arduino控制板,例如,Arduino MEGA 2560具備16個類比輸入腳。或者,加裝類比轉換IC,像是MCP3008(具備8個類比輸入)。
thanks,
jeffrey
__asm__ volatile(“sbi %0,%1\n\t” ::”I” (_SFR_IO_ADDR(PORTC)), “I” (PORTB0) );
請問上面這一行程式是甚麼意思咧
謝謝您
__asm__代表執行組合語言,_SFR_IO_ADDR(PORTC)是AVR處理器的組合語言指令,請自行查詢它的作用。
thanks,
jeffrey
老師您好
想請教一下 , 當我在編譯 diy16_02 時
會出現 ” ‘homePage’ was not declared in this scope ” 的錯誤碼
以及很多類似以下類型的錯誤碼
” C:\Users\user\Documents\Arduino\libraries\Webduino/WebServer.h:198:21: error: ‘prog_uchar’ does not name a type
void writeP(const prog_uchar *data, size_t length);”
因為都使用書籍提供資料 , 並沒有自己編寫的部分
想請問老師這該如何除錯呢?
先謝謝老師指教(鞠躬)
從錯誤訊息看來,是因為homePage變數沒有定義,請先編譯diy16_3_1.ino測試看看。
thanks,
jeffrey
老師您好
嘗試編譯diy16_3_1.ino 也出現類似之前 16_02的訊息…@@”
不知道自己是不是有漏做了什麼重要的步驟呢 ? orz….
(我感覺主程式似乎覺得對自己複製進去的程式庫 .h 有不太能接受的地方 , 我不確定@@”)
錯誤訊息如下連結 :
https://drive.google.com/open?id=1rdw75-qo-a868SNdKP-enGV3FoOgYkV3__u9887u_ZA
能否請老師幫我看一下呢? 感謝
請參閱「《超圖解Arduino互動設計入門》第二版補充說明」,下載Webduino程式庫,我在Arduino 1.8.7版編譯沒問題。
thanks,
jeffrey
16_02可以正常編譯了 , 謝謝老師!!!
================================================
另外嘗試過程中還有幾個小問題想請教老師
Q1
16-10 頁中的 “<a href=”http://swf.com.tw/”>筆者的網站</a>” 超連結網頁程式碼放進內文中時會出現以下錯誤碼:
sketch_dec25a:38:3: error: invalid operands of types ‘const char [129]’ and ‘const char [29]’ to binary ‘operator/’
“”;
^
exit status 1
invalid operands of types ‘const char [129]’ and ‘const char [29]’ to binary ‘operator/’
問題 : 是否需要再加入什麼程式庫在才能使用 指令呢? 還是說我加入的方式錯誤呢?
Q2
嘗試將 動手做6-2 小夜燈的程式寫入其他面板時情況如下 :
>>接Arduino NANO面板 序列阜視窗 完全沒有Ana訊號
>>接Arduino MICRO面板 序列阜視窗 有ANA訊號 , 但是LED燈沒反應(有接12針腳)
問題 : 是否在將程式搬到其他較小塊面板時需要做什麼調整呢?
Q3
若希望 “家裡以外” 的網域連回到家裡的 Arduino面板server 做一些參數設定 , 想請問老師在程式碼中要怎麼設定呢?
(因為我看書上都是以 192.168…. 作為網址範例 , 但實際真正在用會從家裡外面做家裡的狀況的觀測跟控制)
以上幾個問題再麻煩老師有空時幫後進解惑 , 先謝謝老師!
(若問題篇幅太大會有礙版面 , 再請老師提供其他比較FAQ的管道跟頁面 , 感恩 :)) )
1. 假設要把超連結文字加入16-4頁上方的首頁homePage,程式如下:
2. 這兩個板子都跟UNO板採同一系列處理器,也是5V供電,只是多了兩個類比輸入腳;LED接在第13腳,請嘗試接其他類比腳試試看,記得程式碼也要改。
3. 請參閱這一篇回應,以及15-10頁說明。
thanks,
jeffrey