スピーカーを接続してメロディーを鳴らす3 より簡単な方法で音をならします。繰り返し演奏も簡単です。

スピーカーを接続してメロディーを鳴らす

スピーカーを接続してPWM信号を送ってメロディーを鳴らしてみました。
よりシンプルな方法で鳴らします。

スピーカー

マイクロスピーカー
ノートパソコンやポータブル機器等に使われる超小型のダイナミックスピーカーです。
■主な仕様
・インピーダンス:8Ω@1kHz
・サイズ:23×16(長楕円)×4.6(最大厚)mm
・質量:3g
・リード:青32mm、白34mm、各先端ともはんだ仕上げ2mm

配線図

配線に極性はありません。どちらの線をさしても大丈夫です。

実際の配線

MicroPythonプログラム

import utime
from machine import Pin, PWM
#17ピンからPWMでスピーカー出力
sound = PWM(Pin(17, Pin.OUT))
#クラスPWMを定義(Sound)
# 音を設定 AラBシCドDレEミFファGソ 数字  高さ S  シャープ
B0  = 31
C1  = 33
CS1 = 35
D1  = 37
DS1 = 39
E1  = 41
F1  = 44
FS1 = 46
G1  = 49
GS1 = 52
A1  = 55
AS1 = 58
B1  = 62
C2  = 65
CS2 = 69
D2  = 73
DS2 = 78
E2  = 82
F2  = 87
FS2 = 93
G2  = 98
GS2 = 104
A2  = 110
AS2 = 117
B2  = 123
C3  = 131
CS3 = 139
D3  = 147
DS3 = 156
E3  = 165
F3  = 175
FS3 = 185
G3  = 196
GS3 = 208
A3  = 220
AS3 = 233
B3  = 247
C4  = 262
CS4 = 277
D4  = 294
DS4 = 311
E4  = 330
F4  = 349
FS4 = 370
G4  = 392
GS4 = 415
A4  = 440
AS4 = 466
B4  = 494
C5  = 523
CS5 = 554
D5  = 587
DS5 = 622
E5  = 659
F5  = 698
FS5 = 740
G5  = 784
GS5 = 831
A5  = 880
AS5 = 932
B5  = 988
C6  = 1047
CS6 = 1109
D6  = 1175
DS6 = 1245
E6  = 1319
F6  = 1397
FS6 = 1480
G6  = 1568
GS6 = 1661
A6  = 1760
AS6 = 1865
B6  = 1976
C7  = 2093
CS7 = 2217
D7  = 2349
DS7 = 2489
E7  = 2637
F7  = 2794
FS7 = 2960
G7  = 3136
GS7 = 3322
A7  = 3520
AS7 = 3729
B7  = 3951
C8  = 4186
CS8 = 4435
D8  = 4699
DS8 = 4978

#  演奏する関数ensouを定義
def ensou():
    global sound
    # ピタゴラスイッチ
    #melody = [D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,G5,A5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,B4,A4,0,B4,C5,0,CS5,D5,0,0,D5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,G5,A5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,B4,A4,A4,A4,A4,A4,A4,A4,A4,A4,0,0,F5,E5,0,E5,FS5,E5,FS5,G5,G5,G5,D5,0,B4,C5,0,C5,D5,CS5,D5,B4,B4,B4,0,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,G5,FS5,0,D5,E5,0,D5,E5,0,D5,E5,0,C6,B5,0,0,G5,0,0,0,0,0,0,0,0,0,0,0,0,0,D5,E5,0,D5,E5,0,C6,B5,0,0,G5,0]
    # マリオのテーマ
    melody = [E7, E7, 0, E7, 0, C7, E7, 0, G7, 0, 0, 0, G6, 0, 0, 0, C7, 0, 0, G6, 0, 0, E6, 0, 0, A6, 0, B6, 0, AS6, A6, 0, G6, E7, 0, G7, A7, 0, F7, G7, 0, E7, 0,C7, D7, B6, 0, 0, C7, 0, 0, G6, 0, 0, E6, 0, 0, A6, 0, B6, 0, AS6, A6, 0, G6, E7, 0, G7, A7, 0, F7, G7, 0, E7, 0,C7, D7, B6, 0, 0, 0, 0]

#    while True:
# これがあるとずっと繰り返す。
    for i in range(len(melody)):
            if melody[i] == 0:
                sound.duty_u16(0)
            else:
                sound.freq(melody[i])
                sound.duty_u16(0x8000)

            utime.sleep_ms(150)
            
    '''
            PWMオブジェクトは周波数とデューティを設定してやることでPWM信号を送出します。
            周波数は sound.freq(周波数(Hz))
            周波数を上げ下げすることでスピーカーの振動の速さが変わり音の高さが変わります。
            デューティは sound.duty_u16(デューティ値(4ケタの16進数、もしくはintで直接0~65535))
            で設定します。0x8000は十進数で32768で50%
            デューティ値が大きいと実行電圧(音量)が大きくなります。
            
    '''
# 定義終わり(関数ブロック)
# 演奏します。
ensou()
PWMオブジェクト(sound)は周波数とデューティを設定してやることでPWM信号を送出します。
sound.freq(melody[i])

周波数は sound.freq(周波数(Hz)) 周波数を上げ下げすることでスピーカーの振動の速さが変わり音の高さが変わります。
sound.duty_u16(0x8000)
デューティは sound.duty_u16(デューティ値(4ケタの16進数、もしくはintで直接0~65535)) で設定します。0x8000は十進数で32768で50% デューティ値が大きいと実行電圧(音量)が大きくなります。

実行

マリオのテーマが流れます。
お気に入りの曲を入力してみましょう。

お気に入りの曲を入力してみましょう。
入力できたらプログラムで繰り返し演奏させてみましょう。

入力したメロディーを繰り返して演奏させるプログラム

テンテン
テンテン

パイソンで繰り返し処理をします。

range() 関数 × for 文の基本構文

for 変数名 in range(繰り返し回数):
繰り返したい処理①
繰り返したい処理②
処理のプログラムは一段下げます。
例 range() 関数を使い3 回 A B を出力
for i in range(3):
  print(‘A’)
print(‘B’)

ensou関数を繰り返します。

for x in range(1):
ensou()
このブロックを入れて演奏する音符を回数分増やします。
1を入れると0のつぎは1と2回繰り返します。
プログラムのどこに入れるか考えて入れてみてください。