振動センサー sensor#01

圧電スピーカを振動センサーに

以前作ったライトに振動センサーを取り付けて、インタラクティブライトにしたいと思います。

インテリアライトを作ってみよう LED#04

ここで作ったモノに圧電スピーカを取り付けます。この圧電スピーカーは実は振動センサーにもなるスグレモノです。

配線はこちら

必要なもの

パーツ 数量
圧電スピーカ 1
抵抗1MΩ 1
ジャンパケーブル 2

振動センサから信号を取り出す

配線ができたら次のプログラムを書き込みましょう。そしてシリアルモニタを起動します。圧電スピーカーにタッチしてください。そうするとシリアルモニタの数値が0から増えるはずです。これで振動の検知は出来ましたね。

analogRead

analogRead(x)でxの数値を読み込みます。A0の値を読むときはanalogRead(0) でOKです。

int val;
void setup() {
  // setup内は一回だけ実行します
Serial.begin(9600);
}
void loop() {
  val=analogRead(0);
  Serial.println(val);
}

1行目で変数valをセットします。4行目Serial.begin(9600);でシリアルモニターを9,600bpsで使う宣言。7行目で変数valにA0から読み込んだ値をセット。8行目でシリアルモニターにvalをprintします。

センサーの値を判断する

今度はセンサーの値によってArduinoに判断させますね。信号がなければそのまま。信号があればライトを光らせるプログラムを作ってみましょう。

if文で条件分岐

書き方はif(条件式){プログラム}else{プログラム}という感じで書きます。10行目でvalが0ならなにもしない。それ以外は14行目以下の処理をします。

条件が複数ある場合はif(条件式){プログラム}else if(条件式){プログラム}else{プログラム}という感じで書きます。10行目でvalが0ならなにもしない。それ以外は14行目以下の処理をします。

                

手を叩いてセンサーが検知するとLEDが光りはじめます。

const int LED=3;
int val;
void setup() {
pinMode(LED,OUTPUT);
Serial.begin(9600);
}
void loop() {
  val=analogRead(0);
  Serial.println(val);
  if (val==0){ //もしval=0なら消灯
    analogWrite(LED,0);
    }
    else{ //0以外ならゆっくり点灯して、ゆっくり消灯する
      for(int i=0;i<=255;i++){
        analogWrite(LED,i);
        delay(10);
      }
      for(int i=255;i>=0;i--){
        analogWrite(LED,i);
        delay(10);
      }
    }
}

if文で複数条件分岐

条件が複数ある場合はif(条件式){プログラム}else if(条件式){プログラム}else{プログラム}という感じで書きます。10行目でvalが0ならなにもしない。それ以外は14行目以下の処理をします。

                 

2種類の光り方を用意しました。強く手を叩いたりして2つの光り方を見てみましょう。もしうまくいかない場合は13行目のval<=10の値を変更してみましょう。

const int LED=3;
int val;
void setup() {
pinMode(LED,OUTPUT);
Serial.begin(9600);
}
void loop() {
val=analogRead(0);
Serial.println(val);
if (val==0){ //もしval=0なら消灯
analogWrite(LED,0);
}
else if(val<=10){ //10以下ならならゆっくり点灯して、ゆっくり消灯する
for(int i=0;i<=255;i++){
analogWrite(LED,i);
delay(10);
}
for(int i=255;i>=0;i--){
analogWrite(LED,i);
delay(10);
}
}
else { //それ以外は50回点滅する
for(int i=0;i<=50;i++){
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
delay(100);
  }
}
}

シェアするにはこちらからShare on FacebookShare on Google+Tweet about this on Twitter