#14Menengah

Mengatur Frekuensi Buzzer

4.6(69)
118 selesai
Mengatur Frekuensi Buzzer
Kamu mengendalikan suara buzzer dengan empat tombol: satu memulai suara, satu membungkamnya, dan dua lainnya membuatnya lebih tinggi atau lebih rendah. Tahan tombol naik atau turun dan nadanya berubah selangkah demi selangkah, meluncur seperti sirene. Kamu menemukan sendiri lewat telingamu kenapa sebagian suara tinggi dan sebagian lagi rendah.

Video

Skema rangkaian

Mengatur Frekuensi Buzzer - Circuit

Kode sumber

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Mengatur Frekuensi Buzzer
4// ─────────────────────────────────────────
5// Empat tombol mengendalikan buzzer: Nyala, Mati, Frekuensi + dan
6// Frekuensi -. Menekan Nyala membuat buzzer berbunyi pada frekuensi
7// sekarang. Tombol + dan - mengubahnya 50 Hz per tekanan (mulai dari 300
8// Hz); frekuensi tetap dalam 50-5000 Hz.
9//
10// Pin:
11//   D8 -> Buzzer + (kaki lainnya ke GND)
12//   D7 -> Tombol nyala
13//   D6 -> Tombol mati
14//   D5 -> Tombol frekuensi +
15//   D4 -> Tombol frekuensi -
16//   Kaki lainnya ke 5V, pin ke GND lewat 220 ohm
17
18int buzzerPin = 8;     // Pin output buzzer
19int btnOn = 7;         // Tombol nyala
20int btnOff = 6;        // Tombol mati
21int btnIncrease = 5;   // Tombol frekuensi +
22int btnDecrease = 4;   // Tombol frekuensi -
23int frequency = 300;   // Frekuensi awal (Hz)
24int state = 0;         // 1 = 1 = suara nyala, 0 = mati
25
26void setup() {
27  // Tombol sebagai input, dengan pull-down eksternal
28  pinMode(btnOn, INPUT);
29  pinMode(btnOff, INPUT);
30  pinMode(btnIncrease, INPUT);
31  pinMode(btnDecrease, INPUT);
32}
33
34void loop() {
35  if (digitalRead(btnOn)) {          // Nyala: mulai suara
36    state = 1;
37  }
38
39  if (digitalRead(btnOff)) {         // Mati: hentikan suara
40    state = 0;
41  }
42
43  if (digitalRead(btnIncrease)) {    // Naikkan frekuensi 50 Hz
44    frequency = frequency + 50;
45    delay(100);                      // Naik pelan selama ditahan
46  }
47
48  if (digitalRead(btnDecrease)) {    // Turunkan frekuensi 50 Hz
49    frequency = frequency - 50;
50    delay(100);
51  }
52
53  frequency = constrain(frequency, 50, 5000);   // Jaga dalam 50-5000 Hz
54
55  // Bunyikan atau diamkan buzzer sesuai status
56  if (state == 1) {
57    tone(buzzerPin, frequency);
58  } else {
59    noTone(buzzerPin);
60  }
61}
62

FAQ

Kenapa resistor 220 Ω dipakai untuk tombol?

Kode ini membaca tombol dalam mode INPUT dengan resistor pull-down eksternal. Setiap resistor menyambungkan input yang bersangkutan ke GND agar terbaca LOW ketika tombol dilepas. Jika resistor 220 Ω yang tercantum dipakai untuk tujuan ini di rangkaian bertegangan 5 V, sekitar 23 mA mengalir melewatinya ketika tombol ditekan; memakai 10 kΩ menurunkan arus ini menjadi sekitar 0,5 mA. Jika nilai resistornya diubah, daftar komponen juga harus diperbarui.

Di rentang berapa frekuensi sebaiknya diatur?

Telinga manusia bisa mendengar frekuensi dari sekitar 20 Hz sampai 20 kHz, tetapi buzzer kecil menghasilkan suara terbaik di rentang 500–5.000 Hz. Mengatur langkah naik/turun 50–100 Hz membuat perubahannya terdengar.

Ketika aku menahan tombol, frekuensinya berubah cepat sekali, bagaimana memperlambatnya?

Jika frekuensi diubah di setiap siklus, menahan tombol akan membuat frekuensi naik dengan sangat cepat. Ubah sekali per tekanan (deteksi tepi) atau tambahkan jeda singkat setelah setiap perubahan.

Bagaimana mencegah frekuensi keluar dari batas?

Kodenya sudah melakukannya: baris `frequency = constrain(frequency, 50, 5000);` menjaga nilainya di antara 50 dan 5000 Hz. Untuk mengubah rentangnya, ubah kedua angka ini; misalnya, mengatur batas bawah ke 100 menjauhkannya dari suara yang sangat rendah dan berdengung.