注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

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

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

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

3.2 カスタムトーン

前回のプロジェクトではアクティブブザーを使用しましたが、今回はパッシブブザーを使います。

アクティブブザーと同様に、パッシブブザーも電磁誘導の現象を利用して動作します。違いは、パッシブブザーには発振源がないため、直流信号を使ってもビープ音は鳴りません。 しかし、これによりパッシブブザーは自分の発振周波数を調整でき、「ド、レ、ミ、ファ、ソ、ラ、シ」といった異なる音符を出すことができます。

パッシブブザーにメロディを鳴らしてみましょう!

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

一式を購入することは非常に便利です。こちらがリンクです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

BUY

ブレッドボード

BUY

ジャンパーワイヤ

BUY

抵抗器

BUY

ブザー

-

トランジスタ

BUY

利用可能なピン

このプロジェクトのESP32ボードで利用可能なピンのリストはこちらです。

利用可能なピン

IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

回路図

../../_images/circuit_3.1_buzzer.png

IO14の出力がハイの場合、1Kの電流制限抵抗を経てS8050(NPNトランジスタ)が導通し、ブザーが鳴ります。

S8050(NPNトランジスタ)の役割は電流を増幅し、ブザーの音を大きくすることです。実際には、ブザーを直接IO14に接続することもできますが、ブザーの音が小さいことがわかるでしょう。

配線図

キットには2種類のブザーが含まれています。私たちはパッシブブザーを使用する必要があります。それらを回して、露出したPCBが私たちが必要とするものです。

../../_images/buzzer.png

ブザーの動作にはトランジスタが必要で、ここではS8050(NPNトランジスタ)を使用します。

../../_images/3.1_buzzer_bb.png

コード

注釈

  • esp32-starter-kit-main\c\codes\3.2_custom_tone のパスの下にある 3.2_custom_tone.ino ファイルを開きます。

  • ボード(ESP32 Dev Module)と適切なポートを選択した後、 アップロード ボタンをクリックします。

  • "Unknown COMxx"が常に表示されますか?

コードが正常にアップロードされると、パッシブブザーが7つの音符のシーケンスを演奏するのが聞こえます。

どのように動作するのか?

  1. ブザーピンとPWM解像度のための定数を定義します。

    const int buzzerPin = 14; //buzzer pin
    const int resolution = 8;
    
  2. 7つの音階の周波数をHzで含む配列を定義します。

    int frequencies[] = {262, 294, 330, 349, 392, 440, 494};
    
  3. 指定した周波数を指定した期間、ブザーで鳴らすための関数を作成します。

    void playFrequency(int frequency, int duration) {
        ledcWriteTone(buzzerPin, frequency); // Start the tone
        delay(duration); // Wait for the specified duration
        ledcWriteTone(buzzerPin, 0); // Stop the buzzer
    }
    
    • uint32_t ledcWriteTone(uint8_t pin, uint32_t freq);: この関数は、選択した周波数で50%のPWMトーンにピンを設定するために使用されます。

    • pin はLEDCピンを選択します。

    • freq はPWM信号の周波数を選択します。

    この関数は、設定されたチャネルの frequency を返します。 0 が返された場合、エラーが発生し、LEDCチャネルが設定されませんでした。

  4. setup() 関数内でPWMチャネルを設定し、ブザーピンをアタッチします。

    void setup() {
        ledcAttach(buzzerPin, 2000, resolution); // Set up the PWM pin
    }
    
    • bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution);: この関数は、指定された周波数と解像度でLEDCピンを設定するために使用されます。LEDCチャネルは自動的に選択されます。

      • pin はGPIOピンを選択します。

      • freq はPWMの周波数を選択します。

      • resolution_bits はLEDCチャネルの解像度を選択します。範囲は1〜14ビット(ESP32の場合は1〜20ビット)です。

  5. loop() 関数内で、各音符の間に短い休止を置き、シーケンスを繰り返す前に1秒間の休止を置いて、7つの音階を順に鳴らします。

    void loop() {
        for (int i = 0; i < 7; i++) {
            playFrequency(frequencies[i], 300); // Play each note for 300ms
            delay(50); // Add a brief pause between the notes
        }
        delay(1000); // Wait for 1 second before replaying the sequence
        }