Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2632
組み込み系

12.Arduinoで音を鳴らす(tone)

ちょっと乱暴な方法でしたが、digitalWriteでのLEDでの出力は散々試してみました。
他のサイトでは、ちゃんと抵抗をつけて電流計算をしたり、電気的なことをちゃんと書かれていたりするところからすると、あまりにもゆるい感じで申し訳あrませんが、ほぼこれでLEDへの出力は理解できたのではないでしょうか?
専門的に理解されたい場合は、ほかのばっちり書かれたサイトでもう一度おさらいをしてください。

ArduinoでBeep音(Buzzer)を鳴らしてみる

Arduinoのマイコンからの出力の一つとして、実に便利な簡単にブザー音を鳴らすことができる命令があります。しかも、音程なども簡単に変えられるので音楽を演奏することもできます。
※ただし単音ですが…

Buzzer音を鳴らすために必要なモノ

音を鳴らすわけなの、当然スピーカーが必要なのですが、Arduinoのポートに直接スピーカーをさしても残念ながら出力が足りなくて音がなりません。
ですので、省電力でもブ~ブ~ピ~ピ~なってくれる「圧電ブザー」というものを用意します。

こんな感じで強引に突き刺しました

大好きセットのブザーはこんな形をしていたので、またまた強引にArduinoのコネクタに突き刺してみました(笑)… 片方の足はGNDに片方の足は11番へしっかりと突き刺します。

ArduinoでBuzzer音を鳴らしてみます

ArduinoのBuzzer音制御関数は tone という関数(命令)を使います。
命令は単純に鳴らしたい場面で tone(突き刺したピン,音の高さ,長さ)で支持するのですが、、音の高さは周波数、長さはミリ秒です。

ただ、長さは noTone(突き刺したピン)の命令を出さない限り止まらないので、基本は自分でdelayを使って制御します。

とりあえずラ~を1秒鳴らして終わる

void setup() { 
} 
void loop() { 
  tone(11,440); //ラ~(440Hz)
  delay(1000);  //1秒間まつ
  noTone(11);   //音止める
  while(1){}    //ループするとうるさいのでプログラムを強制的にループさせない
}

ピンの出力設定は何もいらず、いきなり鳴らせます。

1オクターブ変える

void setup() { 
} 
void loop() { 
  tone(11,440); //ラ~(440Hz)
  delay(1000);  //1秒間まつ
  tone(11,880); //ラ~(880Hz)
  delay(1000);  //1秒間まつ
  noTone(11);   //音止める
  while(1){}    //ループするとうるさいのでプログラムを強制的にループさせない
}

音がつながらないようになっている時間を短くする

void setup() { 
} 
void loop() { 
  tone(11,440,500); //ラ~(440Hz)
  delay(1000);  //1秒間まつ
  tone(11,880,500); //ラ~(880Hz)
  delay(1000);  //1秒間まつ
  noTone(11);   //音止める
  while(1){}    //ループするとうるさいのでプログラムを強制的にループさせない
}

Sample

面白いサンプルが落ちていました。
一度試してみてください。

MusicSample

タイトルとURLをコピーしました