有 了 Arduino UNO,我 們 要 如 何 開 始 學 習 寫 程 式 去 控 制 其 他 硬 件 呢 ?首 先 ,我 們 要 安 裝 好 那 個 開 發 環 境 ( IDE – Integrated Development Environment )。Arduino 提 供 了 免 費 而 且 是 open source 的 Arduino IDE,有 齊 Windows,Mac OS 和 Linux 的 版 本 。( 這 一 系 列 教 學 會 使 用 mBlock / Scratch 作 為 開 發 環 境 ,為 免 混 亂 ,就 不 列 出 Arduino IDE 的 下 載 連 結 了 。 )
所 謂 的 Arduino IDE 其 實 就 是 一 套 軟 件 ,跟 其 他 Application,例 如 Word 呀 ,Photoshop 呀 ,沒 有 什 麼 分 別 。每 次 你 想 要 寫 Arduino Program,就 要 打 開 Arduino IDE。
不 過 ,Arduino IDE 要 使 用 官 方 的 Arduino Programming Language 來 編 寫 程 式 ,對 於 小 學 生 和 初 中 生 來 說 ,可 能 有 點 太 難 。所 以 ,在 這 一 系 列 的 文 章 中 ,還 是 會 用 Scratch 語 言 比 較 實 際 一 點 。
Scratch 本 身 是 open source 的 ,Arduino IDE 亦 同 樣 的 開 源 的 ,有 志 之 士 當 然 就 可 以 把 兩 者 整 合 ,創 造 出 可 以 利 用 Scratch Programming Language 來 控 制 Arduino 的 開 發 環 境 。Internet 上 同 類 的 計 劃 不 止 一 個 兩 個 ,可 見 STEM 還 是 很 有 市 場 的 。
1. S4A - S4A is a Scratch modification that allows for simple programming of the Arduino open source hardware platform.
2. s2a_fm - s2a_fm is a Scratch/Snap! hardware extension written in Python allowing Scratch or Snap! and an Arduino micro-controller to communicate seamlessly.
3. mBlock - mBlock is an open source branch of Scratch that can work with Arduino based robots.
—– 下 面 的 非 是 Scratch,但 一 樣 是 用 圖 形 介 面 來 寫 program —–
4. Ardublock - A Graphical Programming Language for Arduino.
5. BlocklyDuino - BlocklyDuino is a web-based visual programming editor for arduino.
6. Mixly – a free, open source, graphical visual programming language software based on Arduino, which will make programming as easy as building blocks. 「北 京 师 范 大 学 米 思 齐 团 队 」推 出 的 ,雖 然 官 網 不 咋 地 ,但 mixly 程 式 十 分 完 整 。有 serial monitor;支 持 多 種 變 數 類 型 ;支 持 Array ( list );有 完 善 的 function,可 以 傳 回 數 據 ;可 以 使 用 Arduino 的 中 斷 ( interrupt ),比 mBlock 強 大 多 了 。
經 過 評 估 和 測 試 ,個 人 覺 得 是 mBlock 最 好 用 和 最 易 用 ,其 可 擴 充 性 亦 值 得 一 讚 。mBlock 其 實 是 一 家 叫 做 Makeblock 的 公 司 開 發 的 ,該 公 司 一 向 生 產 以 Arduino board 來 控 制 的 小 車 和 機 械 人 ,這 些 小 車 和 機 械 人 都 是 教 學 用 途 的 。為 了 解 低 programming 這 方 面 的 門 檻 ,所 以 該 公 司 開 發 了 可 以 用 Scratch 來 控 制 機 械 人 的 開 發 環 境 mBlock。
Makeblock 的 機 械 人 在 香 港 的 推 廣 也 做 得 不 錯 ,有 很 多 學 校 都 有 使 用 。mBlock 軟 件 雖 然 是 商 業 運 作 之 下 的 產 物 ,但 因 為 其 本 身 是 open source 的 ,所 以 亦 沒 有 什 麼 好 擔 心 的 。
要 使 用 Scratch 來 控 制 Arduino UNO,我 們 首 先 要 在 電 腦 上 下 載 和 安 裝 好 mBlock。
完 成 安 裝 之 後 ,我 們 第 一 次 打 開 mBlock 軟 件 。這 時 候 ,我 們 要 先 安 裝 好 Arduino 的 USB driver。Arduino 是 通 過 USB port 插 入 電 腦 的 ,所 以 第 一 次 插 入 電 腦 之 前 ,我 們 要 先 裝 好 Driver。 ( Connect >> Install Arduino Driver )
然 後 ,我 們 才 用 USB 線 把 Arduino UNO board 插 入 電 腦 的 USB 接 口 。由 插 入 到 安 裝 好 driver,是 要 等 一 段 時 間 的 ,大 家 要 耐 心 一 點 。
最 後 ,我 們 要 在 mBlock 開 發 環 境 裡 面 ,設 定 好 Arduino board 的 型 號 ( Boards > Arduino Uno ),以 及 其 所 連 接 的 接 口 ( Connect > Serial Port > XXXX )。
大 家 要 留 意 ,因 應 不 同 的 Arduino 型 號 和 不 同 的 生 產 商 ,大 家 所 見 到 的 Driver name 不 一 定 跟 我 一 樣 。而 連 接 的 Serial Port,也 會 是 各 不 相 同 。大 家 要 按 自 己 的 實 際 情 況 選 擇 。
mBlock 安 裝 和 設 定 好 了 ,我 們 就 可 以 開 始 建 立 我 們 的 外 置 電 路 了 。畢 竟 ,我 們 是 要 學 習 physical computing,而 不 是 純 粹 的 學 programming。
在 這 個 第 一 課 ,我 們 先 來 學 習 一 下 如 何 點 亮 一 顆 LED,以 及 其 相 關 的 一 些 簡 單 的 物 理 知 識 。( LED + 電 阻 + 電 路 + Ohm’s Law 等 等 ,這 些 東 西 在 學 校 裡 應 該 請 物 理 科 老 師 來 講 解 ,但 我 自 己 家 裡 就 沒 有 額 外 的 資 源 了 ,嘿 嘿 )
LED 的 名 是 Light-emitting diode,中 文 就 是 「發 光 二 極 管 」,是 為 二 極 管 的 一 種 。二 極 管 只 容 許 電 流 從 單 方 向 通 過 。「發 光 二 極 管 」有 所 謂 的 forwarding voltage,電 壓 要 達 到 forwarding voltage,電 流 才 會 開 始 通 過 ,繼 而 令 到 LED 發 光 。電 流 越 強 ,LED 便 會 越 光 。但 LED 本 身 是 沒 什 麼 電 阻 的 ,如 果 任 由 電 流 無 限 制 地 通 過 ,電 流 過 大 ,LED 便 會 燒 毀 。
所 以 ,在 使 用 LED 的 時 候 ,我 們 都 會 在 電 路 上 加 入 一 粒 電 阻 ,以 限 制 電 流 的 大 小 。這 樣 的 電 阻 ,便 會 叫 作 current limiting resistor。
一 般 常 見 電 阻 的 電 阻 值 ,會 用 特 定 的 color code 寫 明 在 電 阻 上 。我 們 其 實 也 不 用 死 記 或 者 次 次 去 查 表 ,網 上 就 有 許 多 Resistor color code Calculator 去 幫 助 我 們 找 出 電 阻 值 和 誤 差 。
那 究 竟 電 阻 要 多 大 呢 ?這 要 按 你 電 源 的 電 壓 ,和 你 使 用 的 LED 的 參 數 來 決 定 。這 時 候 ,歐 姆 定 律 ( Ohm’s law ) 就 很 幫 得 手 了 。
假 設 我 使 用 的 10mm 圓 頭 紅 光 LED 的 forwarding voltage 是 2.0v,maximum current 是 20mA,而 Arduino Digital Output Pin 的 電 壓 是 5V,那 根 據 歐 姆 定 律 ,計 算 所 得 的 電 阻 值 就 是 150Ω ( 5v – 2v = 0.02A x R )。當 然 ,我 們 都 是 懶 人 ,所 以 Internet 亦 有 許 多 LED resistor calculator 來 幫 助 我 們 自 動 計 算 的 。
好 ,Arduino UNO 有 了 ,LED 有 了 ,電 阻 也 有 了 ,要 如 何 去 連 接 我 們 的 電 路 呢 ?你 大 概 會 第 一 時 間 把 「焫 雞 」取 出 來 吧 ?但 其 實 世 界 上 有 更 好 的 方 法 的 ,那 就 是 建 立 prototype 時 常 用 的 breadboard ( 麵 包 板 )。
Breadboard,又 叫 solderless breadboard,顧 名 思 義 ,就 是 不 用 焊 接 也 可 以 建 立 電 路 的 東 西 ( 請 參 閱 《麵 包 板 的 認 識 與 使 用 》)。不 焊 接 ,也 就 意 味 著 你 可 以 隨 時 拆 除 ,又 底 者 改 動 電 路 。市 面 的 許 多 電 子 零 件 ,例 如 LED、蜂 鳴 器 、電 容 、顯 示 器 、開 關 、接 線 、… ,都 是 可 以 直 接 插 在 麵 包 板 上 面 用 的 。
好 了 ,讓 我 們 先 建 立 起 這 一 次 要 使 用 的 電 路 吧 。我 們 把 LED 的 正 極 ( 長 腳 ) 連 到 Arduino UNO 的 pin 13,而 LED 的 負 極 ( 短 腳 ) 先 接 上 一 個 電 阻 ,再 接 到 Arduino 的 GND pin ( Ground )。
然 後 我 們 就 可 以 回 到 mBlock 去 寫 我 們 的 第 一 個 Arduino 程 式 了 。首 先 ,我 們 要 變 更 為 Arduino Mode ( Edit > Arduino mode )。
然 後 建 立 好 上 面 的 blocks。所 有 與 Arduino 相 關 的 「積 木 」,都 在 Robots 那 個 分 類 裡 面 。上 面 的 第 一 塊 積 木 ( Arduino Program ),就 是 Arduino 程 序 的 開 始 ,是 每 一 個 Arduino program 都 要 有 的 。forever 就 是 無 限 循 環 。wait x secs 就 是 等 待 x 秒 的 意 思 。
上 面 的 重 點 就 是 ,set digital pin 13 output as HIGH / LOW 這 兩 行 。顧 名 思 義 ,我 們 先 把 pin 13 的 output 設 定 為 HIGH,這 樣 就 會 在 pin 13 輸 出 一 個 5V 的 電 壓 ,於 是 電 流 流 動 ,LED 就 會 發 光 。等 待 1 秒 之 後 ,再 把 pin 13 設 定 成 LOW,沒 有 電 壓 ,電 流 不 再 流 動 ,LED 就 熄 滅 。
完 成 上 面 的 程 序 之 後 ,我 們 來 按 一 下 Upload to Arduino。
成 功 的 話 ,你 會 見 到 Upload Finish。
這 時 候 ,你 就 應 該 見 得 到 插 在 pin 13 的 LED 在 閃 動 了 。因 為 我 們 在 程 序 裡 加 入 了 forever block,所 以 LED 一 直 閃 動 。
我 們 按 下 Upload to Arduino 按 鈕 的 時 候 ,其 實 就 已 經 把 我 們 的 程 序 儲 存 到 Arduino 的 flash memory 裡 面 ,所 以 ,即 使 斷 開 電 腦 的 USB 連 線 ,程 序 依 然 會 存 在 於 Arduion 裡 面 。
如 果 你 有 Arduino 的 外 接 電 源 ,這 時 候 你 可 以 拔 掉 USB 線 ,再 接 上 外 置 電 源 ,LED 燈 依 然 是 會 不 停 閃 亮 的 。
終 於 完 成 了 第 一 課 ,你 現 在 是 不 是 很 有 滿 足 感 呢 ?然 後 你 可 以 試 試 改 變 程 式 等 待 的 時 間 ,以 控 制 不 同 的 閃 爍 效 果 。( 功 課 :1. 快 閃 ;2. 慢 閃 ;3. 每 閃 10 次 停 5 秒 ;4. 做 出 SOS 的 訊 號 。 )
上 面 所 有 的 電 子 零 件 ,包 括 麵 包 板 、LED、電 阻 、接 線 等 等 等 等 ,除 了 上 淘 寶 ,其 實 在 鴨 寮 街 的 幾 間 電 子 零 件 鋪 通 通 都 買 得 到 。但 在 鴨 街 買 當 然 比 在 淘 寶 買 貴 一 點 ( 其 實 當 然 不 止 貴 一 點 點 ,呵 呵 )。
除 了 散 買 ,淘 寶 上 面 亦 有 許 多 「Arduino 入 門 學 習 套 件 」,一 次 過 有 齊 晒 要 玩 既 野 ,抵 食 夾 大 件 。它 們 大 都 有 不 同 的 配 件 內 容 ,豐 儉 由 人 。我 自 己 第 一 次 亦 是 買 了 這 樣 的 一 個 套 件 的 。
我 也 淘 了 「透 明 外 殼 」和 「實 驗 平 台 」給 小 朋 友 ,以 增 加 他 們 ( 和 我 自 己 ) 的 學 習 興 趣 。哈 哈 哈 。
感謝你的詳細介紹,藉著你的網誌讓我走上Arduino 之路,開始摸索如何使用此板做一些之前想過卻做不到的模型操控工作。
在眾多的 microcontroller 之中,Arduino 算是最容易用,網上的教學亦是最多。Microbit 還新,要過多幾年睇下佢發展得好唔好,但至少 Microbit 那個接駁介面我覺得非常唔好用。
做模型的話,我更建議你用 NANO 主板。NANO 主板比起 UNO 小巧很多,但 CPU 一樣,針腳的數目也差不多。
NANO 可以直接插在麵包板(halfsize 400 孔最好)上使用,也可以加一片「NANO多用扩展板」,完成後的作品比起用 UNO 可以細好多。