11. PROYEK AUDIO DENGAN MICROCONTROLLER ARDUINO
Teknologi saat ini telah mampu mengkombinasikan audio digital player (Audio DAC — Digital To Analog Converter) dengan Arduino. Contoh penerapannya adalah sebagai pemutar audio di ruang publik yang diaktifkan oleh sensor. Konsep kerjanya tampak seperti pada Gambar 11.1.
Contoh aplikasi Arduino dengan modul audio antara lain:
- Sebagai pemutar audio yang aktifasinya dipicu oleh sensor, contoh: sirine peringatan gempa bumi dan tsunami, sirine palang pintu kereta api, sirine peringatan kebakaran dan kebocoran gas dan lain sebagainya.
- Sebagai aplikasi bel sekolah (pemutar rekaman audio) otomatis aktif saat pergantian jam pelajaran. Dimana pemilihan file audio telah dijadwal berdasarkan waktu sesuai program.
Terdapat beberapa modul Audio DAC yang sering digunakan pada Arduino, misalnya modul DFPlayer atau module WTV020SD16P seperti tampak pada Gambar 11.2 dan Gambar 11.3.Module tersebut bertugas mengkonversi file digital audio berformat MP3/WAV menjadi audio analog.
Daya modul audio DAC umumnya tergolong kecil untuk area publik, sehingga perlu diperkuat dengan modul audio amplifier tambahan, seperti tampak pada Gambar 11.4 (daya rendah) dan Gambar 11.5 (daya besar). Sesuaikan besaran daya audio amplifier yang dibutuhkan karena banyak pilihan yang bisa digunakan.
11.1 Pemutar Lagu MP3 Dengan Module DFPlayer
Berikut hal-hal penting yang perlu diperhatikan:
- Usahakan kapasitas memori microSD kurang dari 8GB. Kapasitas memori yang terlalu besar akan menyebabkan file tidak terbaca oleh modul DFPiayer. Format memori microSD dengan tipe FAT atau FAT32.
- Sebaiknya penamaan file audio .MP3/.WAV yang disimpan ke dalam microSD menggunakan angka dengan lebar 4 digit, misalnya “0001.mp3’% “0002.mp3”, “0012.mp3” dan seterusnya. Tujuannya untuk mengurangi waktu proses pencarian nama file audio oleh DFPlayer, jika terlalu waktu yang dibutuhkan maka proses akan dibatalkan.
- Buat folder baru bernama “mp3” ke dalam memori microSD, kemudian letakkan semua file audio/ file lagu ke dalam folder tersebut.
- Kebutuhan Bahan
Bahan | Jumlah | Nilai | Keterangan |
Modul DFPlayer | 1 pcs | ![]() ![]() |
|
Memory MicroSD
Kapasitas < 8GB, Format FAT/FAT32. |
1 pcs | < 8GB | ![]() ![]() |
Resistor % watt | 2 pcs | 1K ohm | |
Speaker | ![]() ![]() |
Pada program dibutuhkan library DFRobotDFPlayerMini.h yang dapat di-download di https://github.com/DFRobot/DFRobotDFPlayerMini, kemudian instal file tersebut melalui menu Sketch*lnclude Library#Add .zip Library atau diinstal secara online melalui menu Tools4Managed libraries dengan kata kunci”dfplayer”, kumudian pilih dan instal “DFRobotDFPlayerMini by DFRobot”.
Kode Program
#include “SoftwareSerial.h”
#include “DFRobotDFPlayerMini.h” SoftwareSerial mySoftwareSerial(7, 6); // RX,TX DFRobotDFP1ayerMini myDFPlayer; void setup() { mySoftwareSerial.begin(9600); Serial.begin(9600); Serial.print1n(); Serial.println(“Initializing DFPlayer…”); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.print1n(“Unable to begin:”); Serial.print1n(“1. Cek ulang koneksi!”); Serial.print1n(“2. Masukkan microSD!”); while(true); } Serial.println(“DFPlayer Mini aktif.”); myDFPlayer.volume(10); //Set volume antara 0 sampai 30 myDFPlayer.play(1); //Play file mp3 pertama } void loop() { static unsigned long timer = millis(); if (millis() – timer > 3000) { timer = millis(); myDFPlayer.next(); //Play next mp3 setiap 3 detik. } if (myDFPlayer.available()) { //print pesan status dan error. printDetail(myDFPlayer.readType(), myDFPlayer.read()); } } void printDetail(uint8_t type, int value){ switch(type){ case TimeOut: Serial.println(“Time Out!”); break; case WrongStack: Serial.println(“Stack Wrong!”); break; case DFPlayerCardInserted: Serial.print1n(“Card Inserted!”); break; case DFP1ayerCardRemoved: Serial.println(“Card Removed!”); break; case DFPlayerCardonline: Serial.println(“Card Online!”); break; case DFPlayerPlayFinished: Serial.print(“Number:”); Serial.print(value); Serial,println(“ Play Finished!”); break; case DFPlayerError: Serjal.print(“DFPlayerError;”); switch(value) { case Busy: Serial.print1n(“Card not found”); break; case Sleeping: Serial.println(“Sleeping”); break; case SerialwrongStack: Serial.println(“Get Wrong Stack”); break; case CheckSumNotMatch: Serial.println(“Check Sum Not Match”); break; case FileIndexOut: Serial.println(“File Index Out of Bound”); break; case FileMismatch: Serial.println(“Cannot Find File”); break; case Advertise: Serial.println(“In Advertise”); break; default: break; } break; default: break; } } |
11.2 Aktifasi Pemutar Audio Dengan Pemicu Sensor Gas & Ultrasonic
Proyek ini merupakan pengembangan proyek sebelumnya, namun aktifasi pemutaran file audio dipicu oleh sensor gas MQ-02 dan sensor ultrasonic HCSR04. Jika sensor gas MQ-2 mendeteksi kadar gas telah mencapai nilai ambang tertentu atau ketika sensor ultrasonic mendeteksi adanya penghalang pada jarak tertenetu maka modul DFPlayer akan memutar file audio yang sudah ditentukan.
Jika jarak penghalang antara sensor ultrasonic dengan benda penghalangnya kurang dari atau sama dengan 50cm maka DFPlayer akan memainkan file audio berindeks 1 dan ketika sensor gas MQ-2 mendeteksi kadar gas melebihi atau sama dengan 30% maka DFPlayer akan memainkan file audio berindeks 2. Nilai jarak dan nilai kadar gas akan ditampilkan pada layar LCD 12C saat mencapai ambang saja.
Kebutuhan Bahan
Diagram Sketch
Kode Program
#include “SoftwareSerial.h”
#include “DFRobotDFPlayerMini,h” #include <LiquidCrystal_I2C.h> #define pinAnalog A0 //pin ultrasonic #define pinTrigger 9 // pin trigger HC-SR04 #define pinEcho 8 // pin echo HC-SR04 SoftwareSerial mySoftwareSerial(7, 6); // RX, TX DFRobotDFPlayerMini myDFPlayer; LiquidCrystal_I2C lcd(0x27, 16,2); long duration; int distanceCm; // Pembangkitan custom character, kunjungi https://maxpromer.github.io/ LCD-Character-Creator/ byte kotak[] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111}; void setup() { mySoftwareSerial.begin(9600); Serial.begin(9600); pinMode(pinAnalog, INPUT); lcd.init(); // Inisialisasi LCD lcd.backlight(); // Menghidupkan backlight lcd.setCursor(0,0); lcd.print(“Menghitung Jarak”); lcd.setCursor(0,1); Icd.print(“Dengan Ultrasonic“); pinMode(pinTrigger, oUTPUT); // set pin trigger sebagai output pinMode(pinEcho, INPUT); // set pin echo sebagai input Serial.println(); Serial.println(“Initializing DFPlayer…”); if(!myDFPlayer.begin(mySoftwareSerial)){ Serial.println(“Unable to begin:”); Serial.println(“1. Cek ulang koneksi!”); Serial.println(“2. Masukkan microSD!”); while(true); Serial.println(“DFPlayer Mini aktif.”); } void loop() { //******************* // Menghitung jarak //******************* // Membersihkan pin pinTrigger selama 2 microdetik digitalwrite(pinTrigger, LOW); delayMicroseconds(2); // Set pinTrigger menjadi HIGH selama 10 microdetik digitalwrite(pinTrigger, HIGH); delayMicroseconds(10); digitalwrite(pinTrigger, LOW); // Membaca pinEcho, mengembalikan waktu perjalanan gelombang suara dalam mikrodetik duration = pulseIn(pinEcho, HIGH); distanceCm = duration * 0.034 / 2; // Jarak dalam CM //************** // Deteksi Gas //************** unsigned int nilaiPembacaanSensor = analogRead(pinAnalog); //mapping 1023 (kering) ke 0 dan 0 (level kebasahan) ke 100 persen byte persen = map(nilaiPembacaanSensor, 0, 1023, 0, 100); //mapping 0-100% ke jumlah karakter 1-16 byte progressBar = map(persen, 0, 100, 1, 16); //********* // Play Audio //********* //tampilkan jarak kurang dari 50cm if (distanceCm <=50) { myDFPlayer.volume(20); //Set volume antara 0 sampai 30 myDFPlayer.play(1); //Play file mp3 pertama lcd.clear(); lcd.setCursor(0, 0); lcd.prínt(“Jarak: “ + String(distanceCm) +“ c㎡”); } else if (persen>=30){ myDFPlayer.volume(20); //Set volume antara 0 sampai 30 myDFPlayer.play(2); //Play fle mp3 pertama lcd.clear(); lcd.setCursor(0,0); lcd.print(“Polusi Level:”+ String(persen)+“%”); for (byte i = 0; i < progressBar-1;i++) } //cetak custom character kotak lcd.setCursor(1,1); lcd.write(0); } } else { // berhenti jika jarak lebih dari 50cm myDFPlayer.stop(); } delay(1000); } |