3ウェイポリフォニーを使用したArduinoNanoの誕生日おめでとうメロディ
コンポーネントと消耗品
> |
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
1つのミニブレッドボードに3つのブザーを付けて、ArduinoNanoでポリフォニーの「お誕生日おめでとう」テーマを再生します。
まず第一に-デモンストレーション
これをUSB電源(コンピューターだけでなく)に接続すると、「お誕生日おめでとう」のメロディーが無期限に再生されます...ほとんどのように...本当にうんざりするまで=]
ところで、対応するチャンネル/ブザーで音符が変わるたびに、ライトがそのまま点滅します。
回路図
アイデアは、(ほとんど)はんだ付けのない超コンパクトなデバイスを作ることでした。
最終的に、私はこのような小さなブレッドボードに必要なものすべてを収めることができました:
<図> <図>穴は次のようにブレッドボード内で相互接続されています:
<図>ここでの秘訣は、Arduino Nanoボードがこのようなブレッドボードに完全に収まり、ブレッドボードの両側にいくつかの追加コンポーネントを接続できるようにすることです。
申し訳ありませんが...私はここに図を描くのが面倒ですが、このケースは非常に単純なので、これらのクローズアップはすべてを理解するのに十分すぎると確信しています=]
<図> <図> <図> <図> <図> <図> <図>ご覧のとおり、ここではGravitechのArduino Nano v3.0ボードを使用していますが、どのアナログでも使用できます。ここのブザーとLEDはごく普通のものです。実際に特別なパラメータと一致する必要はありません。
ここの抵抗器は100オームのものです... LED過負荷保護の一般的な「標準」は220オームですが...しかし誰が気にしますか...¯\ _(ツ)_ /¯
これらの写真でおそらくそれほど明白ではない唯一のことは、ブザーのピンがこの方法でブレッドボードに挿入されていることです:
<図>また、中央のものは他のものよりも大きいことに注意してください。これは、これが「ベース」音楽チャンネルに使用されているためです☝🏻
... 冗談だ! ^ __ ^それらはすべて、音の能力にまったく違いがなく、狂ったマウス合唱団のようにきしむ=]
したがって、問題なく3つの同一のブザーを使用できますが、ブレッドボード上の少し異なる位置に配置し、新しいブザーの配置に応じてプログラムコードの出力ピン番号を変更する必要があります。
また、ここで別の小さな「ハック」に注意してください...とにかくハックを使用しています ここのスターまたは何? =]それで私はいくつかのArduinoの I / O を使用しています ここにグラウンドとしてピン留めします ブザーとLEDのピン😱😱。はい、そうです。実際、プログラムでArduino I / Oピンに「LOW」状態を設定すると、Arduinoボードで標準のGNDピンを使用するのとまったく同じ方法でこれらのピンを使用できます。かっこいいですよね?;)
プログラムについて...
ArduinoIDEスケッチの完全なリストを以下に示します。ただし、ここからダウンロードできるスケッチをコンパイルできるようにするには、追加の「トーン」ライブラリをインストールする必要があります。
https://www.dropbox.com/s/q1udxg4yi47emeo/Tone.zip?dl=0
(登録「提案」のポップアップウィンドウがある場合は、隅にある「x」ボタンで閉じます)
このライブラリをインストールする最も簡単な方法は次のとおりです。ArduinoIDEのメインメニューで、スケッチ-ライブラリを含める-.ZIPライブラリを追加... を選択します。 次に、ダウンロードしたzipファイルを選択します...簡単¯\ _(ツ)_ /¯
このライブラリは、単一のコントローラーで複数のトーンを同時に生成するために必要です(この目標を達成するために、いくつかの追加のハードウェアタイマーとハードウェア割り込みを「内部」で使用します)。簡単に言えば、OSを使用しないシングルプロセッサコアでの一種の「田舎者マルチタスク」です=]
ところで、ここにライブラリの作者がいます(ありがとうbro!=]):
http://playground.arduino.cc/Profiles/Bhagman
...およびライブラリのGitHubページ:
https://github.com/bhagman/Tone
免責事項🙂:
率直に言って、ここの私のプログラムコードはかなりかさばり、読みにくいです。これは主に、1つの線形コマンドフローから同時に3つの「独立した」メロディスレッドと「ジャグリング」する必要があるためです。後でコードをリファクタリングして、メロディーを互いに分離し、将来的に別の曲を再生するために使用できるようにすることを本当に考えていました...しかし、おそらく=]
とても幸運。フィードバックをいただければ幸いです。
最後まで読んでくれてありがとう=]
コード
- Happy_birthday
Happy_birthday Arduino
トーンライブラリをインストールすることを忘れないでください!!#includeトーンソロ;トーンベース;トーンリズム; const int t =600; //四分音符durationconstint tt =t * 2; const int t14 =round(t * 1/4); const int t24 =round(t * 2/4); const int t34 =round(t * 3/4); const int bassLedPin =15; //低音LED信号ピン(別名A1)const int rythmLedPin =17; //リズムLED信号ピン(別名A3)const int soloLedPin =19; //ソロLED信号ピン(別名A5)void wait(Tone t){while(t.isPlaying()){}} int bassLedState =LOW; void switchBassLed(){if(bassLedState ==LOW)bassLedState =HIGH;それ以外の場合、bassLedState =LOW; digitalWrite(bassLedPin、bassLedState);} int rythmLedState =LOW; void switchRythmLed(){if(rythmLedState ==LOW)rythmLedState =HIGH;それ以外の場合、rythmLedState =LOW; digitalWrite(rythmLedPin、rythmLedState);} int soloLedState =LOW; void switchSoloLed(){if(soloLedState ==LOW)soloLedState =HIGH;それ以外の場合、soloLedState =LOW; digitalWrite(soloLedPin、soloLedState);} void setup(void){pinMode(14、OUTPUT); // LEDグランドピン(別名A0)pinMode(16、OUTPUT); // LEDグランドピン(別名A2)pinMode(18、OUTPUT); // LEDグランドピン(別名A4)pinMode(bassLedPin、OUTPUT); //低音LED信号ピンpinMode(rythmLedPin、OUTPUT); //リズムLED信号ピンpinMode(soloLedPin、OUTPUT); //ソロLED信号ピンpinMode(2、OUTPUT); //ソロブザー接地ピンpinMode(9、OUTPUT); //リズムブザーのアースピンsolo.begin(6); //ソロブザー信号ピンbass.begin(12); //低音ブザー信号ピンrythm.begin(0); //リズムブザー信号ピンsolo.play(NOTE_D4、t34); switchSoloLed(); wait(solo); solo.play(NOTE_D4、t14); switchSoloLed(); wait(solo);} void loop(void){bass.play(NOTE_G3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_E4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_B3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_D4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_D4、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_G4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_D4、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); solo.play(NOTE_FS4、tt); switchSoloLed(); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_FS4、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_A4、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); solo.play(NOTE_D4、t34); switchSoloLed(); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); solo.play(NOTE_D4、t14); switchSoloLed(); wait(rythm); bass.play(NOTE_D4、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); solo.play(NOTE_E4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_FS4、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); solo.play(NOTE_D4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_A4、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); solo.play(NOTE_A4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_G3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_G4、tt); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_B3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_D4、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_D4、t34); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); solo.play(NOTE_D4、t14); switchSoloLed(); wait(rythm); bass.play(NOTE_G3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_D5、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_B3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_B4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_D4、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_G4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_C4、t); switchBassLed(); rythm.play(NOTE_C5、t24); switchRythmLed(); solo.play(NOTE_FS4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_E5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_G5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_E4、t); switchBassLed(); rythm.play(NOTE_C5、t24); switchRythmLed(); solo.play(NOTE_E4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_E5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_G5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_G4、t); switchBassLed(); rythm.play(NOTE_C5、t24); switchRythmLed(); solo.play(NOTE_C5、t34); switchSoloLed(); wait(リズム); rythm.play(NOTE_E5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_G5、t14); switchRythmLed(); solo.play(NOTE_C5、t14); switchSoloLed(); wait(rythm); bass.play(NOTE_G3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_B4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_D3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_G4、t); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_FS3、t); switchBassLed(); rythm.play(NOTE_D5、t24); switchRythmLed(); solo.play(NOTE_A4、t); switchSoloLed(); wait(リズム); wait(リズム); rythm.play(NOTE_FS5、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_A5、t14); switchRythmLed(); wait(リズム); bass.play(NOTE_G3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); solo.play(NOTE_G4、tt); switchSoloLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(rythm); bass.play(NOTE_B3、t); switchBassLed(); rythm.play(NOTE_G4、t24); switchRythmLed(); wait(リズム); rythm.play(NOTE_B4、t14); switchRythmLed(); wait(リズム); rythm.play(NOTE_D5、t14); switchRythmLed(); wait(リズム); solo.play(NOTE_D4、t34); switchSoloLed(); wait(solo); solo.play(NOTE_D4、t14); switchSoloLed(); wait(solo);}
製造プロセス
- K30センサーによるCO2モニタリング
- 1Sheeld / Arduinoとの盲ろう者のコミュニケーション
- Arduinoでコインアクセプターを制御する
- 花-ArduinoNano、CrazyCircuits、DFRobot
- LEDを制御するBluetoothを搭載したArduino!
- ArduinoまたはESP8266を搭載した静電容量式指紋センサー
- Nextionディスプレイで遊ぶ
- Nunchuk制御ロボットアーム(Arduino付き)
- Arduino Nano:ジョイスティックで2つのステッピングモーターを制御
- ArduinoNanoを搭載したハンドヘルドガイガーカウンター
- Arduinoで日射量を測定する