Başa dön

Arduino ile Alarmlı Çalar Saat ve MP3 Player Yapımı

Bu projede nasıl Arduino Dokunmatik Ekran MP3 Müzik Çalar ve Alarmlı Çalar Saat yapabileceğinizi göstereceğim. Aşağıdaki videoyu izleyebilir veya aşağıdaki yazılı eğitimi okuyabilirsiniz.

Genel Bakış


Ana ekranda büyük bir saat, tarih ve sıcaklık bilgilerinin yanı sıra Müzik Çalar ve Çalar Saat için iki düğme bulunur.

 

Müzik Çalar’a girersek, ekranın ortasındaki büyük “Oynat” düğmesine basarak müzik çalmaya başlayabiliriz. Hemen yanında, önceki veya sonraki şarkıyı çalmak için iki düğme daha var.

Ekranın alt kısmında bir ses düzeyi çubuğu ve ses seviyesini azaltmak ve artırmak için iki düğme bulunur. Sağ üst köşede bir saat var ve sol tarafta bizi ana ekrana geri getiren “Menü” düğmesi var.Diğer yandan, Çalar Saat’e girersek, saatleri ve dakikaları ayarlamak için iki düğmeyi kullanarak bir alarm ayarlayabiliriz.

Alarm etkinleştirildiğinde, yüksek bir ses seviyesinde çalmaya başlar ve “Kapat” düğmesine basana kadar çalmaya devam eder.

Nasıl Çalışır


Şimdi bu cihazın nasıl çalıştığına bakalım. Arduino Mega 2560 ve ekranı bağlamak için uygun bir shield ile birlikte 3.2 inç TFT dokunmatik ekran kullanır. Müzik çalmak için BY8001 MP3 Çalar modülünü ve çalar saat için DS3231 Gerçek Zamanlı Saat modülünü kullanacağız.

Bu Arduino Projesi için gerekli bileşenleri aşağıdaki bağlantılardan alabilirsiniz:

 

Devre Şemaları


İşte bu projenin devre şemaları:

TFT shield, arduino mega’nın pinlerini engellemektedir. Bu yüzden shield ve Arduino arasına yerleştirebileceğimiz özel yapım bir pin başlığı yapmamız gerekiyor.

Ayrıca, Arduino’ya güç vermek için, shield zaten tüm Arduino VCC pimlerini kullandığı için, shield üzerindeki 5V pime ek pin başlığı lehimlememiz gerektiğini unutmayın. Her şeyi birbirine bağladıktan sonra Arduino’yu programlamaya devam edebiliriz.

MP3 Çalar Modülü


MicroSD kartlarla çalışan ve MP3 ve WAV ses formatı dosyalarını destekleyen bir MP3 modülüdür. Modül yerleşik 3W güç amplifikatörüne sahiptir ve doğrudan tek bir 3W hoparlörü kullanabilir.

MP3 Çalar modülü, 5 giriş pini kullanılarak veya seri iletişim yoluyla bir mikro denetleyici kullanılarak düğme kontrollü hale getirilebilir.

Burada, modülün seri port pinlerinin 3.3V’de çalıştığını, böylece modülün RX pininin 1K direnç yoluyla Arduino TX pinine bağlanması gerektiğini unutmayın. Ayrıca kontrol modlarını seçmek için kullanılan 3 A, B ve C bağlantı noktalarına da dikkat edin. Bir mikrodenetleyici kullanarak modülü kontrol etmek için bu pedlerdeki 3 rezistörün çıkarılması gerekir. 6 ve 7 numaralı pimler, düşük güçlü hoparlörleri veya harici amplifikatör kullanılıyorsa 4 ve 5 numaralı pimleri doğrudan bağlamak için kullanılabilir. Arduino bölümüne gelince, en kolay yol GitHub’dan indirilebilecek BY8001 kütüphanesini kullanmaktır. Demo örneklerinden bazılarını açarsak nasıl çalıştığını görebiliriz. Bu nedenle, kurulum bölümünde modülü başlattıktan sonra, modülü kontrol etmek için ısmarlama işlevlerden herhangi birini kullanabiliriz.

Arduino Kaynak Kodu


Şimdi Arduino Dokunmatik Ekran MP3 Müzik Çalar ve Alarmlı Çalar Saat koduna bir göz atmaya hazırız. Kod biraz daha uzun olduğundan, daha iyi anlaşılması için, programın kaynak kodunu her bölüm için açıklama içeren bölümlere ekledim. Ve bu makalenin sonunda kaynak kodun tamamını paylaştım.

İlk önce TFT dokunmatik ekran kütüphanelerini , BY8001-16P MP3 Çalar ve DS3231 Gerçek Zamanlı Saat modülünü ve seri iletişim kütüphanesini eklememiz gerekiyor. Sonra uygun nesneleri oluşturmalı ve program için gerekli bazı değişkenleri tanımlamalıyız.

#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;

Burada bitmaplerin tanımlanmasını not edebiliriz. Programın bazı düğmeleri aslında TFT kütüphanesi ile birlikte gelen ImageConverter565 aracı kullanılarak bitmap’lere dönüştürülen görüntülerdir.

Bu nedenle, “.c” dosyalarının çizimi başlatırken yüklenebilmeleri için kod dosyasının dizinine eklenmesi gerekir. Buradan bu görüntüleri ve “.c” dosyalarını indirebilirsiniz.

Resimler ve Bitmap Dosyaları  Dosyaları İNDİR
 

Kurulum bölümünde nesneleri başlattıktan sonra, ana ekranın tüm grafiklerini çizen drawHomeScreen () özel işlevini çağırıyoruz. Ayrıca burada playStatus, currentTemp ve Date, birimin başlangıç ​​değeri vb. Gibi bazı değişkenlerin başlangıç ​​değerlerini ayarlıyoruz.

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);
}

Sıradaki döngü bölümü; CurrentPage değişkenini 0 olarak ayarladığımız için ilk if ifadesi true‘dur, bu da ana ekranda olduğumuzu gösteriyor. Burada bir sonraki if ifadesiyle saatte bir değişiklik olup olmadığını kontrol ediyoruz ve bu her saniye gerçekleşiyor. Şimdi, TFT kitaplıklarının sayılar dışında herhangi bir karakteri desteklemeyen yedi segment yazı tipini kullandığımız ve saati okumak için yalnızca getTimeStr () işleviyle gelen dizeden sayıları çıkarmamız gerekiyor.

Dolayısıyla substring () işlevini kullanarak saatleri, dakikaları ve saniyeleri ayrı değişkenlere alırız ve saniyede, dakikalarda veya saatlerde her değişiklik gerçekleştiğinde bunları yazdırırız.
Benzer şekilde, önceki duruma göre bir değişiklik olup olmadığını kontrol ediyoruz.

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;