スピーカーを接続してメロディーを鳴らす
スピーカーを接続してPWM信号を送ってメロディーを鳴らしてみました。
よりシンプルな方法で鳴らします。
スピーカー
配線図
実際の配線
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()
実行
お気に入りの曲を入力してみましょう。
お気に入りの曲を入力してみましょう。
入力できたらプログラムで繰り返し演奏させてみましょう。
入力したメロディーを繰り返して演奏させるプログラム
テンテン
パイソンで繰り返し処理をします。
range() 関数 × for 文の基本構文
ensou関数を繰り返します。
ensou()
このブロックを入れて演奏する音符を回数分増やします。
1を入れると0のつぎは1と2回繰り返します。
プログラムのどこに入れるか考えて入れてみてください。