発振回路内臓の電子ブザーを前に買ったのですが、電源をつないでも音が鳴りません。発振回路が入ってないんじゃないか?と思い、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で電子オルガンみたいなこともできるんだろうなと思います。(オーバースペックだけど)
コメントを残す