パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Pi3 電子ブザーで演奏

2018-11-16 | Raspberry Pi 2 or 3 or Pico
<利用したパーツ>
(秋月電子)
ブレッドボード 200円
ジャンパーワイヤ オスオスセット60本以上 220円
ジャンパーワイヤ メスメスセット10本 330円
カーボン抵抗1kΩ100本セット 100円
電子ブザー 14mm PB04-SE12HPR 100円

<接続>
GPIO18 - 1kΩ抵抗 - 電子ブザー(足の長い方)
電子ブザー(足の短い方)-Ground


(画像はRaspberry Pi本家のサイトの資料です)




<プログラム実行まで>
1.05946364はスプレッドシートで計算してみたのですが、1.059463094のほうが正確みたいです。
プログラムは2回ほど階段をあがったあと、ドレミファソラシドをならして、最後はランダム演奏します。

あとpigpioをインストールして
sudo pigpiod
(最後のdが忘れがち)
としてpigpioのデーモンを起動させておかないとエラーが発生します。

import pigpio
import time
import math
import random
 
BUZZER_PIN = 18
 
pi1 = pigpio.pi()
pi1.set_mode(BUZZER_PIN, pigpio.OUTPUT)
pi1.hardware_PWM(BUZZER_PIN, 0, 0)

hz=[0]
for i in range(120):
    hz+=[int(27.5*(1.05946364**i))]
 
try:
    for j in range(1):
        for i in range(400,1000,10):
            pi1.hardware_PWM(BUZZER_PIN, i, 200000)
            time.sleep(0.01)
    for i in range(120):
        pi1.hardware_PWM(BUZZER_PIN, hz[i] ,500000)
        time.sleep(0.01)
    for i in [40,42,44,45,47,49,51,52]:
        pi1.hardware_PWM(BUZZER_PIN, hz[i] ,500000)
        print(hz[i])
        time.sleep(0.1)
    for i in range(50):
        if random.randint(1,10)>=4:
            pi1.hardware_PWM(BUZZER_PIN, hz[random.randint(30,60)] ,500000)
        else:
            pi1.hardware_PWM(BUZZER_PIN, hz[random.randint(30,60)] ,0)            
        time.sleep(random.randint(1,2)*0.25)

 
except KeyboardInterrupt:
    pass
 
# cleanup
pi1.hardware_PWM(BUZZER_PIN, 0, 0)
pi1.set_mode(BUZZER_PIN, pigpio.INPUT)
pi1.stop()



<参考文献>
Raspberry Pi3でブザーを制御
Raspberry PiのGPIO制御の決定版 pigpio を試す
音階の周波数

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。