Arduino 入門
Lesson 07
【圧電スピーカー編】
こんにちは、管理人のomoroyaです。
「Arduino」を使ったマイコンのプログラミングを子供と一緒に学習するブログ。
少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。
本記事はLesson 07 【圧電スピーカー編】となります。
※パッシブブザーとも呼ばれます。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
圧電スピーカー(パッシブブザー)は、普通のスピーカーと同じで、外部から与えた音声信号に従って音を発生させます。
従って、音程を変えたり、メロディーを流したりする事も可能です。
原理は、ONとOFFを繰り返すことによって空気を振動させ音を発生させます。
その振動周波数をPWM制御することで、異なる音を作り出します。
Lesson 07では、この圧電スピーカー(パッシブブザー)を利用ます。
PWM制御については下記記事にて詳細を解説しています。
Lesson 07目標
圧電スピーカー(パッシブブザー)にUNOから電源を供給します。
上記により圧電スピーカー(パッシブブザー)が「オン」「オフ」し音を発することを確認します。
また、「オン」「オフ」の周期を変えることで、発する音の音程が変わることを理解する。
Lesson 06の電子ブザー(アクティブブザー)は電圧をかけている間はずーっと音がなっていたのとは異なり、圧電スピーカー(パッシブブザー)はON,OFFのはざまで一瞬だけ音が鳴ります。
それは「PWM制御の周波数を変えることで音程が作り出されている」というのを合わせて理解できればなお良いです。
最後に、メロディーを作って遊ぶことができれば目標達成です。
遊ぶというところが今回も一番大事なところです。
準備
今回のLessonの準備に取り掛かりましょう。
本Lessonは部品も少なく、すぐに実践に移ることができるLessonです。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- 圧電スピーカー(パッシブブザー)
- Jumper wire オス-メス オス-オス メス –メス
(UNOと電子ブザーをつなぐための配線) - 「pitches.h」ライブラリ
※今回はブレッドボードを使いません。
使ってももちろんできますが、M-F Jumper wireを使用することでブレッドボードを使わずに組み上げることができます。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
新たに登場した部品について説明していきます。
圧電スピーカー(パッシブブザー)
下の写真が、圧電スピーカー(パッシブブザー)です。
今回購入したELEGOO UNO キットに合わせて梱包されています。
圧電スピーカーには「+」、「-」がありますので極性に気を付けましょう。
※電子ブザー(アクティブブザー)のシールを取ってしまうと見た目は変わりません。
手持ちがない方はAmazon等で購入が可能ですが秋月電子などで購入されるのも一つです。
3端子品で良ければAmazonでも安価であります。
使い方は同じで、一端子使わないだけです。
電子ブザーと圧電スピーカー違い
前回Lesson 06でも説明しましたが、おさらいということでもう一度。
内部に発振回路が入っていて、決まった直流電圧を掛けるだけで決まった音程のブザー音が鳴ります。
普通のスピーカーと同じで、外部から与えた音声信号に従って音を出します。従って、音程を変えたり、メロディーを流したりする事も可能です。
下に示す裏が黒いのが電子ブザー、裏に緑の基板が見えるのが圧電スピーカーです。
M-F Jumper wire(配線)
こちらも、おさらいです。
下に示すのが、M-F Jumper wireです。
M-M Jumper wireとの違いは
両端が「オスーオス」、「オスーメス」なのかの違いです。
ブザーから足がでていますので、オスーメスのwireを使用することでブレッドボードが不要となります。
オスーオスしかもっていない場合はブレッドボードを使用してください。
Jumper wireは今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
「pitches.h」ライブラリ
「pitches.h」ライブラリには音階に必要な周波数が定義されています。
このライブラリを使用すれば、自分で記述を書かずに定義された変数を使用するだけです。
サンプルコード1では使用しませんが、手間を省くためににサンプルコード2では「pitches.h」ライブラリを使用します。
参考のため、下記に「pitches.h」ライブラリの一部を抜粋して記載しておきます。
/************************************************* * Public Constants *************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 ---以下変数と周波数の羅列が続く---
ライブラリの使用方法については以下の記事をにて詳細を解説しています。
音階と周波数
音階と周波数の関係を表にまとめておきます。
メロディを作る際の参考にしてください。
周波数が高くなるほど音が高くなります。
ド | レ | ミ | ファ | ソ | ラ | シ | |
---|---|---|---|---|---|---|---|
1 | 131 | 147 | 165 | 175 | 196 | 220 | 247 |
2 | 262 | 294 | 330 | 349 | 392 | 440 | 494 |
3 | 523 | 587 | 659 | 698 | 784 | 880 | 988 |
他にも#音なども出すことができます。
音階周波数について興味のある方は下記のサイトを参考にしてみてください。
実践 かえるのうた を作る
さっそく、部品を接続しコードを読み込んでいきましょう。
接続
下図に示すように、wireを使用してUNOとブザーを接続しましょう。
使用するポートは、Digital IOの「8」と「GND」です。
穴に挿入しづらいときは、ラジオペンチなどを使用すると良いかもしれません。
ブザーの「+極」を8番ポートへ、「-極」をGNDへ接続します。
今回もこれだけです。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
今回も理解を深めるために、本記事のコードをコピーして使用することをお勧めします。
メーカーのチュートリアルに梱包されているコードよりわかりやすくしてみました。
もしメーカーのチュートリアルに梱包されているコードを利用したい場合は下記を参照ください。
チュートリアルの入手は、Arduino 入門 購入編を参照ください。
ロードの仕方などの詳細はLesson 02を参照ください。
ファイル名は「passive_buzzer.ino」です。
開いたら、編集しても良いように「ファイル」⇒「名前を付けて保存」で別名で保存しておきましょう。
コマンド説明
コードの説明をしていきたいと思います。
これまでのLessonにでてきていないコードについて説明します。
コマンド | 説明 |
---|---|
tone(pin, frequency, duration) | 指定した周波数の矩形波(50%デューティ)を生成します。 pin: トーンを出力するピン frequency: 周波数(Hz) duration: 出力する時間をミリ秒で指定 例 tone(12,262,300); 12番ポートに262HzのPWM信号を0.3秒出力 |
配列 | 例 myXXXという配列のmyXXX[0]~myXXX[6]を初期化 int myXXX[6];初期化せずにmxXXXを配列宣言。 配列myXXX[0]~myXXX[5]には、0,2,4,6,8,10の値が入る。 int myXXX[0,2,4,6,8,10]; |
サンプルコード1(ドレミファソラシド)
まずは、「ドレミファソラシド」を確かめるコードです。
下記をコピーしてUNOに書き込んでみてください。
//Lesson 07-01 ドレミファソラシドを繰り返す //https://omoroya.com/ int duration = 300 ; // 音の長さを指定 int pin = 8 ; // 圧電スピーカを接続したピン番号 //初期設定箇所 toneを使用する場合はpinMode関数で出力指定は必要なし void setup() { } void loop() { //ループ関数 tone(pin,262,duration) ; // ド delay(duration) ; // 音がなっている間待つ tone(pin,294,duration) ; // レ delay(duration) ; // 音がなっている間待つ tone(pin,330,duration) ; // ミ delay(duration) ; // 音がなっている間待つ tone(pin,349,duration) ; // ファ delay(duration) ; // 音がなっている間待つ tone(pin,392,duration) ; // ソ delay(duration) ; // 音がなっている間待つ tone(pin,440,duration) ; // ラ delay(duration) ; // 音がなっている間待つ tone(pin,494,duration) ; // シ delay(duration) ; // 音がなっている間待つ tone(pin,523,duration) ; // ド delay(5000) ; // 5秒待って繰り返す }
いかがでしょうか。「ドレミファソラシド」を奏でることはできましたでしょうか?
コードの下記部分の「300」を変えて、音の長さを変えて自分が納得のいく長さに調整してみてください。
int duration = 300 ; // 音の長さを指定
では次に、「かえるのうた」を作ってみましょう。
ドレミファソラシドを定義しておけばいつでも呼び出して使うことができます。
今回は、自分でコードを書く手間を省くために「pitches.h」ライブラリを使用します。
ついでにライブラリの使用の仕方も思い出しましょう。
サンプルコード2(かえるのうた)
このサンプルでは「かえるのうた」を奏でられるようになっています。
//Lesson 07-02 カエルの歌 //https://omoroya.com/ #include "pitches.h" //音階が記載されているpitches.hを呼び出す。 int duration = 200 ; // 音の長さを指定 int pin = 8 ; // 圧電スピーカを接続したピン番号 //かえるのうたの音階を記載 int melody[] = { //配列を定義 melodyという変数に下記64個の値を格納、0は周波数0ということ音がでない NOTE_C5, 0, NOTE_D5, 0, NOTE_E5, 0, NOTE_F5, 0, NOTE_E5, 0, NOTE_D5, 0, NOTE_C5, 0, 0, 0, NOTE_E5, 0, NOTE_F5, 0, NOTE_G5, 0, NOTE_A5, 0, NOTE_G5, 0, NOTE_F5, 0, NOTE_E5, 0, 0, 0, NOTE_C5, 0, 0, 0, NOTE_C5, 0, 0, 0, NOTE_C5, 0, 0, 0, NOTE_C5, 0, 0, 0, NOTE_C5, NOTE_C5, NOTE_D5, NOTE_D5, NOTE_E5, NOTE_E5, NOTE_F5, NOTE_F5, NOTE_E5, 0, NOTE_D5, 0, NOTE_C5, 0, 0, 0 }; //初期設定箇所 toneを使用する場合はpinMode関数で出力指定は必要なし void setup() { } void loop() { //ループ関数 for (int i = 0; i < 64; i++) { //0~63まで繰り返す。64になったらfor文を抜ける tone( pin, melody[i], duration ); //ポートの8番に配列melodyの周波数で、0.2秒 delay(duration); //音がなっている間待つ } }
いかがでしょうか。
「かえるのうた」になっていましたでしょうか。
NOTE_XXの定義がわかりずらいので、自分で#defineで分かりやすい名前で定義してしまった方がよいかもしれません。
メロディーっぽくするには、音と音の間に区切りを設ける調整が必要です。
音と音の間に周波数「0」を入れることで音の出ない期間を設けることで調整しています。
「pitches.h」ライブラリには他にも音階が定義されていますので、ぜひ色々と遊んでみてください。
遊ぶことが理解に一番近づく方法です。
まとめ
今回は以下の内容について理解してもらいました。
特に項目4の遊ぶことが一番の目標でした。
2.圧電スピーカー(パッシブブザー)が「オン」「オフ」し音を発することを確認する。
3.「オン」「オフ」の周期を変えることで、発する音の音程が変わることを理解する。
4.メロディーを作って遊ぶ。
いかがだったでしょうか。
Lesson 07 【圧電スピーカー(パッシブブザー)編】はここまで。
ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。
次回、Lesson 08は【チルトスイッチ編】です。
スイッチを傾けることで、ON、OFFの切り替えが可能です。
何かが倒れた時などの検知に使えそうです。
何に使うか考えるのも1つの楽しみです。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
はじめまして、Arduino超初心者です。とても有益なブログを制作していただき感謝しております。Lチカから初めて今電圧スピーカを試しています。 サンプルコード2で必要な
pitches.h ですが、ツール > マネージライブラリ > pitches.h で検索したのですがGitHub というところがヒットするのですがどうも見つかりません。
私はELEGOOのキットを買ったのでそのサイトからテキストなどをダウンロードしており
レッスンのファイルからプログラムを開けて velify してもエラーが出てpitches.h が見つからないと出てきます。どうも超初心なので説明が不十分で申し訳ありませんが、出来ましたら解決策を教えては頂けないでしょうか、どうぞよろしくお願いします。
メールにて頂けると有り難いです。
明けましておめでとうございます!
pitchesライブラリは提供されたライブラリとなります。
ELEGOOをお使いであれば「pitches.zip」がダウンロードしたものの中にあります。
「スケッチ」⇒「ライブラリをインクルード」⇒「.ZIP形式のライブラリをインストール」
pitches.zipを選択
上記にて使えるようになります。
ライブラリのインクルードに関しては「Lesson 01」で解説しています。
こちらも併せて参考にしてみてください。
https://omoroya.com/arduino-lesson01/