Kamis, 10 Desember 2015

Arduino & Audio tone()

Dalam artikel ini kita akan bermain dengan suara bersama Arduino mulai dari menggunakan fungsi tone()

untuk membangkitkan nada hingga proyek kompleks yang sanggup membuat Arduino memainkan musik polyphonic dan mengucapkan kalimat yang diberikan dari masukan berupa teks. Untuk itu artikel ini akan dibagi menjadi beberapa bagian bersambung.
Mari kita mulai dari yang paling sederhana… membangkitkan nada dengan frekuensi tertentu.
Sebelum memulai dengan kode program, mari kita buat perangkat kerasnya terlebih dahulu. Yang perlu kita persiapkan:
  • Arduino Uno
  • Speaker 8 ohm
  • Resistor 100 ohm
  • Papan Rancang  Purnarupa (Prototype Design Board), atau dikenal dengan istilah Breadboard
Hubungkan komponen-komponen elektronika yang sudah Anda siapkan seperti ilustrasi di bawah ini (credit: gambar dibuat dengan Fritzing dan retouch menggunakan Adobe Photoshop):


Resistor yang dihubungkan secara seri ini berguna untuk membatasi penggunaan arus.
Dalam banyak tutorial tentang topik ini, penggunaan komponen tambahan seperti resistor di atas jarang dibahas, kita cuma diarahkan untuk merangkainya seperti itu tanpa mengerti alasannya. Dalam seri artikel ini, kita akan mempelajari sedikit lebih jauh alasan dibalik penggunaan suatu komponen.
Resistor ini disebut sebagai resistor pembatas arus (current limiting resistor). Sesuai petunjuk pada manual penggunaan Arduino, jumlah arus yang boleh ditarik dari satu pin hanyalah sebesar maksimum 50 mA. Sesuai hukum Ohm, dengan tegangan operasional sebesar 5V (setara 5000 mV) diperlukan hambatan beban (load resistance) sebesar  5000 mV / 50 mA = 100 Ω. Karena speaker yang kita gunakan mempunyai impedansi (impedance, nilai hambatan) sebesar 8 Ω, secara teori kita bisa menggunakan resistor 92 Ω dalam rangkaian ini. Walaupun demikian kita memilih untuk menggunakan resistor 100 Ω karena dua alasan: (1) 50 mA adalah batasan maksimum, sebaiknya kita jangan terlalu memaksakan nilai maksimum ini, dan (2) resistor 100Ω banyak tersedia dan mudah didapat dibanding resistor 92 Ω.

Setelah selesai menghubungkan komponen-komponen tersebut, mari kita mulai membuat programnya. Bukalah aplikasi Arduino IDE, lalu masukkan kode berikut ini:
void setup() {
  pinMode( 8, OUTPUT );
  pinMode( 13, OUTPUT );
}

void loop() {
  // matikan LED
  digitalWrite( 13, LOW );
  // mainkan nada di pin#8 dg. frekuensi 261Hz selama 500 ms
  tone( 8, 261 );
  delay( 500 );
  // nyalakan LED
  digitalWrite( 13, HIGH );
  // mainkan nada di pin#8 dg. frekuensi 392Hz selama 500 ms
  tone( 8, 392 );
  delay( 500 );
}
Sambungkan Arduino dengan komputer melalui kabel USB, lalu unggah (upload) kode tersebut ke Arduino. Caranya ada 3, silakan pilih salah satu: (1) tekan tombol Upload (tombol berbentuk lingkaran dengan tanda panah menunjuk ke kanan), (2) melalui menu File → Upload, atau (3) tekan kombinasi tombol Ctrl+U.
Bila kode berhasil diunggah, akan terdengar suara seperti sirine dimana dua buah nada dengan pitch berbeda (yang satu lebih rendah dibanding yang lainnya) akan dimainkan bergantian masing-masing selama setengah detik (500 milliseconds).
Dengan menelaah kode di atas, dengan jelas terlihat bahwa untuk membunyikan nada dengan frekuensi dan durasi tertentu di Arduino sangatlah mudah, yaitu dengan menggunakan fungsi tone().
Fungsi tone() ini menerima 2 atau 3 parameter sebagai masukannya, dengan format sbb.:
tone( pin, frekuensi, durasi );
Parameter pertama adalah nomor pin yang digunakan untuk keluaran ke speaker. Parameter kedua adalah frekuensi yang ingin dibunyikan dalam Hz (Hertz, getaran per detik). Parameter ketiga adalah durasi dalam milidetik, menyatakan berapa lama nada tersebut akan dibunyikan. Parameter durasi bersifat opsional, artinya boleh tidak diisikan. Bila tidak diisikan, maka nada tersebut akan dibunyikan tanpa batas waktu, untuk mematikannya dengan memanggil fungsi noTone( pin ).
Yang perlu diperhatikan saat parameter durasi dinyatakan, fungsi ini akan kembali sesegera mungkin tanpa menunggu durasi tersebut terlewati (nada selesai dimainkan).
Pada kecepatan 16 Hz (Arduino Uno bekerja di kecepatan ini), frekuensi yang dapat dimainkan berkisar antara 31 Hz hingga 8 MHz. Sebagai catatan, frekuensi yang dapat didengar oleh telinga manusia berkisar antara 20 hingga 20 kHz.
Pada contoh kode di ditambahkan kode untuk membuat LED berkelap-kelip selaras pitch nada yang dimainkan, mirip dengan lampu sirine polisi.
Untuk lebih puas bereksperimen dengan fungsi tone() ini, cobalah unggah kode berikut ini

void setup() {
  Serial.begin( 9600 );
  pinMode( 8, OUTPUT ); 
}
word f = 0;
word d = 0;
boolean koma = false;
void loop() {
  if( Serial.available() ) {
    char c = Serial.read();
    if( c >= '0' && c <= '9' ) {
      if( koma ) d = ( d * 10 ) + ( c - 48 );
      else f = ( f * 10 ) + ( c - 48 );
    }
    else if( c == ',' ) {
      koma = true;
      d = 0;
    }
    else if( c == 10 ) { 
      if( f ) {
        if( d ) tone( 8, f, d );
        else tone( 8, f );
      }
      else noTone( 8 );
      f = 0;
      koma = false;
    }
  }
}

Setelah kode termuat ke Arduino, buka jendela Serial Monitor dengan menekan tombol di bagian sebelah kanan pada baris tombol Arduino IDE (bergambar seperti kaca pembesar dengan dua titik berderet di sampingnya). Pada kolom masukan di Serial Monitor, masukkan angka antara 31 sampai 20.000 lalu tekan ENTER. Arduino akan memainkan nada dengan frekuensi yang Anda masukkan. Menekan ENTER tanpa mengisikan angka akan menghentikan bunyi. Untuk menyetel durasi, masukkan nilai durasi dalam milidetik setelah nilai frekuensi dengan dipisahkan tanda koma.
Catatan: pastikan setelan baudrate pada Serial Monitor (kotak pilihan di sudut kanan bawah) pada kecepatan 9600 baud dan modus masukan Newline (pada kotak pilihan di sebelah kiri pilihan baudrate) sudah terpilih.
Simpanlah sketch ini dengan nama ArduinoAudio (otomatis akan disimpan dalam file ArduinoAudio.ino dalam subfolder ArduinoAudio) dengan mengeksekusi menu File Save As

Unknown

Author & Editor

Has laoreet percipitur ad. Vide interesset in mei, no his legimus verterem. Et nostrum imperdiet appellantur usu, mnesarchum referrentur id vim.

0 komentar:

Posting Komentar

 
biz.