pigpioとPythonでGPIOを制御してアクティブブザーを鳴らす
これまで、いろいろな方法でLEDを点滅させてきたが、さすがに飽きてきたので違う部品を使ってみたくなってきた。
ということで、今回は以下のキットについてきたアクティブブザーをPythonとpigpioを使って鳴らしてみたいと思う。
ちなみに、ブザーの型番などがわからないので仕様は不明だが、ブザーの内部を覗き込んだ感じだと電磁ブザーのようだ。ブザーは大きく分けると電磁ブザーと圧電ブザー(ピエゾブザー)の2種類あるが、見分け方はこちらを参考にさせて頂いた。
また、このキットについてきたトランジスタS8550/S8050について仕様がイマイチわからなかったのだが、以下に記載があったので参考にさせて頂いた。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Bullseye)
pigpio 1.79-1+rpt1
Python 3.9.2
ブレッドボードに回路をつくる
一応キットの公式サイトにもPNPトランジスタを使ったリファレンス回路は載ってたのだが、この回路だとラズパイの起動中などGPIOが不定になったときにちょっと心配な感じ。
https://docs.sunfounder.com/projects/davinci-kit/en/latest/1.2.1_active_buzzer.html
ということで、今回はNPNトランジスタ(S8050)を使って回路図を作成した。ベースとエミッタ間に抵抗を追加してGPIOの出力が不定のときはベースの電位をLOWに落としている。
ブレッドボードでは以下のように接続する(ブザーの絵は実際の部品とはちょっと異なる)。ブザーは極性があるので、+と-を間違えないように注意。また、今回使用したトランジスタS8050はピンの並びがEBCになっているタイプだった。日本のメーカーのトランジスタはECBになっているものが多いので、他のトランジスタを使う場合はピンの並びにも注意。
実際に接続したのが以下の写真。
Pythonのコードを書く
今回はブザーを0.5秒ごとに鳴らすpigpio_buzzer.pyというコードを以下のように作成した。
#!/usr/bin/env python3 import pigpio import time buzzer_gpio = 19 gpio = pigpio.pi() gpio.set_mode(buzzer_gpio, pigpio.OUTPUT) while True: gpio.write(buzzer_gpio, 1) time.sleep(0.5) gpio.write(buzzer_gpio, 0) time.sleep(0.5)
実はこれ、以前Lチカの時に書いたコードから変数名を変えただけ。今回はGPIOをHIGH/LOWするだけなので、Lチカと同じ内容でOK。
pigpiodを起動して実行
Pythonパッケージでpigpioを使う時はpigpiodを起動してやる必要があるので、忘れずにやっておく。
sudo pigpiod
あとはコードが置いてあるディレクトリで以下を実行すればOK。
sudo python pigpio_buzzer.py
これで無事にブザーを鳴らすことができた。実際に鳴らした様子がこちら。
ひとまずラズパイでLチカ以外もやろうってことでアクティブブザーを鳴らしてみる。といってもPythonのコードはほぼ同じ。回路はトランジスタ入れたのでちょっと変わってるけど pic.twitter.com/a5UdddOVyA
— Wakky (@wakky_free) May 3, 2022
今回はアクティブブザーを使ったが、次回はパッシブブザーを使い、GPIOピンをpigpioでPWM制御してパッシブブザーの音を変えて鳴らしてみたい。
日記まとめ
ラズパイで遊んでみた軌跡を以下でまとめてます。