この記事をシェアしよう!

GPIOポートに圧電ブザーを接続してPythonでプログラムを書いて音を鳴らしてみます。LED同様にGPIOから信号をコントロールして音を鳴らしたり消したりします。Pythonのプログラムの解説も行います。

使用する部品

  • Raspberry Pi 3 Model B × 1
  • 電源アダプター5V 2.5A × 1
  • ブレットボード × 1
  • アクティブブザー × 1
  • 抵抗 1kΩ × 1
  • NPNトランジスター(S8050)×1
  • ジャンプワイヤー(オス/オス) × 4

※これらの部品はFabshopがふるさと納税で提供している「ふるさと納税Raspberry Piスターターキット」もしくは当サイトで購入可能な「Raspberry Pi スターターキット」の電子工作キットに同梱されています。

実体配線図

3本足のトランジスタの役割

Lesson1のLEDの点滅のときと同様に、ブザーの両端に最初から3.3Vをかけておくことで、電位差をなくして音がならないようにする接続になっています。

今回の回路には3本足のトランジスタを使っています。それぞれ足に名前がついていて間違えないように配線しましょう。トランジスタは電子回路の中でスイッチの役割や信号の増幅などの役割を持つ半導体です。

このトランジスタの発見により私達の生活の中に計算機やコンピュータなど電子機器が急速に発展していきました。

今回はブザーの音が小さくて効きづらくなることが予想されるため、小さい音を大きな音に増幅するための役割として接続してあります。

プログラムのコピーと保存

ラズベリーパイメニューから「プログラミング」→「Geany」を開きます。

メニューバーから「ファイル」→「新規」をクリックします。

【Lessoon1】のときと同じように、この下にある「Buzzerのプログラム」の枠右上に並んだアイコンの内、右から2番目のアイコンをクリックします。(マウスをアイコンに近づけると”Copy”の表示が現れます)

すると、プログラムの文字列が全て選択されるので、「Ctrl」と「C」キーを同時に押してコピーします。

import RPi.GPIO as GPIO
import time

BeepPin = 11

def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(BeepPin, GPIO.OUT)
    GPIO.output(BeepPin, GPIO.HIGH)

def loop():
    while True:
        GPIO.output(BeepPin, GPIO.LOW)
        time.sleep(0.1)
        GPIO.output(BeepPin, GPIO.HIGH)
        time.sleep(0.1)

def destroy():
    GPIO.output(BeepPin, GPIO.HIGH)
    GPIO.cleanup()

if __name__ == '__main__':
    print ('Press Ctrl+C to end the program...')
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

プログラムの解説

このプログラムはLesson1で作ったLEDのランプを光らせて点滅させるプログラムとほとんど一緒です。11番のピンに信号を入れてLEDを光らすのか、音を鳴らすかの違いです。

time.sleepのパラメータが0.1になっていますが、ここの数値を変えることで音がなる時間が変わります。

プログラムを強制的に止めたい場合は「Ctrl」+「C」キーを押すことでプログラムを強制終了できます。

新たに開いたタブ「untitled×」の1行目にマウスカーソルを置いて右クリックして出てくるメニューから「貼り付け」を選択します。

Geanyのメニューバーから「ファイル」→「別名で保存」をクリックします。

新たに「ファイルを保存」画面が現れるので、左ペインの「デスクトップ」をクリックします。

「ファイルを保存」画面の1番上の項目「名前:」の入力欄に拡張子”.py”でプログラム名を入力し、「保存」ボタンをクリックします。

プログラムの実行

Geanyの画面に戻って、ツールバーの紙飛行機のようなアイコンをクリックします。

新たに「ターミナル」画面が開き、ブザーから音が1秒おきに出たり止まったりします。「Ctrl」と「C」キーを同時に押すとプログラムが停止します。

この記事をシェアしよう!