パラダイス

瀬川商店 第43回:MIDIコン・バカ一代③

2025.08.22

これまでの【MIDIコン・バカ一代】 → 初回第2回

Arduino IDEのインストールは終わりましたか?Arduino Pro Microもゲットできたでしょうから、Arduino IDEとArduino Pro Microの接続を確認しましょう。

プログラミングの世界では、どんな言語習得するにしてもまず”Hello World”とプリントアウトさせるのは聞いたことありますか?Arduinoの世界でまず初心者が一番最初に試すのは通称「エルチカ(Lチカ)」と呼ばれる、Arduinoに搭載されているLEDをチカチカさせるプログラミングをします。

L_Chikaダウンロード
※ZIPファイルを解凍後、フォルダ内にあるL_Chika.inoがプログラムファイルになります

このL-ChikaのファイルをArduino IDEで開いてください。そして、Arduino Pro MicroをUSBでMacやPCに接続します(Macの場合はUSBデバイスと認識されるはずですから、セキュリティーの許可を求めてくると思いますが、そのまま許可してください)。そしてArduino IDEのToolsから、Board/Arduino AVR Boards/Arduino Microを選択します。

次にBoardの下のPortから接続されているデバイスを選択します。/dev/cu.usbmodem341301(Arduino Micro)的なデバイスが見えるはずです。

それではFile/OpenからL-Chikaファイルを開いてください。かなり詳しくコメントアウト(プログラムの中の注釈。実行されるプログラムには影響が出ないので、備忘録として細かく書いて行った方が将来的には思い出しやすいはず)を書いたので、それを読めばだいたい把握できると思います。

ざっと説明すると、const int LED_PIN = 17; とはconst(コンスタント、日常会話のコンスタントと意味は同じ、彼はコンスタントに打率3割だね、的な意味のコンスタントです。よく「宣言」とも呼びます)とint(インテジャー、日本語で整数の意味でプログラミングの中では小数点のない数字ですよ、の意味です)を使って「以下”LED_PIN”と書いてあったらそれはピン17番に接続されたものですよ」という内容ですね。


その下の先週も解説したvoid setup() {から〜}までの中に出力や入力の設定を書いてあるわけです。この場合はLED_PIN, OUTPUTと書いてあるので、先ほど17番に出力の命令を実行できます、の意味です。

さらに下のvoid loop() {から〜}までの中に以下の内容を書き込んで、それを電源が切れるまでずっとLoopさせる〜ということがこのプログラムには書いてあるわけです。

『Highで出力オン → delay(1000)プログラムを1秒停止させて → LOWで出力オフ → delay(1000)でまた1秒停止』

こうして順番にみると意外と簡単そうでしょ?

次に、パーツのキャリブレーションをします。

皆んなも知ってる通り、MIDIのデータで音程もCC値もベロシティーも0〜127の128段階だよね?でも良くよく考えると、8ビットだったら2の8乗で256だし、4ビットだと16で、この128ってどっから来てんだよ?って話なんだけど、MIDIも実際は8ビットでデータのやり取りしてるんだけど、最初の1ビット(8ビット内の先頭)がステータスバイトとかデータバイトって言うちょっとカッチョイイ名前がついていて、それがノートを鳴らすとかCCを送るとかベロシティを送る〜等の合図になってるので、それで残りの7ビットをCC値や音程の値に使っているので、2の7乗=128段階になってるってわけ。ちなみに何で2のX乗かって言うとデジタルの世界は量子の世界を別にすると、0と1しかないから”2”になってるからです。

次に今回使っているArduinoのアナログリードという端子(A0とかA1と書いてある端子ね)は10ビット、2の10乗でデータを読み込んでいるので1024段階でアナログ値をデジタル値に変換できます。ただ1個数百円のパーツなのでフツーに個体差があるんです。ですから、一応念のためにキャリブレーションと言って、実際に使うスライダ抵抗の値をArduinoが幾つで読み取れるのか確認する必要があるんです。

Calibration_Testダウンロード

※ZIPファイルを解凍後、フォルダ内にあるCallibration_single.inoがプログラムファイルになります

買ってきたスライダ抵抗をひっくり返すとこんな風に見えますね。左の1の左の端子をブレッドボードの+へ接続、2の左の端子が抵抗値を送信するための端子です。そして右の3の端子をー(マイナス)とかGNDに接続します。

上のArduino Pro Microのピン配置を確認してもらって、右のA0とかA1と緑のマークがアナログリード用の端子。VCCが電源の供給用、GNDはグラウンド、つまりマイナス側の端子ね。今回は3つのフェーダーのコントローラー制作を目指しているので、使用するのはA0、A1、A2とVCCとGNDだけです。

そして、ブレッドボードとスライダ抵抗の接続は以下を参照してください。

この図の緑のリード線がスライダ抵抗の2番からArduinoのA0へ接続されています。実際はこんな感じで、気がつくとクリップが外れてたりとか良くあります(笑)

ここまで配線できたら先ほどの「Calibration_Test」をArduinoへアップロードします。

プログラムの中に

Serial.println(rawValue);

という行があるんですが、ここでアナログで読み出した値をシリアルモニタとしてUSB経由でArduino IDEへ転送しています。IDEの下の方に出力とシリアルモニタと書いてある部分が見えると思うのですが、もし見えなければIDEの右上に虫眼鏡のようなボタンがあるのでクリックすると見えるはずです。

アップロードが終わると直ぐにシリアルモニタに現在の抵抗値が表示されているはずです。スライダーを上下すると多分0か1から1014〜1017の間の数字が動くのが見えると思います。だいたいこの値段のパーツからの値はこれぐらいです。この数字はどこかにメモしてください。そして今回使う3つのスライダ抵抗に関して全てテストしてみてください。同じタイミングで買ったパーツならばムラがあっても3とか4だと思います。

MIDIコントローラーとして使う場合はこの0から1014の値をMIDIのCC値で使う0から127に落とし込んで使うので、この上限のムラ(1024まで届かない)やパーツの個体差はあまり気にする必要はないですよ。来週紹介する最終的なプログラムの中でその辺のムラは補正しますから。

この10ビットのアナログリードで読み取った1024段階をMIDIで使う128段階に落とし込む際の一番シンプルな考え方はざっくり8で割ってMIDI用の値にする、なんです。あまり興味がなければそういう認識でも日常生活には支障はないです(笑)もう少し詳しく解説すると、来週
使うコードに出てくる以下の部分でキャリブレーションで得た下限と上限の値を0〜127にマッピングしてるんです。

int midiValue = map(rawValue, FADER_RAW_MIN, FADER_RAW_MAX, 0, 127);

このマッピングを応用した例がMIDIキーボードに付いているモジュレーションホイールやピッチベンドのホイールです。それらに使っている部品はよくあるボリュームノブで(シンセのノブ等と同じ)可動域は280度から300度くらいですが、モジュレーションホイールはだいたい90度なので、実際の可動域の一部(1024段階のうちの300から800とか)の値を0から127にマッピングして僕らは毎日使ってるってわけです。この辺はシンセのノブ類それぞれの役割に合わせてマッピングしてあるんですね。それを知った上でシンセを使うと、あ〜そうかなるほどと感じる機会も増えると思いますよ!

そしてこの”map”という関数はなかなか便利で先ほどの最後の行を127, 0と入れ替えると

int midiValue = map(rawValue, FADER_RAW_MIN, FADER_RAW_MAX, 127, 0);

逆向きの127〜0という変化でCC値を生成できるんです。DJのクロスフェーダーのように、片方を上げるともう片方が下がるみたいな動きが必要な時はこれを使ってるんです。

関数について、ジュースの自動販売機に入れるお金がスライダ抵抗からの「引数」で、出てきたジュースが関数の「戻り値」という説明がどこかにありましたけど、スライダ抵抗からゲットした「引数」をMIDI CCの「戻り値」として返すのが”map”という関数、ということですね。

さて来週いよいよブレッドボード上で最終的な組み込みから〜の、半田付けから〜のプログラミングです!


※自身の経験に基づいて記載をしています。パーツ購入/組立てや自作機の利用で生じるいかなるトラブルも責任は負いかねます。実施においては自己責任のことご了承ください。

シリーズ記事【MIDIコン・バカ一代】

MIDIコン・バカ一代①

MIDIコン・バカ一代②

瀬川英史(瀬川商店)
劇伴の作曲家やってます。Netflix「シティーハンター」アニメ「烏は主を選ばない」等。シンセは危険物取扱者の甲種レベルの知識あり(多分)。
記事内に掲載されている価格は 2025年8月22日 時点での価格となります
パラダイスの新着記事