研究テーマ->メディアアート->メディアアートについて->ピエゾで複数の音とLED点灯をトリガーするプログラム

ArduinoとShieldについて紹介します。  
ハードウェアの準備


4

1Mオームの抵抗を付けたピエゾを必要な数分用意します。LEDにも150オームぐらいの抵抗を付けたほうがよいです。LEDの仕様がわかればLED抵抗値計算のページで計算できます。電圧計があれば、つないで目的の電圧になるような抵抗値を探すこともできると思います。ま た抵抗をつけずに「analogWrite(led, 170);」のように出力側の値を下げてもいいかと思います。(ただし何かあるとLEDが焼けてしまう可能性があります。)
ソースコードの変更
#include <SD.h>
#include <SPI.h>
#include <arduino.h>
#include <MusicPlayer.h>
#define NUM_LED 12
const int knockSensor[NUM_LED] = {A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15};
int sensorReading[NUM_LED] = {0,0,0,0,0,0,0,0,0,0,0,0};
const int threshold = 10;
bool on_off_flg[NUM_LED] ={ false,false,false,false,false,false,false,false,false,false,false,false};
int led[NUM_LED] ={2,3,4,5,6,7,8, 9,10,11,12,13};
int note[NUM_LED] = {48,62,64,65,67,69,71,72,74,76,77,79};
void setup()
{
    Serial.begin(9600);
    pinMode(led, OUTPUT);
    player.beginInMidiFmt();
    player.midiWriteData(0xB0, 0x07, 127);
    player.midiWriteData(0xB0, 0x0b, 127);
    player.setVolume(10);
    int i;
    for(i=0;i<NUM_LED;i++)
    {
        player.midiWriteData(0x90, note[i], 127);
        analogWrite(led[i], 150);
        delay(500);
        analogWrite(led[i], 0);
        player.midiWriteData(0x80, note[i], 0);
    }
}
void loop()
{
    int i;
    for(i=0;i<NUM_LED;i++)
    {
        sensorReading[i] = analogRead(knockSensor[i]);
        if (sensorReading[i] >= threshold && on_off_flg[i]==false)
        {
            player.midiWriteData(0x90, note[i], 127);
            analogWrite(led[i], 150);
            on_off_flg[i]=true;
//         Serial.println(i);
//         Serial.println(sensorReading[i]);
        }
        else if (sensorReading[i] < threshold && on_off_flg[i]==true)
        {
            player.midiWriteData(0x80, note[i], 0);
            analogWrite(led[i], 0);
            on_off_flg[i]=false;
        }
    }
}
 
ここでは12個のピエゾとLEDをarduinoに接続して、ピエゾをたたくと、LEDが点灯して発音するようにしています。起動時にハードウェアの動作確認のためにLEDの点灯と発音を行うようにしています。
動画


 

動画では起動時はLED点灯のみで、発音はしていません。