Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Dalam proyek ini saya akan menunjukkan bagaimana Anda dapat membuat Pemutar Musik MP3 Layar Sentuh Arduino dan Jam Alarm. Anda dapat menonton video berikut atau membaca tutorial tulisan di bawah ini.

Ringkasan

Layar awal memiliki jam besar, informasi tanggal dan suhu, serta dua tombol untuk Pemutar Musik dan Jam Alarm.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Jika kita memasuki Pemutar Musik kita dapat memulai memutar musik dengan menekan tombol “Play” besar di tengah layar. Tepat di sampingnya, ada dua tombol lagi, untuk memutar lagu sebelumnya atau berikutnya.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Di atas tombol ini ada progress bar lagu, dan di bagian bawah layar kita memiliki volume bar dan dua tombol untuk menurunkan dan menaikkan volume. Di sudut kanan atas ada jam dan di sisi kiri ada tombol “Menu” yang membawa kita kembali ke layar awal.

Di sisi lain, jika kita memasuki Jam Alarm kita dapat mengatur alarm dengan menggunakan dua tombol untuk mengatur jam dan menit.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Ketika alarm akan diaktifkan, sebuah lagu akan mulai memutar pada volume yang lebih tinggi, dan akan terus memutar sampai kita menekan tombol “Dismiss”.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Bagaimana Cara Kerjanya

Sekarang mari kita lihat bagaimana perangkat ini bekerja. Ini menggunakan papan Arduino Mega dan layar sentuh TFT 3,2 inci dengan shield yang cocok untuk menghubungkan layar ke Papan Arduino. Untuk memutar musik, ini menggunakan modul Pemutar MP3 BY8001 dan untuk jam alarm ini menggunakan modul Jam Waktu Nyata DS3231.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Anda dapat mendapatkan komponen yang diperlukan untuk proyek Arduino ini dari tautan di bawah ini:

  • Modul MP3 BY8001-16P ………
  • Layar Sentuh TFT 3,2 inci………..
  • Shield TFT Display Mega………..
  • Speaker 0,5W ……………………….
  • Jam Waktu Nyata DS3231 ………..
  • Arduino Mega………………………..

Skematis Rangkaian

Berikut adalah skematis rangkaian proyek ini:

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Kita dapat melihat di sini bahwa shield TFT memblokir pin bebas papan Arduino jadi kita perlu membuat pin header buatan sendiri yang dapat kita masukkan di antara shield dan Arduino.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Juga perlu diperhatikan bahwa untuk memberi daya pada Arduino kita perlu mencabut lepas pin header tambahan ke pin 5 V pada shield, karena shield sudah menggunakan semua pin VCC Arduino.

Setelah kita menghubungkan semuanya bersama kita dapat melanjutkan dengan memprogram Arduino. Namun, sebelum kita melanjutkan saya ingin menyarankan Anda untuk memeriksa tutorial terperinci saya sebelumnya tentang layar sentuh TFT dan modul Jam Waktu Nyata DS3231. Dan untuk modul Pemutar MP3 saya akan memberikan penjelasan singkat di sini dalam artikel ini.

Modul Pemutar MP3 BY8001-16P

BY8001-16P adalah modul MP3 yang bekerja dengan kartu MicroSD dan mendukung format file audio MP3 dan WAV. Modul ini memiliki penguat daya 3W built-in dan dapat langsung menggerakkan speaker tunggal 3W.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Modul Pemutar MP3 dapat dikontrol menggunakan tombol melalui 5 pin input atau menggunakan mikrokontroler melalui komunikasi serial.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Perhatikan di sini bahwa pin port serial modul bekerja pada 3,3V jadi pin RX modul perlu dihubungkan melalui resistor 1K ke pin TX Arduino. Juga perhatikan 3 port A, B dan C yang digunakan untuk memilih mode kontrol. Untuk mengontrol modul menggunakan mikrokontroler 3 resistor di pad ini perlu dicabut lepas. Pin nomor 6 dan 7 dapat digunakan untuk menghubungkan speaker daya rendah secara langsung atau pin nomor 4 dan 5 jika menggunakan penguat eksternal.

Adalah bagian Arduino cara termudah adalah menggunakan perpustakaan BY8001 yang dapat diunduh dari GitHub. Jika kita membuka beberapa contoh demo kita dapat melihat bagaimana cara kerjanya. Jadi setelah menginisialisasi modul di bagian setup, kita dapat menggunakan salah satu fungsi buatan khusus untuk mengontrol modul.

Kode Sumber

Sekarang kita siap untuk melihat kode dari Pemutar MP3 Layar Sentuh Arduino dan Jam Alarm Musik Layar Sentuh ini. Karena kode cukup panjang, untuk pemahaman yang lebih baik, saya akan memposting kode sumber program dalam bagian-bagian dengan deskripsi untuk setiap bagian. Dan di akhir artikel ini saya akan memposting kode sumber lengkap.

Jadi, pertama kita perlu menyertakan perpustakaan untuk layar sentuh TFT, Pemutar MP3 BY8001-16P dan modul Jam Waktu Nyata DS3231, serta perpustakaan untuk komunikasi serial. Kemudian kita harus membuat objek yang sesuai dan mendefinisikan beberapa variabel yang diperlukan untuk program.

#include <UTFT.h> #include <URTouch.h> #include <SoftwareSerial.h> #include <BY8001.h> #include <DS3231.h> //==== Creating Objects UTFT myGLCD(SSD1289, 38, 39, 40, 41); //Parameters should be adjusted to your Display/Schield model URTouch myTouch( 6, 5, 4, 3, 2); SoftwareSerial mp3Serial(11, 10); // RX, TX BY8001 mp3; // creating an instance of class BY8001 and call it 'mp3' DS3231 rtc(SDA, SCL); //==== Defining Fonts extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; extern unsigned int MusicPlayerButton[0x1040]; extern unsigned int AlarmButton[0x1040]; extern unsigned int ButtonPlay[0x1AE9]; extern unsigned int ButtonPause[0x1AE9]; extern unsigned int PreviousButton[0x9C4]; extern unsigned int NextButton[0x9C4]; extern unsigned int VolumeDown[0x170]; extern unsigned int VolumeUp[0x3B8]; int x, y; // Variables for the coordinates where the display has been pressed char currentPage, playStatus; int iV = 15; int trackNum = 1; int b = 16; int aHours = 0; int aMinutes = 0; boolean alarmNotSet = true; String alarmString = ""; float currentTemperature, temperature; static word totalTime, elapsedTime, playback, minutes, seconds, lastSeconds, minutesR, secondsR; String currentClock, currentHours, currentMinutes, currentSeconds, currentDate; String timeString, hoursString, minutesString, secondsString, hoursS, minutesS, secondsS, dateS;

Kita dapat melihat di sini penyebutan bitmap. Beberapa tombol program sebenarnya adalah gambar yang dikonversi menjadi bitmap menggunakan alat ImageConverter565 yang datang dengan perpustakaan TFT.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Jadi, berkas “.c” ini perlu disertakan dalam direktori berkas kode sehingga dimuat saat meluncurkan sketsa. Di sini Anda dapat mengunduh gambar dan berkas “.c” ini.

Di bagian setup setelah menginisialisasi objek, kita memanggil fungsi khusus drawHomeScreen() yang menggambar semua grafis layar awal. Juga di sini kita menetapkan nilai awal beberapa variabel, seperti playStatus, currentTemp dan Date, nilai awal volume dan sebagainya.

void setup() { // Initiate display myGLCD.InitLCD(); myGLCD.clrScr(); myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM); // Initialize the rtc object rtc.begin(); // Music Serial.begin(9600); // set serial monitor baud rate to Arduino IDE mp3Serial.begin(9600); // BY8001 set to 9600 baud (required) mp3.setup(mp3Serial); // tell BY8001 library which serial port to use. delay(800); // allow time for BY8001 cold boot; may adjust depending on flash storage size drawHomeScreen(); // Draws the Home Screen currentPage = '0'; // Indicates that we are at Home Screen playStatus = '0'; mp3.setVolume(15); delay(100); currentTemperature = rtc.getTemp(); currentDate = rtc.getDateStr(); currentClock = rtc.getTimeStr(); timeString = rtc.getTimeStr(); currentHours = timeString.substring(0, 2); currentMinutes = timeString.substring(3, 5); currentSeconds = timeString.substring(6, 8); }

Selanjutnya adalah bagian loop. Pernyataan if pertama benar karena kita telah mengatur variabel currentPage menjadi 0 yang menunjukkan bahwa kita berada di layar awal. Di sini dengan pernyataan if berikutnya kita memeriksa apakah ada perubahan pada jam dan ini terjadi setiap detik. Sekarang karena kita menggunakan font segmen tujuh dari perpustakaan TFT, yang tidak mendukung karakter apa pun selain angka, kita harus mengekstrak hanya angka dari string yang datang dengan fungsi getTimeStr() untuk membaca jam dari modul DS3231 RTC.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Jadi menggunakan fungsi substring() kita mendapatkan jam, menit dan detik ke dalam variabel terpisah dan mencetaknya setiap kali ada perubahan pada detik, menit atau jam. Adalah tanggal dan suhu, serupa, kita memeriksa apakah ada perubahan dibandingkan dengan status sebelumnya.

void loop() { // Homes Screen if (currentPage == '0') { // Checks for change of the clock if ( currentClock != rtc.getTimeStr()) { timeString = rtc.getTimeStr(); hoursS = timeString.substring(0, 2); minutesS = timeString.substring(3, 5); secondsS = timeString.substring(6, 8); myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.print(secondsS, 224, 50); if ( currentMinutes != minutesS ) { myGLCD.print(minutesS, 128, 50); currentMinutes = minutesS; } if ( currentHours != hoursS ) { myGLCD.print(hoursS, 32, 50); currentHours = hoursS; } // Checks for change of the date dateS = rtc.getDateStr(); delay(10); if ( currentDate != dateS){ myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(BigFont); // Sets font to big myGLCD.print(rtc.getDateStr(), 153, 7); } // Checks for change of the temperature temperature = rtc.getTemp(); delay(10); if ( currentTemperature != temperature ){ myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(BigFont); // Sets font to big myGLCD.printNumI(temperature, 39, 7); currentTemperature = temperature; } delay(10); currentClock = rtc.getTimeStr(); }

Selanjutnya, menggunakan fungsi myTouch.dataAvailable() kita memeriksa apakah kita telah menyentuh layar dan juga memeriksa apakah itu tombol Pemutar Musik atau Jam Alarm. Jika itu tombol Pemutar Musik, pertama kita memanggil fungsi khusus drawFrame() yang menggambar lingkaran merah di sekitar tombol menunjukkan bahwa tombol telah ditekan. Juga fungsi khusus ini memiliki loop while yang menahan program tertahan sampai kita melepaskan tombol. Saat setelah itu, kita mengatur variabel currentPage ke 1, menghapus layar dan memanggil fungsi khusus drawMusicPlayerScreen() yang menggambar semua grafis layar Pemutar Musik. Serupa, jika kita menekan tombol Alarm kita, kita mengatur variabel currentPage ke 2 dan menghapus layar.

// Checks whether the screen has been touched if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed // If we press the Music Player Button if ((x >= 55) && (x <= 120) && (y >= 125) && (y <= 190)) { drawFrame(87, 157, 33); currentPage = '1'; myGLCD.clrScr(); delay(100); drawMusicPlayerScreen(); delay(100); } // If we press the Alarm Button if ((x >= 195) && (x <= 260) && (y >= 125) && (y <= 190)) { drawFrame(227, 160, 29); currentPage = '2'; myGLCD.clrScr(); } }

Selanjutnya, mari kita lihat apa yang terjadi di layar Pemutar Musik. Di sini kita terus memeriksa apakah kita telah menyentuh layar. Jika kita menyentuh tombol Play dan variabel playStatus saat ini adalah 0, kita akan memanggil fungsi mp3.playTrackFromFolder() yang akan mulai memutar lagu pertama dari kartu MicroSD. Pada saat yang sama, kita memanggil fungsi khusus drawPauseButton() yang menggambar tombol Pause dan mengatur variabel playStatus ke 2. Menggunakan dua pernyataan if berikutnya, tergantung pada variabel playStatus, kita berganti antara memutar dan jeda lagu.

// Music Player Screen if (currentPage == '1') { if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed // If we press the Play Button if ((x >= 116) && (x <= 204) && (y >= 77) && (y <= 165)) { if (playStatus == '0') { drawFrame(159, 121, 42); drawPauseButton(); mp3.playTrackFromFolder(00, 001); delay(100); playStatus = '2'; return; } if (playStatus == '1') { drawFrame(159, 121, 42); drawPauseButton(); mp3.play(); delay(100); playStatus = '2'; return; } if (playStatus == '2') { drawFrame(159, 121, 42); drawPlayButton(); mp3.pause(); delay(100); playStatus = '1'; return; } }

Dengan cara yang serupa, untuk setiap tombol yang ditekan kita memanggil fungsi yang sesuai untuk memutar lagu sebelumnya atau berikutnya, menurunkan atau menaikkan volume, serta tombol “Menu” yang membawa kita kembali ke layar awal.

// If we press the Previous Button if ((x >= 45) && (x <= 95) && (y >= 97) && (y <= 147)) { drawFrame(70, 121, 26); mp3.previousTrack(); delay(100); drawTrackBar(); } // If we press the Next Button if ((x >= 227) && (x <= 277) && (y >= 97) && (y <= 147)) { drawFrame(252, 122, 26); mp3.nextTrack(); delay(100); drawTrackBar(); } // If we press the VolumeDown Button if ((x >= 35) && (x <= 75) && (y >= 165) && (y <= 209)) { drawUnderline(45, 205, 65, 205); if (iV >= 0 & iV <= 30) { iV--; drawVolume(iV); } mp3.decreaseVolume(); delay(100); } // If we press the VolumeUp Button if ((x >= 230) && (x <= 280) && (y >= 165) && (y <= 209)) { drawUnderline(235, 205, 275, 205); if (iV >= 0 & iV <= 30) { iV++; drawVolume(iV); } mp3.increaseVolume(); delay(100); } // If we press the MENU Button if ((x >= 0) && (x <= 75) && (y >= 0) && (y <= 30)) { myGLCD.clrScr(); drawHomeScreen(); // Draws the Home Screen currentPage = '0'; return; } }

Pernyataan if berikutnya digunakan untuk memperbarui progress bar lagu.

// Updates the track bar if (playStatus == '1' || playStatus == '2') { trackPlayTime(); }

Jadi jika musik sedang memutar kita memanggil fungsi khusus trackPlayTime() yang menggunakan beberapa fungsi perpustakaan Pemutar MP3, seperti mp3.getElapsedTrackPlaybackTime(), menghitung dan mencetak waktu yang telah berlalu dan waktu yang tersisa serta grafis progress bar lagu. Menggunakan fungsi khusus printClock() kita mencetak jam di sudut kanan atas.

// Updates the track bar void trackPlayTime() { totalTime = mp3.getTotalTrackPlaybackTime(); delay(10); elapsedTime = mp3.getElapsedTrackPlaybackTime(); delay(10); minutes = (int)elapsedTime / 60; seconds = (((float)elapsedTime / 60) - minutes) * 60; playback = totalTime - elapsedTime; minutesR = (int)playback / 60; secondsR = (((float)playback / 60) - minutesR) * 60; myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.printNumI(minutes, 8, 48); myGLCD.print(":", 16, 48); myGLCD.printNumI((int)seconds, 24, 48, 2, '0'); myGLCD.print("-", 276, 48); myGLCD.printNumI(minutesR, 284, 48); myGLCD.print(":", 292, 48); myGLCD.printNumI((int)secondsR, 300, 48, 2, '0'); int trackBarX = map(elapsedTime, 0, totalTime, 0, 224); myGLCD.setColor(255, 0, 0); myGLCD.fillRect (48, 50, 48 + trackBarX, 50 + 8); if (totalTime == elapsedTime) { mp3.nextTrack(); delay(30); myGLCD.setColor(255, 255, 255); myGLCD.fillRect (48, 50, 48 + 224, 50 + 8); } }

Selanjutnya adalah layar Jam Alarm. Di sini pertama-tama kita menggambar semua grafis, jam, teks dan tombol dan juga mengatur variabel alarmNotSet menjadi benar sehingga kita dapat memasuki loop while berikutnya. Di sini menggunakan dua tombol, H dan M, kita mengatur alarm dan setelah kita klik tombol “Set” nilai alarm disimpan ke dalam variabel alarmString.

// Alarm Clock Screen if (currentPage == '2') { myGLCD.setFont(BigFont); myGLCD.setColor(255, 255, 255); myGLCD.print("MENU", 5, 5); myGLCD.print("Set Alarm", CENTER, 20); // Draws a colon between the hours and the minutes myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (112, 65, 4); myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (112, 85, 4); myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.printNumI(aHours, 32, 50, 2, '0'); myGLCD.printNumI(aMinutes, 128, 50, 2, '0'); myGLCD.setColor(255, 255, 255); myGLCD.drawRoundRect (42, 115, 82, 145); myGLCD.drawRoundRect (138, 115, 178, 145); myGLCD.setFont(BigFont); myGLCD.print("H", 54, 122); myGLCD.print("M", 150, 122); myGLCD.drawRoundRect (215, 60, 303, 90); myGLCD.print("SET", 236, 67); myGLCD.drawRoundRect (215, 115, 303, 145); myGLCD.print("CLEAR", 220, 122); alarmNotSet = true; while (alarmNotSet){ if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed //Set hours button if ((x >= 42) && (x <= 82) && (y >= 115) && (y <= 145)) { drawRectFrame(42, 115, 82, 145); aHours++; if(aHours >=24){ aHours = 0; } myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.printNumI(aHours, 32, 50, 2, '0'); } // Set minutes buttons if ((x >= 138) && (x <= 178) && (y >= 115) && (y <= 145)) { drawRectFrame(138, 115, 178, 145); aMinutes++; if(aMinutes >=60){ aMinutes = 0; } myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.printNumI(aMinutes, 128, 50, 2, '0'); } // Set alarm button if ((x >= 215) && (x <= 303) && (y >= 60) && (y <= 80)) { drawRectFrame(215, 60, 303, 90); if (aHours < 10 && aMinutes < 10){ alarmString = "0"+(String)aHours + ":" + "0"+ (String)aMinutes + ":00"; } else if (aHours < 10 && aMinutes > 9){ alarmString = "0"+(String)aHours + ":" + (String)aMinutes + ":00"; } else if (aHours > 9 && aMinutes < 10){ alarmString = (String)aHours + ":" + "0"+ (String)aMinutes + ":00"; } else { alarmString = (String)aHours + ":" + (String)aMinutes + ":00"; } myGLCD.setFont(BigFont); myGLCD.print("Alarm set for:", CENTER, 165); myGLCD.print(alarmString, CENTER, 191); } // Clear alarm button if ((x >= 215) && (x <= 303) && (y >= 115) && (y <= 145)) { drawRectFrame(215, 115, 303, 145); alarmString=""; myGLCD.setColor(0, 0, 0); myGLCD.fillRect(45, 165, 275, 210); } // If we press the MENU Button if ((x >= 0) && (x <= 75) && (y >= 0) && (y <= 30)) { alarmNotSet = false; currentPage = '0'; myGLCD.clrScr(); drawHomeScreen(); // Draws the Home Screen } } } }

Perhatikan di sini bahwa kita perlu menyesuaikan string ini untuk memiliki bentuk yang sama seperti string yang kita dapatkan dari fungsi getTimeString(). Dengan cara ini kita akan dapat membandingkannya dan mengaktifkan alarm saat jam mencapai nilai atau waktu yang sama.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Jika kita menekan tombol clear kita akan menghapus alarmString dan jika kita menekan tombol menu itu akan mengeluarkan kita dari loop while dan kembali ke layar awal.

Untuk mengaktifkan alarm, kita memeriksa apakah alarm telah diatur dan jika alarm cocok dengan jam, lagu pertama pada kartu MicroSD akan mulai memutar pada volume yang lebih tinggi. Juga kita akan menggambar semua grafis bersama dengan tombol “Dismiss” dan mengatur variabel alarmOn menjadi benar. Ini akan memasukkan kita ke loop while berikutnya yang akan memungkinkan lagu terus memutar sampai kita menekan tombol “Dismiss”.

// Alarm activation if (alarmNotSet == false) { if (alarmString == rtc.getTimeStr()){ myGLCD.clrScr(); mp3.setVolume(25); mp3.playTrackByIndexNumber(1); delay(100); myGLCD.setFont(BigFont); myGLCD.setColor(255, 255, 255); myGLCD.print("ALARM", CENTER, 90); myGLCD.drawBitmap (127, 10, 65, 64, AlarmButton); myGLCD.print(alarmString, CENTER, 114); myGLCD.drawRoundRect (94, 146, 226, 170); myGLCD.print("DISMISS", CENTER, 150); boolean alarmOn = true; while (alarmOn){ if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed // Stop alarm button if ((x >= 94) && (x <= 226) && (y >= 146) && (y <= 170)) { drawRectFrame(94, 146, 226, 170); alarmOn = false; alarmString=""; myGLCD.clrScr(); mp3.stopPlayback(); delay(100); currentPage = '0'; playStatus = '0'; mp3.setVolume(15); drawHomeScreen(); } } } } }

Itulah cara kerja kodenya dan Anda dapat menemukan kode sumber lengkap di bagian bawah artikel.

Membangun Perangkat


Menggunakan Solidworks saya membuat desain dan ini adalah penampakannya.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Anda dapat mengunduh model ini untuk mengambil pengukuran di sini:

Untuk proyek ini saya memilih untuk menggunakan lem logam aluminium yang saya potong ke ukuran menggunakan multi tool. Kemudian di tepi meja saya dan dengan bantuan beberapa klem dan latihan saya membengkokkan lem logam tersebut.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Adalah speaker, saya mencetak pola lingkaran, melampirkannya ke tempat dan menggunakan bor saya membuat semua lubang.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Setelah itu saya memotong sisi ke bentuk yang sesuai dan mengamankannya ke lem logam yang telah dibengkokkan sebelumnya menggunakan pistol lem.

Di akhir saya melem lem logam kotak dan siap untuk komponen elektronik dipasang. Lagi, menggunakan pistol lem saya mengamankan semua komponen, menghubungkan semuanya bersama dan mengamankan tutup belakang perangkat menggunakan dua baut.

Pemutar MP3 & Jam Alarm Layar Sentuh Arduino DIY – Panduan Langkah demi Langkah

Itu saja, jangan ragu untuk bertanya di bagian komentar di bawah ini.

Berikut adalah kode sumber lengkap dari perangkat ini:

/* * Arduino Touch Screen MP3 Music Player and Alarm Clock * * Crated by Dejan Nedelkovski, * www.HowToMechatronics.com * * UFTF, URTouch and DS3231 libraries made by Henning Karlsen which can be found and downloaded from his website, www.rinkydinkelectronics.com. * BY8001 MP3 Player Library made by borland of Arduino forum, Released in public domain. Dowload link: https://github.com/r0ndL/BY8001 */ #include <UTFT.h> #include <URTouch.h> #include <SoftwareSerial.h> #include <BY8001.h> #include <DS3231.h> //==== Creating Objects UTFT myGLCD(SSD1289, 38, 39, 40, 41); //Parameters should be adjusted to your Display/Schield model URTouch myTouch( 6, 5, 4, 3, 2); SoftwareSerial mp3Serial(11, 10); // RX, TX BY8001 mp3; // creating an instance of class BY8001 and call it 'mp3' DS3231 rtc(SDA, SCL); //==== Defining Fonts extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t SevenSegNumFont[]; extern unsigned int MusicPlayerButton[0x1040]; extern unsigned int AlarmButton[0x1040]; extern unsigned int ButtonPlay[0x1AE9]; extern unsigned int ButtonPause[0x1AE9]; extern unsigned int PreviousButton[0x9C4]; extern unsigned int NextButton[0x9C4]; extern unsigned int VolumeDown[0x170]; extern unsigned int VolumeUp[0x3B8]; int x, y; // Variables for the coordinates where the display has been pressed char currentPage, playStatus; int iV = 15; int trackNum = 1; int b = 16; int aHours = 0; int aMinutes = 0; boolean alarmNotSet = true; String alarmString = ""; float currentTemperature, temperature; static word totalTime, elapsedTime, playback, minutes, seconds, lastSeconds, minutesR, secondsR; String currentClock, currentHours, currentMinutes, currentSeconds, currentDate; String timeString, hoursString, minutesString, secondsString, hoursS, minutesS, secondsS, dateS; void setup() { // Initiate display myGLCD.InitLCD(); myGLCD.clrScr(); myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM); // Initialize the rtc object rtc.begin(); // Music Serial.begin(9600); // set serial monitor baud rate to Arduino IDE mp3Serial.begin(9600); // BY8001 set to 9600 baud (required) mp3.setup(mp3Serial); // tell BY8001 library which serial port to use. delay(800); // allow time for BY8001 cold boot; may adjust depending on flash storage size drawHomeScreen(); // Draws the Home Screen currentPage = '0'; // Indicates that we are at Home Screen playStatus = '0'; mp3.setVolume(15); delay(100); currentTemperature = rtc.getTemp(); currentDate = rtc.getDateStr(); currentClock = rtc.getTimeStr(); timeString = rtc.getTimeStr(); currentHours = timeString.substring(0, 2); currentMinutes = timeString.substring(3, 5); currentSeconds = timeString.substring(6, 8); } void loop() { // Homes Screen if (currentPage == '0') { // Checks for change of the clock if ( currentClock != rtc.getTimeStr()) { timeString = rtc.getTimeStr(); hoursS = timeString.substring(0, 2); minutesS = timeString.substring(3, 5); secondsS = timeString.substring(6, 8); myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.print(secondsS, 224, 50); if ( currentMinutes != minutesS ) { myGLCD.print(minutesS, 128, 50); currentMinutes = minutesS; } if ( currentHours != hoursS ) { myGLCD.print(hoursS, 32, 50); currentHours = hoursS; } // Checks for change of the date dateS = rtc.getDateStr(); delay(10); if ( currentDate != dateS){ myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(BigFont); // Sets font to big myGLCD.print(rtc.getDateStr(), 153, 7); } // Checks for change of the temperature temperature = rtc.getTemp(); delay(10); if ( currentTemperature != temperature ){ myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(BigFont); // Sets font to big myGLCD.printNumI(temperature, 39, 7); currentTemperature = temperature; } delay(10); currentClock = rtc.getTimeStr(); } // Checks whether the screen has been touched if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed // If we press the Music Player Button if ((x >= 55) && (x <= 120) && (y >= 125) && (y <= 190)) { drawFrame(87, 157, 33); currentPage = '1'; myGLCD.clrScr(); delay(100); drawMusicPlayerScreen(); delay(100); } // If we press the Alarm Button if ((x >= 195) && (x <= 260) && (y >= 125) && (y <= 190)) { drawFrame(227, 160, 29); currentPage = '2'; myGLCD.clrScr(); } } } // Music Player Screen if (currentPage == '1') { if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed // If we press the Play Button if ((x >= 116) && (x <= 204) && (y >= 77) && (y <= 165)) { if (playStatus == '0') { drawFrame(159, 121, 42); drawPauseButton(); mp3.playTrackFromFolder(00, 001); delay(100); playStatus = '2'; return; } if (playStatus == '1') { drawFrame(159, 121, 42); drawPauseButton(); mp3.play(); delay(100); playStatus = '2'; return; } if (playStatus == '2') { drawFrame(159, 121, 42); drawPlayButton(); mp3.pause(); delay(100); playStatus = '1'; return; } } // If we press the Previous Button if ((x >= 45) && (x <= 95) && (y >= 97) && (y <= 147)) { drawFrame(70, 121, 26); mp3.previousTrack(); delay(100); drawTrackBar(); } // If we press the Next Button if ((x >= 227) && (x <= 277) && (y >= 97) && (y <= 147)) { drawFrame(252, 122, 26); mp3.nextTrack(); delay(100); drawTrackBar(); } // If we press the VolumeDown Button if ((x >= 35) && (x <= 75) && (y >= 165) && (y <= 209)) { drawUnderline(45, 205, 65, 205); if (iV >= 0 & iV <= 30) { iV--; drawVolume(iV); } mp3.decreaseVolume(); delay(100); } // If we press the VolumeUp Button if ((x >= 230) && (x <= 280) && (y >= 165) && (y <= 209)) { drawUnderline(235, 205, 275, 205); if (iV >= 0 & iV <= 30) { iV++; drawVolume(iV); } mp3.increaseVolume(); delay(100); } // If we press the MENU Button if ((x >= 0) && (x <= 75) && (y >= 0) && (y <= 30)) { myGLCD.clrScr(); drawHomeScreen(); // Draws the Home Screen currentPage = '0'; return; } } // Updates the track bar if (playStatus == '1' || playStatus == '2') { trackPlayTime(); } // Printing the clock in the upper right corner myGLCD.setFont(BigFont); myGLCD.setColor(255, 255, 255); printClock(187, 5); } // Alarm Clock Screen if (currentPage == '2') { myGLCD.setFont(BigFont); myGLCD.setColor(255, 255, 255); myGLCD.print("MENU", 5, 5); myGLCD.print("Set Alarm", CENTER, 20); // Draws a colon between the hours and the minutes myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (112, 65, 4); myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (112, 85, 4); myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.printNumI(aHours, 32, 50, 2, '0'); myGLCD.printNumI(aMinutes, 128, 50, 2, '0'); myGLCD.setColor(255, 255, 255); myGLCD.drawRoundRect (42, 115, 82, 145); myGLCD.drawRoundRect (138, 115, 178, 145); myGLCD.setFont(BigFont); myGLCD.print("H", 54, 122); myGLCD.print("M", 150, 122); myGLCD.drawRoundRect (215, 60, 303, 90); myGLCD.print("SET", 236, 67); myGLCD.drawRoundRect (215, 115, 303, 145); myGLCD.print("CLEAR", 220, 122); alarmNotSet = true; while (alarmNotSet){ if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed //Set hours button if ((x >= 42) && (x <= 82) && (y >= 115) && (y <= 145)) { drawRectFrame(42, 115, 82, 145); aHours++; if(aHours >=24){ aHours = 0; } myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.printNumI(aHours, 32, 50, 2, '0'); } // Set minutes buttons if ((x >= 138) && (x <= 178) && (y >= 115) && (y <= 145)) { drawRectFrame(138, 115, 178, 145); aMinutes++; if(aMinutes >=60){ aMinutes = 0; } myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.printNumI(aMinutes, 128, 50, 2, '0'); } // Set alarm button if ((x >= 215) && (x <= 303) && (y >= 60) && (y <= 80)) { drawRectFrame(215, 60, 303, 90); if (aHours < 10 && aMinutes < 10){ alarmString = "0"+(String)aHours + ":" + "0"+ (String)aMinutes + ":00"; } else if (aHours < 10 && aMinutes > 9){ alarmString = "0"+(String)aHours + ":" + (String)aMinutes + ":00"; } else if (aHours > 9 && aMinutes < 10){ alarmString = (String)aHours + ":" + "0"+ (String)aMinutes + ":00"; } else { alarmString = (String)aHours + ":" + (String)aMinutes + ":00"; } myGLCD.setFont(BigFont); myGLCD.print("Alarm set for:", CENTER, 165); myGLCD.print(alarmString, CENTER, 191); } // Clear alarm button if ((x >= 215) && (x <= 303) && (y >= 115) && (y <= 145)) { drawRectFrame(215, 115, 303, 145); alarmString=""; myGLCD.setColor(0, 0, 0); myGLCD.fillRect(45, 165, 275, 210); } // If we press the MENU Button if ((x >= 0) && (x <= 75) && (y >= 0) && (y <= 30)) { alarmNotSet = false; currentPage = '0'; myGLCD.clrScr(); drawHomeScreen(); // Draws the Home Screen } } } } // Alarm activation if (alarmNotSet == false) { if (alarmString == rtc.getTimeStr()){ myGLCD.clrScr(); mp3.setVolume(25); mp3.playTrackByIndexNumber(1); delay(100); myGLCD.setFont(BigFont); myGLCD.setColor(255, 255, 255); myGLCD.print("ALARM", CENTER, 90); myGLCD.drawBitmap (127, 10, 65, 64, AlarmButton); myGLCD.print(alarmString, CENTER, 114); myGLCD.drawRoundRect (94, 146, 226, 170); myGLCD.print("DISMISS", CENTER, 150); boolean alarmOn = true; while (alarmOn){ if (myTouch.dataAvailable()) { myTouch.read(); x = myTouch.getX(); // X coordinate where the screen has been pressed y = myTouch.getY(); // Y coordinates where the screen has been pressed // Stop alarm button if ((x >= 94) && (x <= 226) && (y >= 146) && (y <= 170)) { drawRectFrame(94, 146, 226, 170); alarmOn = false; alarmString=""; myGLCD.clrScr(); mp3.stopPlayback(); delay(100); currentPage = '0'; playStatus = '0'; mp3.setVolume(15); drawHomeScreen(); } } } } } } void drawHomeScreen() { myGLCD.setBackColor(0, 0, 0); // Sets the background color of the area where the text will be printed to black myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(BigFont); // Sets font to big myGLCD.print(rtc.getDateStr(), 153, 7); myGLCD.print("T:", 7, 7); myGLCD.printNumI(rtc.getTemp(), 39, 7); myGLCD.print("C", 82, 7); myGLCD.setFont(SmallFont); myGLCD.print("o", 74, 5); if (alarmString == "" ) { myGLCD.setColor(255, 255, 255); myGLCD.print("by www.HowToMechatronics.com", CENTER, 215); } else { myGLCD.setColor(255, 255, 255); myGLCD.print("Alarm set for: ", 68, 215); myGLCD.print(alarmString, 188, 215); } drawMusicPlayerButton(); drawAlarmButton(); drawHomeClock(); } void drawMusicPlayerScreen() { // Title myGLCD.setBackColor(0, 0, 0); // Sets the background color of the area where the text will be printed to black myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(BigFont); // Sets font to big myGLCD.print("MENU", 5, 5); // Prints the string on the screen myGLCD.setColor(255, 0, 0); // Sets color to red myGLCD.drawLine(0, 26, 319, 26); // Draws the red line myGLCD.setColor(255, 255, 255); // Sets color to white myGLCD.setFont(SmallFont); // Sets font to big myGLCD.print("by www.HowToMechatronics.com", CENTER, 215); // Prints the string on the screen // Volume Bar myGLCD.setColor(255, 255, 255); myGLCD.fillRect (78, 184, 78 + 150, 184 + 8); myGLCD.setColor(240, 196, 30); myGLCD.fillRect (78, 184, 78 + 75, 184 + 8); // Track Bar myGLCD.setColor(255, 255, 255); myGLCD.fillRect (48, 50, 48 + 224, 50 + 8); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.print("0:00", 8, 48); myGLCD.print("-0:00", 276, 48); drawPlayButton(); if (playStatus == '2') { drawPauseButton(); } drawPreviousButton(); drawNextButton(); drawVolumeDown(); drawVolumeUp(); } void drawMusicPlayerButton() { myGLCD.drawBitmap (55, 125, 65, 64, MusicPlayerButton); } void drawAlarmButton() { myGLCD.drawBitmap (195, 125, 65, 64, AlarmButton); } void drawPlayButton() { myGLCD.drawBitmap (118, 79, 83, 83, ButtonPlay); } void drawPauseButton() { myGLCD.drawBitmap (118, 79, 83, 83, ButtonPause); } void drawNextButton() { myGLCD.drawBitmap (227, 97, 50, 50, NextButton); } void drawPreviousButton() { myGLCD.drawBitmap (45, 97, 50, 50, PreviousButton); } void drawVolumeDown() { myGLCD.drawBitmap (50, 177, 16, 23, VolumeDown); } void drawVolumeUp() { myGLCD.drawBitmap (241, 175, 34, 28, VolumeUp); } // check for if Mp3 Player is stopped bool checkFor_mp3IsStopped() { if (mp3Serial.available() > 0) { if (mp3.getPlaybackStatus() == 0) { return true; } } else return false; } // Highlights the button when pressed void drawFrame(int x, int y, int r) { myGLCD.setColor(255, 0, 0); myGLCD.drawCircle (x, y, r); while (myTouch.dataAvailable()) myTouch.read(); myGLCD.setColor(0, 0, 0); myGLCD.drawCircle (x, y, r); } void drawRectFrame(int x1, int y1, int x2, int y2) { myGLCD.setColor(255, 0, 0); myGLCD.drawRoundRect (x1, y1, x2, y2); while (myTouch.dataAvailable()) myTouch.read(); myGLCD.setColor(255, 255, 255); myGLCD.drawRoundRect (x1, y1, x2, y2); } void drawUnderline(int x1, int y1, int x2, int y2) { myGLCD.setColor(255, 0, 0); myGLCD.drawLine (x1, y1, x2, y2); while (myTouch.dataAvailable()) myTouch.read(); myGLCD.setColor(0, 0, 0); myGLCD.drawLine (x1, y1, x2, y2); } // Sound bar void drawVolume(int x) { myGLCD.setColor(255, 255, 255); myGLCD.fillRect (78 + 5 * x, 184, 78 + 150, 184 + 8); myGLCD.setColor(240, 196, 30); myGLCD.fillRect (78, 184, 78 + 5 * x, 184 + 8); } // Clears the track bar void drawTrackBar() { myGLCD.setColor(255, 255, 255); myGLCD.fillRect (48, 50, 48 + 224, 50 + 8); } // Updates the track bar void trackPlayTime() { totalTime = mp3.getTotalTrackPlaybackTime(); delay(10); elapsedTime = mp3.getElapsedTrackPlaybackTime(); delay(10); minutes = (int)elapsedTime / 60; seconds = (((float)elapsedTime / 60) - minutes) * 60; playback = totalTime - elapsedTime; minutesR = (int)playback / 60; secondsR = (((float)playback / 60) - minutesR) * 60; myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.printNumI(minutes, 8, 48); myGLCD.print(":", 16, 48); myGLCD.printNumI((int)seconds, 24, 48, 2, '0'); myGLCD.print("-", 276, 48); myGLCD.printNumI(minutesR, 284, 48); myGLCD.print(":", 292, 48); myGLCD.printNumI((int)secondsR, 300, 48, 2, '0'); int trackBarX = map(elapsedTime, 0, totalTime, 0, 224); myGLCD.setColor(255, 0, 0); myGLCD.fillRect (48, 50, 48 + trackBarX, 50 + 8); if (totalTime == elapsedTime) { mp3.nextTrack(); delay(30); myGLCD.setColor(255, 255, 255); myGLCD.fillRect (48, 50, 48 + 224, 50 + 8); } } void printClock(int x, int y) { if ( currentClock != rtc.getTimeStr()) { myGLCD.print(rtc.getTimeStr(), x, y); currentClock = rtc.getTimeStr(); } } void drawColon() { myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (112, 65, 4); myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (112, 85, 4); myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (208, 65, 4); myGLCD.setColor(0, 255, 0); myGLCD.fillCircle (208, 85, 4); } void drawHomeClock() { timeString = rtc.getTimeStr(); currentHours = timeString.substring(0, 2); currentMinutes = timeString.substring(3, 5); currentSeconds = timeString.substring(6, 8); myGLCD.setFont(SevenSegNumFont); myGLCD.setColor(0, 255, 0); myGLCD.print(currentSeconds, 224, 50); myGLCD.print(currentMinutes, 128, 50); myGLCD.print(currentHours, 32, 50); drawColon(); }

Jangan ragu untuk bertanya di bagian komentar di bawah ini dan jangan lupa untuk memeriksa koleksi Proyek Arduino saya.

Proses manufaktur

  1. Jam POV Arduino: Buat Tampilan LED Persistensi Penglihatan
  2. Bangun Jam Master LED Kustom dengan Alarm – Terlihat dari Jarak 12 Meter
  3. Arduino Pemantau Suhu & Jam Real-Time dengan Layar TFT 3.2”
  4. Cara Memutar Audio dengan Arduino UNO dan DFPlayer Mini – Panduan Langkah demi Langkah
  5. Jam Digital TM1637 dengan Pengaturan Waktu dan Alarm – Prototaip Arduino Nano
  6. Pemutar MP3 Arduino Kendali Web: Pemutaran Audio Mudah Melalui Browser
  7. Tic Tac Toe Arduino dengan Matriks LED MAX7219 dan Kotak Kardus
  8. Buat Voltmeter DIY dengan Arduino dan Layar Nokia 5110 – Panduan Langkah demi Langkah
  9. Membuat Timer Hitung Mundur Arduino yang Andalan dengan Layar 7-Segmen SparkFun
  10. Membuat Jam Alarm Andalan dengan DS1302 RTC dan Arduino UNO