今回は ブザー を鳴らして音を出してみます。前回 #04 / #05 で学んだ PWM の 周波数 を音の高さ(音階)に対応させると、Pico を簡易な楽器のように使えます。電子工作の世界に「聴覚」が加わって、表現の幅が一気に広がります。
- アクティブブザーとパッシブブザーの違い
pico_buzzer_toneブロックで 周波数(Hz)と時間(秒) を指定して鳴らす- ドレミファソラシドの周波数を順番に鳴らしてスケール演奏
- メロディ演奏・サイレン音などの応用
PycoBlocks(MicroPythonモード) を開き、左カテゴリ「Pico 電子工作 / 出力」の「ブザー」ブロックが今回の主役です。ブザーは PWM 出力と同じ仕組みで動かすため、#04 PWM・#05 ADC で学んだ知識がそのまま活きます。

ブザーの種類:アクティブとパッシブを見分けよう
電子工作で使われるブザーは大きく 2 種類 あります。見た目はそっくりですが、使い方が まったく違う ので注意が必要です。
| アクティブブザー | パッシブブザー | |
|---|---|---|
| 電源 | 3V〜5V を繋ぐだけ | PWM 信号が必要 |
| 音の高さ | 固定(1 種類のみ) | 自由に変えられる |
| 用途 | 警告音・通知音 | メロディ・音階・音楽 |
| 本体マーク | 裏面にシール(隠れ気味) | 裏面が見える穴あり |
| 本記事で使う | — | ✓ こちらを使用 |
本記事では パッシブブザー(PWM 制御で音階を作れる方)を使います。ELEGOO スターターキットなどには両方が同梱されていることが多いので、裏面に穴が見える ほうを選んでください。(アクティブは裏面が黒いシールで覆われています)
ステップ1:ラの音を1秒鳴らそう
まずは「ラ(A4)」の音(440Hz)を 1 秒間鳴らしてみましょう。440Hz は楽器の調律にも使われる基準音で、オーケストラのチューニングで「ラー」と聞こえるあの音です。

+ 表記または長いリード線が SIG 側です。(実体配線図は Fritzing の部品画像をもとに作図・CC BY-SA 3.0)
from machine import Pin, PWM
import utime
_bz = PWM(Pin(15))
_bz.freq(440)
_bz.duty_u16(32768)
utime.sleep(1)
_bz.deinit()
PWM(Pin(15)) でブザー用の PWM オブジェクトを作り、.freq(440) で周波数を 440Hz に設定。.duty_u16(32768)(デューティ比 50%)で発振開始、utime.sleep(1) で 1 秒鳴らし続け、.deinit() で停止する流れです。
💡 試してみよう
262(ド C4)・523(高いド C5)・1000・2000 などに変えると、音の高さがどう変わるか体感できます。周波数を 2 倍にすると 1 オクターブ高く 聞こえます。ステップ2:ドレミファソラシドを鳴らそう
ブザーブロックを縦に並べれば、メロディが演奏できます。ここでは ド・レ・ミ・ファ・ソ・ラ・シ・ド(C4〜C5 の 1 オクターブ)を順番に鳴らします。各音は 0.4 秒 ずつ、合計 3.2 秒の演奏です。
下の図のように、周波数が高いほど波が細かく(速く振動して)、音が高く聞こえます。ド C4(262Hz)→ ラ A4(440Hz)→ 高いド C5(523Hz)と周波数が上がるにつれ、1 秒間の振動回数が増えていくのがポイントです。

| 音階 | 音名 | 周波数 (Hz) |
|---|---|---|
| ド | C4 | 262 |
| レ | D4 | 294 |
| ミ | E4 | 330 |
| ファ | F4 | 349 |
| ソ | G4 | 392 |
| ラ | A4 | 440 |
| シ | B4 | 494 |
| 高いド | C5 | 523 |

from machine import Pin, PWM
import utime
for freq in [262, 294, 330, 349, 392, 440, 494, 523]:
_bz = PWM(Pin(15))
_bz.freq(freq)
_bz.duty_u16(32768)
utime.sleep(0.4)
_bz.deinit()
Python コードの工夫:ブロック版では 8 個のブロックを縦に並べる必要がありましたが、Python コードでは for freq in [...] でリストを使って 8 行を 5 行 に圧縮できます。リストに 440(ラ)を追加・削除すれば自由に音階をカスタマイズできます。
各音の間に「無音」を入れたい場合:pico_buzzer_stop ブロックで一旦消音し、utime.sleep(0.05) 程度の短い待ち時間を挟むと音の区切りがはっきりします。ただし、本記事のように 0.4 秒 程度の一定間隔なら不要です。
ステップ3(コラム):周波数と音階の関係・人間の可聴範囲
音の高さは 周波数(Hz、ヘルツ) で決まります。1 秒間に 1 回振動する音が 1 Hz、440 回振動する音が 440 Hz。周波数が高いほど高音、低いほど低音に聞こえます。
📝 1 オクターブの法則
440Hz なら、ラ A5 は 880Hz、ラ A6 は 1760Hz。逆に半分にすると 1 オクターブ低くなり、ラ A3 は 220Hz、ラ A2 は 110Hz。人間が聴ける周波数:20Hz 〜 20,000Hz(20kHz)が一般的な可聴域です。ただし高音は年齢とともに聴こえにくくなり、大人になると 15kHz 以上はほぼ聴こえなくなります。Pico のブザーは 100Hz〜10kHz 程度の範囲が実用的です。それ以上低くても高くても、ブザーの物理構造で音が出にくくなります。
音楽の 12 半音:ドからシまで 12 段階 に分けるのが「平均律」で、1 オクターブ(周波数 2 倍)を 2 ^ (1/12) ≒ 1.0595 倍ずつ 12 回かけて作ります。つまり ド → ド♯ は周波数が 1.06 倍。ピアノの黒鍵を含めた半音階を鳴らしたい場合は、この計算で周波数を求められます。
演習課題
課題3-6-1:オクターブの周波数を計算してみよう
ラ(A4)の周波数は 440Hz です。次の音の周波数を計算してみよう。
- ラ A5(1 オクターブ上)
- ラ A6(2 オクターブ上)
- ラ A3(1 オクターブ下)
- ラ A2(2 オクターブ下)
また、ド C4 = 262Hz を基準に、ド C2(2 オクターブ下)と C6(2 オクターブ上)の周波数も求めてみよう。
▶ 模範解答と解説を見る
# 答え:
# 「1 オクターブ上 = 周波数 × 2」「1 オクターブ下 = 周波数 ÷ 2」
#
# ラ A4 = 440 Hz (基準)
# ラ A5 = 440 × 2 = 880 Hz
# ラ A6 = 440 × 4 = 1760 Hz
# ラ A3 = 440 / 2 = 220 Hz
# ラ A2 = 440 / 4 = 110 Hz
#
# ド C4 = 262 Hz
# ド C2 = 262 / 4 ≒ 65.5 Hz (低くてブザーが鳴りにくい)
# ド C6 = 262 × 4 = 1048 Hz
#
# 半音 1 つ上げる: 周波数 × 2 ^ (1/12) ≒ 1.0595 倍
# 例: ド C4 = 262 → ド♯ C♯4 ≒ 262 × 1.0595 ≒ 277.6 Hz
解説: 計算のコツ:オクターブが上がるたびに 2 倍、下がるたびに 半分。「ラの周波数を倍にすればまたラ」と覚えると音楽的にも納得しやすいです。Pico のブザーは 100Hz 以下 はうまく鳴らない傾向があるので、C2(約 66Hz)はブザーの種類によっては聞こえないかもしれません。発展:標準的なピアノの最低音 A0 は 27.5Hz、最高音 C8 は 4186Hz。ブザーは 中音域(200〜2000Hz) が一番きれいに鳴ります。
課題3-6-2:「カエルの歌」を演奏しよう
童謡「カエルの歌」の冒頭 「ド・レ・ミ・ファ・ミ・レ・ド」 を演奏しよう。各音は 0.4 秒 、最後の「ド」だけ 0.8 秒(少し長め)にすると、音楽的に「終わった感」が出ます。配線はステップ1 と同じ(GP15 + ブザー)です。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

from machine import Pin, PWM
import utime
# カエルの歌: ド・レ・ミ・ファ・ミ・レ・ド
melody = [
(262, 0.4), # ド
(294, 0.4), # レ
(330, 0.4), # ミ
(349, 0.4), # ファ
(330, 0.4), # ミ
(294, 0.4), # レ
(262, 0.8), # ド (最後はやや長め)
]
for freq, dur in melody:
_bz = PWM(Pin(15))
_bz.freq(freq)
_bz.duty_u16(32768)
utime.sleep(dur)
_bz.deinit()
解説: ポイントは 「行って戻る対称的なメロディ」 です。ド→ファまで上がって、ファ→ドまで戻ってくる形になっています。最後の音だけ 0.8 秒(他の倍) にすることで「終止感」が生まれます。発展:「カエルの歌が きこえてくるよ」の続きは「ド・レ・ミ・ファ・ミ・レ・ド・〜・ド・ド・ド・ド・ド・ド・ド・ド」(最後の「クワクワクワクワ ゲゲゲゲゲゲゲ」は同じ音の連打)と歌詞が続きます。別の童謡「きらきら星」も「ド・ド・ソ・ソ・ラ・ラ・ソ」で始まるので試してみよう。
課題3-6-3:救急車サイレンを作ろう
救急車のサイレン音 「ピーポー、ピーポー」 を再現しよう。実際の救急車のサイレンは 「ピー」が高音(約 960Hz)・「ポー」が低音(約 770Hz) の 2 音を交互に鳴らす仕組みになっています。ずっと繰り返す ブロックの中に 2 つのブザーブロックを並べて、ループさせよう。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

from machine import Pin, PWM
import utime
while True:
# ピー (高音)
_bz = PWM(Pin(15))
_bz.freq(950)
_bz.duty_u16(32768)
utime.sleep(0.5)
_bz.deinit()
# ポー (低音)
_bz = PWM(Pin(15))
_bz.freq(700)
_bz.duty_u16(32768)
utime.sleep(0.5)
_bz.deinit()
解説: 鍵は while True(ずっとループ) です。2 つの音を 1 回だけ鳴らすのではなく、無限に交互に鳴らし続けることでサイレン感が出ます。停止するには 停止ボタン または USB を抜くしかありません。発展:
- パトカーのサイレン:もっと速く(0.2 秒ずつ)切り替えるとパトカー風に。
- 消防車のサイレン:800Hz と 1000Hz を 1 秒ずつでゆっくり交互。
- 連続周波数スイープ:for ループで
500Hz〜2000Hzを 1 段階ずつ上げると 「ヒューン」というドップラー風の効果音が作れます(pico_buzzer_tone は周波数が固定なので、次の単元で学ぶ 変数版ブザー が必要)。
まとめ
- パッシブブザーは PWM 信号で 音の高さを自由に変えられる。アクティブブザーは電源直結のみで音は固定。
- 周波数(Hz)が音の高さを決める。ラ A4 =
440Hz、ド C4 =262Hz、1 オクターブ上は 周波数 2 倍。 pico_buzzer_toneで 周波数(Hz)と時間(秒)を指定して鳴らす。ブロックを縦に積めばメロディに、while Trueに入れれば連続音やサイレンに。- 人間の可聴域は 20Hz〜20kHz。Pico のブザーは 200〜2000Hz がきれいに鳴る範囲。
- 音楽の半音は 2 ^ (1/12) ≒ 1.0595 倍。12 半音で 1 オクターブ(周波数 2 倍)。
次の記事は #07「7セグメントで数字を表示しよう」。8 本のピンを使って 0〜9 の数字を表示する 7 セグメント LED を扱います。ビットパターンと配線がちょっと大変ですが、デジタル時計やスコアボードの基礎技術です。