
Proyek Arduino: Pemutar Musik dengan Keypad & LCD + Lagu Ulang Tahun | Simulasi WOKWI Simpelš„!!
Proyek Arduino: Pemutar Musik dengan Keypad & LCD + Lagu Ulang Tahun | Simulasi WOKWI Simpelš„!!
Pada bagian ini akan dibahas pembuatan proyek pemutar musik digital interaktif berbasis mikrokontroler Arduino UNO, tombol matriks keypad, layar LCD 20×4, serta software simulasi WOKWI. Skematik rangkaian ditunjukkan pada Gambar 1, program Arduino pada Kode 1, dan video pembuatan pada tautan Video 1. Sistem dirancang untuk memainkan nada lagu Selamat Ulang Tahun secara otomatis melalui buzzer ketika tombol tertentu pada keypad ditekan. Tampilan layar LCD akan menampilkan judul lagu, status pemutaran nada, serta nomor tombol yang diinputkan secara real-time.
Gambar 1. Skematik rangkaian sistem
Pemetaan PIN:
* LCD 20Ć4 I2C
GND => GND
VCC => 5V
SDA => 21
SCL => 22
// Konfigurasi pin untuk baris dan kolom keypad
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // Pin baris keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // Pin kolom keypad
Kode Arduino 1. Kode Program
//ALFIAN CENTER
//SUBSCRIBE
#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library LCD I2C
#include <Keypad.h> // Library keypad
LiquidCrystal_I2C lcd(0x27, 20, 4); // Inisialisasi LCD dengan alamat 0x27 dan ukuran 20x4
const int buzzerPin = 10; // Pin output buzzer
// Konfigurasi keypad
const byte ROW_NUM = 4; // Jumlah baris keypad
const byte COLUMN_NUM = 4; // Jumlah kolom keypad
// Matriks karakter untuk keypad
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Definisi nada frekuensi musik
const uint8_t pin = 10;
//ALFIAN CENTER
//SUBSCRIBE
// Notasi nada dengan frekuensi dalam Hertz
#define C3 130.81
#define Db3 138.59
#define D3 146.83
#define Eb3 155.56
#define E3 164.81
#define F3 174.61
#define Gb3 185.00
#define G3 196.00
#define Ab3 207.65
#define LA3 220.00
#define Bb3 233.08
#define B3 246.94
#define C4 261.63
#define Db4 277.18
#define D4 293.66
#define Eb4 311.13
#define E4 329.63
#define F4 349.23
#define Gb4 369.99
#define G4 392.00
#define Ab4 415.30
#define LA4 440.00
#define Bb4 466.16
#define B4 493.88
#define C5 523.25
#define Db5 554.37
#define D5 587.33
#define Eb5 622.25
#define E5 659.26
#define F5 698.46
#define Gb5 739.99
#define G5 783.99
#define Ab5 830.61
#define LA5 880.00
#define Bb5 932.33
#define B5 987.77
// Durasi nada berdasarkan tempo
#define BPM 120 // Beats per Minute
#define Q 60000/BPM // Quarter note (1/4)
#define H 2*Q // Half note (2/4)
#define E Q/2 // Eighth note (1/8)
#define S Q/4 // Sixteenth note (1/16)
#define W 4*Q // Whole note (4/4)
// Konfigurasi pin untuk baris dan kolom keypad
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // Pin baris keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // Pin kolom keypad
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
void setup() {
lcd.begin(20, 4); // Inisialisasi LCD ukuran 20x4
lcd.backlight(); // Nyalakan backlight LCD
pinMode(buzzerPin, OUTPUT); // Set buzzerPin sebagai output
}
//ALFIAN CENTER
//SUBSCRIBE
void loop() {
// Tampilkan menu utama
lcd.setCursor(0, 0); lcd.print("1. Custom Play");
lcd.setCursor(0, 1); lcd.print("2. Music Select");
lcd.setCursor(0, 2); lcd.print("3. Volume Setting");
lcd.setCursor(0, 3); lcd.print(" ");
char key = keypad.getKey(); // Baca tombol yang ditekan
if (key) {
handleKeyPress(key); // Panggil fungsi sesuai tombol
}
}
// Fungsi untuk menangani input tombol menu utama
void handleKeyPress(char key) {
switch (key) {
case '1': customPlay(); break;
case '2': lcd.clear(); musicSelect(); break;
case '3': volumeSetting(); break;
default: break;
}
}
// Fungsi untuk memainkan nada sesuai tombol 1ā9
void customPlay() {
lcd.clear();
lcd.print("Custom Play");
lcd.setCursor(0, 1);
lcd.print("1-9: Notes, #:Exit");
while (true) {
char key = keypad.getKey(); // Baca tombol
if (key == '#') {
lcd.clear();
return; // Keluar dari mode
}
float freq = 0; // Frekuensi default
// Set frekuensi berdasarkan tombol ditekan
switch (key) {
case '1': freq = C4; break;
case '2': freq = D4; break;
case '3': freq = E4; break;
case '4': freq = F4; break;
case '5': freq = G4; break;
case '6': freq = LA4; break;
case '7': freq = B4; break;
case '8': freq = C5; break;
case '9': freq = Bb4; break;
}
if (freq > 0) {
tone(buzzerPin, freq, 200); // Mainkan nada selama 200ms
delay(220); // Tunggu sejenak
}
}
}
//ALFIAN CENTER
// Fungsi menu untuk memilih lagu
void musicSelect() {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Music Select");
lcd.setCursor(0, 1); lcd.print("1. Airtel");
lcd.setCursor(0, 2); lcd.print("2. Gundul Pacul");
lcd.setCursor(0, 3); lcd.print("3. Happy Birthday");
char key;
do {
key = keypad.getKey();
if (key == '1') {
airtel_song();
lcd.clear();
return;
} else if (key == '2') {
gungul_gungul_pacul();
lcd.clear();
return;
} else if (key == '3') {
happy_birthday();
lcd.clear();
return;
}
} while (key != '#');
}
// Fungsi pengaturan volume (simulasi tampilan)
void volumeSetting() {
lcd.clear();
lcd.print("Volume Setting");
lcd.setCursor(0, 1);
lcd.print("Use A/B keys");
int volume = 5; // Level volume awal
displayVolume(volume); // Tampilkan level
while (true) {
char key = keypad.getKey();
if (key == '#') {
lcd.clear();
return; // Keluar mode
}
if (key == 'A' && volume < 10) {
volume++;
displayVolume(volume);
} else if (key == 'B' && volume > 0) {
volume--;
displayVolume(volume);
}
}
}
// Menampilkan level volume ke LCD
void displayVolume(int volume) {
lcd.setCursor(0, 2);
lcd.print("Volume: ");
lcd.print(volume);
lcd.print(" "); // Spasi untuk menimpa sisa karakter lama
}
// Fungsi pemutar lagu Airtel
void airtel_song() {
// Mainkan nada per baris lagu (lihat komentar baris demi baris di versi sebelumnya)
// Line1
tone(pin,LA4,Q);delay(1+Q);
tone(pin,LA4,E);delay(1+E);
tone(pin,LA4,E);delay(1+E);
tone(pin,LA4,Q);delay(1+Q);
tone(pin,E5,E);delay(1+E);
delay(1+E);
tone(pin,B4,E);delay(1+E);
tone(pin,C5,E);delay(1+E);
tone(pin,B4,E);delay(1+E);
tone(pin,LA4,E);delay(1+E);
tone(pin,G4,Q);delay(1+Q);
tone(pin,B4,Q);delay(1+Q);
// Line2
tone(pin,LA4,E);delay(1+E);
tone(pin,B4,E);delay(1+E);
tone(pin,LA4,E);delay(1+E);
tone(pin,G4,E);delay(1+E);
tone(pin,LA4,E);delay(1+E);
tone(pin,B4,E);delay(1+E);
tone(pin,C5,E);delay(1+E);delay(1+E);
tone(pin,B4,H);delay(1+H);
tone(pin,LA4,E);delay(1+E);
tone(pin,G4,E);delay(1+E);
tone(pin,E4,H);delay(1+H);
//Line3
tone(pin,LA5,Q);delay(1+Q);
tone(pin,E5,Q);delay(1+Q);
tone(pin,G5,Q);delay(1+Q);
tone(pin,E5,E);delay(1+E);
delay(1+E);
tone(pin,E5,Q);delay(1+Q);
tone(pin,D5,Q);delay(1+Q);
tone(pin,C5,Q);delay(1+Q);
tone(pin,LA4,Q);delay(1+Q);
//Line4
tone(pin,C5,Q);delay(1+Q);
tone(pin,D5,Q);delay(1+Q);
tone(pin,E5,Q);delay(1+Q);
tone(pin,F5,E);delay(1+E);
delay(1+E);
tone(pin,D5,W);delay(1+W);
tone(pin,C5,E);delay(1+E);
tone(pin,B4,E);delay(1+E);
tone(pin,LA4,E);delay(1+E);
}
// Fungsi lagu Gundul Gundul Pacul
void gungul_gungul_pacul() {
// Mainkan lagu tradisional baris demi baris
lcd.clear();
lcd.print("Playing Pacul");
delay(500);
// Baris 1: Gundul gundul pacul cul (1 3 1 3 4 5 5)
tone(pin, C4, E); delay(E + 1); // 1
tone(pin, E4, E); delay(E + 1); // 3
tone(pin, C4, E); delay(E + 1); // 1
tone(pin, E4, E); delay(E + 1); // 3
tone(pin, F4, Q); delay(Q + 1); // 4
tone(pin, G4, E); delay(E + 1); // 5
delay(1+S);
tone(pin, G4, E); delay(E + 1); // 5
delay(1+E);
// Baris 2: Gembelengan (7 1' 7 1' 7 5)
tone(pin, B4, E); delay(E + 10); // 7
tone(pin, C5, E); delay(E + 10); // 1'
tone(pin, B4, E); delay(E + 10); // 7
tone(pin, C5, E); delay(E + 10); // 1'
tone(pin, B4, E); delay(E + 10); // 7
tone(pin, G4, Q); delay(Q + 10); // 5
delay(1+E);
// Baris 3: Nyunggi nyunggi wakul kul (1 3 1 3 4 5 5)
tone(pin, C4, E); delay(E + 10); // 1
tone(pin, E4, E); delay(E + 10); // 3
tone(pin, C4, E); delay(E + 10); // 1
tone(pin, E4, E); delay(E + 10); // 3
tone(pin, F4, Q); delay(Q + 10); // 4
tone(pin, G4, E); delay(E + 10); // 5
delay(1+S);
tone(pin, G4, E); delay(E + 10); // 5
delay(1+E);
// Baris 4: Gembelengan (7 1' 7 1' 7 5)
tone(pin, B4, E); delay(E + 10); // 7
tone(pin, C5, E); delay(E + 10); // 1'
tone(pin, B4, E); delay(E + 10); // 7
tone(pin, C5, E); delay(E + 10); // 1'
tone(pin, B4, E); delay(E + 10); // 7
tone(pin, G4, Q); delay(Q + 10); // 5
delay(1+E);
// Baris 5ā6: Wakul ngglimpang segane dadi sak latar (diulang 2x)
int melody[] = {
C4, E4, G4, F4, // Wakul ngglimpang
F4, G4, F4, E4, // segane dadi
C4, F4, E4, C4 // sak latar
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
tone(pin, melody[j], Q);
delay(Q + 10);
}
delay(1+E);
for (int j = 4; j < 12; j++) {
tone(pin, melody[j], Q);
delay(Q + 10);
}
}
lcd.clear();
}
// Fungsi lagu Happy Birthday
void happy_birthday() {
// Mainkan lagu ulang tahun baris demi baris
lcd.clear();
lcd.print("Playing Birthday");
delay(500);
// Baris 1: 5 5 6 5 1' 7 (Happy birthday to you)
tone(pin, G4, Q); delay(Q + 10);
delay(1+S);
tone(pin, G4, Q); delay(Q + 10);
tone(pin, LA4, H); delay(H + 10); // Nada ke-3 lebih panjang
tone(pin, G4, H); delay(H + 10);
tone(pin, C5, H); delay(H + 10);
tone(pin, B4, W); delay(W + 10);
// Baris 2: 5 5 6 5 2' 1' (Happy birthday to you)
tone(pin, G4, Q); delay(Q + 10);
delay(1+S);
tone(pin, G4, Q); delay(Q + 10);
tone(pin, LA4, H); delay(H + 10);
tone(pin, G4, H); delay(H + 10);
tone(pin, D5, H); delay(H + 10);
tone(pin, C5, W); delay(W + 10);
// Baris 3: 5 5 3' 1' 1' 1' 7 6 (Happy birthday dear [nama])
tone(pin, G4, Q); delay(Q + 10);
delay(1+S);
tone(pin, G4, Q); delay(Q + 10);
tone(pin, E5, H); delay(H + 10);
tone(pin, C5, H); delay(H + 10);
delay(1+S);
tone(pin, C5, H); delay(Q + 10);
delay(1+S);
tone(pin, C5, Q); delay(Q + 10);
tone(pin, B4, Q); delay(Q + 10);
tone(pin, LA4, W); delay(W + 10);
// Baris 4: 4 4 3' 1' 2' 1' (Happy birthday to you)
tone(pin, F5, Q); delay(Q + 10);
delay(1+S);
tone(pin, F5, Q); delay(Q + 10);
tone(pin, E5, H); delay(H + 10);
tone(pin, C5, H); delay(H + 10);
tone(pin, D5, H); delay(H + 10);
tone(pin, C5, W); delay(W + 10);
lcd.clear();
}

Video 1. Video tutorial pembuatan simulasi di WOKWI
TAG:
deteksi debu solar panel, pemantau efisiensi solar panel, monitoring panel surya iot, esp32 solar panel monitor, sensor debu esp32, iot blynk solar panel, efisiensi solar panel iot, simulasi wokwi solar panel, dust sensor esp32, solar panel dust detection, monitoring arus tegangan solar panel, sensor ina219 esp32, sensor acs712 solar panel, sensor ldr panel surya, sistem pembersih solar panel otomatis, perawatan panel surya iot, smart solar panel iot, energi terbarukan iot, proyek solar panel esp32, tutorial blynk iot solar panel, simulasi esp32 wokwi, pengukuran daya solar panel, monitoring energi blynk, solar power monitoring system, iot renewable energy, pemantau kinerja solar panel, sensor optik debu, dust level solar panel, alarm pembersihan panel surya, efisiensi sel surya iot, proyek teknik elektro energi, mekatronika solar panel, tugas akhir solar panel iot, skripsi panel surya esp32, ide proyek energi terbarukan, solar panel efficiency tracker, sensor tegangan dc esp32, sensor arus dc esp32, datastream blynk solar panel, gauge widget blynk solar, superchart blynk efisiensi, dashboard blynk iot solar, tutorial wokwi indonesia, simulasi iot energi terbarukan, koding esp32 solar panel, library blynk esp32, library sensor debu arduino, sensor gp2y1014au0f esp32, pemantauan PLTS iot, sistem monitoring PLTS blynk, sistem peringatan kotoran solar panel, pemeliharaan PLTS berbasis iot, efisiensi pembangkit listrik tenaga surya, analisis efisiensi solar panel, telemetry data panel surya, virtual pin blynk solar, esp32 wifi solar monitor, komunikasi data iot PLTS, pengukur daya listrik solar panel, smart grid iot esp32, monitoring energi rumah tangga, green energy iot project, sensor intensitas cahaya solar panel, skematik esp32 solar monitor, diagram rangkaian pemantau solar panel, source code esp32 solar blynk, program arduino solar panel, simulasi iot gratis, platform simulasi wokwi, wokwi esp32 blynk setup, blynk auth token esp32, cloud iot solar panel, sistem pemantau energi nirkabel, proyek sains energi terbarukan, portofolio iot PLTS, praktikum mikrokontroler esp32, modul esp32 wroom 32, pinout esp32 sensor debu, gpio esp32 solar monitor, penyimpan data efisiensi blynk, grafik daya real time blynk, iot solar efficiency monitor, iot dust detector, panduan iot solar panel, belajar mikrokontroler online, simulator komponen elektronik, wokwi custom chip esp32, blynk iot platform, internet of things indonesia, iot smk elektro, iot universitas elektro, prototipe pemantau solar panel, alat deteksi kotoran panel surya, monitoring lingkungan PLTS, iot smart energy, smart building solar panel, esp32 arduino ide blynk, tutorial iot pemula, proyek elektro PLTS esp32, panduan lengkap wokwi blynk
