- 必要なハードウェア:
- ArduinoのTone()関数を理解する:
- pitches.hのヘッダファイル:
- Arduinoで音符を再生する:
- 回路図とハードウェア:
- Arduinoプログラムの説明:
- このメロディープレーヤーArduino回路の動作:
Arduinoは、ほとんどすべてをシンプルに見せてくれた開発者のコミュニティのおかげで、マイクロコントローラープロジェクトを簡素化および高速化するための優れた方法です。ここにはたくさんのArduinoプロジェクトがあり、試して楽しんでください。プロジェクトによっては、何かについて通知したり、視聴者を感動させたりするために、サウンドアクションが必要になる場合があります。簡単なプログラムと安価なピエゾスピーカーの助けを借りて、ピアノで演奏できるほとんどすべてのテーマ曲をArduinoで模倣できると言ったらどうでしょうか。
このチュートリアルでは、Arduinoトーン()関数を使用してピエゾブザーまたはスピーカーでメロディーを再生することがいかに簡単で簡単かを学びます。このチュートリアルの最後に、パイレーツオブカリビアン、クレイジーフロッグ、スーパーマリオ、タイタニックの有名な音色を演奏できるようになります。また、Arduinoでピアノ曲を演奏する方法も学びます。最後にビデオを確認してください。
必要なハードウェア:
- Arduino(任意のバージョン–ここではUNOが使用されます)
- ピエゾスピーカー/ブザーまたはその他の8オームスピーカー。
- ブレッドボード
- 接続線
- ボタンを押す
- 1k抵抗(オプション)
Arduinoの Tone() 関数を理解する:
トーン()が どのように機能するかを理解する前に、ピエゾブザーがどのように機能するかを知る必要があります。私たちの学校でピエゾクリスタルについて学んだかもしれません。それは、機械的振動を電気に、またはその逆に変換するクリスタルに他なりません。ここでは、水晶が振動して音を出す可変電流(周波数)を適用します。したがって、ピエゾブザーにノイズを発生させるには、ピエゾ電気水晶を振動させる必要があります。ノイズのピッチとトーンは、水晶の振動速度によって異なります。したがって、トーンとピッチは、電流の周波数を変えることによって制御できます。
さて、Arduinoから可変周波数を取得するにはどうすればよいですか?これがトーン()機能の出番です。トーン()は特定のピンで特定の周波数を生成できます。必要に応じて、期間についても言及できます。 トーン() の構文は次のとおりです。
構文tone(pin、frequency)tone(pin、frequency、duration)パラメーターpin:トーンを生成するピン周波数:ヘルツ単位のトーンの周波数-unsigned int duration:ミリ秒単位のトーンの持続時間(オプション) --unsigned long
ピンの値は、任意のデジタルピンにすることができます。ここではピン番号8を使用しました。生成できる周波数は、Arduinoボードのタイマーのサイズによって異なります。UNOおよび他のほとんどの一般的なボードの場合、生成できる最小周波数は31Hzで、生成できる最大周波数は65535Hzです。しかし、私たち人間は2000Hzから5000Hzの間の周波数しか聞くことができません。
pitches.hの ヘッダファイル:
これで、arduinotone ()関数 を使用してノイズを生成する方法がわかりました。しかし、周波数ごとにどのようなトーンが生成されるかをどうやって知るのでしょうか?
Arduinoは、各周波数を特定の音符タイプに等しくする音符テーブルを提供してくれました。このノートテーブルは元々、 tone() コマンドのベースとなったBrettHagmanによって作成されました。このノートテーブルを使用してテーマを再生します。あなたが楽譜に精通している人なら、この表をある程度理解できるはずです。私のような他の人にとっては、これらは単なるコードの別のブロックです。
#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 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
コードの上に、このzipファイルにpitches.hヘッダファイルで指定され 、 あなただけダウンロードする必要があり、最後にこのチュートリアルを与えられたとして、当社のArduinoのコードでこのファイルを含めるか、zipファイルに指定されたコードを使用します。
Arduinoで音符を再生する:
Arduinoを使用してまともなメロディーを演奏するには、これらのメロディーを構成するものを知る必要があります。テーマをプレイするために必要な3つの主な要素は次のとおりです。
- 音価
- ノート期間
- テンポ
任意の音価を再生するための pitches.h ヘッダーファイルがあります。 次に 、 それ を再生するための特定の音符の長さを確認する必要があります。テンポは、メロディーがどれだけ速く演奏されるべきかということに他なりません。 音 価と音符の長さがわかれば、次のような tone()で 使用できます。
トーン(pinName、音価、音符の長さ);
このチュートリアルで再生されるトーンについては、プロジェクトで再生できる「themes.h」ヘッダーファイル内の音価と音符の長さを示しました。しかし、私の鉱山に特定のトーンがあり、それをプロジェクトで再生したい場合は、このトピックをスキップして次のトピックに進んでください。
特定の音色を再生するには、その特定の音楽の楽譜を取得し、そこから音価と音符の長さを読み取って、楽譜をArduinoスケッチに変換する必要があります。あなたが音楽の学生なら、それはあなたにとって簡単なことです。そうでなければ、私がしたように、しばらく時間をかけて頭を壊します。しかし、一日の終わりにピエゾブザーでトーンが鳴ると、努力する価値があります。
音価と音符の長さを取得したら、以下に示すように、「themes.h」ヘッダーファイル内のプログラムにそれらをロードします。
// ############## ** "HE IS APIRATE"カリブ海の海賊のテーマソング** ############## // int Pirates_note = {NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_D4 NOTE_A3、NOTE_C4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_E4、NOTE_F4、NOTE_F4、NOTE_F4、NOTE_G4、NOTE_E4、NOTE_E4、NOTE_D4、NOTE_C4、NOTE_C4、NOTE_D4、0、NOTE_A3、NOTE_C4、NOTE_B3、NOTE_A3、NOTE_C4、NOTE_B NOTE_C4、NOTE_C4、NOTE_C4、NOTE_C4、NOTE_D4、NOTE_C4、NOTE_D4、0、0、NOTE_A3、NOTE_C4、NOTE_D4、NOTE_D4、NOTE_D4、NOTE_F4、NOTE_G4、NOTE_G4、NOTE_G4、NOTE_A4、NOTE_G4、NOTE_G4、NOTE_A4、NOTE_A4、NOTE_A4、NOTE_A 0、NOTE_D4、NOTE_E3、NOTE_F4、NOTE_F4、NOTE_G4、NOTE_A4、NOTE_D4、0、NOTE_D4、NOTE_F4、NOTE_E4、NOTE_E4、NOTE_F4、NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8、4、 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8、8,4,8,8,8,4,4,8,8、 4,4,8,8,4,4,8,4、4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8、 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############# //
上記のコードブロックは、映画「パイレーツオブカリビアン」の「彼こそが海賊」テーマの音価と音符の長さを示しています。同様に、このようにテーマを追加できます。
回路図とハードウェア:
このArduinoトーンジェネレータプロジェクト プロジェクトの概略 図を次の図に示します。
接続は非常に簡単です。1K抵抗を介してArduinoのピン8とグラウンドに接続されているピエゾスピーカーがあります。この1k抵抗は電流制限抵抗であり、電流を安全な制限内に保つために使用されます。また、必要なメロディーを選択するための4つのスイッチがあります。スイッチの一方の端はグランドに接続され、もう一方の端はピン2、3、4、および5にそれぞれ接続されています。スイッチでは、ソフトウェアを使用して内部でプルアップ抵抗が有効になります。回路は非常に単純なので、以下に示すようにブレッドボードを使用して接続できます。
Arduinoプログラムの説明:
概念を理解したら、Arduinoプログラムは非常に簡単です。完全なコードは、チュートリアルの最後に記載されています。ヘッダーファイルの追加に慣れていない場合は、ここからコードをZIPファイルとしてダウンロードし、Arduinoに直接アップロードできます。
上記の2つは、追加する必要のあるヘッダーファイルです。 「pitches.h」 は、各音符を特定の周波数に 等しく するために使用され、 「themes.h」 には、4つのトーンすべての音価と音価が含まれます。
#include "pitches.h" #include "themes.h"
必要に応じて各音を鳴らす機能を作成します。ここで、関数 Play_Pirates() が呼び出されると、「彼こそが海賊」というトーンが再生されます。この関数は、ピン番号8の周波数を生成するトーン関数で構成されています 。noTone(8) は、音楽が再生されると停止するために呼び出されます。独自のトーンを演奏したい場合は、Pirates_noteとPirates_durationを、 「themes.h」 値に保存した新しいノートとデュレーションの値に変更します。
void Play_Pirates(){for(int thisNote = 0; thisNote <(sizeof(Pirates_note)/ sizeof(int)); thisNote ++){int noteDuration = 1000 / Pirates_duration; //期間を時間遅延トーンに変換(8、Pirates_note、noteDuration ); int pauseBetweenNotes = noteDuration * 1.05; //ここで1.05はテンポです、それをゆっくり再生するために増加しますdelay(pauseBetweenNotes); noTone(8); }}
ピン2、3、4、および5は、再生する特定のトーンを選択するために使用されます。これらのピンは、上記のコード行を使用して内部プルアップ抵抗を使用し、デフォルトでハイに保持されます。ボタンを押すと、地面に引き下げられます。
pinMode(2、INPUT_PULLUP); pinMode(3、INPUT_PULLUP); pinMode(4、INPUT_PULLUP); pinMode(5、INPUT_PULLUP);
以下のコードブロックは、ボタンが押されたときに曲を再生するために使用されます。各ボタンのデジタル値を読み取り、ロー(ゼロ)になると、ボタンが押されたと見なし、必要な関数を呼び出してそれぞれのトーンを再生します。
if(digitalRead(2)== 0){Serial.println( "Selected-> '彼こそが海賊'"); Play_Pirates(); } if(digitalRead(3)== 0){Serial.println( "Selected-> 'Crazy Frog'"); Play_CrazyFrog(); } if(digitalRead(4)== 0){Serial.println( "Selected-> 'Mario UnderWorld'"); Play_MarioUW(); } if(digitalRead(5)== 0){Serial.println( "Selected-> '彼こそが海賊'"); Play_Pirates(); }
このメロディープレーヤーArduino回路の動作:
コードとハードウェアの準備ができたら、プログラムをArduinoに書き込むだけで、ボタンを押すだけでトーンを再生できるようになります。問題が発生した場合は、デバッグ用のシリアルモニターを確認するか、コメントセクションを使用して問題を報告してください。喜んでお手伝いさせていただきます。
プロジェクトの完全な動作は、以下のビデオに示されています。プロジェクトを楽しんで、プロジェクトの一部で使用したり、プロジェクトの新しいトーンを作成したりすることを願っています。はいの場合は、コメントセクションで自由に作業を共有してください。