我的 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.
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 )

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

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

我的 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
[STEM] 如何選購 LED
為什麼安裝新版本的 mBlock 程式之後要重新安裝 mBlock extension?
[STEM] 使用 sensor module 和電子零件的分別
mBlock / Arduino IDE com port 的問題
STEM - 自己造個 Arduino 教學 / 展示平台
修理損壞的 Arduino NANO ( 更換 USB diode )
ctleung張先生,男性,肖龍。
職業:I.T. Consultant
簡介:不好好讀書;七尺差五寸,手長過膝,雙耳垂肩;性寬和,寡言語,喜怒不形於色。據說少時曾斬白蛇於鳳凰山下……

This entry was posted in STEM and tagged , , , , , . Bookmark the permalink.

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

  1. Louis Chan says:

    感謝你的詳細介紹,藉著你的網誌讓我走上Arduino 之路,開始摸索如何使用此板做一些之前想過卻做不到的模型操控工作。

    • C.T. Leung says:

      在眾多的 microcontroller 之中,Arduino 算是最容易用,網上的教學亦是最多。Microbit 還新,要過多幾年睇下佢發展得好唔好,但至少 Microbit 那個接駁介面我覺得非常唔好用。

      做模型的話,我更建議你用 NANO 主板。NANO 主板比起 UNO 小巧很多,但 CPU 一樣,針腳的數目也差不多。

      NANO 可以直接插在麵包板(halfsize 400 孔最好)上使用,也可以加一片「NANO多用扩展板」,完成後的作品比起用 UNO 可以細好多。

Leave a Reply

Your email address will not be published.