1.1 什麼是 Arduino - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACH018200.pdf · Virtual...
Transcript of 1.1 什麼是 Arduino - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACH018200.pdf · Virtual...
1-2
CHAPTER 1 進入 Arduino的世界
1.1 什麼是 Arduino
什麼是 Arduino?相信很多讀者會有這個疑問,也需要一個全面而準確的答案。
不僅是讀者,很多使用 Arduino的人對這個問題也都難有一個準確的說法,甚至
認為手中的開發板就是 Arduino,其實這並不準確。那麼,Arduino究竟該如何
理解呢?
1.1.1 Arduino不只是電路板
Arduino是一種開放原始碼的電子平臺,該平臺最初主要基於 AVR單晶片的微
控制器 [1]和對應的開發軟體,目前正受到電子發燒友的廣泛關注。自從 2005年
Arduino騰空出世以來,其硬體和開發環境一直不斷地反覆更新。現在 Arduino已經有將近十年的發展歷史,因此市場上稱為 Arduino的電路板已經有各式各樣
的版本了。Arduino開發團隊正式發佈的是 Arduino Uno和 Arduino Mega 2560,
如圖 1-1和圖 1-2所示。
圖 1-1 Arduino Uno R3 圖 1-2 Arduino Mega 2560 R3
提示
圖 1-1和圖 1-2所示的開發板就是所謂的 Arduino I/O印刷電路板(Printed Circuit
Board, PCB)。
[1] 關於 AVR 單晶片的內容會在第 3 章進行介紹。
2-13
2.2 常用的 Arduino 協力廠商軟體介紹
Arduino IDE的軟體下執行。與原廠的文字式編輯環境不同,ArduBlock是以圖
形化積木搭建的方式來設計程式。如同小孩子玩的積木玩具一樣,這種程式設計
方式使得程式設計的視覺化和互動性大大增強,而且降低了程式設計的門檻,讓
沒有程式設計經驗的人也能夠給 Arduino編寫程式,讓更多的人投身到新點子新
創意的實現中來。
上海新車間是中國第一家自造者空間,網址為:http://xinchejian.com/。新車間開
發的 ArduBlock受到了國際同道的好評,尤其在《Make》雜誌於 2011年在紐約
主辦的 Maker Faire上,Arduino的核心開發團隊成員 Massimo特別感謝了上海
新車間自造者開發的圖形化程式設計環境:ArduBlock。ArduBlock的原廠下載
網址為:http://blog.ardublock.com/zh/。
ArduBlock軟體介面如圖 2-17所示。
圖 2-17 ArduBlock軟體介面截圖
2-14
CHAPTER 2 開始 Arduino之旅
2.2.2 Arduino模擬軟體 Virtual breadboard
Virtual breadboard是一款專門的 Arduino模擬軟體,簡稱 VBB,中文名為「虛擬
麵包板」。這款軟體主要藉由單晶片實現嵌入式軟體的模擬和開發環境,它不但
包括了所有 Arduino的範例電路、直接設計和佈置麵包板電路,除了直觀地顯示
出麵包板電路之外,還可實現對程式的模擬調校。VBB還支援 PIC系列晶片、
Netduino以及 Java、VB、C++等主流的程式設計環境。
Virtual breadboard軟體介面如圖 2-18所示。
圖 2-18 VBB軟體截圖
VBB可以模擬 Arduino連接各種電子模組,例如液晶螢幕、伺服機、邏輯數位
電路、各種感測器以及其他的輸入/輸出設備。這些零件都可以直接使用,也可
以組合起來設計出更複雜的電路和模組。
使用 VBB可以更加直觀地瞭解電路設計,能夠在設計出原型後快速實作。而且
虛擬面板具有的可視性和模擬互動效果,可以即時地在軟體上看到 LED、LCD等可視模組的變化,同時可以確保安全性,因為不是實物操作也就不會引起觸電
或者燒毀晶片等問題。另外,用 VBB設計出的作品可以快速地分享和整理,使
學習和使用更加方便簡單。
2-17
2.3 第一次上手 Arduino
圖 2-20 Blink程式
編寫或者打開 Blink程式之後,便可以連接 Arduino開發板,將開發板的 USB接
頭接到電腦上,當系統提示安裝成功,並且開發板的綠色「ON」指示燈亮起時,
就可以上傳 Blink程式了。按一下「上傳」按鈕,再經過短暫的幾秒燒錄之後,
會發現開發板的序列埠指示燈閃爍了數次,上傳成功之後,開發板上的 LED燈
便開始不停閃爍。
之後再來看狀態欄,狀態欄會顯示「下載成功」和「二進位程式大小 1018位元
組」的字樣。我們第一個 Arduino程式就成功下載並執行了。
2.3.2 用 Arduino IDE開發程式流程
寫好程式之後,關閉前需要將檔案儲存到一個目錄中。如果是開發一個專案,編
寫的草稿碼可能不止一個,負責不同部分和模組開發的人員都各自編寫好草稿
碼,最後把這些草稿碼整合起來時就會發現程式變得難以閱讀,並且很多變數名
稱不一致,修改起來非常麻煩,這就需要一個良好規範的開發流程。
2-25
2.5 Arduino 的資料型態
使用。一般來說,變數的資料型態決定了如何將代表這些值的位元儲存到電腦的
記憶體中。在宣告變數時需要指定它的資料型態,所有變數都具有資料型態,以
便判斷要儲存哪一種類型的資料。
2.5.1 常用的資料型態
常用的資料型態有布林類型、字元型、位元組型、整數型、無符號整數型、長整
數型、無符號長整數型、浮點數型、雙精度浮點數型等,本小節會依序介紹這些
資料型態。
1.布林類型
布林值(bollean)是一種邏輯值,其結果只能為真(true)或者假(false)。布
林值可以進行計算,最常用的布林運算子是 AND運算(&&)、OR運算(||)和
NOT運算(!)。表 2-2是 AND、OR和 NOT運算的真值表。
表 2-2 真值表AND
AND運算 A假 A真
B假 假 假
B真 假 真
OR
OR運算 A假 A真
B假 假 真
B真 真 真
NOT
NOT運算 A假 A真
真 假
如表 2-2所示的真值表中,對於 AND運算,只有當 A和 B均為真時,運算結果
為真,否則結果為假;對於 OR運算,只有當 A和 B均為假時,運算結果為假,
2-35
2.8 Arduino 的條件判斷敘述
if的語法如下:
if(delayTime<100) { delayTime=1000; }
如果 if後面的條件滿足,就執行 { }內的敘述。
if中表示判斷的敘述會用到的關係運算子如表 2-3所示。
表 2-3 關係運算子
運算子 含義 例子 結果
< 小於1<2 真
2<1 假
> 大於2>1 真
1>1 假
<= 小於等於2<=2 真
3<=2 假
>= 大於等於3>=3 真
2>=3 假
== 等於2==2 真
1==2 假
!= 不等於1!=2 真
2!=2 假
【範例 4】使用 if製作改變閃爍頻率的閃燈程式
先前在介紹變數時,用了一個閃燈的例子來說明,最後加了一行程式碼來使小燈
閃爍的頻率愈來愈低,即小燈愈閃愈慢。可是如果希望小燈愈閃愈快,並且快到
一定的程度又重新回到初始的閃燈頻率,應該怎麼辦呢?請看以下程式。
2-36
CHAPTER 2 開始 Arduino之旅
程式 2-7:改變閃爍頻率的閃燈程式
int ledPin = 13;int delayTime = 1000;
void setup(){ pinMode(ledPin,OUTPUT);}
void loop(){ digitalWrite(ledPin,HIGH); //點亮小燈 delay(delayTime); //延遲 digitalWrite(ledPin,LOW); //熄滅小燈 delay(delayTime); delayTime = delayTime-100; //每次將延遲時間減少 0.1秒 if(delayTime<100) { delayTime=1000; //當延遲小於 0.1秒時,重設為 1秒 }}
在這個程式中用到了 if判斷式,程式每次執行到 if敘述時都會進行檢查,在
delayTime>=100時,大括弧裡面的 delayTime=1000是不執行的。程式進入下一
次迴圈。當 delayTime<100,delayTime=1000被執行,delayTime的值改變成為
1000,並進入到下一次迴圈中。
【範例 5】使用 if...else製作改變閃爍頻率的閃燈程式
if敘述有另一種形式也很常用,即 if...else敘述。這種敘述語義為:在條件成立
時執行 if敘述中括弧的內容,不成立時執行 else敘述中的內容。
使用 else敘述來修改閃燈程式,如程式 2-8所示。
4-8
CHAPTER 4 Arduino範例演練
把上面程式碼編譯後下載到開發板中,溫度顯示器就能工作了,之後會出現如圖
4-6所示的效果,LCD顯示器顯示當前溫度為 20.8°C。
圖 4-6 LCD溫度顯示器效果圖
這樣一個簡單的 LCD液晶溫度顯示器就做好了。藉由本小節的學習,征服了更
複雜的程式碼,是不是很有成就感呢?當讀到複雜的程式碼時,多數人會感到吃
力,程式碼中一些函式庫也許會花點時間才能理解。尤其是沒有註解而且用了很
多「神奇數」的程式碼,這種程式可讀性不高,會讓閱讀的人頭疼。因此在開發
新的功能時,必須很清楚開發語言和環境,養成良好的程式風格,這樣才能有效
率地開發專案。下一節對 Arduino語言進行更深入的探究。
4.2 再探 Arduino 語言
我們在上一節接觸了很多陌生的函式,要瞭解它們的功能需要親自去查看函式庫
檔、瞭解函式原型,同時在實驗中去驗證。本節會繼續接觸一些用在程式中的函
式,也會接觸一位功能強大、聞名而且常見的朋友——中斷。
4.2.1 位元操作
由於現代機器只能識別二進位語言,因此位元操作在程式設計語言中非常常見。
位元是二進位數字的最小單位,即 0或者 1。英文中一般用「bit(binary digit)」
表示位元。而為了方便表示和計算,在十進位的基礎上,人們發明了基於二進位
的其他表示方法,如八進位、十六進位等。
4-23
4.4 Arduino 與感測器的互動
當然,還有其他的分類方法,在這裡就不做贅述。在選用感測器時要根據具體的
測量目的、測量物件以及測量環境等來選擇合適的感測器。
在選用感測器時除了以上要求,還要考慮感測器的精度、靈敏度、穩定性、線性
範圍、頻率響應特性等因素。
4.4.2 Arduino如何使用感測器
在一個包含感測器的 Arduino設計中,感測器則作為設計的前端,收集資訊並將
收集到的訊息轉換成電訊號,而 Arduino通常是負責處理感測器收集到的資料和
控制相關的執行元件。簡化後的基本工作流程如圖 4-12所示。
執行設備 感測器
Arduino
採集資料
被檢測的對象控制命令
轉換後信息
圖 4-12 Arduino藉由感測器進行資料取得的基本流程
在一些複雜的系統中可能會涉及到很多的感測器和執行設備,其基本的工作原理
與此是相同的,只不過在整個 Arduino設計中要考慮到各個感測器以及其他設備
之間的協調性,還有整個系統的穩定性問題。
在包含有感測器的 Arduino設計中特別要注意以下三點:
(1) 感測器只具備收集資料,轉換資訊類型的作用,不能作為執行設備。也就是
說感測器只負責向 Arduino傳送資料,而不能接收 Arduino發給它的任何命
令。
(2) 通常一個感測器有兩個以上的腳位,一定要事先弄清楚感測器的連接方法,
分清楚哪個腳位連結正極,哪個腳位連結負極,哪個腳位是訊號輸出。
(3) 在 Arduino與感測器進行連接時,數位式感測器接到 Arduino的數位腳位, 類比式感測器接到 Arduino的類比腳位。有時也可以將數位感測器連結到
4-50
CHAPTER 4 Arduino範例演練
接下來的例子是 Arduino藉由 SIM900A發送一則簡訊給指定的手機。
【範例 5】行動應用:使用 Arduino發送手機簡訊
硬體準備:
Arduino UNO,SIM900A擴充板,跳線若干。
進行連線:
Arduino開發板與 SIM900A模組的連線方式與其他無線模組類似,該模組有
4個接線腳位,分別是電源 5V、GND和序列埠通訊收發端 TX、RX。連接
時仍然是電源 5V和 GND連接 Arduino的電源 5V腳位和 GND腳位,RX和
TX分別連接序列埠腳位 0和 1,如圖 4-18所示。
圖 4-18 Arduino UNO和 GPRS模組連接
編寫程式:
連線完成後,就可以打開 IDE編寫程式,程式碼如下。
程式 4-12:使用 SIM900A發送簡訊
#define MAXCHAR 81 //定義陣列長度char array[MAXCHAR]; //定義陣列int temp=0; //用於清理暫存的臨時變數int g_timeout = 0; //防止程式逾時char ATE0[]="ATE0";
5-5
5.1 用 Arduino 打造智慧家庭
(5) 具有感測封鎖時間(預設封鎖時間為 2.5秒):感測模組在每一次感測輸出後
(高電位變成低電位),可以緊跟著設定一個封鎖時間區間,在此區間內感
測器不會接受任何感測訊號。此功能可以當作「感測輸出時間」和「封鎖時
間」兩者的間隔工作,可應用於間隔探測產品;同時此功能可有效降低負載
切換過程中產生的各種干擾(此時間可設定在零點幾秒到數十秒鐘內)。
(6) 工作電壓範圍:預設工作電壓為直流 4.5V ~ 20V。
當每個階段都具體實作並分析好之後,就可以設計示意圖了,感測器如何部署、
具體功能和效果設計都可以在示意圖中體現出來,如圖 5-2所示。
Web
Internet
()
21 Arduino
GPRS
圖 5-2 Arduino智慧家庭系統示意圖
之後,就可以著手準備硬體來正式開發和調校。
5.1.3 硬體準備
要開發一個專案,硬體和軟體當然不可少。挑選硬體要以穩定性好,材料要廉價
且容易使用為佳。本專案需要準備的硬體大致如下:
6-2
CHAPTER 6 Arduino與媒體互動製作
6.1 Arduino 與 Processing
如果想像放電影一樣描述無形的事物,這時可以利用 Processing來幫忙,它能以
圖形的方式告訴您剛才發生了哪些過程。
6.1.1 什麼是 Processing
Processing是一種具有革命性、前瞻性的新興電腦語言,它以 Java語言為基礎,
並且做了擴展和延伸讓程式設計更為簡單、易操作。它能執行在Windows、
Linux、Mac OS等作業系統上,是數位藝術家們創造奇妙數位畫面和影像的絕佳
平臺。Processing的標識如圖 6-1所示。
Processing將電腦技術和藝術創作完美結合,它將程式碼轉換成千變萬化的圖
像,在這個過程中,程式碼彷彿也成為一件藝術品。Processing也是一個開放原
始碼平臺,加上與 Arduino等開放原始碼平臺相互結合,能夠創造出許多生動有
趣的互動應用。圖 6-2是一個 Processing的展示作品。
圖 6-1 Processing 圖 6-2 Processing作品
6.1.2 Arduino與 processing互動製作
Processing語言開發環境怎麼安裝呢?首先,在 Processing的官網下載對應版本
的 Processing,下載位址如下:https://www.processing.org/download/?processing。
安裝完畢後打開 Processing介面如圖 6-3所示。