Arduinoと戯れてみる!

Arduino 入門 Lesson 07 【圧電スピーカー編】

Arduino-lesson07Arduino入門編
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 07
【圧電スピーカー編】

こんにちは、管理人のomoroyaです。

「Arduino」を使ったマイコンのプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

本記事はLesson 07 【圧電スピーカー編】となります。
※パッシブブザーとも呼ばれます。

 

スポンサーリンク

はじめに

圧電スピーカー(パッシブブザー)は、普通のスピーカーと同じで、外部から与えた音声信号に従って音を発生させます。

従って、音程を変えたり、メロディーを流したりする事も可能です。

 

原理は、ONとOFFを繰り返すことによって空気を振動させ音を発生させます。

その振動周波数をPWM制御することで、異なる音を作り出します。

 

Lesson 07では、この圧電スピーカー(パッシブブザー)を利用ます。

PWM制御については下記記事にて詳細を解説しています。

 

Lesson 07目標

圧電スピーカー(パッシブブザー)にUNOから電源を供給します。

上記により圧電スピーカー(パッシブブザー)が「オン」「オフ」し音を発することを確認します。

また、「オン」「オフ」の周期を変えることで、発する音の音程が変わることを理解する。

Lesson 06の電子ブザー(アクティブブザー)は電圧をかけている間はずーっと音がなっていたのとは異なり、圧電スピーカー(パッシブブザー)はON,OFFのはざまで一瞬だけ音が鳴ります。

それは「PWM制御の周波数を変えることで音程が作り出されている」というのを合わせて理解できればなお良いです。

最後に、メロディーを作って遊ぶことができれば目標達成です。

遊ぶというところが今回も一番大事なところです。

 

準備

今回のLessonの準備に取り掛かりましょう。

本Lessonは部品も少なく、すぐに実践に移ることができるLessonです。

 

必要なもの

※今回はブレッドボードを使いません。
使ってももちろんできますが、M-F Jumper wireを使用することでブレッドボードを使わずに組み上げることができます。

 

Jumper wireは今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

使用部品説明

新たに登場した部品について説明していきます。

 

圧電スピーカー(パッシブブザー)

下の写真が、圧電スピーカー(パッシブブザー)です。

今回購入したELEGOO UNO キットに合わせて梱包されています。

圧電スピーカーには「+」、「-」がありますので極性に気を付けましょう。

※電子ブザー(アクティブブザー)のシールを取ってしまうと見た目は変わりません。

Arduino-lesson07-01

 

手持ちがない方はAmazon等で購入が可能ですが2端子品がなく高めです。

秋月電子などで購入されるのも一つです。

 

3端子品で良ければAmazonでも安価であります。

使い方は同じで、一端子使わないだけです。

 

電子ブザーと圧電スピーカー違い

前回Lesson 06でも説明しましたが、おさらいということでもう一度。

電子ブザー(アクティブブザー)
内部に発振回路が入っていて、決まった直流電圧を掛けるだけで決まった音程のブザー音が鳴ります。
圧電スピーカー(パッシブブザー)
普通のスピーカーと同じで、外部から与えた音声信号に従って音を出します。従って、音程を変えたり、メロディーを流したりする事も可能です。

 

下に示す裏が黒いのが電子ブザー、裏に緑の基板が見えるのが圧電スピーカーです。

Arduino-buzzer

 

M-F Jumper wire(配線)

こちらも、おさらいです。

下に示すのが、M-F Jumper wireです。

M-M Jumper wireとの違いは

両端が「オスーオス」、「オスーメス」なのかの違いです。

arduino-wire

ブザーから足がでていますので、オスーメスの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
---以下変数と周波数の羅列が続く---

 

ライブラリの使用方法については以下の記事をにて詳細を解説しています。

 

音階と周波数

音階と周波数の関係を表にまとめておきます。

メロディを作る際の参考にしてください。

周波数が高くなるほど音が高くなります。

ファ
131147165175196220247
262294330349392440494
523587659698784880988

他にも#音なども出すことができます。

 

音階周波数について興味のある方は下記のサイトを参考にしてみてください。

 

実践 かえるのうた を作る

さっそく、部品を接続しコードを読み込んでいきましょう。

 

接続

下図に示すように、wireを使用してUNOとブザーを接続しましょう。

使用するポートは、Digital IOの「8」と「GND」です。

穴に挿入しづらいときは、ラジオペンチなどを使用すると良いかもしれません。

ブザーの「+極」を8番ポートへ、「-極」をGNDへ接続します。

今回もこれだけです。

Arduino-lesson07-02

 

 

コードの書き込み

接続が終わったら、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の遊ぶことが一番の目標でした。

1.圧電スピーカー(パッシブブザー)にUNOから電源を供給する。
2.圧電スピーカー(パッシブブザー)が「オン」「オフ」し音を発することを確認する。
3.「オン」「オフ」の周期を変えることで、発する音の音程が変わることを理解する。
4.メロディーを作って遊ぶ。

 

いかがだったでしょうか。

Lesson 07 【圧電スピーカー(パッシブブザー)編】はここまで。

ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。

 

次回、Lesson 08は【チルトスイッチ編】です。

スイッチを傾けることで、ON、OFFの切り替えが可能です。

何かが倒れた時などの検知に使えそうです。

何に使うか考えるのも1つの楽しみです。

Arduino 入門 Lesson 08 【チルトスイッチ編】
本日はLesson 08【チルトスイッチ編】です。Tilt Switch(チルトスイッチ)またはTilt Sensor(チルトセンサー)と呼ばれる部品です。チルトスイッチを傾けたり、戻したりすることでLEDが消灯、点灯する回路を作ります。…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分)一般プライム会員
5,000円~19,999円0.5%1.0%
2,0000円~39,999円1.0%1.5%
40,000円~89,999円1.5%2.0%
90,000円~2.0%2.5%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

\Amazonギフト券 1000ポイントキャンペーン/
Amazonチャージ 初回購入で1000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

タイトルとURLをコピーしました