Raspberry Piで数100Hzから数kHzの信号を作成して電子ブザーを鳴らす

発振回路内臓の電子ブザーを前に買ったのですが、電源をつないでも音が鳴りません。発振回路が入ってないんじゃないか?と思い、Raspberry Piで数kHzの信号を作成して電子ブザーに与えてみることにしました。

今回はwebiopiとRPIOのモジュールを使用します。
webiopiはWebからいろいろコントロールできるようにするモジュールですが、今回はちょっと設定するためだけに使います。RPIOで信号を作成します。

webiopiを初めて聞く人は『Raspberry PIでLED点灯コントロール、Part3 ネット経由(WebIOPi)でコントロールする』でインストールの仕方や使い方を載せているので参考にしましょう。

RPIOを初めて聞く人は『Raspberry Piでサーボコントロール、Part2 WebカメラをWebブラウザ経由で上下左右・ズームさせる』でインストールの仕方を載せているので参考にしてください。そこではサーボのコントロールをしていましたが、今回は数kHzの信号を作成するのにRPIOを使います。

666.7Hzの信号を作成するためのプログラム

GPIO17から666.7Hzの信号を出力させるPythonプログラム

作成する場所
/home/your_username/myproject/python/pulse.py
import webiopi
from RPIO import PWM

PULSE = 17 # GPIO pin using BCM numbering

# setup function is automatically called at WebIOPi startup
def setup():
    PWM.setup(1)
    PWM.init_channel(0, 3000)
    PWM.add_channel_pulse(0, PULSE, 0, 750)
    PWM.add_channel_pulse(0, PULSE, 1500, 750)


def loop():
   time.sleep(1)

# destroy function is called at WebIOPi shutdown
def destroy():
    PWM.clear_channel_gpio(0, PULSE)
    PWM.cleanup()

1周期の下限が3000usになります。
今回は3000usの間に2回750usの長さのパルスを加えました。つまり1500usに1回パルスがあるので、666.7Hzの信号になります。パルスを3000usの間にもっと入れれば周波数も高くなりますが、ここでは面倒なので666.7Hzの信号をGPIO17から出力させることにしました。

RPIOの使い方の詳しくはRPIO.PWM, PWM via DMA for the Raspberry Piを確認しましょう。


webIOPiの設定
sudo vim /etc/webiopi/config

[GPIO]
17 = OUT 0

[~GPIO]
17 = OUT 0

[SCRIPTS]
mypulse = /home/your_username/myproject/python/pulse.py

電子ブザーをRaspberry PiのGPIOにつなげる


Raspberry PiのGPIO17とGndを電子ブザーにつなげます。

GPIO17とGndどこにあるの?と言う人はRaspberry PiのGPIOの配置図を確認してください。

最後にwebIOPiを起動してGPIO17から信号を出力させます。
sudo webiopi -d -c /etc/webiopi/config

なぜかwebIOPiが既に起動している場合は一旦とめてから起動してみてください。
sudo /etc/init.d/webiopi stop


電源をつないでも音が鳴らなかった電子ブザーが3.3Vの666.7Hzの信号を与えることで、プーという音がなるようになりました。ということで、発振回路内臓と書いてあった電子ブザーは、実は発振回路が内臓されていなかったという罠でしたー。

ちなみにパルスを増やしたり減らしたりすると、電子ブザーの音も高くなったり低くなったりします。

Raspberry Piで電子オルガンみたいなこともできるんだろうなと思います。(オーバースペックだけど)

コメントを残す

メールアドレスが公開されることはありません。