
4つのボタンでブザーの音を操作します。1つは音を鳴らし、1つは音を止め、残りの2つは音を高くしたり低くしたりします。音を高くするボタンや低くするボタンを押し続けると、音程が段階的に変化し、サイレンのように聞こえます。音の高低が生まれる理由を、自分の耳で確かめられます。
動画
回路図

ソースコード
Arduino (C++)
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Frequency Setting with Buzzer
4// ─────────────────────────────────────────
5// Four buttons control the buzzer: On, Off, Frequency + and Frequency -.
6// Pressing On makes the buzzer play at the current frequency. The + and -
7// buttons change it by 50 Hz per press (starting at 300 Hz); the frequency
8// stays within 50-5000 Hz.
9//
10// Pins:
11// D8 -> Buzzer + (other leg to GND)
12// D7 -> On button
13// D6 -> Off button
14// D5 -> Frequency + button
15// D4 -> Frequency - button
16// Other leg to 5V, pin to GND via 220 ohm
17
18int buzzerPin = 8; // Buzzer output pin
19int btnOn = 7; // On button
20int btnOff = 6; // Off button
21int btnIncrease = 5; // Frequency + button
22int btnDecrease = 4; // Frequency - button
23int frequency = 300; // Start frequency (Hz)
24int state = 0; // 1 = 1 = sound on, 0 = off
25
26void setup() {
27 // Buttons as inputs, with external pull-downs
28 pinMode(btnOn, INPUT);
29 pinMode(btnOff, INPUT);
30 pinMode(btnIncrease, INPUT);
31 pinMode(btnDecrease, INPUT);
32}
33
34void loop() {
35 if (digitalRead(btnOn)) { // On: start the sound
36 state = 1;
37 }
38
39 if (digitalRead(btnOff)) { // Off: stop the sound
40 state = 0;
41 }
42
43 if (digitalRead(btnIncrease)) { // Raise the frequency by 50 Hz
44 frequency = frequency + 50;
45 delay(100); // Step slowly while held
46 }
47
48 if (digitalRead(btnDecrease)) { // Lower the frequency by 50 Hz
49 frequency = frequency - 50;
50 delay(100);
51 }
52
53 frequency = constrain(frequency, 50, 5000); // Keep it within 50-5000 Hz
54
55 // Play or silence the buzzer by state
56 if (state == 1) {
57 tone(buzzerPin, frequency);
58 } else {
59 noTone(buzzerPin);
60 }
61}
62
よくある質問
ボタンに220 Ωの抵抗を使うのはなぜですか?▾
このコードは、外付けのプルダウン抵抗を使い、INPUTモードでボタンを読み取ります。各抵抗を対応する入力とGNDの間に接続し、ボタンを離したときにLOWが読み取られるようにします。部品リストの220 Ωの抵抗をこの用途に使うと、5 V電源の回路ではボタンを押したときに約23 mAが抵抗に流れます。10 kΩにすると、この電流は約0.5 mAに減ります。抵抗値を変更する場合は、部品リストも更新する必要があります。
周波数はどの範囲で調整すればよいですか?▾
人の耳に聞こえる周波数は約20 Hz〜20 kHzですが、小さなブザーは500〜5000 Hzの範囲で最もよく音が出ます。周波数の増減幅を50〜100 Hzにすると、変化を聞き取りやすくなります。
ボタンを押し続けると周波数が急に変わります。ゆっくり変えるにはどうすればよいですか?▾
ループのたびに周波数を変えると、ボタンを押し続けたときに周波数が急速に上がります。押した瞬間だけを検出して1回ずつ変えるか(エッジ検出)、変更のたびに短い待ち時間を設けてください。
周波数が範囲外にならないようにするにはどうすればよいですか?▾
コードにはすでに制限があり、`frequency = constrain(frequency, 50, 5000);`の行で値を50〜5000 Hzに保っています。範囲を変更するには、この2つの数値を変えてください。例えば下限を100にすると、非常に低い、びりびりした音を避けられます。
