pigpioとPythonでGPIOをPWM制御してパッシブブザーを鳴らす
前回はpigpioとPythonのコードでアクティブブザーを鳴らしたが、今回はパッシブブザーを鳴らしてみる。アクティブブザーは直流電圧をかければ音がなるので簡単に鳴らすことが出来るが、基本的に音は変更できない。
一方、パッシブブザーは任意の周波数の交流電圧を加えてやらないと音はならないが、周波数を変えることで音を変化させることができる。今回は、以下のキットについてきたパッシブブザーを使い、pigpioでGPIOをPWM制御することで周波数を変えて、2種類の音でパッシブブザーを鳴らしてみたいと思う。
前回も書いたが、ブザーの型番などはキットには記載が無いのでよくわからないのだが、どうやら電磁ブザーらしい。電磁ブザーと圧電ブザー(ピエゾブザー)の見分け方は以下を参照。
また、このキットについてきたトランジスタS8550/S8050の仕様については正式なデータシートが見当たらないので以下を参考にさせていただいた。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Bullseye)
pigpio 1.79-1+rpt1
Python 3.9.2
ブレッドボードに回路をつくる
回路図は前回のアクティブブザーの時とほぼ同じだが、ブザーをアクティブブザーからパッシブブザーに変更し、パッシブブザーと平行にツェナーダイオードを入れている。電磁ブザーの中身はコイルなので、一般的には逆起電力の保護のためにダイオードを入れる(ちなみに圧電ブザーの場合は平行に抵抗を入れる)。
ブレッドボードでは以下のように接続する(ブザーの絵は実際の部品とはちょっと異なるので注意)。ブザーは極性があるので、+と-を間違えないように注意。また、前回も書いたが、トランジスタS8050はピンの並びがEBCになっているタイプになっている。日本のメーカーのトランジスタはECBになっているものが多いのでピンの並びにも注意。
実際に接続したのが以下の写真。
Pythonのコードを書く
今回は、
- GPIO19から500Hzの方形波を0.1秒出力
- 0.5秒出力を止める
- GPIO19から1kHzの方形波を0.1秒出力
- 0.5秒出力を止める
という動作を繰り返すpigpio_pwm_buzzer.pyというコードを書いた。なお、Duty比は最初50%にしてたのだが、思ったより音が大きかったので30%にしてみた。ちなみにブザーのデータシートをみれば各周波数での特性や対応しているDuty比なども書いてあると思うが、今回のブザーは型番がわからず特性も不明なので適当に現物合わせで決めている。
#!/usr/bin/env python3 import pigpio import time pwm_freq = 500 pwm_duty = 30 buzzer_gpio = 19 gpio = pigpio.pi() while True: gpio.hardware_PWM(buzzer_gpio, pwm_freq, pwm_duty * 10000) time.sleep(0.1) gpio.hardware_PWM(buzzer_gpio, pwm_freq, 0) time.sleep(0.5) gpio.hardware_PWM(buzzer_gpio, pwm_freq * 2, pwm_duty * 10000) time.sleep(0.1) gpio.hardware_PWM(buzzer_gpio, pwm_freq, 0) time.sleep(0.5)
pigpiodを起動して実行
Pythonパッケージでpigpioを使う時はpigpiodを起動してやる必要があるので、忘れずにやっておく。
sudo pigpiod
あとはコードが置いてあるディレクトリで以下を実行すればOK。
sudo python pigpio_pigpio_pwm_buzzer.py
これで2種類の音でブザーを鳴らすことができた。実際に鳴らした様子がこちら。
パッシブブザーをラズパイのGPIOに接続してPWMで周波数を変えて鳴らしてみた。キットで付いてきた素性の知れないブザーのため特性がよくわからず、周波数とDuty比は適当… pic.twitter.com/GUM1lHm5f7
— Wakky (@wakky_free) May 4, 2022
ちなみにオシロスコープでGPIO19の波形を見てみたところ、ちゃんと設定した通りの周期(500Hz、1kHz)とDuty比(30%)になっていた。
これまでGPIOから電圧を出力してLEDやブザーを動作させていたが、そういえばGPIOからの入力を受けて何かするという処理はまだやってなかった。
ということで、次回はGPIOに何かしらのスイッチなどで入力をいれて遊んでみたい。
参考文献
電磁ブザーの回路など以下のサイトを参考にさせて頂きましたm(_ _)m
電磁ブザーから圧電サウンダ (他励振タイプ) への置換え方法を教えてください。 | 村田製作所
日記まとめ
ラズパイで遊んでみた軌跡を以下でまとめてます。