注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

1.2.2 パッシブブザー

はじめに

このプロジェクトでは、パッシブブザーで音楽を演奏する方法について学びます。

必要な部品

このプロジェクトに必要なコンポーネントは以下の通りです。

../_images/list_1.2.2.png

キット全体を購入するのも一つの手です。以下がそのリンクです:

名前

このキットのアイテム

リンク

Raphael Kit

337

Raphael Kit

下記のリンクから各コンポーネントを個別に購入することも可能です。

コンポーネントの紹介

購入リンク

GPIO拡張ボード

購入

ブレッドボード

購入

ジャンパーワイヤー

購入

抵抗器

購入

ブザー

購入

トランジスタ

購入

回路図

この実験では、パッシブブザー、PNPトランジスタ、および1kの抵抗を使用しています。 抵抗はトランジスタのベースとGPIOの間に配置され、トランジスタを保護します。

GPIO17に異なる周波数が供給されると、パッシブブザーはそれに応じて異なる音を出します。このようにして、ブザーが音楽を演奏します。

../_images/image333.png

実験手順

ステップ1: 回路を組み立てます。(パッシブブザーの背面は緑色の基板です。)

../_images/image106.png

ステップ2: ディレクトリを変更します。

cd ~/raphael-kit/python/

ステップ3: 実行します。

sudo python3 1.2.2_PassiveBuzzer.py

コードが実行され、ブザーが曲を演奏します。

コード

注釈

以下のコードは 修正/リセット/コピー/実行/停止 することができます。ただし、実行する前に、ソースコードのパス、たとえば raphael-kit/python に移動する必要があります。コードを修正した後は、その効果を直接確認することができます。

import RPi.GPIO as GPIO
import time

Buzzer = 11

CL = [0, 131, 147, 165, 175, 196, 211, 248]     # Frequency of Bass tone in C major
CM = [0, 262, 294, 330, 350, 393, 441, 495]     # Frequency of Midrange tone in C major
CH = [0, 525, 589, 661, 700, 786, 882, 990]     # Frequency of Treble tone in C major

song_1 = [  CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6], # Notes of song1
            CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
            CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
            CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]

beat_1 = [  1, 1, 3, 1, 1, 3, 1, 1,             # Beats of song 1, 1 means 1/8 beat
            1, 1, 1, 1, 1, 1, 3, 1,
            1, 3, 1, 1, 1, 1, 1, 1,
            1, 2, 1, 1, 1, 1, 1, 1,
            1, 1, 3 ]

song_2 = [  CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1], # Notes of song2
            CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2],
            CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1],
            CM[3], CM[2], CL[5], CL[7], CM[2], CM[1]    ]

beat_2 = [  1, 1, 2, 2, 1, 1, 2, 2,             # Beats of song 2, 1 means 1/8 beat
            1, 1, 2, 2, 1, 1, 3, 1,
            1, 2, 2, 1, 1, 2, 2, 1,
            1, 2, 2, 1, 1, 3 ]

def setup():
    GPIO.setmode(GPIO.BOARD)        # Numbers GPIOs by physical location
    GPIO.setup(Buzzer, GPIO.OUT)    # Set pins' mode is output
    global Buzz                     # Assign a global variable to replace GPIO.PWM
    Buzz = GPIO.PWM(Buzzer, 440)    # 440 is initial frequency.
    Buzz.start(50)                  # Start Buzzer pin with 50% duty cycle

def loop():
    while True:
        print ('\n    Playing song 1...')
        for i in range(1, len(song_1)):     # Play song 1
            Buzz.ChangeFrequency(song_1[i]) # Change the frequency along the song note
            time.sleep(beat_1[i] * 0.5)     # delay a note for beat * 0.5s
        time.sleep(1)                       # Wait a second for next song.

        print ('\n\n    Playing song 2...')
        for i in range(1, len(song_2)):     # Play song 1
            Buzz.ChangeFrequency(song_2[i]) # Change the frequency along the song note
            time.sleep(beat_2[i] * 0.5)     # delay a note for beat * 0.5s

def destory():
    Buzz.stop()                 # Stop the buzzer
    GPIO.output(Buzzer, 1)      # Set Buzzer pin to High
    GPIO.cleanup()              # Release resource

if __name__ == '__main__':      # Program start from here
    setup()
    try:
        loop()
    except KeyboardInterrupt:   # When 'Ctrl+C' is pressed, the program destroy() will be  executed.
        destory()

コード説明

CL = [0, 131, 147, 165, 175, 196, 211, 248]     # Frequency of Bass tone in C major
CM = [0, 262, 294, 330, 350, 393, 441, 495]     # Frequency of Midrange tone in C major
CH = [0, 525, 589, 661, 700, 786, 882, 990]     # Frequency of Treble tone in C major

これらは各音の周波数です。最初の0はCL[0]をスキップし、数字の1〜7が音のCDEFGABに対応するようにするためです。

song_1 = [  CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6],
            CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
            CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
            CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]

これらの配列は曲の音符です。

beat_1 = [  1, 1, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
            1, 3, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1,
            1, 1, 3 ]

各音のビート(各数字)は、⅛ビート、つまり0.5秒を表します。

Buzz = GPIO.PWM(Buzzer, 440)
Buzz.start(50)

ブザー ピンを PWM ピンとして定義し、その周波数を 440 に設定し、Buzz.start(50) を使用して PWM を実行します。 さらに、デューティ サイクルを 50% に設定します。

for i in range(1, len(song_1)):
            Buzz.ChangeFrequency(song_1[i])
            time.sleep(beat_1[i] * 0.5)

for ループを実行すると、ブザーが配列 Song_1[] 内のノートを再生します。 Beat_1[] 配列のビートを使用して、 .

これで、音楽を再生しているパッシブブザーが聞こえるようになります。

現象の画像

../_images/image107.jpeg