PiBot:Arduino駆動の精密ピアノ演奏ロボット
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Arduino 101 | 1 |
| 74HC595 シフトレジスタ | 11 |
| IRFZ44N NチャネルMOSFET | 88 |
| 12Vバッテリー(カーバッテリー等) | 2 |
| コンデンサ 100µF | 11 |
| 配線用ワイヤー | 多数 |
| ブレッドボード/ユニバーサル基板 | 11 |
| 8ピンICソケット | 11 |
| 抵抗 10kΩ(MOSFETゲート用推奨) | 88 |
| ダイオード 1N4007(フライホイール用推奨) | 88 |
必要な工具
- ホットグルーガン
使用ソフトウェア・サービス
- Processing(シリアル通信でArduinoへデータ送信)
- Python(MIDI→バイナリ変換)
- MIDIファイルをテキスト変換するオンラインツール(flashmusicgames.com)
プロジェクト概要
きっかけ
幼少期に自動演奏ピアノを見て以来の夢。特別な理由はなく、「ただ作りたかった」から始まりました。
システム概要
88個のソレノイドでピアノの鍵盤を物理的に押下します。Arduino Mega 2枚(約$80)ではなく、安価なArduino Uno 1枚と11個の74HC595シフトレジスタで88出力を制御。PCからシリアルでビット列を送信し、Arduinoがシフトレジスタ経由でMOSFETを駆動、ソレノイドを動作させます。MIDIファイルは事前にビット列へ変換します。
ハードウェア詳細
中国製ソレノイドは12V仕様だが推力不足で、24V駆動で実用化。88個同時駆動の大電流にはカーバッテリーを採用。シフトレジスタ+MOSFET基板を11枚作成し、プラスチックプレートにソレノイドを固定(当初はホットグルー、後に耐熱150℃の両面テープに変更)。
回路図はArduino公式ShiftOutチュートリアルの例2と同等。MOSFETゲートにプルダウン抵抗なしで動作確認済み(5Vで開、4V以下で閉)。
ソフトウェア処理フロー
- MIDIファイルを入手
- オンラインツールでテキスト化(時刻、Note On/Off、ノート番号、ベロシティ等)
- Pythonスクリプトで11セットの8ビットデータ(タイムスタンプ付き)に変換
- Processingでシリアル送信(テンポ倍率調整可能)
- Arduinoが受信し、シフトレジスタへ順次出力
注:Processingは右→左へ送信(物理ピアノは左→右)のため、ビット順を反転しています。
トラブルシューティング
- ソレノイド発熱でホットグルー溶解 → 耐熱両面テープで解決
- 電源容量不足 → カーバッテリーで安定
- MOSFET焼損リスク → ICソケット使用で交換可能に
ソースコード
Python変換スクリプト、Processing送信コード、Arduinoスケッチが提供されています。PythonコードはMIDIテキストを解析し、11×8ビットの時系列データを生成。Processingは遅延計算しながらシリアル送信。Arduinoは「888f」でラッチ開始、「999f」でラッチ終了のプロトコルで受信。
回路図
全体回路図はSchematicsセクション参照。Arduino公式ShiftOut図をベースに、LED部分をMOSFETゲートへ置き換えた構成です。
製造プロセス
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Pythonで作るWi-Fi制御Raspberry Piロボット - ステップバイステップガイド
- ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduino Nanoで音声制御ロボットを自作
- MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き