


---------------------------------------------------------------------
#define THRESHOLD 420 // 振動センサー信号の入力閾値約2.0V
#define NOUSESIGNAL 55 // この値以下の信号は利用しない(ノイズ対策)
#define BEAT 200 // 音を鳴らす長さ
#define PINNO 13 // 音出力用スピーカを接続したピン番号
void setup() {
}
void loop() {
int val ;
val = analogRead(5) ; // アナログ5番ピンから振動値を読取る
val = abs(val- THRESHOLD) ; // ソフト整流
if (val <= NOUSESIGNAL) noTone(PINNO) ; // 小さい振動値は音を鳴らさない
else {
val = map(val,NOUSESIGNAL,1023,31,4978) ; // 振動値を音の周波数値に変換
tone(PINNO,val,BEAT) ; // 音の出力
delay(BEAT) ; // この分だけ音を鳴らす
}
}
---------------------------------------------------------------------
CIDEツールバーの赤枠部分「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを行います。
左の(1)がArduinoのアナログに入力される圧電スピーカからの信号です、
信号は+-方向の上下に出力されます、
また、振動信号が無い時でもノイズ等により信号が振れています、この振れを取り除く方法をソフトで行うやり方の説明です。val = map(val,NOUSESIGNAL,1023,31,4978) ; // 振動値を音の周波数値に変換 if (digitalRead(5) == HIGH) val = map(val,NOUSESIGNAL,1023,31,131) ; // 低音 if (digitalRead(6) == HIGH) val = map(val,NOUSESIGNAL,1023,131,1047) ; // 中音 if (digitalRead(7) == HIGH) val = map(val,NOUSESIGNAL,1023,1047,4978) ; // 高音みたいにスイッチAを押しながら振動有れば低音域の周波数利用で、Bなら中音域、Cなら高音域 とするやり方もありでしょう。
---------------------------------------------------------------------
#define THRESHOLD 420 // 振動センサー信号の入力閾値約2.0V
#define NOUSESIGNAL 60 // この値以下の信号は利用しない(ノイズ対策)
void setup() {
}
void loop() {
int val , H ;
int R , G , B ;
val = analogRead(5) ; // アナログ5番ピンから振動値を読取る
val = abs(val- THRESHOLD) ; // ソフト整流
if (val > NOUSESIGNAL) { // 振動有りなら点灯させる
H = map(val,THRESHOLD,450,0,360) ; // HSVのH値(0-360)にスケール変換を行う
/* HSVのH値を各LEDのアナログ出力値(0-255)に変換する処理 */
if (H <= 120) {
/* H値(0-120) 赤-黄-緑 */
R = map(H,0,120,255,0) ; // 赤LED R←→G
G = map(H,0,120,0,255) ; // 緑LED G←→R
} else if (H <= 240) {
/* H値(120-240) 緑-水色-青 */
G = map(H,120,240,255,0) ; // 緑LED G←→B
B = map(H,120,240,0,255) ; // 青LED B←→G
} else {
/* H値(240-360) 青-紫-赤 */
B = map(H,240,360,255,0) ; // 青LED B←→R
R = map(H,240,360,0,255) ; // 青LED R←→B
}
/* RGBLEDを点灯させる */
analogWrite(9,R) ; // 9番ピンから赤LEDの出力
analogWrite(11,G) ; // 11番ピンから緑LEDの出力
analogWrite(10,B) ; // 10番ピンから青LEDの出力
delay(200) ; // 200msだけ点灯させる
} else {
/* RGBLEDを消灯させる */
analogWrite(9,0) ; // 9番ピンから赤LEDの出力
analogWrite(11,0) ; // 11番ピンから緑LEDの出力
analogWrite(10,0) ; // 10番ピンから青LEDの出力
}
}
---------------------------------------------------------------------
振動の大きさによりRGBLEDがいろいろな色で点灯します。
実験風景
回路図の追加(*1) 2014/02/06
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2014 Shigehiro Kimura All Rights Reserved.