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

Postingan populer dari blog ini

SISTEM KONVEYOR OTOMATIS DENGAN SENSOR INFRARED DAN KONTROL MANUAL

Pompa Air Otomatis Berbasis ATMega8535

SISTEM PEMANTAUAN SUHU DAN KELEMBABAN PADA SUATU RUANGAN MENGGUNAKAN SENSOR DHT22 BERBASIS MIKROKONTROLLER ARDUINO UNO ATMEGA328P