بستن منو
×

پخش صوت و آهنگ با آردوینو از روی مموری کارت

دسته بندی : آردوینو

چکیده :

پخش فایل صوتی با فرمت wav و mp3 با استفاده از آردوینو و خواندن فایل صوتی از مموری کارت یا همان sd card برای پخش فایل صوتی با آردوینو

امروز با یه پروژه خیلی فوق العاده در خدمت شما عزیزان هستیم و میخوایم با استفاده از آردوینو فایل صوتی را پخش کنی

پخش صوت و یا صدا با آردوینو

برای پخش صدا با آردوینو ما دو روش داریم که در ادامه این مقاله آن ها را بررسی میکنیم

ماژول MP3 player

ماژولی که در تصویر بالا میبینید یه ماژول DFPlayer هست که امکان پخش فایل های صوتی با فرمت mp3 را دارد که میتوانید به آن فلش و مموری یا وصل کنید و خروجی آن را به ماژول sim800 متصل کنید

مزایا :

  • پخش فایل های صوتی با فرمت mp3 و WMV
  • خواندن از مموری کارت و فلش
  • قابلیت کنترل کامل پخش از طریق کلیدها
  • قابلیت افزایش یا کاهش حجم صدا

معایب :

  • قیمت بالا تر نسبت به روش دوم
  • وابسته بودن محصول به ماژول خاص

ماژول مموری کارت

شما با استفاده از ماژول مموری کارت میتوانید فایل هایی با فرمت wav را از روی حافظه مموری کارت بخوانید و آن را با آردوینو پخش کنید علاوه بر آن میتوانید فایل صوتی را در حافظه مموری خود ذخیره کنید ، که این یک مزیت بسیار مهم برای این ماژول است

مزایا :

  • قیمت پایین تر
  • قابلیت ضبط صوت علاوه بر پخش
  • متنوع بودن ماژول های sd card

معایب

  • محدود بودن به فایل صوتی wav
  • عدم امکان کنترل روی صدا

شروع برنامه نویسی

ما از ماژول مموری کارت برای این کار استفاده کردیم برای دریافت پخش فایل صوتی که هم هزینه کمتری داشته باشد و امکان ناموجود شدن آن کمتر هست

کتابخانه TMRpcm

این کتابخانه به شما این امکان را میدهد که فایل های wav را از روی مموری کارت بخوانید و با آردوینو آن را پخش کنید

تولید فایل صوتی با فرمت wav

برای تبدیل فایل صوتی mp3 به wav من از وبسایت audio.online-convert.com استفاده کردم ، همچنین تنظیمات فایل صوتی را مثل تصویر زیر انجام دهید

کد پروژه

#include      // include Arduino SPI library
#include       // include Arduino SD library
#include "TMRpcm.h"  // include TMRpcm library

#define next     ۲
#define _pause   ۳

TMRpcm audio;
File root;

void setup(void) {
  Serial.begin(9600);
  pinMode(next,   INPUT_PULLUP);
  pinMode(_pause, INPUT_PULLUP);
  Serial.print("Initializing SD card...");

  if (!SD.begin()) {
    Serial.println("failed!");
    while(true);  // stay here.
  }

  Serial.println("OK!");
  audio.speakerPin = 9;  // set speaker output to pin 9
  root = SD.open("/");      // open SD card main root
  printDirectory(root, 0);  // print all files names and sizes
  audio.setVolume(5);    //   ۰ to 7. Set volume level
  audio.quality(1);      //  Set 1 for 2x oversampling Set 0 for normal
}


// main loop
void loop() {

  if ( !audio.isPlaying() ) {
    // no audio file is playing
    File entry =  root.openNextFile();  // open next file

    if (! entry) {
      // no more files
      root.rewindDirectory();  // go to start of the folder
      return;
    }

    uint8_t nameSize = String(entry.name()).length();  // get file name size
    String str1 = String(entry.name()).substring( nameSize - 4 );  // save the last 4 characters (file extension)

    if ( str1.equalsIgnoreCase(".wav") ) {
      // the opened file has '.wav' extension
      audio.play( entry.name() );      // play the audio file
      Serial.print("Playing file: ");
      Serial.println( entry.name() );
    }

    else {
      // not '.wav' format file
      entry.close();
      return;
    }


    while( debounce(next) ) ;  // wait until 'next' button is released

  }

  if ( !digitalRead(next) ) {
    // 'next' button is pressed
    audio.stopPlayback();  // stop playing
    return;
  }


  if ( !digitalRead(_pause) ) {
    // '_pause' button is pressed
    audio.pause();      // pauses/unpauses playback
    while( debounce(_pause) ) ;  // wait until '_pause' button is released
  }


}




// a small function for buttons debounce
bool debounce (int bt)
{
  byte count = 0;
  for(byte i = 0; i < 5; i++)
  {
    if ( !digitalRead(bt) )
      count++;
    delay(10);
  }

  if(count > 2)  return 1;
  else           return 0;
}




void printDirectory(File dir, int numTabs) {
  while (true) {
    File entry =  dir.openNextFile();
    if (! entry) {
      // no more files
      break;
    }

    for (uint8_t i = 0; i < numTabs; i++) {

      Serial.print('\t');

    }

    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println("/");
      printDirectory(entry, numTabs + 1);
    } else {
      // files have sizes, directories do not
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

در حال اعتبار سنجی لطفا منتظر بمانید ...