なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで遊ぼう - 圧電スピーカでチクタク

Posted by arms22 on 2009年12月05日 4  0

Arduinoと圧電スピーカを使って某有名海外ドラマ「24」のチクタク音とCTUの内線着信音を再現してみました。再生周波数はネット上で公開されているwavファイルをダウンロードし、Audacityで波形を解析、再生周波数を特定しました。かなり地味な作業です。。



圧電スピーカは電極に再生させたい周波数の信号(高速にHとLを繰り返す)を与えると内部の金属板が振動し音を発生させます。また外部から衝撃を加えると電圧が発生するので衝撃センサとしても使えます。電極に直接LEDを接続し、圧電スピーカに衝撃を与えると瞬間的にLEDを光らせることができます。

建築発明工作ゼミ2008 - Arduino 圧電スピーカ
http://kousaku-kousaku.blogspot.com/2008/05/arduino_9230.html


Arduinoと接続する



Arduinoと圧電スピーカの接続図
圧電スピーカのプラスをArduinoの13番端子に接続し、マイナスをGNDに接続します。


ライブラリのインストール


今回、圧電スピーカの制御はarduino-toneと呼ばれるArduino用のトーンライブラリを使用しました。arduino-toneはハードウェアタイマを使い指定したポートから可聴範囲の矩形波を出します。

次のURLからTone-V0005.zipをダウンロードします。ダウンロードしたライブラリはSKETCHBOOK/librariesにコピーしてください。

arduino-tone - Arduino Tone Library
http://code.google.com/p/arduino-tone/


サンプルスケッチ - チクタク音


#include <Tone.h>

Tone notePlayer;

void setup(void)
{
  notePlayer.begin(13);
}

void loop(void)
{
  notePlayer.play(2252,50);
  delay(1000);

  notePlayer.play(2000,50);
  delay(1000);
}


begin関数で使用する端子を選択する。play関数で再生周波数と再生時間をミリ秒で指定します。ミリ秒は省略可能で、その場合、再生はstop関数をコールするまで続けられる。またplay関数はノンブロッキング関数で、呼び出し後すぐに呼び出し元に処理を返す。連続して再生する場合、前の音の再生が終るまでdelay関数などで待つ必要がある。


サンプルスケッチ - CTU内線着信音


#include <Tone.h>

Tone notePlayer;

void setup(void)
{
  notePlayer.begin(13);
}

void loop(void)
{
  notePlayer.play(690,25);
  delay(50);

  notePlayer.play(690,30);
  delay(168);

  notePlayer.play(690,23);
  delay(48);

  notePlayer.play(690,30);
  delay(360);


  notePlayer.play(970,25);
  delay(50);

  notePlayer.play(970,30);
  delay(50);

  notePlayer.play(970,30);
  delay(50);

  notePlayer.play(970,30);
  delay(50);


  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  notePlayer.play(487,30);
  delay(55);

  delay(1500);
}





Make: Technology on Your Time Volume 08
オライリー・ジャパン
オライリージャパン
売り上げランキング: 8685




Ads by Google

4 Comments

Shu says..."No title"
現在このArduino1.0でこのライブラリーを使うとエラーが出るそうです。
Tone.cppの中身の<wiring.h>を<Arduino.h>に変えれば動きます。
自分が苦戦したので^_^;
2012.03.26 15:25 | URL | #- [edit]
arms22 says..."Re: No title"
ずい分前にこのライブラリはArduino組み込まれました。
tone() を使えば同じことがライブラリなしでできます。
ためしてみてください。

http://arduino.cc/en/Reference/Tone
2012.03.27 00:50 | URL | #- [edit]
Shu says..."No title"
今となってはこのライブラリを使う時は、
同時再生音数を増やしたい時とかですね。
標準だとピンが1つまでとなるので...orz
2012.04.20 18:28 | URL | #- [edit]
のりこ says..."改造"
私も参考になりましたので
出しゃばらせて頂きます。

#define PINNO 13 // 圧電スピーカを接続したピン番号

void setup(void) {
}
void loop(void) {
tone(PINNO,690,25);//着信音
delay(50);
最後の行まで同じように書き換えるとなりました。


私みたいな人に参考になれば嬉しいです。
2013.09.25 07:25 | URL | #zliNgu6s [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。