昨日はD2Draftの第5回 D2D 飲みながらコードを書く会で感圧センサーを使って、センサーを押したときの圧力によって出る音程が変わるおもちゃを作ったので作り方を紹介します。
完成形がこちら(動画のボリュームをオンにして再生してください)
今回使ったパーツ
- 必須
- 感圧センサー(円形・小) (型番 ALPHA-MF01-N-221-A04)
- 抵抗10kΩ
- 電圧スピーカー(電圧ブザーとも言う)
- あると便利
感圧センサーはブレッドボードに直接挿し込んでも良いのですが、ワニ口のジャンパワイヤで接続すれば動画の様にブレッドボードから遠いところにセンサーを設置できて便利です。
回路とスケッチの作り方
ブレッドボード
下記の図のとおりにArduinoに接続してください。
感圧センサーからのアナログ値を受け取るには、アナログ入力専用のピンに接続します。今回はA1を使っています。
電圧ブザーはこちらの記事を参考に12番ピンに接続しました。
スケッチ(プログラム)
感圧センサーから値を受け取って、値に応じた周波数の音を出すプログラムを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// 使用するピンを定義します const int vol_pin = 1; const int out_pin = 12; // グローバル変数 int vol_value = 0; int out_value = 0; void setup() { Serial.begin( 9600 ); } void loop() { // 感圧センサーの値を受け取ります vol_value = analogRead( vol_pin ); // センサーを押さえていないときの値が1023、押さえた力に応じて値が小さくなるので、 // 押さえた時に周波数が高くなるように調整します out_value = (1023 - vol_value); // 出力する周波数をシリアルモニタに表示します(デバッグのため) Serial.println( out_value ); // 周波数が10より大きいとき(感圧センサーを押さえたとき)だけ音を鳴らすようにします if (out_value > 10) { tone(out_pin, out_value); } else { // 押さえていないときは音を止めます noTone(out_pin); } delay( 50 ); } |
ここまで出来たらArduinoに書き込んで動作確認をしてみてください。ちゃんと動かない人は配線をよく確認してください。
少しだけ解説
1 2 3 4 5 6 7 |
// 周波数が10より大きいとき(感圧センサーを押さえたとき)だけ音を鳴らすようにします if (out_value > 10) { tone(out_pin, out_value); } else { // 押さえていないときは音を止めます noTone(out_pin); } |
tone(ピン番号, 周波数)
関数は、周波数に0を渡しても音が鳴ってしまいます(スピーカーの種類にもよるのかもしれませんが、僕が持っているスピーカーは音がなりました。)なので、周波数がかなり低いときにはnoTone(ピン番号)
関数を使って音を止めるようにしました。
これで、感圧センサーから手を離している時に、ボボボボボ・・・というノイズが鳴らないように制御しています。
たったこれだけのプログラムで面白いものが作れますので、よかったら試してみてください。
感圧センサを距離センサや可変抵抗器に置き換えても同じことができそうですね。