Sunday, August 5, 2012

MUSIK BEL MENGGUNAKAN MIKROPROSESOR

MEMBUAT MUSIK  BEL DENGAN MENGGUNAKAN MIKROPROSESOR (I)

Sepanjang bulan Desember pastilah kita sering mendengar dentingan musik lagu lagu natal yang terdengar disekitar pohon natal. Suara tersebut dihasilkan oleh musik bel elektronik yang biasanya merupakan bagian dari lampu hias pohon natal tersebut.  Selain pada pohon natal, tentu masih banyak penggunaan lain musik bel elektronik diantaranya pada bel pintu, sinyal mundur kenderaan, mainan anak anak dll.

Dikatakan musik bel elektronik karena suara dihasilkan oleh speaker yang di digerakkan oleh rangkaian elektronik. Sebelumnya sudah dikenal musik bel mekanis, dimana suara dihasilkan oleh gerakan mekanis.

Musik bel saat ini banyak dijual dengan harga yang murah, bahkan lebih murah jika dibandingkan dengan membuat sendiri. Pilihan lagunya juga banyak, tapi tetap terbatas pada lagu lagu yang sudah popular di dunia. Bagaimana kalau kita ingin suara bel di rumah kita mengeluarkan suara lagu daerah kita, misalnya lagu Piso Surit (bagi orang Karo) atau Cucak rawa (Jawa), Bolelebo (NTT), dll. Tentu akan sangat sulit kita temukan musik bel dengan lagu lagu tersebut di pasaran.

Uraian ini dimaksudkan untuk merancang dan membuat musik bel, dimana lagunya dapat dipilih dan diisi oleh pembuat. Pengetahuan yang dibutuhkan adalah pemahaman tentang  prinsip dasar dan aplikasi mikroprosesor. Pemahaman tentang dasar seni musik dan kemampuan membaca not angka akan sangat membantu.

Dalam uraian ini, penulis akan mencoba memaparkan tentang pembuatan musik bel elektronik dengan menggunakan mikroprosesor. Pembaca sudah dianggap tahu tentang mikroprosesor . Pembahasan dimulai dengan sedikit pembahasan tentang bunyi , nada dan lagu. dilanjutkan dengan rangkaian lengkap dan algoritma program. Mikroprosesor yang digunakan dalam tulisan ini adalah mikrokontroler 89C2051, dan tentu saja pembaca dapat menggunakan mikroprosesor lainnya. 


Bunyi, nada dan lagu.

Bunyi dihasilkan oleh getaran.

Keras lembutnya bunyi ditentukan oleh besar kecilnya amplitudo getaran. Makin besar amplitudo makin keras bunyi.

Tinggi rendahnya suatu bunyi ditentukan oleh frekuensi getaran tersebut. Makin besar frekuensi makin tingi bunyi.

Jenis bunyi ditentukan oleh bentuk (pola) getaran. Jika digambarkan dalam grafik, maka pola getaran dapat berupa segitiga, segiempat, sinusoidal, dll yang periodik. Perbedaan bentuk ini akan membuat perbedaan pada amplitudo komponen harmonik. Perbedaan bentuk inilah yang membedakan jenis suara yang dikeluarkan, sehingga kita bisa mendengar ada suara gitar, piano, organ dll. Musik bel dalam tulisan ini dibuat dengan pola yang paling sederhana yaitu gelombang persegi.

Nada adalah bunyi dengan frekuensi tertentu. Deretan nada nada  tersebut dalam urutan teratur disebut tangga nada. Ada beberapa standar dan notasi tangga yang dipergunakan dan dipakai, dan dalam pembahasan ini kita memakai nada (not) balok yang identitas setiap nada ditulis dengan huruf sbb. :

C         D         E          F          G         A         B         C’

Nada di atas diurutkan sesuai dengan tinggi nada, yaitu urutan frekuensi nada tersebut. Nada C lebih rendah dari nada berikutnya D, yang berarti frekuensi nada C lebih kecil dari frekuensi nada D.
Diantara nada yang berurutan (kecuali E ke F, dan B ke C’) masih ada nada lain dengan frekuensi berada diantara nada yang mengapitnya. Secara lengkap tangga nada tersebut dapat dituliskan sbb:

C - C#  - D - D# - E - F - F# - G - G# - A - A# - B – C’

Tanda # berarti frekuensi naik ½ laras. Ada tanda lain yang lazim dipakai juga yaitu tanda b, yang berarti turun ½ laras. Sehingga C# bisa juga ditulis Db. Demikian juga berlaku untuk nada nada lainnya.

Ada beberapa hal menarik tentang tangga nada ini, sbb:

1.      Masing masing nada mempunyai frekuensi yang unik

2.      Frekuensi C2 (dua) kali frekuensi C

3.      Frekuensi frekuensi dari urutan nada diatas membentuk deret ukur. Hal ini berarti perbandingan (ratio) frekuensi dua nada yang berurut adalah bilangan konstan. Jika frekuensi Fc berarti frekuensi nada C, Fd berarti frekuensi nada D, dan seterusnya, maka :

Fc# / Fc = Fd / Fc# = Fa# / Fa = bilangan konstan = R (ratio nada)

Kita dapat menghitung R dengan matematik yang sederhana sbb. :

Ada 12 nada setelah C untuk mencapai C’ yang frekuensinya menjadi 2 kali, sehingga kita dapat hubungan matematis  sbb. :

               R12  = 2                        sehingga                      R = 1.059463


Jika diketahui frekuensi salah satu nada saja maka kita akan mengetahui frekuensi dari nada nada lainnya. Secara internasional telah diketahui (ditetapkan) frekuensi nada A adalah 440,000 Hz. Dengan penetapan ini maka frekuensi nada nada lainnya dapat dihitung. Sebagai contoh marilah kita hitung frekuensi nada C. Karena ada 9 nada dari C untuk mencapai A, maka dengan menggunakan nilai R di atas akan di dapat bahwa frekuensi nada C adalah :

Fc =  Fa / R 9  = 440 / (1.059463)9 = 261.626 Hz

Frekuensi frekuensi dari nada lainnya dapat diperoleh dengan cara yang sama.

Rentang tangga nada di atas disebut 1 oktave, yang artinya frekuensinya sudah mencapai 2 kali frekuensi nada awal, jadi dalam hal ini frekuensi C’ 2 kali frekuensi C. Setelah nada C’ masih ada nada lain, dan urutannya tetap dengan ratio R.
Kita akan menggunakan ratio ini untuk membuat table frekuensi nada di bawah ini yang nantinya digunakan pada saat merancang musik belnya.

Table-1 Tabel frekuensi nada (2 oktav)
NO
Nama nada
Frequency (Hz)
1
C”
1046.50
2
B’
987.767
3
A’#/B’
932.328
4
A’
880.000
5
G’#/A’
830.609
6
G’
783.991
7
F’#/G’
739.989
8
F’
698.456
9
E’
659.255
10
D’#/E’
622.254
11
D’
587.330
12
C’#/D’
554.365
13
C’
523.251
14
B
493.883
15
A#/B
466.164
16
A (A440)
440.000
17
G#/A
415.305
18
G
391.995
19
F#/G
369.994
20
F
349.228
21
E
329.628
22
D#/E
311.127
23
D
293.665
24
C#/D
277.183
25
C (middle C)
261.626

Lagu
Adalah untaian nada nada yang dibunyikan dengan durasi tertentu. Durasi adalah lamanya suatu nada dibunyikan.
Sering kita temui suatu lagu ditulis dalam not angka, dan pastilah kita semua sudah terbiasa mendengar dan mampu menyuarakan suara not angka secara berurutan, yaitu do-re-mi-fa-sol-la-si-do yang jika ditulis dengan angka adalah 1 2  3   4  5  6  7  1’

Not yang ditulis dengan angka angka ini dapat dipadankan dengan not balok (huruf) yang mempunyai frekuensi tetap. Setiap lagu yang ditulis dengan not angka, pastilah ada pernyataan (deklarasi) tentang nada dasar yang digunakan. Contohnya C=1, yang berarti nada do bersesuaian dengan nada C yang berfrekuensi 262,626 Hz. Nada lainnya mengikuti, sehingga nada re adalah D, mi adalah E dst.

Untuk dapat memasukkan suatu lagu tertentu pada musik bel diperlukan pemahaman tentang notasi notasi not angka ini, sehingga nantinya suatu lagu dapat diterjemahkan ke dalam frekuensi frekuensi dan durasi durasi.

Pandanglah cuplikan lagu “Malam Kudus” berikut:

Malam Kudus
C=1
Tempo = 75 (per menit)


Ketukannya adalah 75 ketukan per menit sehingga durasi satu ketukan adalah 60/75 detik = 0,8 detik = 800000 m detik.

Jika diubah ke not huruf maka nada baris pertama dapat ditulis
G (3/2)  A(1/2)  G(1)  E(3)  G(3/2)  A(1/2)  G(1)  E(3)  D’(3/2)  D’(1/2)  B’(3) 

Angka dalam tanda kurung adalah bobot masing masing nada dengan satuan ketukan. Jadi nada G pada G(3/2) akan dibunyikan selama 3/2 ketuk atau 1,2 detik, demikian juga nada berikutnya A dibunyikan selama ½ ketuk atau0,4 detik. Untuk penentuan bobot nada inilah diperlukan pemahaman tentang notasi musik.

Selanjutnya kita padankan nada nada diatas dengan frekuensinya masing masing. Jadi tugas mikroprosesor nantinya adalah menghasilkan bunyi dengan frekuensi dan durasi sesuai notasi lagu.

Rangkaian Perangkat Keras

Dapatlah segera kita bayangkan bahwa rangkaian mikroprosesornya sangatlah sederhana, dimana kita hanya perlu keluaran 1 bit untuk menghasilkan bunyi, selanjutnya menggerakkan loudspeaker. Kita akan menggunakan mikrokontroler 20 pin 89C2051, yang sudah memiliki 2 kb flash, yang sudah lebih dari cukup untuk membuat musik bell.

Rangkaian lengkapnya adalah sbb. :


Dalam gambar keluaran yang digunakan untuk menggerakkan speaker adalah P1.7, dan dihubungkan langsung dengan speaker. Pembaca dapat memodifikasi rangkaian ini dengan menambahkan filter berupa kapasitor untuk memperjernih suara dan penguat (transistor atau IC) untuk memperkuat suara dan juga mengurangi beban mikrokontroler.

Frekuensi kristal yang digunakan adalah 12 MHz (pilih yang 12000 KHz). Kita memilih nilai ini untuk mendapatkan clock 6 MHz, yang akan mengakibatkan setiap siklus mesin mikrokontroler berdurasi 1 mikro detik, yang nantinya akan sangat memudahkan kita dalam menghitung dan merancang perangkat lunaknya.

Kapasitor kapasitor  penggandeng kristal 33pF, dan untuk rangkaian auto reset R 10k Ohm dan C 4,7 uF.

Bagi pembaca yang belum familiar dengan mikrokontroler ini, dapat mempelajarinya dengan membaca data sheet dari manufacturenya

Program (Perangkat Lunak)

Dari gambar rangkaian dapat dilihat bahwa output yang kita gunakan adalah pin P1.7. Jadi tugas program nantinya adalah membuat pin ini 0 dan 1 sesuai frekuensi nada nada pada lagu.

Untuk dapat membuat nada nada dapat dibaca oleh mikroprosesor maka kita terlebih dahulu mendefenisikan aturan penulisan identitas nada dan durasinya dalam bilangan biner (byte).

Identitas nada nada.
Kita akan menggunakan table nada 2 oktaf seperti pada table 1. Dengan keseluruhan 26 nada (25 nada dan 1 diam) maka diperlukan 5 bit data untuk identitas keseluruhan nada. Karena 5 bit data mempunyai 32 kombinasi maka masih ada sisa 7 kombinasi yang dapat kita gunakan untuk keperluan lainnya seperti akhir sebuah lagu, akhir file dll. Kita akan menggunakan 5 bit teratas sebagai identitas nada, seperti table di bawah ini.

D7
D6
D5
D4
D3




00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111


Diam
C
C#
D
D#
E
F
F#
G
G#
A
A#
B
C’
C’#
D’
D’#
E’
F’
F’#
G’
G’#
A’
A’#
B’
C’’
EOS
Tdk digunakan
Tdk digunakan
Tdk digunakan
Tdk digunakan
EOF



EOS adalah End Of Song, identitas yang menyatakan akhir dari suatu lagu, dan masuk ke lagu selanjutnya. Identitas ini diperlukan karena setiap lagu mempunyai tempo (cepat lambatnya lagu) yang berbeda. Setelah mendeteksi identitas EOS ini, maka byte berikutnya akan dibaca sebagai tempo (lihat identitas tempo).

EOF adalah End Of File, identitas yang menyatakan akhir dari keseluruhan lagu, dan selanjutnya akan balik lagi ke lagu awal.


Identitas durasi
Setelah 5 bit data terpakai untuk identitas nada, maka sisanya 3 bit digunakan untuk identitas durasi (lamanya) satu nada dibunyikan. Jadi kita mempunyai 8 kombinasi untuk durasi. Durasi ketukan yang umum adalah  1/8  ¼   1/3   ½   1  3/2   2 dan 3 ketukan. Kita akan menggunakan kombinasi 3 bit terbawah untuk identitas durasi, seperti table di bawah ini.







D2
D1
D0


000
001
010
011
100
101
110
111
1/8   ketuk
1/4   ketuk
1/3   ketuk
½     ketuk
1      ketuk
3/2   ketuk
2      ketuk
3      ketuk











Jadi identitas nada dan durasinya membutuhkan 5 bit + 3 bit dan persis menjadi 1 byte data.

Identitas Tempo

Sudah disinggung sebelumnya bahwa tempo suatu lagu berbeda beda, ada yang lambat dan ada yang cepat. Jadi mikrokontroler membutuhkan identitas ini untuk menetapkan temponya. Kita akan menggunakan 1 byte  untuk identitas tempo, dan diletakkan di awal setiap lagu. Jadi byte awal setiap lagu nantinya akan dibaca sebagai tempo. Kita tetapkan saja nilai byte ( 0 s/d 255) sebagai bilangan tempo (satuan ketukan per menit). Sebagai contoh jika byte ini kita isi 6EH berarti temponya adalah 110 ketukan permenit. Demikian juga jika kita menginginkan tempo 75 ketukan per menit, maka byte ini harus diisi dengan 4BH.

Penulisan Lagu ( Mengubah not lagu ke kode biner/hexa)

Jadi nantinya suatu lagu akan ditulis dalam bentuk kumpulan bilangan biner 8 bit (1 byte) sesuai dengan not dan durasinya. Untuk penulisannya kita menggunakan bilangan hexa decimal.
Sebagai contoh, untuk not baris pertama lagu malam kudus di atas akan kita tulis sbb.:

  1. Tempo  75       ;           4BH

  1. Not dan Durasi

NOT
DURASI
KODE (hexa)
NOT
KODE
KETUKAN
KODE
G
01000
3/2
101
45H
A
01010
½
011
53H
G
01000
1
100
44H
E
00101
3
111
2FH
G
01000
3/2
101
45H
A
01010
½
011
53H
G
01000
1
100
44H
E
00101
3
111
2FH
D
01111
3/2
101
7DH
D
01111
½
011
7BH
B
01100
3
111
67H


Pekerjaan ini kita lakukan manual, dan memerlukan ketelitian. Disinilah pentingnya kemampuan membaca not, sehingga dengan mudah kita membuat kode not dalam bentuk hexa desimal.

Pembuatan Program

Setelah kita mendapatkan kode hexa desimal dari suatu lagu, maka kumpulan kode hexa tersebut kita masukkan di alamat tertentu dari flash ROM mikrokontroler. Nantinya mikrokontroler akan membaca satu persatu kode tersebut dan mengeluarkan bunyinya dari pin P1.7.

Jadi kita harus membuat program sehingga bisa mengubah kode menjadi suara yang sesuai.

Program akan membuat pin P1.7 mengeluarkan logika 1 dan 0 dengan frekuensi sesuai kode not dan lamanya sesuai durasi.

Pertama tama kita harus ubah table frekuensi menjadi table perioda T, sehingga kita mengetahui lamanya P1.7 harus dalam logika 1 atau 0. Karena perioda adalah kebalikan frekwensi, maka dengan mudah kita mendapatkan table perioda sbb. :


Nama Nada / Not
Frequency (Hz)
Perioda T (µ detik)
T/2 (µ detik)
C”
1046.50
956
478
B’
987.767
1012
506
A’#/B’
932.328
1073
536
A’
880.000
1136
568
G’#/A’
830.609
1204
602
G’
783.991
1276
638
F’#/G’
739.989
1351
676
F’
698.456
1432
716
E’
659.255
1517
758
D’#/E’
622.254
1607
804
D’
587.330
1703
851
C’#/D’
554.365
1804
902
C’
523.251
1911
956
B
493.883
2025
1012
A#/B
466.164
2145
1073
A (A440)
440.000
2273
1136
G#/A
415.305
2408
1204
G
391.995
2551
1276
F#/G
369.994
2703
1351
F
349.228
2863
1432
E
329.628
3034
1517
D#/E
311.127
3214
1607
D
293.665
3405
1703
C#/D
277.183
3608
1804
C (middle C)
261.626
3822
1911


Untuk lebih memudahkan program, kita memilih lamanya P1.7 pada logika 1 sama dengan lamanya pada logika 0, sehingga kita mendapatkan gelombang persegi dengan duty cicle ½. Untuk itu mikrokontroler harus membuat P1.7 pada logika 1 selama ½ T, dan selanjutnya berubah ke logika 0 selama 1/2 T, kembali lagi ke logika 1 selama ½ T, demikian seterusnya sampai durasi terpenuhi.

Dalam table sudah tersedia harga untuk 1/2T (satuan mikro detik). Jadi kita harus mengatur penundaan (delay) untuk setiap kode not sesuai dengan table di atas.

Tentunya pembaca sudah dapat memahami mengapa di awal kita pilih nilai frekwensi kristalnya 12 MHz atau faktornya.
(bersambung)

No comments: