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 になる
段々身近なものや、プログラミングで色々できる回路が出てきてぼんやり楽しくなってきた
とりあえず今回はここまで
多分次回に続く