Transduser Output Suara

Belajar membuat suara dan melodi dengan Arduino menggunakan buzzer aktif dan pasif.

90 Menit
Modul 5: Pemrograman Arduino Dasar
Pertemuan 14

TPTujuan Pembelajaran

  1. Peserta didik dapat menjelaskan prinsip kerja buzzer pasif dan aktif
  2. Peserta didik dapat menggunakan fungsi tone() dan noTone() untuk menghasilkan bunyi
  3. Peserta didik dapat membuat melodi sederhana menggunakan array frekuensi dan durasi
  4. Peserta didik dapat mengintegrasikan buzzer dengan sensor untuk sistem alarm audio-visual

Suara dalam Elektronik: Getaran yang Kita Dengar

Pernahkah kalian berpikir bagaimana speaker HP kalian bisa menghasilkan suara penyanyi favorit atau nada dering yang nyaring? Semua suara, dari bisikan hingga suara jet, pada dasarnya adalah getaran udara!

Dalam elektronik, kita menggunakan komponen bernama Transduser (seperti speaker atau buzzer) untuk mengubah energi listrik menjadi getaran fisik (suara). Banyaknya getaran per detik disebut Frekuensi, dan diukur dalam satuan Hertz (Hz).

  • Frekuensi Rendah (misal 50 Hz): Getaran lambat, menghasilkan suara bass yang berat.
  • Frekuensi Tinggi (misal 2000 Hz): Getaran sangat cepat, menghasilkan suara treble yang melengking.

Buzzer Aktif vs Pasif: Dua Jenis Penghasil Suara

Di kit Arduino kalian, biasanya terdapat komponen kecil berbentuk silinder hitam bernama Buzzer. Tahukah kalian bahwa ada dua jenis buzzer yang terlihat hampir kembar tapi kerjanya berbeda?

Buzzer Aktif

  • Punya oscillator (pembangkit frekuensi) di dalamnya.
  • Sangat mudah dipakai: beri listrik, langsung bunyi (Teeeeeet!).
  • Hanya bisa mengeluarkan satu nada (tidak bisa main lagu).
  • Ciri fisik: Bagian bawahnya biasanya tertutup rapat oleh epoksi hitam.

Buzzer Pasif

  • Tidak punya pembangkit frekuensi sendiri.
  • Kalau cuma diberi listrik biasa (HIGH), hanya bunyi "klik" pelan.
  • Bisa memainkan berbagai nada/melodi jika kita yang memberikan frekuensi dari Arduino.
  • Ciri fisik: Bagian bawahnya terbuka, terlihat papan sirkuit hijaunya.

Fungsi tone() & noTone(): Bermain dengan Frekuensi

Untuk mengontrol Buzzer Pasif, Arduino menyediakan fungsi khusus yaitu tone() dan noTone().

Sintaks:
tone(pin, frekuensi);
tone(pin, frekuensi, durasi);
noTone(pin);

Parameter:

  • pin: Nomor pin digital tempat buzzer dicolokkan.
  • frekuensi: Angka frekuensi dalam Hertz (Hz).
  • durasi: (Opsional) Lama bunyi dalam milidetik. Jika tidak diisi, akan bunyi terus sampai ada perintah noTone().

Tabel Frekuensi Nada (Oktaf Tengah)

Berikut adalah referensi nilai frekuensi untuk tangga nada standar:

NadaNotasi AngkaFrekuensi (Hz)
Do (C)1262
Re (D)2294
Mi (E)3330
Fa (F)4349
Sol (G)5392
La (A)6440
Si (B)7494
Do Tinggi (C5)i523

Project: Mainkan Melodi 'Selamat Ulang Tahun'

Sekarang saatnya kita gabungkan konsep Array dengan fungsi tone() untuk memainkan sebuah lagu penuh! Kita akan menyimpan urutan nadanya di array pertama, dan durasi masing-masing nada di array kedua.

BuzzerLagu.ino
cpp
const int BUZZER_PIN = 8;

// Frekuensi nada (Hz)
#define DO  262
#define RE  294
#define MI  330
#define FA  349
#define SOL 392
#define LA  440
#define SI  494
#define DO2 523

// Melodi Selamat Ulang Tahun (25 nada)
int melodi[] = {DO, DO, RE, DO, FA, MI,
                DO, DO, RE, DO, SOL, FA,
                DO, DO, DO2, LA, FA, MI, RE,
                SI, SI, LA, FA, SOL, FA};

int durasi[] = {400,200,600,600,600,1200,
                400,200,600,600,600,1200,
                400,200,600,600,600,600,1200,
                400,200,600,600,600,1200};

void setup() {
  Serial.begin(9600);
  Serial.println("Memainkan: Selamat Ulang Tahun!");
}

void loop() {
  for (int i = 0; i < 25; i++) {
    tone(BUZZER_PIN, melodi[i], durasi[i]);
    delay(durasi[i] * 1.2); // Jeda antar nada
    noTone(BUZZER_PIN);
  }
  delay(3000); // Jeda 3 detik sebelum diulang
}
Serial Monitor Output
Memainkan: Selamat Ulang Tahun! ... (Suara lagu akan terdengar dari buzzer)

Integrasi: Alarm Audio-Visual

Selain untuk musik, buzzer sangat krusial dalam sistem peringatan/alarm. Pada project ini, kita akan membuat sistem alarm kebakaran sederhana yang mengeluarkan sirene naik-turun (frekuensi berubah bertahap) dan lampu LED berkedip.

AlarmSistem.ino
cpp
const int BUZZER_PIN = 8;
const int LED_MERAH  = 13;
const int BTN_RESET  = 7;

bool alarmAktif = true; // Kita set true untuk simulasi langsung bunyi

void setup() {
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_MERAH, OUTPUT);
  pinMode(BTN_RESET, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  if (alarmAktif) {
    // Sirene: frekuensi NAIK
    for (int f = 500; f <= 1500; f += 50) {
      tone(BUZZER_PIN, f);
      digitalWrite(LED_MERAH, HIGH);
      delay(20);
    }
    // Sirene: frekuensi TURUN
    for (int f = 1500; f >= 500; f -= 50) {
      tone(BUZZER_PIN, f);
      digitalWrite(LED_MERAH, LOW);
      delay(20);
    }
  }
  
  // Reset alarm dengan tombol
  if (digitalRead(BTN_RESET) == LOW) {
    alarmAktif = false;
    noTone(BUZZER_PIN);
    digitalWrite(LED_MERAH, LOW);
    Serial.println("Alarm direset!");
    delay(500); // Anti-bouncing
  }
}

Troubleshooting

Masalah:Suaranya sember / kresek-kresek / sangat pelan

Solusi:Pastikan kalian menggunakan Buzzer Pasif, bukan Aktif. Selain itu, cabut stiker kuning/putih yang menutup lubang buzzer di atasnya.


Masalah:Bunyinya cuma 'tit' pelan saat pakai tone()

Solusi:Kalian sepertinya terbalik memakai Buzzer Aktif. Buzzer aktif tidak bisa merespon fungsi tone() dengan baik. Ganti dengan Buzzer Pasif.


Masalah:Lagu tidak kunjung selesai atau delay berantakan

Solusi:Cek batas perulangan di loop for. Pastikan kondisinya (i < 25) sesuai dengan jumlah data di dalam array kalian.

Cek Pemahaman

Jika Anda ingin membuat suara alarm beep-beep konstan tanpa pusing memprogram frekuensinya, komponen mana yang paling praktis digunakan?

Mudah

Apa fungsi dari kode delay(durasi[i] * 1.2); saat memainkan array melodi?

Sedang

Tantangan: Compose Your Own Melody

Mini-Project: Pembuat Jingle SMANSA

Bayangkan SMANSA sedang membuat bel pergantian jam pelajaran otomatis. Tugas kalian:

  1. Carilah notasi angka lagu daerah / lagu anak (misal: "Gundul-gundul Pacul" atau "Ibu Kita Kartini").
  2. Konversikan notasi angka tersebut menjadi frekuensi Arduino (gunakan tabel frekuensi di atas).
  3. Buatlah array melodi dan array durasinya (minimal 10 nada).
  4. Program Arduino kalian agar memainkan jingle tersebut saat tombol ditekan (integrasi tombol + buzzer).
Kesimpulan Pertemuan 14
  • Buzzer Aktif berbunyi konstan saat diberi tegangan, sedangkan Buzzer Pasif membutuhkan sinyal frekuensi (gelombang) untuk berbunyi.
  • Fungsi tone(pin, frekuensi, durasi) digunakan untuk membangkitkan gelombang suara pada buzzer pasif.
  • Kombinasi Array dan perulangan for sangat memudahkan dalam menyusun banyak nada menjadi sebuah lagu lengkap.
  • Buzzer sering diintegrasikan dengan LED dan Sensor untuk membuat sistem alarm peringatan (audio-visual).

RRefleksi Pembelajaran

Luangkan 2–3 menit untuk menjawab pertanyaan di bawah secara jujur.

Kejutan & Penemuan

Apa yang paling mengejutkan atau menarik hari ini?

Lagu apa yang berhasil kalian ciptakan hari ini?

Masih Membingungkan

Apa yang masih membingungkan atau ingin kamu pahami lebih dalam?

Bagian mana yang lebih sulit: menentukan frekuensinya atau menentukan durasinya?

Rencana Selanjutnya

Apa yang ingin kamu coba atau pelajari minggu depan?

Selain lagu dan alarm, sistem apa lagi yang menurutmu butuh komponen buzzer?

Refleksi tidak dinilai — ini adalah ruang jujurmu untuk berpikir.