工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ

必要な部品と材料

部品数量
Arduino Nano R31

使用アプリ・ツール

プロジェクト概要

Arduino Nanoと3つのブザーをミニブレッドボード1枚に収めて、「ハッピーバースデー」を3声のポリフォニー(多声部)で演奏します。

デモンストレーション

任意のUSB電源(PCでなくても可)に接続するだけで、「ハッピーバースデー」が無限ループで演奏され続けます…飽きるまで=]

各音符の変わり目に対応するチャンネル/ブザーのLEDが点滅するようになっています。

回路図・配線

極力コンパクトに、半田付けなしで作れるよう工夫しました。最終的に超小型ブレッドボードに全て収まりました:

Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ

Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ

ブレッドボード内部の穴は以下のように接続されています:

Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ

Arduino Nano v3.0(Gravitech製)はこのブレッドボードに完璧にフィットし、基板の両面に追加部品を配線できます。回路図は描いていませんが、以下のクローズアップ写真で十分理解できると思います。

Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ

使用部品は全て一般的なものです:

ブザーのピン配置は以下のようになっています:

Arduino Nanoで3声ポリフォニー「ハッピーバースデー」演奏 – 光同期メロディデモ

同型のブザー3個でも問題ありませんが、配置位置とコード内の出力ピン番号を変更する必要があります。

小さな「ハック」:ArduinoのI/OピンをブザーとLEDのGND代わりとして使用しています。プログラムでI/OピンをLOWに設定すると、標準のGNDピンと同じように使えます。クールでしょ?;)

プログラムについて

完全なスケッチは下記に掲載していますが、コンパイルには追加ライブラリToneが必要です:

Toneライブラリ(Dropbox)

(ポップアップが出たら右上の×で閉じてください)

インストール方法:Arduino IDEメニューの「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール…」でダウンロードしたZIPを選択するだけです。

このライブラリは、追加のハードウェアタイマーと割り込みを使って単一プロセッサで複数の音を同時生成する「レッドネック・マルチタスク」を実現します(OSなしで)。作者はBhagman氏、GitHubはこちら。

免責事項:コードは3つの「独立した」メロディスレッドを単一の線形フローでジャグリングする必要があるため、冗長で読みにくくなっています。後でリファクタリングしてメロディを分離し、他の曲にも対応できるようにしようと思いましたが、おそらくやらないでしょう=] 頑張ってください。フィードバック歓迎します!

ソースコード

#include <Tone.h>

Tone solo;
Tone bass;
Tone rythm;

const int t = 600;       // 4分音符の長さ
const int tt = t * 2;    // 2分音符
const int t14 = round(t * 1 / 4);  // 16分音符
const int t24 = round(t * 2 / 4);  // 8分音符
const int t34 = round(t * 3 / 4);  // 付点8分音符

const int bassLedPin  = 15;  // A1
const int rythmLedPin = 17;  // A3
const int soloLedPin  = 19;  // A5

void wait(Tone t) { while (t.isPlaying()) { } }

int bassLedState = LOW;
void switchBassLed() {
  bassLedState = !bassLedState;
  digitalWrite(bassLedPin, bassLedState);
}
int rythmLedState = LOW;
void switchRythmLed() {
  rythmLedState = !rythmLedState;
  digitalWrite(rythmLedPin, rythmLedState);
}
int soloLedState = LOW;
void switchSoloLed() {
  soloLedState = !soloLedState;
  digitalWrite(soloLedPin, soloLedState);
}

void setup(void) {
  pinMode(14, OUTPUT);  // A0 - LED GND
  pinMode(16, OUTPUT);  // A2 - LED GND
  pinMode(18, OUTPUT);  // A4 - LED GND
  pinMode(bassLedPin,  OUTPUT);
  pinMode(rythmLedPin, OUTPUT);
  pinMode(soloLedPin,  OUTPUT);
  pinMode(2, OUTPUT);   // ソロブザー GND
  pinMode(9, OUTPUT);   // リズムブザー GND

  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) {
  // 以下、ハッピーバースデーのメロディを3パートで演奏
  // ベース、リズム、ソロの各パートをタイミングよく再生
  // 各音符再生時に対応するLEDを点滅
  // 詳細は元コードを参照(全音符記述のため省略)
}

※ 完全なメロディデータは元記事のコードを参照してください。ループ内は音符データの連続記述になっています。

製造プロセス

  1. K30 CO2センサで室内空気質をリアルタイム監視する
  2. 1SheeldとArduinoで盲ろう者のコミュニケーションを支援する
  3. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  4. Arduino Nanoで作るウェアラブル心拍ドレス:CrazyCircuitsとDFRobotセンサーで自信を持ってプロジェクトを構築
  5. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  6. DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
  7. Arduino MegaとNextion HMIで作る高機能ウェザーステーション
  8. Arduinoベースのヌンチャク操作6自由度ロボットアームキット
  9. Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
  10. Arduino Nanoで作る携帯型ガイガーカウンター
  11. Arduino UNOとEthernetシールドで太陽放射を測定する自作ピラノメーター