Arduino 輕 鬆 上 手 18 堂 課 程 目 錄 Class 1: 認 識 Arduino... Page- 2 Class 2: Arduino 程 式 語 言... Page- 17 Class 3: Arduino 程 式 控 制 元 件... Page- 34 Class 4: LED 元 件 的 運 用... Page- 49 Class 5: 數 位 輸 入 - 按 鍵 的 運 用... Page- 65 Class 6: 數 位 與 類 比... Page- 79 Class 7: 可 變 電 阻 的 運 用... Page- 85 Class 8: 七 段 顯 示 器 的 運 用... Page- 91 Class 9: 蜂 鳴 器 的 運 用... Page- 97 Class 10: 綜 合 練 習 一 : 使 用 按 鍵 玩 音 樂... Page-106 Class 11: 光 敏 電 阻 的 運 用... Page-108 Class 12: 伺 服 馬 達 的 運 用... Page-116 Class 13: 電 晶 體 的 運 用... Page-125 Class 14: 綜 合 練 習 二 : 使 用 光 敏 電 阻 使 馬 達 追 光... Page-133 Class 15: 紅 外 線 距 離 感 測 器... Page-134 Class 16: 薄 膜 電 位 計... Page-139 Class 17: 超 音 波 感 測 器... Page-143 Class 18: 加 速 度 計... Page-149
What s Arduino?
Arduino 的 IC Page- 3
規 格 Arduino UNO 規 格 : Microcontroller ATmega328 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limits) 6-20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 ma DC Current for 3.3V Pin 50 ma Flash Memory 32 KB (ATmega328) SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Clock Speed 16 MHz 腳 位 (I/O) Arduino UNO (I/O) 腳 位 與 功 能 對 照 表 輸 入 (Input) 輸 出 (Output) D0(RX) Digial Digial D1(TX) Digial Digial D2 Digial Digial D3 Digial Digial,Analog D4 Digial Digial D5 Digial Digial,Analog D6 Digial Digial,Analog D7 Digial Digial D8 Digial Digial D9 Digial Digial,Analog D10 Digial Digial,Analog D11 Digial Digial,Analog D12 Digial Digial D13 Digial Digial A0 Analog X A1 Analog X A2 Analog X A3 Analog X A4 Analog X A5 Analog X Page- 4
如 何 安 裝 軟 體 步 驟 一 : 至 官 方 網 站 下 載 軟 體 "Arduino 0022 ( www.arduino.cc/en/main/software ) 依 照 作 業 系 統 選 擇 適 合 的 版 本 選 擇 適 合 自 己 的 作 業 系 統 下 載 步 驟 二 : 將 軟 體 解 壓 縮 到 指 定 資 料 夾 ( 以 下 將 用 WindowsXP 示 範 ) 輸 入 路 徑 按 下 此 圖 將 Arduino 0022 解 壓 縮 到 指 定 資 料 夾 指 定 路 徑 (C\:program files\) Page- 5
步 驟 三 : 在 桌 面 建 立 Arduino 捷 徑 打 開 C:\Program Files\arduino-0022 對 Arduino.exe 按 下 滑 鼠 右 鍵 傳 送 到 桌 面 當 捷 徑 指 定 傳 送 到 桌 面 當 捷 徑 步 驟 四 : 將 Arduino UNO 連 結 上 電 腦 將 Arduino 與 電 腦 連 結 使 用 USB 傳 輸 線 連 結 Arduino UNO 與 電 腦 ( 僅 須 接 上 USB 線 不 需 要 在 額 外 接 上 電 源 ) Page- 6
灌 入 驅 動 程 式 步 驟 五 : 驅 動 Arduino 當 正 確 連 結 上 電 腦 後, 我 們 還 要 灌 驅 動 程 式 讓 電 腦 能 夠 正 確 的 控 制 Arduino, 當 電 腦 偵 測 到 Arduion 時, 請 依 照 下 面 步 驟 灌 入 驅 動 程 式 在 新 增 硬 體 精 靈 選 擇 不 要 連 線 到 網 際 網 路 勾 選 從 清 單 或 特 定 位 置 安 裝 搜 尋 位 置 選 擇 Arduino-0022 資 料 夾 中 的 Drivers 資 料 夾, 或 輸 入 路 徑 C:\Program Files\arduino-0022\drivers 打 開 裝 置 管 理 員, 檢 查 是 否 正 確 連 結 上 Arduino UNO Page- 7
測 試 Arduino 第 一 個 程 式 當 電 腦 可 以 正 確 與 Arduino 連 結, 我 們 就 可 以 嘗 試 在 Arduino 上 撰 寫 程 式 了! 1. 開 啟 桌 面 上 Arduino 0022 進 入 程 式 畫 面 2. 依 照 圖 1-9 輸 入 程 式 ( 請 務 必 注 意 大 小 寫 ) 範 例 程 式 ( 在 電 腦 螢 幕 顯 示 輸 入 字 串 ) Page- 8
將 程 式 燒 錄 進 Arduino 中 Page- 9
燒 錄 完 成 後 點 下 此 紐 即 可 在 螢 幕 上 看 到 回 傳 值 在 電 腦 中 會 顯 示 出 輸 入 的 字 串 Page- 10
程 式 範 例 :HelloArduino.pde 請 依 照 圖 1-11 所 示 修 改 範 例 程 式, 觀 察 有 何 變 化 修 改 後 的 範 例 程 式 Page- 11
Class2. 認 識 Arduino 語 言 C 語 言 的 由 來 : C 語 言 最 早 是 由 丹 尼 斯 里 奇 為 了 在 PDP-11 電 腦 上 運 行 的 UNIX 系 統 所 設 計 出 來 的 程 式 語 言, 第 一 次 發 展 在 1969 年 到 1973 年 之 間 之 所 以 被 稱 為 C 是 因 為 C 語 言 的 很 多 特 性 是 由 一 種 更 早 的 被 稱 為 B 語 言 的 程 式 語 言 中 發 展 而 來 Arduino 的 語 法 : 為 義 大 利 籍 工 程 師 David Mellis 所 設 計, 用 法 與 C 語 言 相 似, 但 在 使 用 上 更 具 有 便 利 性, 十 分 容 易 上 手 Page- 12
Arduino 程 式 語 言 在 開 始 編 寫 Arduino 程 式 前, 我 們 必 須 先 了 解 Arduino 程 式 語 言 的 語 法, 以 下 我 們 將 用 兩 個 章 節 來 學 習 Arduino 的 語 法, 再 利 用 這 些 語 法 來 完 成 我 們 所 要 的 功 能 以 下 將 先 介 紹 該 語 法 的 三 大 要 素 ( 變 數 結 構 函 式 ), 再 分 別 對 其 內 容 做 講 解 變 數 : 為 了 讓 我 們 能 夠 使 程 式 功 能 性 更 加 靈 活, 我 們 必 須 要 使 用 到 變 數 來 儲 存 資 料 或 宣 告 元 件, 因 此 Arduino 語 法 提 供 了 各 種 不 同 的 資 料 型 態 來 讓 我 們 使 用 例 : byte a ; 宣 告 變 數 a 為 1 byte 大 小 結 構 : Arduino 語 法 編 寫 了 許 多 來 讓 我 們 架 構 程 式, 如 : 符 號 控 制 元 件 運 算 子 等 例 : setup(){ }. 設 定 程 式 的 初 始 值 函 式 : 為 了 使 我 們 使 用 上 的 便 利, 內 建 了 許 多 的 函 式 提 供 我 們 使 用, 如 : 數 位 訊 號 輸 出 ( 入 ) 時 間 函 式 三 角 函 數 等 例 : delay(500); 維 持 狀 態 0.5 秒 Page- 13
程 式 架 構 在 我 們 開 始 編 寫 程 式 之 前, 首 先 我 們 必 須 要 了 解 到 Arduino 語 法 中 最 重 要 也 最 基 本 的 兩 個 控 制 結 構 Setup() Loop() 以 下 是 兩 個 控 制 結 構 的 介 紹 初 始 化 Setup(): 在 這 個 函 數 範 圍 內 放 置 初 始 化 Arduino 的 程 式 - 在 主 程 式 開 始 撰 寫 前, 使 Arduino 板 子 裝 置 妥 當 的 指 令 例 : int a=1; Setup(){ pinmode(a,input); } 在 開 始 的 時 候 執 行 一 次, 設 定 pin1 腳 為 輸 入 腳 執 行 Loop() : 在 此 放 置 你 的 Arduino 腳 本 這 部 份 的 程 式 會 一 直 重 複 的 被 執 行, 直 到 Arduino 板 子 被 關 閉 例 : Loop(){ 程 式 開 始 後 會 一 直 執 行 程 式 內 的 內 容.. } Page- 14
符 號 ; ( 分 號 ): Arduino 語 言 每 一 行 程 序 都 是 以 分 號 為 結 尾 這 樣 的 語 法 讓 你 可 以 自 由 地 安 排 代 碼, 你 可 以 將 兩 個 指 令 放 置 在 同 一 行, 只 要 中 間 用 分 號 隔 開 ( 但 這 樣 做 可 能 降 低 程 式 的 可 讀 性 ) 例 : delay(500); {}( 大 括 號 ): 大 括 號 用 來 將 程 式 代 碼 分 成 一 個 又 一 個 的 區 塊, 如 以 下 範 例 所 示, 在 loop() 函 數 的 前 後, 必 須 用 大 括 號 括 起 來 例 : void loop(){ Serial.pritln("cial"); } 註 釋 : 程 式 的 註 釋 就 是 對 代 碼 的 解 釋 和 說 明, 編 寫 註 釋 有 助 於 程 式 設 計 師 ( 或 其 他 人 ) 了 解 代 碼 的 功 能 Arduino 處 理 器 在 對 程 式 碼 進 行 編 譯 時 會 忽 略 註 釋 的 部 份 而 Arduino 語 言 中 的 編 寫 註 釋 有 下 列 範 例 的 兩 種 方 式 例 : // 單 行 註 釋 : 這 整 行 的 文 字 會 被 處 理 器 忽 略 /* 多 行 註 釋 : 在 這 個 範 圍 內 你 可 以 寫 一 整 首 詩 */ Page- 15
資 料 型 態 變 數 用 來 指 定 Arduino 記 憶 體 來 儲 存 資 料, 使 我 們 可 以 透 過 程 式 代 碼 去 不 限 次 數 的 操 作 變 數 的 值, 其 中 變 數 還 區 分 為 全 域 變 數 和 區 域 變 數 兩 種, 前 者 表 示 此 變 數 對 應 到 整 個 程 式, 只 要 程 式 中 使 用 到 該 變 數 都 會 對 應 到 同 一 個 記 憶 體 位 只, 而 後 者 則 僅 在 某 區 段 中 使 用 Arduino 的 語 法 可 以 讓 我 們 十 分 容 易 去 使 用 變 數 來 儲 存 資 料, 但 你 要 宣 告 一 個 變 數 時 必 須 先 定 義 他 的 資 料 型 態, 好 讓 微 處 理 器 知 道 準 備 多 大 的 空 間 以 儲 存 這 個 變 數 值, 下 面 我 們 將 為 大 家 介 紹 各 種 不 同 的 資 料 型 態 boolean ( 布 林 變 數 ) : 布 林 變 數 的 值 只 能 為 真 (true) 或 是 假 (false) char( 字 元 ): 單 一 字 元 例 如 A, Arduino 和 一 般 的 電 腦 做 法 一 樣 會 自 動 將 字 元 儲 存 成 一 個 數 字, 即 使 你 看 到 的 明 明 就 是 一 個 文 字 bit( 位 元 ): 資 料 型 態 中 最 小 的 單 位, 僅 僅 只 占 一 個 記 憶 體 空 間, 儲 存 的 數 字 範 圍 僅 有 0 和 1 兩 種 byte( 位 元 組 ) : 儲 存 的 數 值 範 圍 為 0 到 255 如 同 字 元 一 樣 位 元 組 型 態 的 變 數 只 需 要 用 一 個 位 元 組 (8 位 元 ) 的 記 憶 體 空 間 儲 存 Page- 16