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