1.1 什麼是 Arduino - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACH018200.pdf · Virtual...

12
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 章進行介紹。

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所示。