注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。

参加する理由

  • 専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。

  • 学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。

  • 限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。

  • 特別割引: 最新製品を特別割引でお楽しみいただけます。

  • 季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。

👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!

1.3 アクティブブザー

はじめに

このプロジェクトでは、NPN トランジスタを使用してアクティブブザーを駆動し、ビープ音を発生させる方法を学びます。アクティブブザーは、音による通知や警告を出すために多くの電子プロジェクトで使用されるシンプルな電子部品です。


必要なもの

このプロジェクトを完成させるために、次の部品を用意してください。

部品

購入リンク

ジャンパーワイヤー

購入

抵抗器

購入

ブザー

-

トランジスタ

購入

Fusion HAT+

-

Raspberry Pi

-


回路図

この回路では、アクティブブザー、NPN トランジスタ、および 1kΩ 抵抗を使用します。抵抗はベース電流を制限することでトランジスタを保護します。GPIO17 が High レベル(3.3V)を出力するとトランジスタが導通し、ブザーに電流が流れてビープ音が鳴ります。GPIO17 が Low レベルを出力するとトランジスタは遮断され、ブザーは鳴りません。

../_images/1.2.1_sch.png

配線図

以下の手順に従って回路を組み立ててください。

  1. NPN トランジスタ、ブザー、および抵抗をブレッドボードに配置します。

  2. トランジスタのベースを抵抗を介して GPIO17 に接続します。

  3. トランジスタのエミッタを電源(+)に接続します。

  4. トランジスタのコレクタをブザーの一方の端子に接続します。

  5. ブザーのもう一方の端子をグラウンド(-)に接続します。

../_images/1.2.1_bb.png

サンプルプログラムの実行

このチュートリアルで使用するすべてのサンプルコードは ai-lab-kit ディレクトリに用意されています。 以下の手順でサンプルを実行してください。

cd ~/ai-lab-kit/python/
sudo python3 1.3_ActiveBuzzer.py

この Python スクリプトは Raspberry Pi の GPIO17 に接続されたブザーを制御します。実行すると次の動作を行います。

  1. ブザーは 0.1 秒ごとにオンとオフを繰り返し、ビープ音を発生します。

  2. コンソールにはブザーの動作に合わせて "Buzzer On" と "Buzzer Off" が表示されます。

  3. ユーザーが Ctrl+C を押してスクリプトを中断するまで、ビープ音は継続します。


コード

次の Python コードでは、アクティブブザーをループでオン・オフさせてビープ音を発生させます。

#!/usr/bin/env python3
from fusion_hat.modules import Buzzer
from fusion_hat.pin import Pin
from time import sleep

# Initialize a Buzzer object on GPIO pin 17
buzzer = Buzzer(Pin(17))

try:
   while True:
      # Turn on the buzzer
      print('Buzzer On')
      buzzer.on()
      sleep(0.1)  # Keep the buzzer on for 0.1 seconds

      # Turn off the buzzer
      print('Buzzer Off')
      buzzer.off()
      sleep(0.1)  # Keep the buzzer off for 0.1 seconds

except KeyboardInterrupt:
   # Handle KeyboardInterrupt (Ctrl+C) for clean script termination
   pass

このスクリプトを実行すると、Raspberry Pi に接続されたブザーは 0.1 秒ごとにオンとオフを繰り返してビープ音を発生します。同時にコンソールには “Buzzer On” と “Buzzer Off” のメッセージが表示され、ブザーの状態と同期します。Ctrl + C を押してプログラムを停止するまで、この動作は継続します。


コードの理解

  1. ライブラリのインポート

    fusion_hat ライブラリは GPIO ピンを簡単に制御するためのインターフェースを提供し、 time モジュールは待機時間を作るために使用されます。

    from fusion_hat.modules import Buzzer
    from fusion_hat.pin import Pin
    from time import sleep
    
  2. ブザーの初期化

    Buzzer オブジェクトを作成し、Pin 17 に関連付けます。

    buzzer = Buzzer(Pin(17))
    
  3. 制御ループ

    プログラムは無限ループ( while True )を使用して、0.1 秒ごとにブザーをオンとオフに切り替え、ビープ音を作ります。 print 文はコンソールに状態を表示します。

    while True:
       print('Buzzer On')
       buzzer.on()
       sleep(0.1)
       print('Buzzer Off')
       buzzer.off()
       sleep(0.1)
    
  4. キーボード割り込み処理

    try-except ブロックにより、Ctrl+C を使ってプログラムを安全に終了できます。

    except KeyboardInterrupt:
       pass
    

トラブルシューティング

  1. ブザーから音が出ない

    • 原因: GPIO ピン接続の誤り、またはブザー配線ミス。

    • 対処方法: ブザーが GPIO17 とグラウンド(GND)に正しく接続されていることを確認してください。

  2. ブザーが常にオンまたはオフのまま

    • 原因: ブザーの故障、または GPIO 設定の問題。

    • 対処方法: ブザーに直接電圧を与えて正常に動作するか確認してください。

  3. スクリプトが KeyboardInterrupt に反応しない

    • 原因: except ブロックが正しく処理していない可能性。

    • 対処方法: try...except KeyboardInterrupt 構造が正しく実装されているか、またメインループを妨げる他のプロセスがないか確認してください。

  4. ビープ音が速すぎる、または耳障り

    • 原因: sleep(0.1) の間隔が短すぎる。

    • 対処方法: sleep() の時間を長くして、ビープ間隔を調整してください。


発展アイデア

  1. カスタムビープパターン 異なるイベントや通知のために、独自のビープパターンを作成してみましょう。

    def beep_pattern():
       buzzer.on()
       sleep(0.3)
       buzzer.off()
       sleep(0.1)
       buzzer.on()
       sleep(0.1)
       buzzer.off()
    
  2. ユーザー入力によるブザー制御 ユーザーがブザーのオン・オフやパターンを動的に変更できるようにします。

    while True:
       command = input("Enter 'on', 'off', or 'pattern': ")
       if command == 'on':
          buzzer.on()
       elif command == 'off':
          buzzer.off()
       elif command == 'pattern':
          beep_pattern()
    

まとめ

このプロジェクトでは、NPN トランジスタと Raspberry Pi の GPIO ピンを使ってアクティブブザーを駆動する方法を学びました。シンプルな回路とコードで音を出せるため、通知音や警告音などのサウンドベースの電子プロジェクトの入門として最適です。