圧電スピーカを振動センサーに
以前作ったライトに振動センサーを取り付けて、インタラクティブライトにしたいと思います。
ここで作ったモノに圧電スピーカを取り付けます。この圧電スピーカーは実は振動センサーにもなるスグレモノです。
必要なもの
| パーツ | 数量 |
|---|---|
| 圧電スピーカ | 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);
}
}
}




