PIANO DIGITAL BERBASIS RASPBERRY PI PICO
PIANO DIGITAL BERBASIS RASPBERRY PI PICO
Hendra Putra
Rusmana¹, Devid Rahmat Cahyantoro², M. Alwan Tsany³, Rain Shidqi Mumtaz⁴
Kelompok
RE-3C/1
Program
Studi Teknologi Rekayasa Elektronika
Mata
Kuliah: Sistem Terbenam
INTISARI — Piano Digital ini dikembangkan menggunakan Raspberry Pi
Pico sebagai pengendali utama untuk membaca input dari push button dan
mengubahnya menjadi data MIDI. Sistem ini terdiri dari 8 tombol nada dan 2
tombol oktaf (up/down) yang dibaca oleh Raspberry Pi Pico melalui program MicroPython
yang ditulis dan dijalankan menggunakan Thonny IDE. Data nada yang terbaca
dikirim melalui komunikasi serial menuju aplikasi Hairless MIDI Serial Bridge
pada laptop, yang kemudian meneruskannya sebagai data MIDI sehingga
menghasilkan keluaran suara melalui speaker laptop. Hasil pengujian menunjukkan
seluruh skenario—mulai dari pembacaan tombol nada, perpindahan oktaf,
pengiriman data MIDI, hingga keluaran suara—berhasil dijalankan sesuai dengan
hasil yang diharapkan.
Kata Kunci:
Piano Digital, Raspberry Pi Pico, MicroPython, Thonny IDE, Push Button,
Hairless MIDI Serial Bridge, Sistem Embedded.
I.
PENDAHULUAN
A.
Latar Belakang
Perkembangan teknologi saat ini memungkinkan alat musik digital dibuat
dengan memanfaatkan mikrokontroler sebagai pengendali utama. Salah satu
mikrokontroler yang dapat dimanfaatkan untuk keperluan tersebut adalah
Raspberry Pi Pico, yang mampu digunakan untuk membangun piano digital sederhana
dengan biaya yang relatif murah.
Pada sistem ini, push button digunakan sebagai komponen input untuk
menentukan nada piano yang akan dibunyikan. Program dibuat menggunakan Thonny
IDE dan dijalankan langsung pada Raspberry Pi Pico melalui bahasa MicroPython.
Agar suara dapat dihasilkan melalui laptop, digunakan aplikasi Hairless MIDI
Serial Bridge yang berfungsi menjembatani data serial dari Raspberry Pi Pico
menjadi data MIDI yang dapat diproses oleh perangkat lunak musik pada laptop.
Berdasarkan hal tersebut, dibuat sebuah piano digital berbasis Raspberry
Pi Pico sebagai media pembelajaran penerapan sistem embedded, khususnya dalam
pembacaan input digital, pemrograman MicroPython, dan komunikasi data serial
menuju MIDI.
B.
Tujuan
1.
Membuat piano digital sederhana menggunakan Raspberry
Pi Pico.
2.
Mengimplementasikan pembacaan input menggunakan push
button.
3.
Menjalankan program menggunakan Thonny IDE.
4.
Menghubungkan Raspberry Pi Pico dengan Hairless MIDI
Serial Bridge.
5.
Memahami penerapan sistem embedded menggunakan
MicroPython.
II.
METODOLOGI DAN KOMPONEN
Sistem Piano Digital ini memadukan perangkat keras berbasis
mikrokontroler dengan perangkat lunak pengolah data serial menjadi MIDI.
Berikut adalah komponen perangkat keras dan perangkat lunak yang digunakan
dalam pembangunan sistem ini:
Gambar 2.
Raspberry Pi Pico
A.
Perangkat Keras (Hardware)
|
No |
Komponen |
Jumlah |
Keterangan |
|
1 |
Raspberry Pi Pico |
1 |
Mikrokontroler utama, pusat pemrosesan sistem |
|
2 |
Push Button Nada (Tombol Putih) |
8 |
Input nada piano |
|
3 |
Push Button Oktaf (Up & Down) |
2 |
Input perpindahan oktaf nada |
|
4 |
Breadboard |
1 |
Papan rangkaian tanpa solder |
|
5 |
Kabel Jumper |
Secukupnya |
Penghubung antar komponen |
|
6 |
Kabel USB |
1 |
Menghubungkan Raspberry Pi Pico dengan laptop |
B.
Perangkat Lunak (Software)
•
Thonny IDE — digunakan untuk menulis program
MicroPython, serta menjalankan dan mengunggah program ke Raspberry Pi Pico.
•
Hairless MIDI Serial Bridge — menerima data serial dari
Raspberry Pi Pico dan menghubungkannya ke sistem MIDI sehingga suara dapat
dihasilkan melalui laptop.
III.
HASIL DAN PEMBAHASAN
A.
Cara Kerja Sistem
Logika sistem Piano Digital ini bekerja melalui beberapa tahapan utama,
mulai dari pembacaan tombol hingga keluarnya suara pada speaker laptop:
1.
Push button nada dan oktaf digunakan sebagai input.
2.
Raspberry Pi Pico membaca dan mengolah data tombol yang
ditekan.
3.
Program dijalankan dan dimonitor menggunakan Thonny
IDE.
4.
Data hasil pembacaan dikirim melalui komunikasi serial
ke Hairless MIDI Serial Bridge.
5.
Hairless MIDI Serial Bridge meneruskan data tersebut ke
sistem MIDI pada laptop.
6.
Suara dihasilkan dan keluar melalui speaker laptop
sesuai nada yang ditekan.
B.
Diagram Blok Sistem
Gambar 3.
Diagram Blok Sistem Piano Digital
Diagram blok di atas menunjukkan alur sistem secara berurutan: blok input
berupa 8 tombol nada dan 2 tombol oktaf, blok proses oleh Raspberry Pi Pico
yang membaca dan mengolah data tombol, blok program melalui Thonny IDE, blok
komunikasi menggunakan Hairless MIDI Serial Bridge, hingga blok keluaran berupa
suara yang dihasilkan melalui speaker laptop.
C.
Diagram Alir (Flowchart)
Gambar 4.
Flowchart Sistem Piano Digital
Program dimulai dengan inisialisasi sistem, kemudian Raspberry Pi Pico
secara terus-menerus membaca kondisi tombol. Apabila tidak ada tombol yang
ditekan, sistem akan kembali membaca tombol. Apabila ada tombol yang ditekan,
program akan menentukan nada sesuai tombol dan oktaf yang dipilih, lalu
mengirimkan data tersebut melalui komunikasi serial menuju Hairless MIDI Serial
Bridge, yang selanjutnya diteruskan sebagai data MIDI sehingga laptop
menghasilkan suara melalui speaker. Proses ini akan berulang kembali ke tahap
pembacaan tombol.
D.
Hasil Pengujian
|
No |
Skenario
Pengujian |
Kondisi
Uji |
Hasil |
|
1 |
Push Button Nada (Tombol Putih) |
Tombol 1–8 ditekan |
Berhasil — nada sesuai tombol yang ditekan. |
|
2 |
Push Button Oktaf (Up & Down) |
Tombol Up/Down ditekan |
Berhasil — oktaf berpindah dengan baik. |
|
3 |
Kabel Serial (MIDI OUT) |
Data MIDI dikirim ke laptop |
Berhasil — data MIDI terkirim ke laptop. |
|
4 |
Hairless MIDI Serial Bridge |
Data MIDI diterima dan diteruskan |
Berhasil — data MIDI terbaca di Hairless MIDI Serial
Bridge. |
|
5 |
Thonny IDE |
Data MIDI diproses |
Berhasil — Thonny IDE memproses data MIDI dengan baik. |
|
6 |
Output Suara |
Sistem menghasilkan suara |
Berhasil — suara keluar dari speaker laptop. |
Seluruh skenario pengujian berhasil dijalankan sesuai dengan hasil yang
diharapkan, mulai dari pembacaan tombol nada dan oktaf, pengiriman data MIDI,
hingga keluaran suara pada speaker laptop.
E. Kode Program Utama
"""============================================================================
Pemrogram
: Kelompok RE-3C/1
1. 01-Hendra
Putra Rusmana NIM:4.34.22.0.11
2. 07-Devid
Rahmat Cahyantoro NIM:4.34.23.2.06
3. 13-M.
Alwan Tsany NIM:4.34.23.2.13
4. 19-Rain
Shidqi Mumtaz NIM:4.34.23.2.20
Tgl.Praktikum
: Senin, 15 Juni 2026
===============================================================================
from machine import
Pin, PWM
import time
import sys
# 1. Setup Pin
untuk 8 tombol nada (Sudah dibalik agar pas dari Do ke Do Tinggi)
note_pins = [1, 2,
3, 4, 5, 6, 7, 8]
note_buttons = []
for pin_num in
note_pins:
btn =
Pin(pin_num, Pin.IN, Pin.PULL_UP)
note_buttons.append(btn)
# 2. Setup Pin
untuk kontrol Oktaf
octave_up = Pin(9,
Pin.IN, Pin.PULL_UP) # Tombol Oktaf Naik
octave_down =
Pin(11, Pin.IN, Pin.PULL_UP) # Tombol Oktaf Turun
# 3. Setup PWM
untuk Speaker/Buzzer di GP14
buzzer =
PWM(Pin(14))
buzzer.freq(440)
buzzer.duty_u16(0)
def send_midi_serial(status,
note, velocity):
"""Mengirim data MIDI lewat kabel USB bawaan Pico ke Hairless MIDI"""
sys.stdout.write(chr(status) + chr(note) + chr(velocity))
def note_on(note,
velocity=127):
send_midi_serial(0x90, note, velocity)
def note_off(note,
velocity=0):
send_midi_serial(0x80, note, velocity)
# TANGGA NADA: [C4,
D4, E4, F4, G4, A4, B4, C5 (Do Tinggi)]
note_numbers = [60,
62, 64, 65, 67, 69, 71, 72]
# Status awal
pelacak tombol nada
last_button_states
= [1] * 8
active_notes =
[None] * 8
# Status awal
pelacak tombol oktaf
octave_shift = 0
last_octave_up_state
= 1
last_octave_down_state
= 1
while True:
octave_changed = False
#
Ambil kondisi tombol oktaf saat ini
current_up_state = octave_up.value()
current_down_state = octave_down.value()
# ---
KONTROL OKTAF NAIK (GP9) ---
if
current_up_state == 0 and last_octave_up_state == 1:
if octave_shift < 3:
octave_shift += 1
octave_changed = True
time.sleep(0.05) # Debounce
# ---
KONTROL OKTAF TURUN (GP11) ---
if
current_down_state == 0 and last_octave_down_state == 1:
if octave_shift > -3:
octave_shift -= 1
octave_changed = True
time.sleep(0.05) # Debounce
#
Perbarui status pelacak oktaf
last_octave_up_state = current_up_state
last_octave_down_state = current_down_state
#
Sinkronisasi frekuensi buzzer jika oktaf diganti saat tombol nada masih ditahan
if
octave_changed:
for i, act_note in enumerate(active_notes):
if act_note is not None:
live_note = note_numbers[i] + (12 *
octave_shift)
freq = int(440 * 2 ** ((live_note -
69) / 12))
if 20 <= freq <= 20000:
buzzer.freq(freq)
# ---
KONTROL TANGGA NADA (LOOPING 8 TOMBOL) ---
for
i, btn in enumerate(note_buttons):
current_state = btn.value()
# Tombol Nada Baru Ditekan
if current_state == 0 and last_button_states[i] == 1:
note = note_numbers[i] + (12 * octave_shift)
note_on(note)
freq = int(440 * 2 ** ((note - 69) / 12))
if 20 <= freq <= 20000:
buzzer.freq(freq)
buzzer.duty_u16(32768)
active_notes[i] = note
# Tombol Nada Dilepas
elif current_state == 1 and last_button_states[i] == 0:
if active_notes[i] is not None:
note_off(active_notes[i])
active_notes[i] = None
still_playing = [n for n in active_notes if n is
not None]
if still_playing:
freq = int(440 * 2 **
((still_playing[-1] - 69) / 12))
if 20 <= freq <= 20000:
buzzer.freq(freq)
else:
buzzer.duty_u16(0)
last_button_states[i] = current_state
time.sleep(0.01)
IV.
KESIMPULAN
Sistem MIDI berbasis Raspberry Pi Pico berhasil dirancang dan diimplementasikan
untuk membaca tombol nada dan oktaf, memproses data menggunakan Thonny IDE,
serta mengirim data melalui Hairless MIDI Serial Bridge sehingga menghasilkan
suara pada speaker laptop. Seluruh hasil pengujian menunjukkan bahwa sistem
berjalan sesuai dengan tujuan yang telah ditetapkan.
Komentar
Posting Komentar