はじめに
こんにちは。野良ハックチーム ざっきー と申します。
この記事は 2019 年 7 月 31 日に開催された「e-textile + ノンコーディング IoT の勉強会」で LT 登壇した際に使用した導電布タッチセンサーモジュール nüno を MIDI keyboard 化したメモです。
※ LT 登壇資料はこちら。
コンセプト
nüno を使って MIDI keyboard を作ろうと思った背景 (=コンセプト) をメモに残しておきます。
ハンズオンへ参加
上記の勉強会で LT 登壇する前に 2019 年 4 月 26 日に「MIDI と MQTT を使ってリモート演奏する仕組みを作ってみよう」と 2019 年 6 月 20 日に「MIDI と MQTT を使ってリモート演奏する仕組みを作ってみよう 改」で MQTT を使ってリモートで MIDI を演奏する仕組みについて勉強していたことが大きいです。
リンク先にハンズオン資料が公開されていますので、仕組みについて詳細を確認することができます。
nüno の仕様を調べた
- 静電容量タッチセンサモジュール (mtch6102) を使用している
→使ったことないなー。 - コネクタ GROVEコネクタ (I2C) が付いている
→おっ!何とかなりそう! - タッチチャンネル数 8 (mtch6102 の仕様は最大チャンネル数 15)
→キーボードにできるのでは?
静電容量タッチセンサモジュール (mtch6102) の特性
M5Stack を使用してサンプルコードを動かすとディスプレイに数値と線グラフが表示されます。(更新間隔: 100 msec)
何もしない状態では数値はほぼ0(ゼロ)ですが、導電布に手を触れるとかなりノイズが多く幅が大きいことが分かります。
センサー値をそのまま MIDI ベロシティ値として使用すると音が波打っているように聞こえてしまうため、閾値を用いてオン・オフする仕様にしました。
また、閾値が 1 つだと閾値付近でオン・オフを繰り返してしまい音が連打して聞こえてしまうため、閾値を 2 つ (上限閾値、下限閾値) にしました。
材料
- 導電布タッチセンサーモジュール nüno (静電容量タッチセンサモジュール mtch6102)
- M5Stack または M5StickC
- Grove ケーブル
- MQTT ブローカー (Mosquitto、Shiftr.io など)
- PC (Mac または Windows)
- MIDI 音源 (ポケット・ミクなど。無くてもソフトウェア MIDI 音源 (106.js など) で代用可。)
構成
送信側は M5Stack と導電布タッチセンサーモジュール nüno を Grove ケーブルで I2C 接続し、静電容量タッチセンサモジュールから取得したデータ (チャンネル番号と数値) に応じて MIDI 信号 (音階と音量 (プログラムでは MIDI チャンネルは固定)) を MQTT ブローカーへ送信します。
受信側は PC に MIDI 音源を接続 (MIDI 音源が無い場合はソフトウェア MIDI 音源を使用) し、midi2mqtt プログラムを使用して MQTT ブローカーから受信した MIDI 信号を MIDI 音源へ入力しています。
プログラム
M5Stack のサンプルコードに Wi-Fi 接続機能と MQTT ブローカーとの接続機能 (Publish / Subscribe) を追加しました。また、MIDI ベロシティ値を調整する機能が含まれます。
M5StickC と obniz にもポーティングしました。
- M5StickC 版
https://github.com/kitazaki/nuno_keyboard2
デモ動画
まとめ
いつもと違う導電布製のキーボードで音楽を演奏してみませんか?!
良き M5Stack & nüno ライフを!