Senin, 12 Mei 2014

Arduino Final Project: Synthesizer & Visualizer


Tidak terasa, kuliah Interaksi Manusia Komputer dan Antarmuka sudah mau selesai. Ini adalah proyek final yang saya selesaikan dalam kuliah. Semoga bukan proyek Arduino terakhir, karena masih cukup seru untuk melihat lebih banyak :)

Dalam proyek ini saya dan teman-teman sekelompok berkolaborasi untuk membuat dua produk yang saling berhubungan: Sensor Synthesizer dan Spinning Visualizer.
Anggota kelompok kami:
Prama
Farrell
Adhela
Yogi - saya sendiri

The Project

Ada dua alat yang dibuat yaitu synthesizer dan visualizer. Apa yang bisa dilakukannya? Sederhana, serangkaian alat ini nantinya akan menghasilkan suara dari pemrograman Arduino, mengatur nadanya, lalu mengeluarkan output suara. Sementara perangkat satunya mendeteksi suara dengan microphone, mengolahnya menjadi data, kemudian menampilkan output berupa cahaya lampu LED yang bervariasi sesuai nada. Memang spinning visualizer ini dimaksimalkan untuk keperluan entertainment.

Seperti apa penampakannya? Coba lihat langsung di sini.


Idenya tidak muncul seperti wangsit.
Untuk synthesizer inspirasinya muncul dari musik ala Daft Punk serta variasi suara karena sensor Photocell. Kami memperoleh inspirasi dari dua macam proyek yang berbeda: sound meter dan visualizer. Kalau putarannya itu dari ide kami. Biar greget (walaupun nggak bisa akhirnya, hiks)

Oh ya, di sini kami memakaikan casing untuk produk Arduino. Kenapa casing penting? Pertama, penampilan jelas memberi penampilan penting, apalagi untuk keperluan entertainment. Pengguna tidak perlu melihat untaian kabel dan komponen rumit. Press the button then play, that's the rule. Kedua, casing ini dirancang untuk memberikan efek dramatis pada produk.

Kedua produk ini bersifat independen, jadi dapat berfungsi secara terpisah. Hal yang menyatukan mereka cuma satu: suara. Jadi selama masih ada input dan suara, dua produk ini dapat terus bekerja. Bahkan Adhela sempat berkata: Proyek kita itu mengambil input cahaya dan mengeluarkan output cahaya ujung-ujungnya.

Specification

Untuk membuat produk ini yang diperlukan adalah sebagai berikut:

Synthesizer
Arduino Uno 1 buah
Sensor Photocell  1 buah
Speaker 0,5 W 1 buah
Breadboard 2 buah
Keypad 1 buah

Visualizer
Arduino Uno 1 buah
Sensor suara/mikrofon 1 buah
Lampu LED 4 buah
Motor listrik 1 buah
Baterei 2 buah

Casing
Karton secukupnya
Toples 2 buah
Kertas minyak secukupnya
Dupleks secukupnya

Ekstra
Solder
Timah solder
Kabel
Lem
Gunting

Hardware block design

Ini desain blok hardware nya


Untuk Synthesizer, inputnya ada dua: Keypad dan sensor photocell. Kedua input itu dihubungkan dengan Arduino yang berperan sebagai processor. Selanjutnya keluarannya adalah suara bernuansa 8-bit lewat speaker kecil. So geek, right?

Untuk visualizer, inputnya cuma satu: suara. Input ditangkap dari mikrofon lalu dihubungkan dengan Arduino. Pemrosesan dikerjakan oleh Arduino, lalu dikeluarkan dalam bentuk nyala lampu LED yang bermacam-macam. Ketiganya berada dalam casing yang diputar dalam motor DC. Casing tersebut juga harus tembus cahaya

Software Flowchart


Alirannya cukup straightforward untuk keduanya. Bisa dilihat dari gambar skema di atas.

Berdasarkan diagram di atas, pemrograman yang perlu dilakukan untuk Synthesizer adalah:
Kalibrasi input dan membuka library. Ada banyak di internet
Input untuk keypad, tombol "1" menghasilkan nada ini, tombol "2" nada itu, dan seterusnya
Input untuk photocell, mengonversi nilai threshold menjadi besaran suara
Menggunakan library suara untuk membuat Arduino dapat mengeluarkan suara.

Sementara itu untuk visualizer berikut yang diperlukan:
Input untuk mikrofon. Cukup import library yang diperlukan lalu bisa dipakai dalam pemrograman
Konversi dari data suara ke output untuk LED. Mudah dilakukan
Berputar dengan motor DC -> bahkan yang ini nggak perlu koding, cukup hubungkan baterei

Hardware Implementation

Terima kasih untuk Fritzing, berikut adalah implementasi hardware produk kami.

Synthesizer

Visualizer
Di sini perlu disimak bahwa kami masih menggunakan breadboard untuk beberapa bagian kabel. Namun banyak juga yang perlu disolder. Pertimbangannya adalah adanya casing, sehingga penggunaan breadboard akan memudahkan kami merapikan komponen.

Yang tidak kalah pentingnya dalam implementasi hardware adalah membungkus produk dengan casing. Disini kami berimprovisasi dengan apa yang ada. Kardus, toples dimanfaatkan untuk menghasilkan produk yang lebih enak dilihat. Sebenarnya untuk casing visualizer sudah dirancang sedemikian rupa supaya bagus dan bisa berputar. Namun karena ada penambahan komponen di saat revisi akhir, casingnya jadi tidak muat. Dipaksa-paksa akhirnya jadi rada peyot pas presentasi :(

Software Implementation

Berikut adalah kode program yang kami gunakan:

----------------------SYNTHESIZER--------------------------
Karena panjang jadi link nya saja ya hehe

----------------------VISUALIZER----------------------------
/* This is the code to make a LED blink with the music. You have to set the threshold so it' sensible enough to make the led blink. You connect an LED to PIN13 and the Sound Sensor to Analog Pin 0 */ //daftar LED int led1 = 13; int led2 = 12; //daftar threshold int threshold1 = 8; int threshold2 = 22; int threshold3 = 35; int volume; void setup() { Serial.begin(9600); // For debugging pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { volume = analogRead(A0); // Reads the value from the Analog PIN A0 /* //Debug mode Serial.println(volume); delay(100); */ if(volume>=threshold1){ digitalWrite(led1, HIGH); //Turn ON Led1 } else{ digitalWrite(led1, LOW); // Turn OFF Led1 } if(volume>=threshold2){ digitalWrite(led2, HIGH); //Turn ON Led2 digitalWrite(led1, LOW); // Turn OFF Led1 } else{ digitalWrite(led2, LOW); // Turn OFF Led2 digitalWrite(led1, LOW); // Turn OFF Led1 } if(volume>=threshold3){ digitalWrite(led2, HIGH); //Turn ON Led2 digitalWrite(led1, HIGH); // Turn ON Led1 } else{ digitalWrite(led2, LOW); // Turn OFF Led2 digitalWrite(led1, LOW); // Turn OFF Led1 } }

Testing

Testingnya sekalian demo. Jadi dilihat saja. Tapi sebelum masa testing "besar", ada juga testing yang kecil, untuk memastikan setiap fungsi kecil bekerja. Sayangnya dokumentasi terbatas. Jadi saya ceritakan saja. 
Berikut tahap testing yang kami lakukan:

Memastikan input berfungsi baik: Kami mengecek lewat serial monitor buat memastikan input menghasilkan data sesuai keinginan kami. Semuanya berjalan baik kecuali satu: kami salah komponen. Jadi yang harusnya beli mikrofon malah beli sensor piezzo yang mendeteksi getaran. Diteriakin kaya gimana si sensor Piezzo itu ya nggak bakal masuk input. Terpaksa merogoh kocek lebih buat beli mikrofon, hiks.

Bermain dengan threshold: Dalam produk kami, threshold memainkan peranan sangat penting. Besar kecilnya inpu threshold menentukan input yang pas untuk mengeluarkan output. Untuk synthesizer, pengaturan dilakukan untuk memastikan adanya perubahan nada jika kita memanipulasi si photocell. Untuk melakukan ini dengan sukses, perlu eksperimen di ruang gelap. 
Sementara untuk visualizer, pengaturan threshold dilakukan untuk memberikan variasi lampu LED yang menyala. Jadi untuk threshold 10-20 misalnya, lampu yang menyala ada 2, kalau 20-40, lampu yang menyala 3, dan seterusnya.

Bermain dengan nada dan tempo: Khusus untuk synthesizer, nada dan tempo menjadi objek mainan yang penting. Karena kita bermain-mainnya di dua besaran tersebut. Jadi testing dan perbaikan terus dilakukan agar nadanya pas saat keypad dipencet, lalu temponya bisa melambat dan makin cepat saat cahaya masuk dimanipulasi.

Kabel dan solder: Kesalahan terkecil dalam pengabelan dan penyolderan tidak ditoleransi, itu prinsipnya. Makanya kami selalu memastikan kabel terpasang baik, solderan mantap. Kalau lepas satu kabel saja, suara yang keluar jadi nada tinggi dan annoying gitu. Lampunya juga suka mati terus atau nyala terus.

Behind The Scene

Pasca presentasi. Lega rasanya

Om Prama, lagi mikirin apa om? Menerawang masa depan?

The workbench
Pegangin yang bener woi, kata sang penyolder yang mulai frustasi

Menguji sinkronisasi produk
Sekalian juga di sini saya kasih penutup. Terima kasih kepada Tuhan YME, alam semesta, teman sekelompok yang bervariasi tingkah lakunya dan sangat kocak, Pak Soni sebagai dosen yang mendukung kami untuk berkarya sampai meledakkan Arduino -eh, Jaya plaza yang menyuplai kebutuhan kami, penyedia layanan internet yang memungkinkan kami mencari ide dan bahan, dan seterusnya dan seterusnya hehe.

Walau kuliah Interaksi Manusia dengan Komputer dan Antarmuka ini sudah selesai, saya masih tetap tertarik buat membuat produk Arduino baru. Tetap posting tetap berkreasi. 

See ya.

Credit

Berikut link referensi proyek kami:
http://makezine.com/projects/led-sound-meter/ (Sound meter dengan banyak LED)
http://vimeo.com/33566003 (Visualizer yang berputar, tapi beda konsep)
Kalau referensi buat Synthesizer silakan kunjungi blog Prama dan Farrell, karena mereka yang mencari wangsit :)

Lihat juga proyek Arduino lain disini.

Tidak ada komentar:

Posting Komentar