ELEGOO Arduino用UNO R3スターターキット で始める マイコン+電子工作4

ELEGOO Arduino用UNO R3スターターキット レベルアップ チュートリアル付

前回の続き
引き続きチュートリアルに沿って電子工作入門していく

ブザー

アクティブブザー

使用する機器

  • (1) x Elegoo Uno R3
  • (1) x Active buzzer
  • (2) x F-M wires (Female to Male DuPont wires)

BUZZER

電子ブザーは DC 電源であり、集積回路を備えています。
それらは、コンピュータ、プリンタ、複写機、アラーム、電子玩具、車載電子機器、電話機、タイマ、および音声デバイス用の他の電子製品に広く使用されている。
ブザーはアクティブなものとパッシブなものに分類できます。
2 つのブザーのピンを上に向けます。
緑色の回路基板を持つものは受動的なブザーですが、黒色のテープで囲まれたものはアクティブなブザーです。

あいかわらす良くわからない説明だが
アクティブブザーとパッシブブザーというものがあり、各ブザーの違いは端子側にある

  • アクティブブザー
    端子側が樹脂等でコーティングされている
    ブザー内部に振動機があり電力を通すだけでブザー音が鳴る
    よくイメージするブザー

  • パッシブブザー
    端子側が基盤むき出し
    振動器は無いため外部から波形データを渡して鳴らせる必要があります
    イメージ的にはスピーカー

そして今回のチュートリアルはアクティブブザー
写真だと正面側しか写してないのがいやらしい

また今回のチュートリアルで新たに F-M wires という配線ケーブルを使う

構成
ブザーの端子には+-があり正面に書いてもあるが端子の足が長いほうが+、-をGNDにつなぐように注意

挿しただけではまだブザーはならないのでサンプルコードを開く

コードをデプロイするとちょっと耳障りな音が2音交互に鳴り続ける

内容自体はブザーの端子片方を繋いだ 12 ピン側を OUTPUT で有効化し
以降は2つの周波数をループして発振させてるのかな?

void loop()
{
 unsigned char i;
 while(1)
 {
   //output an frequency
   for(i=0;i<80;i++)
   {
    digitalWrite(buzzer,HIGH);
    delay(1);//wait for 1ms
    digitalWrite(buzzer,LOW);
    delay(1);//wait for 1ms
   }
   //output another frequency
   for(i=0;i<100;i++)
   {
     digitalWrite(buzzer,HIGH);
     delay(2);//wait for 2ms
     digitalWrite(buzzer,LOW);
     delay(2);//wait for 2ms
   }
 }
}

アクティブブザーの場合発振器は回路内にあるため、発振と停止と繰り返しを工夫することでブザー音をコントーロールしている
サンプルコード内の for文を減らしたり、増やしたり、 delay 値を変更することで音の変化を確認できると思う
ただずっと音を聞いてると気分悪くなりそうなので注意

パッシブブザー

使用する機器

  • (1) x Elegoo Uno R3
  • (1) x Passive buzzer
  • (2) x F-M wires (Female to Male DuPont wires)

パッシブブザー

パッシブブザーは先述したとおり、振動回路を持たないブザー
ELEGOOのセットはアクティブブザーにシールが張ってあって区別しやすいけどピン側以外は見た目同じ

構成

構成自体は前のアクティブブザーと同じ
ただ端子自体の長さとかで+-の見分けがつかない
赤色(正極性)のピン 8 に黒色線(負)を GND に配線します。

このままでは当然音を発しないのでサンプルコードを開く

サンプルコードを見てみるとまず最初に「pitches.h」というモジュールをインクルードしている
最初のチュートリアルにあったようにライブラリの管理から「pitch」で検索して必要なモジュールがあるか確認し
無いので同様にサンプルコードと一緒に配置してるライブラリを追加する

読み込めると下記のようにライブラリリストに確認できる

デプロイすると音階のメロディが聞ける
コードを見てみよう

int melody[] = {
  NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, NOTE_C6};
int duration = 500;  // 500 miliseconds

void loop() {  
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    // pin8 output the voice, every scale is 0.5 sencond
    tone(8, melody[thisNote], duration);
     
    // Output the voice after several minutes
    delay(1000);
  }
   
  // restart after two seconds 
  delay(2000);
}

この辺からチュートリアルでコードの説明がなくなる・・・

int melody に配列で 8要素指定し
それらを loop で1配列ずつ tone 関数で delay を実行して音を鳴らしてるんかな

メロディの指定はどうやっているのか?
今回読み込ませたライブラリ内を見てみると下記のように羅列してあり

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62

~ 省略  

指定した音の定義に対して数字が振られている
数字がどの音階に対応しているかというと周波数で決まっている

例えばコード中の NOTE_C5 は ライブラリでは値が 523 と設定されていて
523、つまり 523Hz は ド/C5 になる


段々身近なものや、プログラミングで色々できる回路が出てきてぼんやり楽しくなってきた

とりあえず今回はここまで
多分次回に続く

Share Comments
comments powered by Disqus