練習で必須の便利グッズ、譜めくりペダル
今の時代はタブレットが普及したことで音源も楽譜も持ち運び放題で大変便利になりました。そしてそれに付随する大きいメリットの一つが、譜めくりペダルが使えることです。サックスやギターなど両手がふさがる楽器の練習をするとき、譜めくりペダルを使えば(多少の慣れは必要ですが)いちいち演奏を止めることなくスムーズに練習ができて大変助かりますし、特に配線のわずらわしさを排除したBluetooth接続対応の譜めくりペダルは楽器を趣味にするなら1つぐらいはぜひもっておきたい小物の一つです。
こんな便利なBluttoothの譜めくりペダルですが、多少の電子工作の知識があれば市販のマイコンボード(マイコンボードについては[こちらの記事]で説明)を使って自作することもできます。この記事では「ESP32」というマイコンが搭載されたマイコンボードを使った自作Bluetooth譜めくりペダルの作り方を紹介したいと思います。
どんなものを作るか
タブレット表示させる楽譜はイメージファイルかPDF形式であることが多く、そういったファイルのビュワーアプリはほとんどの場合キーボードの右矢印(→)キーやページダウン(PgDn)キーで次のページに移るようになっています。したがって、マイコンボードをBluetoothキーボードとして認識させ、スイッチを踏むと該当のキーが押下されたというデータを送るようにすれば、譜めくりペダルになります。
使うもの
ESP32マイコンボード
[ESP32マイコンボード]
ESP32の開発ボードはWi-FiやBluetoothなど無線通信に必要なアンテナが組み込まれており、使いやすいBluetoothキーボードライブラリも公開されているので今回のような工作にはおあつらえ向きです。価格は1000~2000円程度です。
※ESP32は正しい技適マークがついているものをご使用ください。技適マークが付いていないBluetooth機器の使用は電波法違反になる恐れがありますので十分ご注意ください。
USBケーブル
プログラムの書き込みと給電に使います。
スイッチと配線材、固定用筐体
[フットスイッチ]
足で踏むことを想定しているので強度の高いものが望ましいです。この記事では[以前]ギターエフェクター用のオルタネイトスイッチと缶詰の缶で作った物を流用しています。
ArduinoIDE
[公式サイト](https://www.arduino.cc/en/software)
マイコン用のプログラムを作って書き込むためのツールです。
制作手順
設計環境の構築
ArduinoIDEをインストールして、ESP32とBluetoothキーボードに関するライブラリを追加します。ArduinoIDEはデフォルトのインストールではESP32の書き込みをサポートしないので、別途設定が必要です。
この記事では詳細は割愛し、参考になる外部リンクだけ紹介します。
■ 環境構築の補足
私の環境では上記リンク通りに設定をしてもプログラムをコンパイルするとき次のようなエラーが発生しました。
error: cannot convert 'std::string' {aka 'std::__cxx11::basic_string'} to 'String'
もし同じようなエラーが発生したら、 [こちらのリンク]の内容の通りArduinoプロジェクトフォルダーの「libraries/ESP32_BLE_Keyboard/BleKeyboard.cpp」の106行と117行を編集することで解決できるかもしれません。
- LINE 106: BLEDevice::init(deviceName);
- LINE 106: BLEDevice::init(deviceName.c_str()); に変更
- LINE 117: hid->manufacturer()->setValue(deviceManufacturer);
- LINE 117: hid->manufacturer()->setValue(deviceManufacturer.c_str()); に変更
プログラムの作成
マイコンボードに書き込むためのプログラムを作ります。以下のプログラムはESP32ボードをBluetoothキーボードとして認識させ、入力ピンの状態が切り替わるたびに右矢印キー押下データを送信するようになっています。そして補助的な機能として、Bluetooth接続に成功したらLEDを点灯させる機能もついています。
ピンの番号は任意に決めていいですが、私のボードでは13番ピンが電源とGNDピンに近かったので13番ピンを入力ピンとして使っています。また、マイコンボードに動作認用LEDが2番ピンに接続される形で実装されているので、そのLEDを流用するためにLED出力ピンとして2番を使っています。
#include <BleKeyboard.h> // 必要ライブラリのインポート
BleKeyboard bleKeyboard; // キーボード構造体を生成
uint8_t PININ = 13; // 入力ピン番号を定義
uint8_t PINLED = 2; // 出力ピン番号を定義
uint8_t state_stable; // 入力ピンの状態保存用変数
void setup() {
bleKeyboard.begin(); // Bluetoothキーボードの初期化
pinMode(PINLED, OUTPUT); // 出力ピンを出力ピンとして設定
pinMode(PININ, INPUT_PULLUP); // 入力ピンをプルアップ入力として設定
state_stable = digitalRead(PININ); // 今の入力ピンの状態を状態保存変数に保存
}
void loop() {
if (!bleKeyboard.isConnected()) { // Bluetooth接続有無を判定
digitalWrite(PINLED, LOW); // Bluetooth未接続であればLEDを消灯
delay(100); // 接続を待つ間、CPU使用率を下げるための短い遅延
return;
}
digitalWrite(PINLED, HIGH); // Bluetooth接続できたのでLEDを点灯
if (pushed() == 0){ // スイッチ切り替えを検出
bleKeyboard.write(KEY_RIGHT_ARROW); // 切り替わったのであれば右矢印キー押下を送信
// bleKeyboard.write(KEY_PAGE_DOWN); // PgDnキーの場合
// bleKeyboard.write(KEY_DOWN_ARROW ); // 下矢印の場合
}
}
// スイッチ切り替え検出関数
// 切り替わっていれば0、でなければ1を返す
uint8_t pushed(void){
uint8_t state_tmp = digitalRead(PININ); // 今の入力ピンの状態を取得
if(state_tmp == state_stable){ // もともとの状態と同じか確認
return 1; // 同じであれば切り替わってないので1を返す
}
delay(5); // チャタリングが収まるように5ms待機
if (state_tmp == digitalRead(PININ)){ // ピンの状態が維持されているか確認
state_stable = state_tmp; // 維持されていれば切り替えとして認識して状態変数を更新
return 0; // 状態が切り替わったので0を返す
}
else{ // ピンの状態が5msで再び変化したらただのノイズだと判断
return 1; // ピンの状態は元に戻ったので更新せず1を返す
}
}
■ プログラム作成の補足
上のプログラム例では3つのキーの例だけ紹介しましたが、他のキーを入力するためのワードは [Arduinoのドキュメント]や [Bluetoothキーボードライブラリのgithub]で調べることができます。
プログラムの書き込み
[プログラムの書き込み]
マイコンボードをUSBケーブルでパソコンに繋げてプログラムを書き込みます。このとき、書き込み先ボード名を正しく設定しなければなりませんが、ESP32マイコンボードは種類が多く、この記事ですべてのモデルについて網羅することはできないため詳細な設定方法については割愛します。
もしエラーが発生したら柔軟に対応して処理します。
マイコンとスイッチの接続
スイッチの真ん中の端子をマイコンボードの入力ピン(13番ピン)に、残り端子のうち一つをGNDに繋げます。イメージとしては下の図のようになります。
[スイッチの配線イメージ]
今はまだテスト段階であるため、はんだ付けは行わずクリップとデュポンワイヤーを使って接続しています。
[配線]
動作確認
配線が終わったらマイコンボードにUSBケーブルを繋げて給電して、タブレットでBluetoothデバイスを調べます。プログラムが正常に動いていれば「ESP32 Keyboard」というデバイス名でマイコンボードを見つけることができます。図はiPadでマイコンボードとBluetooth接続している例です。
[Bluetooth接続]
接続ができている状態でマイコンにつなげたスイッチを押せば、スイッチを押す度にタブレットが「キーボードの右矢印キーを押したとき」と同じ動作をするようになります。今回はデモとして、 [Piascore]というアプリでPDFを取り込んで譜面をめくるケースを撮影しました。わかりやすくするために、PDFは本物の楽譜ではなく各ページにページ番号だけが書いてあるダミーファイルを用いています。
ページの下の方のデモ動画の前半部がテストの様子になります。
組み立て
動作確認で問題がないことが確認できたら、各端子をはんだ付けや絶縁処理、筐体への固定を施して完成です。ただし注意点が2点あります。
- 金属は電波を吸収して通さない性質があるので、金属筐体を用いる場合はマイコンボードを筐体の外に取り付けた方がいいです
- 後からプログラムを書き換える場合に備えて、USB端子は外側に向けておいた方が無難です
応用案
今回制作した譜めくりペダルは1ページ進むことしかできない非常にシンプルな作りですが、スイッチを増やして前後移動に対応したり、2回押しで複数ページを移動できるようにするなど、創意工夫次第でいくらでもカスタムすることができます。そういった改造の例を2つ、ここで紹介したいと思います。
特定の曲に合わせた専用動作
市販の楽譜にはセーニョやコーダを使って前に戻ったり特定の小節に飛んだりするものも珍しくありません。楽譜を1ページずつめくるペダルだと、これらの繰り返し記号の指している場所を覚えて正しく踏まなければならず、思考リソースを奪われます。ならば、曲の進行をあらかじめプログラムに組み込んで、スイッチを踏めばそのときそのときの状況に合わせて必要な枚数分めくれるようにしたらどうでしょうか。
例えばページが1 → 2 → 3 → 2 → 4 → 2 → 5 → 3 → 4の順で進行している楽譜があるとして、マイコンに電源を入れてからスイッチを押す回数によって次のように動作するようにします。
- 1回目:右矢印1回
- 2回目:右矢印1回
- 3回目:左矢印1回
- 4回目:右矢印2回
- 5回目:左矢印2回
- 6回目:右矢印3回
- 7回目:左矢印2回
- 8回目:右矢印1回
- 9回目:左矢印3回(ページ1に戻る)
- 10回目以降:1回目の動作からループ
この機能は、スイッチが押された回数を表す変数cntなどを作って、スイッチが押された時の動作をcntの値によって分岐させれば簡単に実装できます。ただし、キーを押す動作を複数回するときの間隔が短すぎるとタブレット側が誤動作を起こすことがあるので、setDelay関数で適切な遅延を設ける必要があります。
// 前略
bleKeyboard.write(KEY_LEFT_ARROW);
bleKeyboard.setDelay(100); // ms単位
bleKeyboard.write(KEY_LEFT_ARROW);
// 以下略
私のiPadでは100msで問題なく動きましたが、誤動作を起こすようであれば遅延を長くしながらちょうどいい点を探さなければなりません。
DC9V給電に対応
今の時代、あらゆるガジェットがUSB給電で動いているので、マイコンボードに電源を供給するためのUSB電源アダプタの確保に困る方はまずいないと思います。しかし、ギタリストやベーシストの方は足元のエフェクターを動かすために[このような]2.1mmのセンターマイナスケーブルで接続するDC9Vの電源ユニットをすでに使っていることが多く、USB用のアダプタを増やすよりDC9V端子を流用したくなるかもしれません。
VITAL AUDIO ( バイタルオーディオ ) / POWER CARRIER VA-08 MKII
幸いなことに、マイコンボードは9V給電でも問題なく動くものが多いので、その判定の仕方と電源ユニット流用のための改造の仕方を紹介します。
安全のための注意
ここから紹介する9V電源駆動の改造を行った場合、9V電源とUSBケーブルを絶対に同時に繋げないでください。異なる電圧の電源回路同士を繋げると回路の破損や発火の恐れがあります。改造を行った際はUSB端子にキャップを付けるなど、うっかりミス防止のための対策を取ることをおすすめします。
なぜ9Vでも動くのか
具体的な方法の紹介の前に、なぜマイコンが9Vでも動かせるのか、その原理について簡単に説明します。
マイコンに限らずあらゆる電子部品は正常に動作できる電圧範囲が決まっており、それより高い電圧を印可すると壊れてしまいます。部品が耐えられる電圧の範囲は仕様表の、大抵の場合「Absolute Maximum Ratings」という項目で確認することができ、 [ESP32の場合]電源電圧の範囲は-0.3V ~ 3.6Vとなっています。
かけられる上限電圧が3.6Vなら9VはおろかUSBの5Vでも壊れてしまうはずですがそうなっていないのはマイコンボードは外部電源端子とマイコンの電源端子の間に電圧レギュレーターという部品を挟んでいるからです。電圧レギュレーターとは一定の値の出力電圧を維持するための部品で、出力する電流や入力電圧が多少動いても安定して同じ電圧を出力し続けます。このレギュレーターがUSBの5V電圧をマイコンが使う3.3Vに変換するので、ユーザーは個別で3.3V電源を確保しなくても手元にあるUSBケーブルで簡単にマイコンを動かすことができるわけです。
レギュレーターは対応している電圧の範囲内であれば入力電圧が何Vであっても出力電圧は変わらないので、下の図のようにUSBの代わりに別の電源を繋げてもマイコンは問題なく動作します。
[DCレギュレーターのイメージ]
レギュレーターのスペックを調べる
ESP32のマイコンボードは複数の種類があり、どれも同じレギュレーターが使われているとは限らないので、念のために仕様を調べた方が安全です。レギュレーターの形は様々ですが、下の図のように、黒い長方形の部品で片方に太い脚が1本、反対側に細い脚が3本ある形をしたものが多いです。もし同じような形状の部品がなかったら、しらみつぶしにすべてのチップの型番を調べるしかありません。
[DCレギュレーターの例]
私のボードには上のリンク先のような部品があり「AMS1117」と書いてあるので、この名前で検索するしてヒットした製品の仕様を確認します。すると、3.3V出力の製品は入力電圧が4.75V~10Vの範囲で出力電圧が3.235V~3.365Vであると書いてあるので、9V入力には対応できることがわかります。
DCジャックとマイコンボードの接続
エフェクター用の電源からマイコンボードに給電するためには2.1mmのDCジャックが必要で、電子工作の部品の専門店から入手することができます。
[DCジャック]
レギュレーターの入力端子は通常「5V」や「Vin」といった名前がついていて、テスターを使ってボードにUSBケーブルを繋げたとき5Vが出力されるかを確かめることでどのピンなのか調べることができます。ギターエフェクター用の電源はセンターマイナスのものが主流なので、ジャックの中心部にあたる端子をマイコンボードのGNDに、外周にあたる端子をレギュレーター入力に配線します。
- DCジャックセンター端子:ボードGNDに接続
- DCジャック外周端子:ボードの5V端子(Vin、5Vなど)に接続
完成品
上で紹介した2つの応用案を適用して、ランチョンミートの空き缶をリサイクルした筐体に取り付けた物の動作テストを、以下のデモ動画の後半で確認することができます。
終わりに
最初は「とりあえず動けばいい」の方針で作ってみたペダルですが、今は練習のいい供になっています。自作のペダルは性能や信頼性の面では市販品に及びませんが、自分好みのカスタマイズをして唯一無二のペダルにしたり、缶詰の選び方次第では笑いを取りに行けるという大きいメリットがあるので、電子工作やプログラミングに興味がありましたら一度チャレンジしてみてはいかがでしょうか。
IK MULTIMEDIA ( アイケーマルチメディア ) / iRig BlueTurn Bluetooth フットペダル
コラム「sound&person」は、皆様からの投稿によって成り立っています。
投稿についての詳細はこちら