Day 5|発声:ブザーで歌わせる
1. 今日やること
Section titled “1. 今日やること”- ブザー(スピーカーの祖先) を配線する
- Picoから音(周波数) を出す
- ドレミ を演奏する
スポンサーリンク(開発中はプレースホルダー)
2. 使う部品
Section titled “2. 使う部品”- Raspberry Pi Pico H / ブレッドボード
- パッシブブザー ×1
- ※「アクティブ」ではなく「パッシブ」を使います(裏側が緑色の基板剥き出しのやつが多い)。
- ジャンパーワイヤ ×2本
3. 完成形(今日のゴール)
Section titled “3. 完成形(今日のゴール)”「ド〜レ〜ミ〜」と音階が鳴ります。 光(LED)だけでなく、音という新しい表現力を手に入れます。
Step 1: ブザーを配線する
Section titled “Step 1: ブザーを配線する”ブザーにも極性(プラス・マイナス)があるものと、ないものがあります。 表面に「+」シールがあれば、そちらをプラスにします。
- ブザーをブレッドボードに挿す。
- プラス側(または片方の足) → GP15
- マイナス側(もう片方の足) → GND
Step 2: 音の正体(PWM)
Section titled “Step 2: 音の正体(PWM)”音は「空気の振動」です。 Picoの電気を高速で「ON/OFF/ON/OFF…」と震わせることで、ブザーの膜を振動させます。 この高速振動を作る技を PWM(パルス・ウィズ・モジュレーション) と呼びます。
5. コード
Section titled “5. コード”import machineimport 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 = 523re = 587mi = 659
# 演奏開始while True: tone(do, 0.5) tone(re, 0.5) tone(mi, 0.5) time.sleep(1)6. つまずきログ
Section titled “6. つまずきログ”⚠️ 音が「ピー」と鳴りっぱなし / 音程が変わらない
- 原因: ブザーが「アクティブブザー」かも?
- → 電池を繋ぐだけで「ピー」と鳴るのが「アクティブブザー」。これだとプログラムで音程を変えられません。
- → 「パッシブブザー(自分では鳴れない)」を使う必要があります。キットの中を探してみてください(見た目が似てるので注意)。
7. 文系への翻訳
Section titled “7. 文系への翻訳”- 周波数 (Hz): 1秒間に何回震えるか。「高さ」が決まる。
- Duty比: 1回の振動の中で、どれくらい力んでいるか。「音量」や「明るさ」が変わる。
- 関数 (def): よく使う「一連の動作」に名前をつけて、いつでも呼び出せるようにした魔法の呪文。ここでは
tone()という呪文を作りました。
8. 今日の達成
Section titled “8. 今日の達成”「電子機器に『声』を与えた!」
デジタル(0と1)の世界から、少しはみ出してみましょう。 次は「つまみ」を回して、0と1の間にある「曖昧な数値」を扱います。