|
neko_saxさんへのお返事です。
> 単音ずつしか鳴らないのですが、一音に対して、
> ブラス系、パッド系、モーション系、の3つの音源が重なって鳴り、ボリュームが自動的に変化する音源を使っています。
> (さらに隠し味的に聴こえないくらいに、うっすらほんのりとアルペジエーターも走っています。)
>
> 足が二本しかありませんので(笑)大体は2声でコード感が出るようにアドリブで適当に伴奏しています。
なるほど。アルペジエータなんですね。
シンセのパート、厚みがある音だなと思って、
どんな風にしているのか気になっていました。
>
Roland FC-200 というフットペダルを、縦に3台並べております。タッチ式ではなく、ペダルは硬いです。
> ベロシティー機能は、ありません。
>
> 実は、ベロシティーがありましても足でのダイナミクス表現は無理でして、ないほうがかえって演奏がしやかったりします。
>
> この Roland FC-200 は生産完了しておりまして、中古を6台所有しておりますが(笑)
> 一台ずつ徐々に不具合が生じてきておりますので、今後は自分で作るしかない、という感じです。
生産終了なんですか。生産終了は困りますよね。
> タッチ式にしますと、
>
> ・スイッチがアルミホイルで良いですので制作がしやすい
> ・高速で踏めるかも
>
> という期待感があります。(かえって不都合もあるのかもしれませんが・・・)
>
タッチセンサの原理は簡単なんですが、キャパシタンス
の充放電で電圧を測る際に使う「1MΩとかそれ以上」の
大きい抵抗を使うので、比較的ノイズに弱いのが難点に
なるかと思います。
(近くにある配線などとキャパシタンスを形成して誤動作
したり、電波ノイズを拾って誤動作したり…)
特に、足で操作する鍵盤みたいなものになると、配線が
どうしても長めになるでしょうし、足の踏んだ位置が
少しずれるなどもあるでしょうし、意図していないキー
がオンになってしまうなど、あるかもしれません。
>
> 建築発明工作ゼミ2008 という記事を参考にしましたら、うまくいきました。
>
> 因みにこの上記スケッチと、こちらでご紹介頂いておりますMIDI shield controllerスケッチとをドッキングして、なんとか制作したいと思っております。
>
> 今はまだ、きっとなんとかなるはず・・・といった感じですが。
>
参考サイトなど色々眺めてみたのですが、
「チャージ用」と「ディスチャージ用」で、GPIOを2ピン
使う構成になっていて、少しもったいないな、という気が
いたしました。
建築発明工作ゼミさんのスケッチを元に、デジタルピン
1本だけで入力できるようなスケッチにいじりなおして
見ました。
int f=0;//フィルタ用変数
void setup(){
//モニタリングのためシリアル通信開始
Serial.begin(9600);
pinMode(9,OUTPUT);
digitalWrite(9, LOW); // 放電しておく
//LED点灯用に13番ピンをデジタル出力
pinMode(13,OUTPUT);
}
void loop(){
//静電容量変化量の変数を用意
int a=0;
//8番ピンをLOWで出力
digitalWrite(9, LOW); // 放電 and プルアップ抵抗オフ
pinMode(9,INPUT); // 入力モードに変える(充電開始)
//8番ピンがHIGHになるまでをカウント
while (digitalRead(9)!=HIGH){
//カウントする
a++;
}
delay(1);
//9番ピンをLOWにする
pinMode(9,OUTPUT); // 出力モードに戻す
digitalWrite(9, LOW); // 放電しておく
//値を滑らかにするフィルタ式
f+=(a-f)/2;
//モニタリング:フィルタ値を出力
Serial.print(f);
Serial.print(" , ");
Serial.println(a);
//LED点灯のプログラム
if(f>5){//値が5より大きい場合点灯
digitalWrite(13,HIGH);
}else{ //それ以外消灯
digitalWrite(13,LOW);
}
}
回路もちょっとだけ違うので、下記に添付します。
(実際に配線するのは、VccからD9に繋ぐ1MΩ抵抗と、
D9から伸びるタッチセンサ部分だけです。100pの
キャパシタンスとGNDは、人間の体が内蔵している
HBMのインダクタ成分です)
このスケッチも動作は基本的に同じなのですが、
チャージとディスチャージを1つのデジタルピンで
兼ねるので、全体的にみれば、使用ピン数を減らす
ことができるかと。
ちなみに、1ピン、2ピン程度なら、この方法でうまく
機能すると思うのですが、2桁となってくると、
1個のArduinoで制御しようとすると、色々と支障が
出てくるかも知れません。
HBM(Human Body Model)の容量値をそのまま使うと、
人体のキャパシタンス(見做し)は100pF程度で、ここに
1MΩを通してチャージすると、0.1ミリ秒~1ミリ秒程度
の時間を要し、それが30本とか40本とか直列に処理する
と考えると、最悪値では全体で0.1秒近く掛かるかも
しれません。
(実際は、足で踏んでいないキーは最短時間しか掛からない
ので、平均値で考えれば、全体で数ミリ秒程度だろうと
思いますが)
TINY13を大量(キーの数の分)に使って、アナログ信号
のハンドリングはこれらに分散処理してしまい、コア機能
としてのArduino側ではデジタル入力だけに専念すれば、
処理はかなり楽になる気がします。
あと、実験してみたところ、1MΩだと拾える数値の域値が
少し狭いので、もう少し大きい抵抗を使いたくなるところ
ですが、抵抗値を大きくしすぎると、上述のようにノイズに
弱くなったり、さらにはチャージに時間が掛かるため、
計測時間が延びることが想定されます。
>
> 最初は、ものが大きくなっても構わないですし、
> ブレットボードものになっても構わないので、なんとかして作りたいと思っております。
実機用の基板が、本体の筐体と比べればそれほど
大きくは無いでしょうから、シールドサイズに
収めることにはあまりこだわらなくてもいいのかも
しれませんね。
問題は、配線の取り回し次第で、ノイズに弱くなる
かもしれないので、そのあたは、実験などでハードの
仕様を詰めていく必要があるかもしれません。
大きい抵抗値を使って、長い経路の配線にすると、
お見事「アンテナ」が出来上がってしまうので、
ノイズにはシビアになるかと思います。
パッケージ全体で、抵抗値が大きいところの配線は
短くして、抵抗値の小さい配線経路で長く配線する
などの工夫が要るかと。
> 一点、質問させていただけますとたいへん有難いのですが、
> こちらのサイトで有難くご紹介いただいております、
> 「MIDI shield controller for Arduino version 0.2 by Nekosan 」
> のスケッチのそのままで、
>
> 1オクターブ分のスイッチ、と、ファンクションボタン、(オクターブシフト用)
> (可変抵抗器なし、ジョイスティックなし)
>
> これだけのシンプルな感じで組んで、このままのスケッチで使用していても動作に支障はありませんでしょうか?
> 教えていただけるととても有難いのですが・・・。
> (現在のところ、ド、レ、のスイッチだけで勝手に実験しております。笑)
>
入力信号が、オンとオフのデジタル信号だけであれば、
特に支障なく動くと思います。
気になっているのは、今回のお話だと、タッチセンサ
の場合、センサ部分の周囲に手や配線などが近づくと、
触って無くても触っているかのように誤作動起こす
可能性があるのかなという気がします。
つまり、ノートオフがされないのは、キャパシタンスが
残っているのではないか?というあたり。
触って無くても触っているような状態になっていると、
スイッチオフにしたつもりの状態で、本当にオフに戻って
いるか、入力値(計測値)をシリアルモニタで確認して
みると、そのあたりが判断できるかも知れません。
> > タッチセンサーとかだと、通常はアナログ出力
> > だったりするでしょうから、デジタルのオン/オフ
> > で読もうとして、タイミングのずれになっていたり
> > とか。
> >
>
> そうなのですね、
> 今後、そのあたりに気をつけてやってみます!
Arduinoだと、スケッチ上に現れない処理(※)
により、カウント間隔にゆれが生じて、カウント値
がころころ変化することになります。
(※:内部で、millisやdelayなどで使用する
ためのタイマ割り込みが処理が動いている)
建築発明工作ゼミさんのサンプルスケッチで
出てくる「変数f」は、簡易的なFIRフィルタ
でLPFを構成しているんだろうと思いますが、
この手のフィルタ処理で揺らぎを取り除くのも
一つの手だと思います。
もしくは、タイマ割り込みを禁止できるので
あれば、もう少し安定した値が取れるとおもう
のですが、MIDI出力(シリアル出力)のバッファ
処理でタイマ割り込み使ってたかどうかあたりを
調べておく必要があるかもしれません。
ほかにも、計測にタイマ割り込みや、キャプチャ機
能などを応用する手もあると思うのですが、
これをArduinoでやると色々深みに填まって
必要以上に苦労すると思うので、避けたほうが
よさそうです。
> ・1オクターブ分のスイッチと、オクターブシフト搭載でシンプルなコントローラーを何とか作れるようにすること(今、この段階です・・・)
>
> ・36鍵盤という多入力を、一台でなんとか実現すること
>
> ・タッチセンサー式の足鍵盤をなんとか実現すること
>
> の3つに目標を向けて頑張ります!
>
> 貴重な掲示板を利用させて頂きまして、誠に有り難うございます。
TINY13をArduino化して、36個ずらっとならべて
分散処理させて、アナログ-デジタル変換掛けて、
それをコア処理担当のArduino(UNOなど)で拾えば、
機能としては動きそうな気がします。
1ループの処理時間も、特に気にするほど長くはなら
ないかと。
いずれにしても、普通サイズのArduinoで、2個以上の
複数入力がうまく動くか…の部分ですね。
|
|