Skip to main content

Sound

Sound

Pada  bagian  ini  kita  akan  bermain-main  dengan  suara.  Sehingga kita akan membutuhkan speaker untuk membangkitkan suara dan nada musik  sederhana.  Pada  dasarnya,  untuk  membuat  speaker berbunyi maka  kita  harus  menghidup-matikan  speaker  sesuai  dengan  frekuensi suara yang ingin kita bunyikan. Hidup-matinya speaker akan membuat spool  speaker  bergetar  (bergerak  maju-mundur)  dan  menghasilkan bunyi dengan nada tertentu.

Suara  musik kelas  A  menengah  sekitar  440 Hz.  Masih  ingat  apa itu  Hz?  Hz  merupakan kependekan  dari  Hertz.  Hertz  adalah  jumlah siklus  perdetik.  Dengan  demikian,  jika  kita  ingin memainkan  musik kelas  A  menengah,  maka  kita  harus  menyalakan  dan  mematikan 
speaker sebanyak masing-masing 440 kali dalam 1 detik.

Untuk menghidup-matikan speaker sebanyak masing-masing 440 kali,  kita  bisa  memanfaatkan fungsi  delay().  Sebelumnya  kita  telah membuat  LED  berkedip  dengan  memanfaatkan  delay. Perlakuan  kita terhadap  LED  akan  kita  terapkan  pada  speaker,  tapi  dengan  tempo yang lebih cepat.

Cara  menghitung  delay  yang  kita  butuhkan  untuk  mendapatkan siklus 440 Hz (nada 440Hz) yaitu dengan cara:
Kenapa  frekuensi  dikalikan  2?  Gelombang  suara  merupakan gelombang  analog  (sinyal  analog) yang  merupakan  gelombang  sinus. Artinya, 1 siklus penuh adalah 1 tinggi/puncak dan 1 rendah/lembah. Kondisi  tinggi  adalah  ketika  speaker  dinyalakan,  sedangkan  kondisi rendah adalah ketika  speaker  dimatikan.  Oleh  sebab  itu,  kita membutuhkan 2 delay untuk 1  Hz. Karena 440 Hz adalah 440 siklus, maka  setiap siklus  pada  440 Hz dikalikan dengan 2. Semoga Gambar 4.1 memberikan  pemahaman  tentang  bagaimana  cara  menentukan delay.  Gambar  4.1  sekedar  contoh sebab  frekuensi  6  Hz  tidak  akan terdengar oleh telinga manusia.
Siklus frekuensi dan delay
Siklus frekuensi dan delay

Rangkaian

Memasang speaker
Memasang speaker

Buatlah  Rangkaian  4.1  dengan  speaker  8  ohm  atau  16  ohm. Speaker baru atau speaker bekas radio yang masih berfungsi bisa Anda gunakan. Anda bisa menggunakan project board atau tidak.
1.  Sambungkan kaki positif speaker pada pin 9 board arduino
2.  Sambungkan kaki negatif pada GND pada board arduino
3.  Jika  nanti  suara  yang  dihasilkan  terlalu  nyaring,  maka  Anda bisa  menambahkan  resistor  100 –  1  k  ohm  pada  kaki  positif atau negatif speaker. Untuk itu, penggunaan  project board akan memudahkan Anda untuk menyambung resistor tersebut.


Membuat Nada

Jika kita kembali ke catatan pembuka pada bagian ini, maka untuk membuat bunyi  / nada 440 Hz kita harus menghidup-matikan 440 kali dengan  delay  masing-masing  1136  mikrodetik.  Perhatikan, satuannya adalah  mikrodetik  (1/1000  milidetik).  Padahal  fungsi  delay()  yang sering kita gunakan sebelumnya satuannya dalam milidetik. Oleh sebab itu,  untuk  membuat  delay  dengan  satuan mikrodetik  kita  bisa menggunakan fungsi delayMicroseconds().

Sketch  Membuat nada 440 Hz

// Free Ebook Arduino
// www.elangsakti.com 
// coder elangsakti

// speaker ada di pin 9
const int pinSpeaker = 9;
// delay untuk nada 440 Hz
const int timeDelay = 1163;

void setup() {
pinMode(pinSpeaker, OUTPUT);
}

void loop() {
digitalWrite(pinSpeaker, HIGH);
delayMicroseconds(timeDelay);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(timeDelay); 
}

Ketika  program  Sketch  4.1  dijalankan,  maka  speaker  akan berbunyi  terus  menerus  hingga kabel speaker  dilepas  atau  Arduino dimatikan.  Begitulah  cara  kerja  speaker  berbunyi  dan  membuat program  suara  yang  sederhana.  Silakan  Anda  coba-coba  dengan frekuensi lainnya supaya lebih paham.

Musik

Musik  adalah  kumpulan  nada,  sehingga  jika  kita  ingin  membuat musik, maka kita bisa merangkai nada-nada sehingga alunannya enak didengar.  Pada  Arduino  kita  bisa  menggunakan fungsi  tone()  untuk membuat nada. Fungsi tone() memiliki 2 parameter inputan wajib dan 1 parameter tambahan. Cara menggunakan fungsi tone() yaitu:

tone(pin, frekuensi, durasi); atau tone(pin, frekuensi);

Parameter pin  adalah pin yang disambungkan ke speaker,  frekuensi adalah  frekuensi  yang digunakan,  sedangkan  durasi  adalah  lama  nada berbunyi pada frekuensi tersebut.

Jika  tanpa  menginputkan  durasi,  maka  nada  akan  dibunyikan hingga  nada  selanjutnya  dijalankan atau  ketika  kita  memberikan perintah  noTone().  Sehingga  kita  bisa  memanfaatkan  delay  untuk 
membuat nada yang panjang atau pendek.

Parameter  durasi  akan  berguna  ketika  kita  ingin  membunyikan nada  sambil  menjalankan perintah  lainnya.  sebab  jika  kita menggunakan  delay,  maka  kita  harus  menunggu  delay  selesai dahulu untuk menjalankan perintah selanjutnya.

Perintah  noTone()  berguna  untuk  menghentikan  nada  pada  pin tertentu, sehingga kita bisa menggunakan perintah pin dengan format

noTone(pin);

Perintah  noTone()  akan berguna ketika kita menggunakan banyak speaker yang dikontrol oleh banyak pin. Sekedar catatan bahwa ketika kita  menjalankan  fungsi  tone(),  maka  kita  tidak  bisa menggunakan fungsi  PWM  pada  pin  3  dan  pin  11.  Oleh  sebab  itu,  jika  ingin menggunakan PWM dan fungsi  tone(), sebaiknya Anda menggunakan pin lainnya untuk PWM.

Program pada Sketch 4.2 berfungsi untuk membuat tangga nada Do-Re-Mi kunci C. Silakan dicoba.

Sketch  Program Doremi

// Free Ebook Arduino
// www.elangsakti.com 
// coder elangsakti

// tangga nada C
#define NOTE_C4 262 // DO
#define NOTE_D4 294  // RE
#define NOTE_E4 330 // MI
#define NOTE_F4 349 // FA
#define NOTE_G4 392 // SOL
#define NOTE_A4 440 // LA
#define NOTE_B4 494 // SI
#define NOTE_C5 523 // DO

// speaker ada di pin 9
const int pinSpeaker = 9;

void setup() {
pinMode(pinSpeaker, OUTPUT);
}

void loop() {
tone(pinSpeaker, NOTE_C4, 500);
delay(500);
tone(pinSpeaker, NOTE_D4, 500);
delay(500);
tone(pinSpeaker, NOTE_E4, 500);
delay(500);
tone(pinSpeaker, NOTE_F4, 500);
delay(500);
tone(pinSpeaker, NOTE_G4, 500);
delay(500);
tone(pinSpeaker, NOTE_A4, 500);
delay(500);
tone(pinSpeaker, NOTE_B4, 500);
delay(500);
tone(pinSpeaker, NOTE_C5, 500);
delay(500);

noTone(pinSpeaker);
delay(1000);
}

Pada  Sketch  4.2,  kita  sudah  mempraktekkan  fungsi  tone()  dan noTone().  Di  awal  program  ada bagian  #define  yang  berfungsi  untuk mengganti  variabel  tersebut  dengan  nilai  yang  dituju. Misal,  variabel NOTE_C4 berarti isinya adalah angka 262.

Daftar  nada  tersebut  merupakan  daftar  nada  standar,  Anda seharusnya  sudah  mendownloadnya bersama  dengan  ebook  ini.  Atau Anda bisa mendapatkan informasinya di website Arduino. Sketch 4.2 sebenarnya  bisa  kita  sederhanakan  lagi  cara  penulisannya  dengan membuat satu fungsi untuk menjalankan tone().

Membuat Fungsi

Dengan membuat fungsi, kita bisa mengurangi jumlah kode yang berulang-ulang. Dengan demikian, bisa mengurangi jumlah baris kode dan mempercepat pembuatan program. Sebelumnya kita sudah sering menggunakan  fungsi  bawaan  Arduino,  misal  fungsi  delay(),  tone(), noTone(), dan pinMode(), digitalWrite(), analogWrite(), dan analogRead().

Ketika  membuat  fungsi,  kita  harus  menentukan  tipe  dari  fungsi tersebut. Tipe fingsi bisa mengacu pada tipe -tipe data yang sudah ada, misal  int,  float,  long,  char, dst. Setiap fungsi  harus memiliki nilai yang dikembalikan ke fungsi tersebut. maksudnya begini, jika kita membuat fungsi dengan tipe  int (integer), artinya fungsi tersebut memiliki angka, fungsi  tersebut  harus  memiliki value  berupa  integer.  Jika  tidak,  maka akan  error.  Sama  halnya  ketika  kita  membuat  satu variabel,  maka variabel tersebut harus ada isinya (valuenya). Jika tidak ada valuenya, ya  akan  error juga.  Fungsi juga sama dengan variabel, kecuali fungsi yang bertipe void. 

Fungsi  yang  bertipe  void  tidak  memiliki  nilai  kembalian,  artinya fungsi  tersebut  hanya mejalankan  perintah -perintah  saja  tanpa memiliki  value  sebagaimana  fungsi  dengan  tipe  char, int,  float,  dst. Untuk  memberikan  nilai  kembalian  untuk  seuatu  fungsi,  maka bisa menambahkan perintah return. Perhatikan kedua fungsi berikut:

// fungsi bertipe integer
int customDelay(int x1, int x2){
int myDelay = x1 * x2;
return myDelay;
}


// fungsi bertipe void
void nyalakan_LED(int pin, int DELAY){
digitalWrite(pin, HIGH);
int timeDelay = customDelay(2, DELAY);
delay(timeDelay);
}

Fungsi  customDelay()  bertipe  integer  dan  mempunyai  2  buah parameter integer sebagai masukan. Value  dari customDelay  adalah hasil perkalian  dari   kedua  parameter  tersebut  yang  diambil  dari variabel myDelay  (return myDelay). Variabel yang di-return  menjadi value fungsi harus memiliki tipe data yang sama dengan tipe fungsi tersebut. Dalam contoh  di  atas,  fungsi  customDelay  adalah integer  dan  myDelay  juga integer.

Fungsi  nyalakan_LED()  merupakan  fungsi  bertipe  void  sehingga fungsi itu tidak memiliki value, fungsi ini hanya mengeksekusi perintah di dalamnya. Fungsi  ini memiliki 2 parameter, yaitu pin dan DELAY yang  sama-sama  integer.  Dalam  fungsi  tersebut  ada  perintah  untuk menyalakan  led pada  pin  pin,  kemudian  nilai  timeDelay  diambil  dari hasil  perkalian  di  dalam  fungsi customDelay().  Perhatikan,  value  dari timeDelay diambil dari fungsi customDelay(). Yang paling penting, fungsi void tidak butuh return.

Mari kita mengubah Sketch 4.2 agar lebih singkat.
Sketch  Program Doremi dengan fungsi

// Free Ebook Arduino
// www.elangsakti.com 
// coder elangsakti

// tangga nada C
#define NOTE_C4 262 // DO
#define NOTE_D4 294 // RE
#define NOTE_E4 330 // MI
#define NOTE_F4 349 // FA
#define NOTE_G4 392 // SOL
#define NOTE_A4 440 // LA
#define NOTE_B4 494 // SI
#define NOTE_C5 523 // DO

// speaker ada di pin 9
const int pinSpeaker = 9;

void setup() {
pinMode(pinSpeaker, OUTPUT);

void loop() {
nada(NOTE_C4, 500);
nada(NOTE_D4, 500);
nada(NOTE_E4, 500);
nada(NOTE_F4, 500);
nada(NOTE_G4, 500);
nada(NOTE_A4, 500);
nada(NOTE_B4, 500);
nada(NOTE_C5, 500);

noTone(pinSpeaker);
delay(1000);
}

void nada(int frek, int durasi){
tone(pinSpeaker, frek, durasi);
delay(durasi);
}

Pada  Sketch  4.3,  kode  program  lebih  kita  sederhanakan  dengan membuat  fungsi  nada(). Sehingga  kita  tidak  perlu  memanggil  fungsi delay berulang kali. Mungkin awalnya akan agak lebih kesulitan untuk memahami sebab kodenya tidak sekuensial. Tapi model program di atas lebih mudah apabila kita membuat aplikasi dengan jumlah data NOTE yang lebih banyak lagi jika menggunakan Sketch 4.1.

Sketch  4.3  memiliki  jumlah  variasi  hanya  8  nada,  bisa  Anda bayangkan  jika  musik  yang  akan Anda  buat  memiliki  jumlah  nada puluhan atau ratusa, kira-kira akan sepanjang apa program Anda?

Oleh  sebab  itu,  Sketch  4.3  harus  dibuat  lebih  fleksibel  lagi. Caranya?  Kita  bisa  memanfaatkan array  sebagaimana  pernah  kita pelajari ketika membuat LED, apakah Anda masih ingat? Saya punya 2 contoh  potongan  lagu  yang  bisa  menjadi  gambaran  bahwa  ketika nadanya bertambah banyak, maka kerumitan akan semakin menantang.

Catatan untuk Sketch 4.4 dan Sketch 4.5, Anda harus membuat file pitches.h  atau  mendownloadnya dulu  dari  link  yang  sudah  saya berikan  di  halaman-halaman  sebelumnya.  Perhatikan  pada Sketch  4.4 pada baris kedua, di sana ada perintah  #include <pitches.h>, jadi Anda harus punya file pitches.h untuk menjalankan aplikasi tersebut. 

Sketch Program Twinke-twinkle

// Free Ebook Arduino
// www.elangsakti.com 
// coder elangsakti

// referensi tangga nada
#include <pitches.h>

// speaker ada di pin 9
const int pinSpeaker = 9;

#define JUMLAH_NADA 15

const int daftar_nada[JUMLAH_NADA] = {
NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_A4, NOTE_G4, NOTE_F4,
NOTE_F4, NOTE_E4, NOTE_E4, NOTE_D4,
NOTE_D4, NOTE_C4, 0
};
const int lama_beat = 300;
const int beats[JUMLAH_NADA] = {
1, 1, 1, 1,
1, 1, 2, 1,
1, 1, 1, 1,
1, 2, 4
};

void setup() {
pinMode(pinSpeaker, OUTPUT);
}

void loop() {
for(int i=0; i<JUMLAH_NADA; i++){
if(nada[i] == 0){
delay(beats[i] * lama_beat);
}else{
nada(daftar_nada[i], beats[i] * lama_beat);
}
// jeda antar nada
noTone(pinSpeaker);
delay(lama_beat / 2);
}
}

void nada(int frek, int durasi){
tone(pinSpeaker, frek, durasi);
delay(durasi);
}


Sketch  Program Garuda Pancasila

// Free Ebook Arduino
// www.elangsakti.com 
// coder elangsakti

// referensi tangga nada
#include <pitches.h>

// speaker ada di pin 9
const int pinSpeaker = 9;

#define JUMLAH_NADA 85

const int daftar_nada[JUMLAH_NADA] = {
NOTE_G4, NOTE_G4, NOTE_C5, NOTE_C5, NOTE_D5, NOTE_D5, 
NOTE_E5, 0,
NOTE_E5, NOTE_F5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5, 
NOTE_F5, NOTE_D5, 0,
NOTE_G4, NOTE_G4, NOTE_D5, NOTE_D5, NOTE_E5, NOTE_E5, 
NOTE_F5, 0,
NOTE_E5, NOTE_D5, NOTE_C5, NOTE_G4, NOTE_G4, NOTE_G4, 
NOTE_A4, NOTE_B4, NOTE_C5, 0,
NOTE_C5, NOTE_C5, NOTE_C5, NOTE_A4, NOTE_C5, NOTE_F5, 
NOTE_G5, NOTE_A5, NOTE_G5, 0,
NOTE_C5, NOTE_C5, NOTE_C5, NOTE_A4, NOTE_C5, NOTE_F5, 
NOTE_G5, NOTE_A5, NOTE_G5, 0,
NOTE_G5, NOTE_A5, NOTE_G5, NOTE_F5, NOTE_E5, NOTE_D5, 0,
NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_A4, NOTE_G4, 0,
NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_D5, NOTE_E5, 0,
NOTE_C5, NOTE_C5, NOTE_A5, NOTE_G5, NOTE_B4, NOTE_C5, 0
};

const int lama_beat = 300;
const int beats[JUMLAH_NADA] = {
1, 1, 2, 2, 2, 2, 3, 1,
1, 1, 2, 1, 1, 2, 2, 3, 1,
1, 1, 2, 2, 2, 2, 3, 1,
1, 1, 2, 1, 1, 2, 1, 1, 3, 1,
1, 1, 2, 1, 1, 2, 1, 1, 3, 1,
2, 3, 1, 2, 2, 3, 1,
1, 1, 1, 3, 1, 1, 1,
1, 1, 1, 3, 1, 1, 1,
2, 2, 2, 3, 1, 3, 0
};

void setup() {
pinMode(pinSpeaker, OUTPUT);
}

void loop() {
for(int i=0; i<JUMLAH_NADA; i++){
if(nada[i] == 0){
delay(beats[i] * lama_beat);
}else{
nada(daftar_nada[i], beats[i] * lama_beat);
}
// jeda antar nada
noTone(pinSpeaker);
delay(lama_beat / 2);
}
}

void nada(int frek, int durasi){
tone(pinSpeaker, frek, durasi);
delay(durasi);
}

Perhatikan, antara Sketch 4.4 dan 4.5 hanya berbeda jumlah nada, nada, dan beats-nya. Jadi program utama di dalam fungsi loop tidak ada yang  berubah.  Kenapa?  Karena  program  tersebut  sudah fleksibel dengan adanya fungsi dan bantuan array. Coba bayangkan jika kedua program tersebut dibuat secara manual. Lumayan ribet tentunya.



Comments

Popular posts from this blog

GROUND bagian 1 by Sarono Elektronika Blog Adi Sanjaya Global Techno Solution - AS-GTS

GROUND bagian 1
Banyak pertanyaan kepada saya apa itu ground ? apa guna nya ? apakah selalu ground itu negatif ? Apa yang di maksud titik netral pada pencatu daya terbelah ?
Agak sulit menerangkan dengan kata kata, bahkan dari hasil diskusi saya dengan beberapa teman yang sudah pakar elektronik juga mereka menemukan kesulitan nya mengungkapkan dengan kata kata walau kita mengerti tentang ground.
Untuk itu saya mencoba menerangkan semaksimal mungkin, tetapi sesungguh nya yang"mendengar" mestinya sudah punya ilmu elektronika minimal sampai teknik penguat audio.
Jadi, jika belum memehami tentang teknik audio dan masih bingung tentang konsep dan aplikasi ground masih di maklum kan.
Pada rangkaian listrik sederhana tidak di perlukan ground, misalkan senter, (body nya terbuat dari plastik) itupun sering negatif nya di hubungkan dengan body senter terbuat dari logam.
a. Pengertian Ground
Ground adalah titik yang dianggap sebagai titik kembali nya arus listrik arus seara…

HAMBATAN LISTRIK by Sarono Elektronika Blog Adi Sanjaya Global Techno Solution - AS-GTS

HAMBATAN LISTRIK
Pada bahasan sebelumnya sudah di tegaskan bahwa menghubungkan langsung positip dan negatip battery tidak boleh di lakukan, karena jumlah elektron yang mengalir menjadi sangat besar dan selama mengalir antara elektron saling berbenturan dan menimbulkan panas yang besar.
TETAPI
1) Jika jalan yang di lalui panjang (kawat nya panjang), maka kawat itu akan menjadi perlawanan listrik, makin panjang kawat maka perlawanan terhadap arus listrik juga semakin besar.
2) Atau kalau jalan nya arus di kawat juga di kecilkan (tebal kawat) nya di tipiskan juga akan menghasilkan Hambatan bagi arus semakin besar (Hambatan listrik membesar).
Dengan demikian kita bisa menghambat arus listrik itu dengan membuat kawat yang panjang dan mengatur tipis nya (luas penampang) kawat.
Ada faktor ke 3 yaitu jenis kawat.
Jenis kawat tertentu lebih mudah melewatkan arus, sementara kawat yang lain lebih sulit melewatkan arus.
Dalam teori elektron dapat di jelas kan : kawat tertentu daya ika…

Cara menggunakan modul relay dengan arduino UNO.

Material yang di butuhkan:
- Relay module 2 channel
- Arduino UNO.
- kabel jumper male - female

Relay module 2 channel  5V dengan 2 channel output dapat digunakan sebagai saklar elektronik untuk mengendalikan perangkat listrik yang memerlukan tegangan dan arus yang besar. Kompatible dengan semua mikrokontroler khususnya Arduino


Spesifikasi
•    Jumlah Relay : 2
•    Control signal : TTL level (ACTIVE LOW) ini artinya relay akan aktif jika kita memberikan logika LOW ke pin trigger relay (pin in1 /in 2)

Catatan : gambar bisa jadi berbeda dengan fisik relay yang dikirim, tapi pin pin pasti terdiri dari pin Vcc GND dan pin in1/in2 … untuk jumlah channel lainnya maka pin in1 2, dst akan sesuai dengan jumlah channel relay modul
•    Rating arus : 10A 250VAC, 10A 30VDC, 10A 125VAC, 10A 28VDC
•    Contact action time : 10ms/5ms
•    Indikator LED untuk masing masing channel



Catatan : gambar bisa jadi berbeda dengan fisik relay yang dikirim, tapi pin pin pasti terdiri dari pin Vcc GND dan pin in1/in2…