我的 Stem Project (九) 用 Arduino 控制 Buzzer 唱歌

之 前 幾 課 講 了 有 點 複 雜 的 七 段 顯 示 管 ,今 堂 回 歸 到 簡 單 一 點 的 電 子 零 件 ,Buzzer ( 蜂 鳴 器 )。

Buzzer,又 叫 Piezo Buzzer,Piezo Speaker,其 全 名 是  Piezoelectric speaker。蜂 鳴 器 是 通 過 壓 電 效 應 ( piezoelectric effect ) 來 發 聲 的 裝 置 。蜂 鳴 器 內 的 電 晶 體 ,會 隨 著 所 施 加 的 電 場 而 變 型 ,而 通 過 施 加 特 定 頻 率 的 電 流 ,就 可 令 其 發 聲 。

Lesson 09 - Circuit

Lesson 09 – Circuit

Buzzer 有 兩 大 類 ,有 源 蜂 鳴 器 ( Active ) 和 無 源 蜂 鳴 器 ( Passive )。有 源 蜂 鳴 器 只 有 固 定 的 音 高 ,我 們 只 能 控 制 它 beep 定 唔 beep。而 無 源 蜂 鳴 器 ,就 可 以 通 過 輸 出 電 流 的 頻 率 來 令 到 它 發 出 不 同 的 音 高 ,來 令 到 它 播 放 音 樂 。這 一 課 我 們 用 的 是 無 源 蜂 鳴 器 ,大 家 不 要 買 錯 了 。

Passive Buzzer 的 接 法 相 當 簡 單 ,把 負 極 接 地 ,把 正 極 接 到 任 何 一 個 Arduino UNO 的 Digital Pin。不 過 ,其 實 Passive Buzzer 是 「無 極 性 」的 ,就 是 無 分 正 負 ,反 轉 接 亦 是 可 以 的 。

Lesson 09 - Scratch 01

Lesson 09 – Scratch 01

回 到 mBlock,mBlock 本 身 就 已 經 內 建 了 play tone pin X1 on notes X2 beat X3 block 來 播 放 聲 音 。這 個 block 的 三 個 參 數 ,第 一 個 就 是 指 定 pin number,第 二 個 是 音 高 ,第 三 個 就 是 節 拍 。

在 第 一 個 例 子 中 ,我 們 設 定 一 個 variable buzzerPin 來 設 定 用 了 那 一 個 Arduino Pin,因 為 製 作 音 樂 歌 曲 ,通 常 會 牽 涉 到 大 量 的 「音 符 」,所 以 完 成 之 後 萬 一 想 把 buzzer 接 到 另 一 個 pin,就 會 很 大 工 程 了 。

Upload to Arduino 之 後 ,就 會 聽 到 類 似 「響 鬧 」的 效 果 。

如 果 想 播 一 首 歌 ,又 要 點 做 呢 ?且 看 下 面 第 二 例 。

Lesson 09 - Scratch 02

Lesson 09 – Scratch 02

你 可 以 想 像 每 一 個 play tone block 就 是 一 個 音 符 ,你 要 設 定 音 高 和 長 短 。簡 單 而 言 ,如 果 首 歌 有 100 個 音 符 ,你 就 要 製 作 100 個 block。上 面 我 用 一 個 Make a Block London 來 儲 起 整 首 歌 ,方 便 可 以 重 複 使 用 。我 亦 在 London 加 了 一 個 數 字 參 數 ,來 設 定 播 放 幾 多 次 。第 二 例 播 放 的 是 什 麼 歌 ,你 聽 得 出 來 麼 ?

再 多 看 一 個 例 子 吧 。

Lesson 09 - Scratch 03

Lesson 09 – Scratch 03

例 三 是 另 一 首 歌 ,旋 律 ,拍 子 都 不 一 樣 ,基 本 上 都 要 從 頭 製 作 ,沒 有 捷 徑 ,不 能 copy & paste。

如 果 你 有 一 定 的 音 樂 底 子 的 話 ,就 會 發 玩 play tone block 的 問 題 。首 先 ,在 音 高 方 面 ,它 只 支 援 C 大 調 的 音 階 ( C D E F G A B ),其 他 大 小 調 和 半 音 欠 奉 。第 二 個 是 拍 子 ,它 只 提 供 了 「全 音 符 」( whole ),「二 分 音 符 」( half ),「四 分 音 符 」( quarter ),「八 分 音 符 」( eighth )和 「兩 個 全 音 符 」( double ),如 果 想 要 附 點 又 如 何 呢 ?第 三 是 它 的 速 度 ( tempo ) 是 固 定 的 ,一 個 「全 音 符 」永 遠 是 1 秒 ,不 能 加 快 ,也 不 能 減 慢 。

但 mBlock 的  play tone block 其 實 是 有 另 類 的 用 法 的 。它 的 音 高 和 拍 子 ,其 實 都 接 受 數 值 輸 入 的 。

Lesson 09 - Scratch 04

Lesson 09 – Scratch 04

音 高 其 實 就 是 頻 率 ,例 如 middle C ( C4 ) 是 262 Hz,A4  是 440 Hz。而 拍 子 ( 時 值 長 度 ) 的 單 位 則 是 ms ( 毫 秒 ),一 千 毫 秒 就 是 一 秒 了 。有 了 這 一 個 另 類 用 法 ,其 實 任 何 歌 都 可 以 播 放 的 了 。

Lesson 09 - Scratch 05

Lesson 09 – Scratch 05

在 第 五 例 中 ,我 們 用 了 幾 個 variable,補 齊 了 歌 曲 所 需 的 音 高 ( Ab3 = A flat 3, Bb3 = B flat 3, Db4 = D flat 4, …., Ab4 = A flat 4 ),和 拍 子 ( QplusE = Quarter + Eighth = 375 ms )。

Lesson 09 - Scratch 06

Lesson 09 – Scratch 06

然 後 ,我 們 直 接 把 那 幾 個 variables ( Ab3, Bb3, Db4, … , QplusE ) 使 用 到 play tone block 上 面 去 就 可 以 了 。

很 方 便 吧 ,哈 哈 哈 。大 家 一 起 下 載 來 看 看 究 竟 The Imperial March 在 mBlock / Scratch 上 面 是 什 麼 樣 子 的 吧 。

檔 案 下 載 :  lesson09.zip

功 課 時 間 :1. 試 試 把 程 序 改 為 接 鍵 才 開 始 播 放 吧 。2. 試 試 把 一 首 自 己 喜 愛 的 歌 曲 編 程 在 Arduino 上 播 放 。

Star War — The Imperial March ( Darth Vader’s Theme )

Arduino Tone Tutorial

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)
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 *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>