• 082226375801
  • alfianmaarif@ee.uad.ac.id
  • Yogyakarta
Materi
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šŸ”„!!


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

Leave a Reply

Your email address will not be published. Required fields are marked *