【電子工作】Python + pigpioでPWM制御をしてパッシブブザーを鳴らす(Raspberry Pi 4で遊ぼう日記 その14)

投稿日:2022年5月30日
最終更新日:2022年5月30日

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のコードを書く

今回は、

  1. GPIO19から500Hzの方形波を0.1秒出力
  2. 0.5秒出力を止める
  3. GPIO19から1kHzの方形波を0.1秒出力
  4. 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種類の音でブザーを鳴らすことができた。実際に鳴らした様子がこちら。

ちなみにオシロスコープでGPIO19の波形を見てみたところ、ちゃんと設定した通りの周期(500Hz、1kHz)とDuty比(30%)になっていた。

↓こちらが500Hzの時の波形

↓こちらが1kHzの時の波形

これまでGPIOから電圧を出力してLEDやブザーを動作させていたが、そういえばGPIOからの入力を受けて何かするという処理はまだやってなかった。

ということで、次回はGPIOに何かしらのスイッチなどで入力をいれて遊んでみたい。

 

参考文献

電磁ブザーの回路など以下のサイトを参考にさせて頂きましたm(_ _)m

電磁ブザーから圧電サウンダ (他励振タイプ) への置換え方法を教えてください。 | 村田製作所

ブザーの注意事項

 

日記まとめ

ラズパイで遊んでみた軌跡を以下でまとめてます。

【電子工作】Raspberry Pi 4で遊ぼう日記 まとめ

 


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください