Loopian::ORBITとは

Loopian::ORBITは、円環状に並べたセンサーの上のへりに触れることでピアノの音を奏でる楽器です。PC上で動作するLoopian::APPとMIDI接続することで、PCの音源で音を鳴らすことができます。
以下の特徴があります。

ヘリを撫でると音が鳴るタッチ式楽器

鍵盤のようなスイッチではなく、上部の山の頂上を撫でることで発音するタッチ式の楽器です。音だけでなく、触れた場所のLEDが優しく光り視覚的にも楽しめます。

Loopian用デバイス

Loopian::ORBITはLoopian というアプリと同時に使用します。
このアプリではループしながら、少しずつ音楽を作ったり、変容させたりするパフォーマンスが可能です。
Loopian::ORBITはこのアプリと接続することで、タッチする場所の音程が和音に合わせて変わっていきます。

各部品の名称

  1. Control基板
  2. Sensor基板
  3. LED基板
  4. Holder(3Dプリント)
  5. センサー受板(3Dプリント)
  6. かまぼこ筐体(3Dプリント)
  7. 連結スタンド(3Dプリント)
  8. 連結基板
  9. 両端用スタンド低音側、高音側(3Dプリント)

全体構成

かまぼこ筐体を12個連結することで、一台のピアノに相当する音程をカバーできます。この状態をHalf ORBITと呼びます。
最終的にLoopian::ORBITは円環状になるので、このHalf ORBITを2セット作り合体します。この状態をFull ORBITと呼びます。

主な電子部品の入手

ICやマイコン、コントローラなどのORBITで使用する電子部品を紹介します。ここでは、
Half ORBITの製作に必要な個数の紹介となります。

Raspberry Pi pico


透明電極

今回は、LEDの光を3Dプリントした筐体の中で光らせて、そのまま全体が光るようにしたいため、タッチセンサーが透明である必要があります。
Bit Trade One の透明電極を使用しています。

IC

CY8CMBR3110 : 静電センサ(180度分で12個必要)
PCA9685 :  I2C PWMコントローラ(180度分で12個必要)
2SA1313:LEDスイッチ(180度分で12個必要)
TS5A3160DBV:LEDスイッチ用アナログスイッチ
PCA9600D:I2Cバスバッファ

電子部品

LED: IN-S126AT5UW
チップ抵抗(1608), 10K, 4.7K, 560, 220, 

電源回路用部品

NJM7805S(5V, 1.5A) : レギュレータ
1N4148W : レギュレータ保護用ダイオード(DIP)
リセッタブルヒューズ
2.1mm DCジャック

ネジ類

3×8ナベ
3×10皿
3×15ナベ
3mm四角ナット

Control基板の作成

Half ORBITをコントロールする Control基板を作成します。Control基板では、Raspberry Pi picoをマイコンとして使用します。一つのControl基板でHalf ORBIT分の12セットの基板を制御します。
Half ORBIT分の接続図はこちら(右図)。
右図のように各基板は、I2Cによって接続されます。

基板設計

基板を設計し、ガーバーデータを作成して、基板製造を発注します。
こちらがガーバーデータになります。

電源部の部品実装

写真のように電源周りの部品を実装します。
  • DCジャック(J9)
  • 100μF電解コンデンサ(C3)
  • 3端子レギュレータ(U1:NJM7805)
  • ダイオード(D1:1N4148)
  • リセッタブルヒューズ(F1)
  • コンデンサ(C1:1μF、C2:0.1μF)
また、基板裏側に電源用のSMD LED(D7)/ 抵抗(R6)をはんだ付けします。

SMD部品実装

基板の裏側にSMDを実装するところがあります。
  • TS5A3160(U2)
  • 4.7kΩ(R1,R2,R4,R5)
  • 1kΩ(R3)
  • 10kΩ(R10-13)

コネクタ等の実装

Raspberry Pi を挿すピンソケット、電源用のピンヘッダ、I2C用ピンヘッダ、GPIO用のピンヘッダをはんだ付けします。

表面の部品実装

以下のパーツを取り付けます。
  • 8×8 LED Matrix(部品自体の作り方はこちら)
  • Joy Stick
  • 砲弾型LED(5mm)[赤-任意-橙]
  • LED用DIP抵抗

Control基板にカバーをつける

3Dプリンターでカバーを出力します。データはこちら。
4箇所の端に3mm四角ナットを入れ、Control基板を固定します。
LEDの穴に乳白色のアクリル板などを挟むと、光が眩しくなくなります。

Control基板のファーム書き込み

Raspberry pi Picoは今回Arduinoで開発しています。
リポジトリはこちらになります。まずは、このリポジトリをクローンします。
なお、Arduino の前は、 Rust 言語にて開発していました。
参考までに リポジトリはこちらになります。

<Arduino>

上のリポジトリをダウンロードして、Arduino IDEから読み込めば、Arduinoのプロジェクトとして開発可能です。
写真のSwitchを押しながら、USBをPCに接続すれば、Arduinoで書き込みモードとして認識されるので、あとはIDEから書き込みボタンを押すだけでファームを書き込めます。

<Rust>開発環境作成

この内容を参考に、Rustの開発環境を構築します。
環境を整えてから、ターミナルで "cargo build" を行い、エラーが無くなるまで環境の不備を直していきます。

<Rust>Raspberry pi Picoへの書き込み

プログラムの書き込みは、まずラズパイpicoの白いボタンを押しながらPCにUSBケーブルを挿します。この状態で、cargo run と書くと、自動でファームがボードに書き込まれます

<Rust>正常に書けない場合

正常に書けた場合、「ディスクの不正な取り出し」がMacの画面右上に現れます。これは正常です。
逆に、正常に書けなかった場合、何も出ません。
その場合、何度も cargo run をやるしかありません。

LED基板の作成

白色LEDを16個搭載した基板をHalf ORBITあたり(半円分)12枚作成します。右図の紫色の基板です。

LED基板のリフロー

LEDを16個、120Ωの抵抗を16個、0.1μのコンデンサを一つ、2SA1313のトランジスタ一つ、リフローではんだ付けします。
LEDの電流の流れる方向は、文字を読める向きにして、右から左となります。
今回使うLEDの型番は以下。(mouserで購入)
IN-S126AT5UW  size:1206  Vf: 3.6v, 20mA, 180mcd 

旧基板(v1用)を使う時

LED基板は旧基板(v1用)を使うことが出来ますが、その場合、以下の修正を行います。
まずI2Cアドレスを 0x50 以降に設定します。そのためにA4(5番ピン)をVDDに接続します。
そのために、まず基板上の4番ピンと5番ピンの接続を切断します。チップをはんだ付けした後、5番ピンからVDDに空中配線します。
また、旧基板は Holder No.1〜No.8 までにしか使えません。

LED基板裏のはんだ付け

基板裏面に、LEDドライバ PCA9685を手ハンダします。
先にボンドでチップを接着しておくと良いでしょう。
ジャンパースイッチJP1-3に適切にはんだ付けして、アドレスを設定します。
この順に数値を設定します。(内側がlo、外側がhi)
Holder No.1: JP1-lo, JP2-lo, jp3-lo, jp4-lo
Holder No.2: JP1-hi, JP2-lo, jp3-lo, jp4-lo
Holder No.3: JP1-lo, JP2-hi, jp3-lo, jp4-lo
以下、同様に2進数的に設定

基板動作チェック

LED基板をセンサーホルダーに取り付ける前に、この基板が正常に動作することを確かめておきましょう。Control基板のI2Cに仮繋ぎして、LED基板を動作チェックします。
[LED基板チェック方法]
  1. I2Cの配線をLED基板に仮繋ぎする
  2. ジョイスティックを押したまま、電源投入
  3. 88matrixLEDに「Su」が表示
  4. ジョイスティックで「LE」を選択し、真ん中のスイッチを押す
  5. LED基板のLEDが交互に光るはず

ケーブルのはんだ付け

J2の端子に裏側に伸びるようにリード線をはんだ付けします。
次に、J1に4本のケーブルをはんだ付けします。
ケーブルはあらかじめ20mmほどにカットし、両端共にケーブルストリッパーで銅線を出しておきます。

Sensor基板の作成

静電センサCY8CMBR3110を使って、基板一枚につき8つのタッチセンサを実現しています。
この基板をHalf ORBIT(半円分)につき、12枚作成します。右図の青い基板です。

Sensor基板のリフロー

センサ基板に、静電センサ(CY8CMBR3110)、560抵抗、0.1μ、1μ、2.2nFをリフローします。
R1-R8: 560
C1,C3: 0.1μ
C2: 2.2n
C4: 1μ

アドレス書き込み準備

Sensor基板をセンサーホルダーに取り付ける前に、この基板が正常に動作することを確かめます。Control基板のI2Cに仮繋ぎして、Sensor基板の動作チェック&アドレスの書き込みをします。
すでに若い番号のアドレスが書かれている基板を用意し、それらを全て一つのI2Cバスに接続します。

Sensor基板のアドレス書き込み

  1. Sensor基板をI2Cに仮繋ぎする
  2. ジョイスティックを押したまま、電源投入
  3. 88matrixLEDに「Su」(Setupの意味)が表示
  4. ジョイスティックを左右に操作して、書き込みする番号を選択後、真ん中のスイッチを押す
  5. 書き込みが成功すれば「Ok」失敗すれば「Er」が表示される
  6. もう一度電源を投入すると、Normal Modeで起動
  7. 起動時チェックが成功すると、失敗した基板だけbitが消える
  8. その後、一つ一つのタッチを触り動作チェック

透明電極接触部のはんだ付け

基板の裏側に8つの小さな丸い端子があります。ここにハンダを盛ります。
透明電極と接する部分ですので、8つのはんだの盛りが均等になるように注意します。接触が悪い場合、あとで調整する可能性があります。

HolderをプリントしてLED基板を装着

Holder、及び受け板を3Dプリントして、LED基板を取り付けます。

Holderを3Dプリントする

このデータでHolderを3Dプリントします。
一部完全に下を向いている面があるので、スライスの際にはサポート材を指定する必要があります。
色は、透明のものを利用しています。

センサー受板を3Dプリントする

このデータで、センサー受板を3Dプリントします。

Holderに四角ナットをセットする

6つの細い穴に四角ナットを縦に挿入します。
また、二つの四角い深い穴に、四角ナットを入れ、動かないように周囲を接着剤で固めます。

LED基板のねじ止め

LED基板をHolderに装着します。
リード線をネジ穴横にある小さな四角い穴に通します。また、ケーブルを真ん中の穴に通します。最後に15mmのネジで(12mmもギリギリ可)、基板とHolderをねじ止めします。

Holderに透明電極を取り付ける

Holderに、透明電極を装着します。Sensor基板とセンサーの接触が繊細なので、センサーが反応していることを確認しながら必要に応じて微調整を行います。

透明電極の切り出し

シート上で販売されている透明電極を8mm×42.5mmに切り出します。
まずイラレで書いた切り出しの線をプリントアウトして、その上に透明電極シートをテープで貼り付けます。  
紙に印刷された線をなぞって透明電極をカットし、これを8枚用意します。この電極を導通側を山にして半分に折ります。

透明電極を接着剤で仮止め

透明電極を写真のように接着剤で貼ります。このとき、センサーの真ん中の折り目が8本とも一直線になるように、接着されるまでの間にセンサーの位置を調整します。

Sensor基板の取り付け

右図のように、LED基板とI2CアドレスがセットになっているSensor基板を、3か所ねじ止めします。
ネジは3×8mmナベを使用します。
この時点で、Control基板に接続し、センサーが反応するかをチェックし、必要に応じて以下のような調整を行います。
  • Sensor基板のハンダの盛り
  • ネジの締め具合
  • 透明電極の位置交換、あるいは取り替え

透明電極をホルダーの反対側で抑える

8つの透明電極を、センサー基板の無い側に固定します。
まずは写真のように、各センサーの折り目が真っ直ぐのラインになるように、薄い絶縁テープで軽く固定しながら調整。
その後、仮止めしたままセンサー受板で3箇所、ねじ止めして完全に固定します。3×10mmの皿ネジを使用します。

Holderの基板を配線する

HolderのLED基板とSensor基板の配線を行います。

LED基板のケーブルをはんだ付け

LED基板から出ているケーブルを、センサー基板側に折り曲げて基板のホールに通した後、はんだ付けします。

5pinコネクタ付きケーブルの用意

5pinのメスコネクタのケーブルを5cmにカットします。なお、一番端のケーブル1本のみ7cmでカットします。

5pinコネクタ付きケーブルはんだ付け

Sensor基板の4つの穴にハンダ付けし、長いケーブル一本をLED基板から出したリード線に繋ぎます。

ORBITかまぼこ筐体の組み立て

ここでは、ORBITを構成する一つ一つの筐体がかまぼこに似ているため、かまぼこ筐体と呼ぶことにします。まず、かまぼこ筐体を3Dプリントし、その中にセンサーホルダーを取り付けていきます。

かまぼこ筐体の3Dプリント

このデータでかまぼこ筐体を3Dプリントします。
筐体の内側にあるナットのポケットに、四角ナットを4か所挿入します。

(現在、Adventurer3でプリントする際、ラフト付きで出力しています。使用フィラメントはこちら)

Holderをバネでかまぼこ内に固定する

組み立てたHolderをかまぼこの中の空洞に入れ、ケーブルを筐体下の穴から出します。
Holderを入れる向きですが、かまぼこが連なってできる円の外側が基板、内側がセンサー受板となります。
この状態で、筐体下の窪みとHolderの間にバネを挟み、透明電極が下から筐体の屋根裏に押しつけられるようにHolderを固定します。

再度動作チェック

透明電極がかまぼこ筐体の頂点に押し当てられた状態で、一度各接点がタッチで反応するか試しておきます。
反応しないスイッチがあれば、もう一度透明電極の取り付けまで戻り、調整を行います。

かまぼこ筐体の連結

Half ORBITの12個の筐体を合体します。
連結には、かまぼこ筐体を繋げる3Dプリントによるスタンドと、連結基板を使用します。12個を連結するので、11セットのスタンドと連結基板が必要になります。

連結基板の準備

Loopian::ORBIT-2 2024と書かれた基板を使用します。
この基板では2種類の使い方があります。通常の連結とI2Cバッファ連結です。
  1. 通常連結では、JP1とJP2をそれぞれリード線で繋ぎます
  2. I2Cバッファ連結では、U1にPCA9600Dを、R1,R2に4.7Kの抵抗をハンダづけします

連結スタンドの3Dプリント

このデータで3Dプリントを行います。ラフト無しだとプリントがうまくいかない場合があります。

かまぼことスタンド、基板をねじ止め

15mmの長さのネジで、6つのかまぼこ筐体、連結スタンド、連結基板をネジ止めします。

ピンヘッダ等のはんだ付け

連結基板にピンヘッダやピンソケットをはんだ付けします。
J7がピンソケット、J6, J8 がピンヘッダになります。
J6とJ7を接続するので、基板と連結スタンドをうまく位置合わせした上で、はんだ付けします。

Half ORBITの両端の処理

Half ORBIT(かまぼこ12個分)の両端にはスタンドが付いていませんが、二つのHalf ORBITを合体する際に、この箇所を利用しますので、いったんここでは何もつけません。

ORBITの全体製作

Half ORBITのかまぼこ筐体を12台作る際、これまでの手順を何回か繰り返すことになります。
この繰り返しの作業の際、気を付けることを以下にまとめます。

全体の製作手順

  1. 手順に従い、かまぼこ筐体を二つ作成
  2. かまぼこ筐体二つを連結
  3. LED基板作成まで戻り、3台目を製作
  4. 連結するたびに、LED基板作成まで戻る
  5. 12個を連結するまで繰り返す

6台目と7台目の間

搬送のことを考え、6台目と7台目の間は取り外し可能とします。また、6台目と7台目の間の連結基板はI2Cバッファ連結の基板を使います。

二つのHalf ORBITを組み合わせる

このデータを印刷し、二つのHalf ORBITを繋げる土台とします。

ラズパイ5の取り付け

Loopian::ORBITは当初PCと接続することで動作させていましたが、スタンドアロンでの動作のため、ラズパイ5を取り付けて直接オーディオを出力させるようにしました。
ここでは、ラズパイ5の取り付けについて簡単に記述しておきます。

ラズパイ5のシステム準備

システム準備でやったこと
  • オーディオカードの取り付けと設定
  • pianoteq8のインストール
  • git/rustなどの開発環境インストール
  • Loopian::Appのダウンロードとビルド
  • UARTの設定
詳細はこちらのページに書きました。
pianoteq8についてはこちらのページ。

ラズパイ5ケースの3Dプリント

以下の3つのデータを3Dプリントします。
  1. ラズパイ全体を固定するベース部分
  2. 上部のカバー
  3. 配線部分の保持用カバー

ラズパイ5の取り付け

木製スタンドのケーブルホルダーのある箇所の中段に、ラスパイ5を取り付けます。

ラズパイ5のピン使用方法

オーディオボードが使っているピンを確認
3: GPIO2
5: GPIO3
12: GPIO18
31: GPIO6
35: GPIO19
40: GPIO21
これらは、別の用途で使うことができない。
Loopianでは、36: GPIO16, 37: GPIO26 をそれぞれ、MIDI再接続用、APP終了用に使用する。

イベント時の組み立て

Loopian::ORBITは、木製のスタンド含めると、組み上げた際にはかなりの大きさになります。
従って、イベントの際は組み上げた状態で運ぶことは無理なので、分解して運搬します。
イベント会場での組み上げ手順について、ここに記載しておきます。

スピーカー設置

スピーカー用設置板の上にスピーカーを載せます。
近くにモニター、キーボードを置きます。
また、ORBIT用のタップに、スピーカーの電源を繋ぎます。

木製スタンドの組み立て

木製スタンドを組み立てます。
色付きのシールの色が合っているスタンドを組み合わせ、上中下の3箇所のねじ止めを行います。

Control基板の取り付け

二つのControl基板(Main/Sub)を黒の3mmネジで取り付けます。
Mainは、木製スタンドの下側にケーブルホルダーがある方です。
長いケーブルをケーブルホルダーに引っ掛けて、二つのControl基板を繋ぎます。
Main側のControl基板に、電源とUSB microB端子を繋ぎます。

ラズパイ5の取り付け

ケースに収まっているラズパイ5を、木製スタンドに取り付けます。MainのControl基板の直下です。
下にあるリングにケーブルをまとめます。
ラズパイとControl基板の電源をタップに繋ぎます。

ORBITの組み立て

6番目と7番目のかまぼこ筐体をねじ止めします。
二つのHalf ORBIT同士をねじ止めします。
ケーブルを接続します。

ORBITの取り付け

なるべくギリギリまで上を向けないようにしてそっと持ち上げ、ゆっくり台の上に置きます。
ORBITのケーブルをControl基板に繋げます。

起動

ラズパイ5にキーボードとマウスを繋げます。
最後にタップが繋がっている電源をONにします。

イベント終了後の分解

イベント終了時の分解の手順は、基本的に組み立てと逆に行えばOKです。