PMC
照明midi制御装置
About
コンセントに挿した電気機器を同時に4つまでmidiにて制御できます。 PC側の制御ソフトにはMAX/MSPを使用しています。
#define Light1 3
#define Light2 4
#define Light3 6
#define Light4 7
int serialvalue; // シリアル入力の値
int sens1,sens2,sens3,sens4;
void setup()
{
Serial.begin(9600); // arduinoのシリアルポートをオープン
pinMode(Light1,OUTPUT);
pinMode(Light2,OUTPUT);
pinMode(Light3,OUTPUT);
pinMode(Light4,OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
serialvalue =Serial.read(); // シリアルデータをバイト単位で読み込む
sens1 = bitRead(serialvalue,0);
sens2 = bitRead(serialvalue,1);
sens3 = bitRead(serialvalue,2);
sens4 = bitRead(serialvalue,3);
if (sens1 == 1)
{
digitalWrite(Light1,HIGH);
}
else
{
digitalWrite(Light1,LOW);
}
if (sens2 == 1)
{
digitalWrite(Light2,HIGH);
}
else
{
digitalWrite(Light2,LOW);
}
if (sens3 == 1)
{
digitalWrite(Light3,HIGH);
}
else
{
digitalWrite(Light3,LOW);
}
if (sens4 == 1)
{
digitalWrite(Light4,HIGH);
}
else
{
digitalWrite(Light4,LOW);
}
}
}
まずはarduino側のスケッチ。 シリアル通信でPCからデータを受け取り,それに応じてデジタルピンの出力を上げ下げしています。 PC側で0~15の数字を送信し,それを2進数で読みとって4ch分の制御を行っています(bitReadの部分)。 他にもやりようはありそうな気がしますが,とりあえずこれで動くので良しとします。
続いてPC側のMAXのプログラムです。左上部分はmidiキーを押した時に再生開始するための部分です。 左下部分が楽曲(wavファイル)と照明制御用midiファイルを再生する部分。 sfplay~の最右アウトレットはファイルの再生終了時にbangを吐き出すので, 楽曲再生終了時に照明を全消しするようにしています. 右半分がarduinoとシリアル通信するための部分です。 serialオブジェクトにprintメッセージを送ると,現在使用できるポートが表示されるので, それに合わせてポート番号(この場合はc)を設定しています.
動画
部屋にあった4つの照明を繋いで演操させました。 ミニマル風味の曲も自作でsin波の素敵なリードがお気に入りです。 部屋にあった照明4つをそれぞれ繋いでいます。 照明制御の実演のためとはいえ過剰なまでにピカピカさせてしまったため,目に良くない動画となっています。