【Raspberry Pi Pico入門 – 15】圧電スピーカーを鳴らしてみる

Raspberry Pi Pico入門,基本編Arduino,Raspberry Pi Pico

概要

今回は圧電スピーカーを鳴らしてみます。前回の圧電ブザーとは異なり回路が内蔵されていないので、どのような音を鳴らすのかをマイコンで制御する必要があります。逆に言えば上手く制御すれば好きな音楽を鳴らしたり電子楽器を作ることが出来ます。

また今回はPNP型トランジスタを使って動かしてみます。NPN型で動かす場合は前回と同じ回路でOKですし、PNP型トランジスタで圧電ブザーを動かしたいときは今回の回路で動かすことが出来ます。それぞれの違いについては解説で説明します。

実行環境

IDE:Arduino IDE 2.2.1
MCU:Raspberry Pi Pico

回路

以下のように配線します。トランジスタはPNP型を使います。(スターターキットにはS8550と印字されたものが入っています)
配線の時にトランジスタの向きに注意してください。

コーディング

新しくスケッチを作成し、以下の内容をコピペしてください。

const int BUZZER_PIN = 16;

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  tone(BUZZER_PIN, 262, 800); /*ド(C4)*/
  delay(1000);
  tone(BUZZER_PIN, 294, 800); /*レ(D4)*/
  delay(1000);
  tone(BUZZER_PIN, 330, 800); /*ミ(E4)*/
  delay(1000);
  tone(BUZZER_PIN, 349, 800); /*ファ(F4)*/
  delay(1000);
  tone(BUZZER_PIN, 392, 800); /*ソ(G4)*/
  delay(1000);
  tone(BUZZER_PIN, 440, 800); /*ラ(A4)*/
  delay(1000);
  tone(BUZZER_PIN, 494, 800); /*シ(B4)*/
  delay(1000);
  tone(BUZZER_PIN, 523, 800); /*ド(C5)*/
  delay(1000);

  tone(BUZZER_PIN, 262); /*ド(C4)*/
  delay(2000);
  noTone(BUZZER_PIN);
  delay(1000);
}

動作確認

ド・レ・ミ・ファ・ソ・ラ・シ・高いド・低いドの順に音が鳴れば成功です。

解説

コードの解説

スピーカーは電気をON/OFF、またはプラス/マイナスを素早く繰り返すことで音が鳴り、1秒間に何回繰り返すかで音の高さが変わります。この何回繰り返すかは周波数と呼ばれており、単位は[Hz](ヘルツ)です。

tone関数はLEDの調光の時に使ったPWM機能を使い、指定した周波数・Duty50%のPWM信号を出力する関数です。
第1引数には出力したいピンの番号を代入します。
第2引数には出力したい周波数を調べます。周波数については「音階 周波数」と検索すると音階と周波数の一覧が見つかると思います。
第3引数は音を鳴らしたい時間を[ms]単位で指定します。何も代入しなかった場合はnoTone()関数が実行されるまで鳴らし続けます。

tone関数はマイコンのタイマー機能を使って信号を出しておりCPUを使っていないので、音を出している間も他の処理を実行することが出来ます。

PNPトランジスタの使い方

PNPトランジスタを使うときは下図のような回路を組みます。NPNトランジスタでは3.3Vピンとトランジスタの間にスピーカーを配線しましたが、PNPトランジスタではGNDとトランジスタの間にスピーカーを配線します。
SIGNALがLOWになると、エミッタとベースの間に電位差が生まれるのでエミッタからベースに電流が流れ、ベース電流に増幅率を掛けた値の電流がスピーカーに流れます。

プルダウン抵抗の位置は前回の解説と同じく、下図のように置いてもOKです。ベース電流の計算方法も前回の解説と同じです。
(今回もこちらの回路の方が一般的です)

NPN型とPNP型の違い

NPN型とPNP型は使うときの回路が異なるのですが、これは電流の流れ方が異なるからです。
※電気の流れ方が異なるのはP型半導体とN型半導体の組み合わせが異なるからです。詳しくは省略します。

NPN型はベースからエミッタに電流が流れることで、コレクタからエミッタに大電流が流れます。
つまり電圧が「ベース > エミッタ」となった時に電流が流れるので、エミッタをGND(=0V)に接続し、ベースをHigh(=3.3V)にすることで電流を流す、という使い方が最もシンプルになります。

PNP型はエミッタからベースに電流が流れることで、エミッタからコレクタに大電流が流れます。
つまり電圧が「ベース < エミッタ」となった時に電流が流れるので、エミッタを3.3Vに接続し、ベースをLow(=0V)にすることで電流を流す、という使い方が最もシンプルになります。

電流の向きは回路記号の矢印で覚えると使い方がイメージしやすいです。

NPN型とPNP型のメリット・デメリット

NPN型とPNP型、どっちを使うべき?と悩んだ時は下の一覧を参考にしてみてください。
ここでいう「負荷」はモーターやスピーカーのことを指します。
※メリット・デメリットは私が個人的に感じていることなので、もしかしたら書籍によっては違うことが書かれているかもしれません。

  • NPN型のメリット
    ・ベース電圧と負荷の電圧が異なっていても使える
    (マイコンの電圧は3.3Vだが、負荷の電圧は何Vでもよい)
    ・動作が正論理(ベースがHighのとき電流が流れる)
  • NPN型のデメリット
    ・負荷のマイナス側にトランジスタを置くので、負荷のプラス側には電圧が常に印加された状態になる(マイナス側の配線がショートしたら誤動作する)
    • PNP型のメリット
      ・負荷のプラス側にトランジスタを置くので、トランジスタに電流が流れていない時は負荷に電圧が印加されない(ショートしても誤作動しない)
    • PNP型のデメリット
      ・ベース電圧と負荷の電圧は同じでないと使えない(エミッタ電圧=ベース電圧のときにOFFとなるため)
      ・負論理(ベースがLowのとき電流が流れる)

    トランジスタが必要になるときは大電流だけではなく、3.3V以上の電圧が必要となるケース(12Vのモーターを動かしたい等)が多いので、個人的にはNPNを使うことが多いです。