我的 Stem Project (二) 使用 Scratch 來控制 Arduino UNO

有 了 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.

經 過 評 估 和 測 試 ,個 人 覺 得 是 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 )

Install driver for Arduino

Install driver for Arduino

然 後 ,我 們 才 用 USB 線 把 Arduino UNO board 插 入 電 腦 的 USB 接 口 。由 插 入 到 安 裝 好 driver,是 要 等 一 段 時 間 的 ,大 家 要 耐 心 一 點 。

Install USB driver

USB driver installed ( CH340 )

最 後 ,我 們 要 在 mBlock 開 發 環 境 裡 面 ,設 定 好 Arduino board 的 型 號 ( Boards > Arduino Uno ),以 及 其 所 連 接 的 接 口 ( Connect > Serial Port > XXXX )。

Select Arduino Board Model

Select the correct Arduino Board Model

Select COM port

Select the correct Serial Port

大 家 要 留 意 ,因 應 不 同 的 Arduino 型 號 和 不 同 的 生 產 商 ,大 家 所 見 到 的 Driver name 不 一 定 跟 我 一 樣 。而 連 接 的 Serial Port,也 會 是 各 不 相 同 。大 家 要 按 自 己 的 實 際 情 況 選 擇 。

Arduino UNO Driver

USB driver installed ( Arduino UNO )

mBlock 安 裝 和 設 定 好 了 ,我 們 就 可 以 開 始 建 立 我 們 的 外 置 電 路 了 。畢 竟 ,我 們 是 要 學 習 physical computing,而 不 是 純 粹 的 學 programming。

在 這 個 第 一 課 ,我 們 先 來 學 習 一 下 如 何 點 亮 一 顆 LED,以 及 其 相 關 的 一 些 簡 單 的 物 理 知 識 。( LED + 電 阻 + 電 路 + Ohm’s Law 等 等 ,這 些 東 西 在 學 校 裡 應 該 請 物 理 科 老 師 來 講 解 ,但 我 自 己 家 裡 就 沒 有 額 外 的 資 源 了 ,嘿 嘿 )

LED 的 名 是 Light-emitting diode,中 文 就 是 「發 光 二 極 管 」,是 為 二 極 管 的 一 種 。二 極 管 只 容 許 電 流 從 單 方 向 通 過 。「發 光 二 極 管 」有 所 謂 的 forwarding voltage,電 壓 要 達 到 forwarding voltage,電 流 才 會 開 始 通 過 ,繼 而 令 到 LED 發 光 。電 流 越 強 ,LED 便 會 越 光 。但 LED 本 身 是 沒 什 麼 電 阻 的 ,如 果 任 由 電 流 無 限 制 地 通 過 ,電 流 過 大 ,LED 便 會 燒 毀 。

Current Limiting Resistor

Current Limiting Resistor

所 以 ,在 使 用 LED 的 時 候 ,我 們 都 會 在 電 路 上 加 入 一 粒 電 阻 ,以 限 制 電 流 的 大 小 。這 樣 的 電 阻 ,便 會 叫 作 current limiting resistor

一 般 常 見 電 阻 的 電 阻 值 ,會 用 特 定 的  color code 寫 明 在 電 阻 上 。我 們 其 實 也 不 用 死 記 或 者 次 次 去 查 表 ,網 上 就 有 許 多 Resistor color code Calculator 去 幫 助 我 們 找 出 電 阻 值 和 誤 差 。

Simple LED circut

Simple LED circut

那 究 竟 電 阻 要 多 大 呢 ?這 要 按 你 電 源 的 電 壓 ,和 你 使 用 的 LED 的 參 數 來 決 定 。這 時 候 ,歐 姆 定 律 ( Ohm’s law ) 就 很 幫 得 手 了 。

Ohm's Law

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蜂 鳴 器 電 容 顯 示 器 開 關 接 線 、… ,都 是 可 以 直 接 插 在 麵 包 板 上 面 用 的 。

Circuit

Circuit

好 了 ,讓 我 們 先 建 立 起 這 一 次 要 使 用 的 電 路 吧 。我 們 把 LED 的 正 極 ( 長 腳 ) 連 到 Arduino UNO 的 pin 13,而 LED 的 負 極 ( 短 腳 ) 先 接 上 一 個 電 阻 ,再 接 到 Arduino 的 GND pin ( Ground )。

Arduino Mode

Arduino Mode

然 後 我 們 就 可 以 回 到 mBlock 去 寫 我 們 的 第 一 個 Arduino 程 式 了 。首 先 ,我 們 要 變 更 為 Arduino Mode ( Edit > Arduino mode )。

Flash LED Program

Flash LED Program

然 後 建 立 好 上 面 的 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 to Arduino

Upload to Arduino

成 功 的 話 ,你 會 見 到 Upload Finish。

Upload Finish.

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 入 門 學 習 套 件 」,一 次 過 有 齊 晒 要 玩 既 野 ,抵 食 夾 大 件 。它 們 大 都 有 不 同 的 配 件 內 容 ,豐 儉 由 人 。我 自 己 第 一 次 亦 是 買 了 這 樣 的 一 個 套 件 的 。

我 也 淘 了 「透 明 外 殼 」和 「實 驗 平 台 」給 小 朋 友 ,以 增 加 他 們 ( 和 我 自 己 ) 的 學 習 興 趣 。哈 哈 哈 。

ctleung張 先 生 ,男 性 ,肖 龍 。
職 業 :I.T. Consultant
簡 介 :不 好 好 讀 書 ;七 尺 差 五 寸 ,手 長 過 膝 ,雙 耳 垂 肩 ;性 寬 和 ,寡 言 語 ,喜 怒 不 形 於 色 。據 說 少 時 曾 斬 白 蛇 於 鳳 凰 山 下 ……

我 的 STEM Project 系 列

我 的 Stem Project (一 ) Raspberry Pi 3 vs Arduino UNO
我 的 Stem Project (二 ) 使 用 Scratch 來 控 制 Arduino UNO
我 的 Stem Project (三 ) 使 用 Push Button 來 做 Input
我 的 Stem Project (四 ) Push Button 進 階 一 點 的 用 法
如 何 購 買 Arduino ?( STEM project )
我 的 Stem Project (五 ) 考 反 應 小 遊 戲
我 的 Stem Project (六 ) 用 Arduino 控 制 7 segment display (基 礎 篇 )
我 的 Stem Project (七 ) 用 Arduino 控 制 7 segment display ( 進 階 篇 )
我 的 Stem Project (八 ) 用 Arduino 控 制 7 segment display ( 簡 化 篇 )
我 的 Stem Project (九 ) 用 Arduino 控 制 Buzzer 唱 歌
我 的 Stem Project (十 ) Arduino Multi-function Shield using Scratch (1)
自 己 動 手 做 一 個 Arduino Shield ( STEM project )
我 的 Stem Project (十 一 ) Arduino Multi-function Shield using Scratch (2)
我 的 Stem Project (十 二 ) Arduino Music Light Show
Arduino 的 電 池 ( STEM project )
我 的 Stem Project (十 三 ) Arduino Multi-function Shield using Scratch (3)
自 己 寫 個 mBlock extension (一 ) TM1637 4-digit-display
自 己 寫 個 mBlock extension (二 ) 1602 I2C LCD Module
自 己 寫 個 mBlock extension (三 ) 2-digit-display using 74HC595
This entry was posted in STEM and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *