Arduino UNOで奏でるポリフォニック「アベンジャーズ・テーマ」 〜Playtuneライブラリで3音同時発音〜
概要
Arduino標準のtone()関数は単音再生のみですが、Len Shustek氏のPlaytuneライブラリを使うとUnoで3音、Megaで6音の同時発音(ポリフォニック再生)が可能になります。本プロジェクトではこのライブラリを用いて、映画『アベンジャーズ』のテーマ曲を3チャンネルで演奏するデモを紹介します。
ハードウェア
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| スピーカー(3W, 4Ω) | 1 | ブザーでは音量不足。小型エンクロージュア付き推奨 |
| 220Ω抵抗 | 3 | D10, D11, D12各ピンとスピーカー間に直列接続 |
| LED(任意) | 3 | 各チャンネルの信号有無を可視化 |
| ブレッドボード、ジャンパー線 | 1式 |
回路図とブレッドボード図
D10, D11, D12の各ピン→220Ω抵抗→共通接続→スピーカー(+) 、スピーカー(-)→GND。LEDを各ピンとGND間に(抵抗付きで)接続するとチャンネルアクティビティが光ります。回路図(PNG)、ブレッドボード図(PNG)、PCB設計ファイル(ZIP)が提供されています。
ソフトウェア
ライブラリ導入
Playtuneライブラリ(GitHub または Google Driveミラー)をArduino IDEにインポート(ZIP形式)。
スケッチのポイント
#include <Playtune.h>
// 楽譜データ(PROGMEM配列)は十進/十六進のバイト列で定義
const byte PROGMEM avengers[] = { 0x90,0x3E,0x00,0x7A,0x80,0x00,0x02, ... };
Playtune p;
void setup() {
p.tune_initchan(10); // チャンネル0 → D10
p.tune_initchan(11); // チャンネル1 → D11
p.tune_initchan(12); // チャンネル2 → D12
}
void loop() {
p.tune_playscore(avengers); // 再生開始
while (p.tune_playing); // 再生完了まで待機
p.tune_delay(3000); // 3秒休止(Arduino delay()非使用)
}
楽譜データはMIDIライクな独自フォーマット(ノートオン/オフ、ウェイト、音色切替等)で、専用ツールでMIDIファイルから変換可能です。ライブラリはタイマー割り込み(Timer1, Timer2等)を使用し、バックグラウンドで3チャンネルのPWM波形を合成出力します。
音質向上のコツ
- スピーカーは必ずエンクロージュア(箱)に入れたものを使用。裸のユニットでは低音が出ず迫力不足
- 抵抗値(220Ω)はスピーカーインピーダンスと出力ピン電流制限のバランスで決定
- 電源はUSB給電でも動作するが、外部5V安定化電源の方がノイズが少ない
応用例
- 複数の楽曲をスイッチで選曲再生
- センサー入力に連動した効果音・BGM制御
- Mega使用で6パート合奏(弦楽四重奏+ピアノ+打楽器等)
- Playtuneのスコアフォーマットを理解すれば、自作MIDI変換ツールで任意の曲を組み込み可能
製造プロセス
- スマート渇きアラート植物アラーム – 最適な水やりタイミングを知らせるDIYセンサー
- イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
- アナログ3ピンで4×3キーパッドを接続 - Arduinoピン節約テクニック
- Arduino MKR Fox 1200で作る信頼性の高いSigfox kWhメーター
- Bluetooth対応温度モニター:Arduino NanoとHC-06でスマホ監視
- 自動レンジ切替対応 静電容量メーター (10pF〜10µF) - Arduino Nano で簡単自作
- 非接触ジェスチャー錠: APDS-9960とArduinoでセキュアアクセス
- Arduino Nanoコンパニオンキット – 電子工作に必須の部品とツールを搭載した多機能IC型デバイス
- Arduino Micro/Leonardo用 USB-MIDIアダプタキット – 完全パーツリストと実装ガイド
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- Arduino UNOで作る精密反応速度テスター