Skip to content

Day 5|発声:ブザーで歌わせる

  • ブザー(スピーカーの祖先) を配線する
  • Picoから音(周波数) を出す
  • ドレミ を演奏する

スポンサーリンク(開発中はプレースホルダー)

NO IMAGE
Raspberry Pi Pico Hピンヘッダ付き
NO IMAGE
ブレッドボード標準サイズ
NO IMAGE
パッシブブザー裏が緑色
NO IMAGE
ジャンパーワイヤオス-オス
  • Raspberry Pi Pico H / ブレッドボード
  • パッシブブザー ×1
    • ※「アクティブ」ではなく「パッシブ」を使います(裏側が緑色の基板剥き出しのやつが多い)。
  • ジャンパーワイヤ ×2本

「ド〜レ〜ミ〜」と音階が鳴ります。 光(LED)だけでなく、音という新しい表現力を手に入れます。

ブザーにも極性(プラス・マイナス)があるものと、ないものがあります。 表面に「+」シールがあれば、そちらをプラスにします。

  1. ブザーをブレッドボードに挿す。
  2. プラス側(または片方の足) → GP15
  3. マイナス側(もう片方の足) → GND

音は「空気の振動」です。 Picoの電気を高速で「ON/OFF/ON/OFF…」と震わせることで、ブザーの膜を振動させます。 この高速振動を作る技を PWM(パルス・ウィズ・モジュレーション) と呼びます。

import machine
import time
# GP15ピンでPWM(振動)を使います
buzzer = machine.PWM(machine.Pin(15))
# 音の周波数(高さ)を決める関数
def tone(frequency, duration):
buzzer.freq(frequency) # 振動数(Hz)を設定
buzzer.duty_u16(3000) # 音量(ONの時間比率)
time.sleep(duration) # 鳴らす時間
buzzer.duty_u16(0) # 音を止める(音量0)
# ドレミファソラシドの周波数
do = 523
re = 587
mi = 659
# 演奏開始
while True:
tone(do, 0.5)
tone(re, 0.5)
tone(mi, 0.5)
time.sleep(1)

⚠️ 音が「ピー」と鳴りっぱなし / 音程が変わらない

  • 原因: ブザーが「アクティブブザー」かも?
    • → 電池を繋ぐだけで「ピー」と鳴るのが「アクティブブザー」。これだとプログラムで音程を変えられません。
    • → 「パッシブブザー(自分では鳴れない)」を使う必要があります。キットの中を探してみてください(見た目が似てるので注意)。
  • 周波数 (Hz): 1秒間に何回震えるか。「高さ」が決まる。
  • Duty比: 1回の振動の中で、どれくらい力んでいるか。「音量」や「明るさ」が変わる。
  • 関数 (def): よく使う「一連の動作」に名前をつけて、いつでも呼び出せるようにした魔法の呪文。ここでは tone() という呪文を作りました。

「電子機器に『声』を与えた!」

デジタル(0と1)の世界から、少しはみ出してみましょう。 次は「つまみ」を回して、0と1の間にある「曖昧な数値」を扱います。