Arduino阿杜伊诺音响机

我仍然收到许多发布Arduino Sound Machine项目的请求。我认为现在是为初学者准备入门书的合适时机。首先,保持低期望,因为我在这里没有什么新的东西可以分享。我只是想帮你构建一个基于Arduino的小型语音生成器项目 - 仅此而已。好的,让我们开始吧!

MP3-TF-16P 模块

我在这里介绍的项目是基于旧的,但仍然可用的串行MP3迷你模块MP3-TF-16P,这是一个廉价的MP3模块,具有放大的单声道扬声器输出。该模块可用作带有电池、扬声器和按钮的独立模块,或与 Arduino 或任何其他具有串行通信 (UART) 功能的微控制器结合使用。根据数据表,这种易于使用、稳定且可靠的模块提供了完美的集成MP3和WMV硬件解码。


最小的模块有一个SD卡端口,并从SD卡读取MP3文件。此外,该模块具有用于与微控制器通信的TX和RX引脚。它还具有DAC和USB功能。

Arduino阿杜伊诺音响机

主要特性(复制自数据表):




以下是围绕YX5200-24SS(内核)和8002(音频)IC构建的MP3-TF-16P模块的引脚。正如您在引脚排列数据中看到的那样,小MP3模块还在软件音量控制(DAC_R,DAC_L)下提供双声道(立体声)音频输出。

Arduino阿杜伊诺音响机

MP3-TF-16P 模块操作有三种模式 – 串行模式、AD 键模式和 I/O 模式。串行模式支持异步串行通信 – UART。



相关网站链接:


要与 Arduino 板配合使用,您只需要模块的 VCC、GND、SP+、SP-、TX 和 RX 引脚(其他引脚是可选的)。整个布线非常简单。该模块通过其标有TX和RX的引脚与Arduino Uno串行通信。在当前设置中,Uno 的引脚 D10 和 D11 充当软件串行库下的可编程 TX 和 RX。模块的扬声器输出引脚(SPK_1和SPK_2)被路由到小型扬声器。将一些MP3文件复制到SD卡并上传Arduino Sketch后,您可以看到模块上的红色LED在播放操作期间开始闪烁。


请注意,您只能将micro SD卡与模块一起使用(1GB足以快速入门)。大多数微型SD卡开箱即用,但设置可能无法读取以前使用的卡。如果是这样,请尝试使用micro SD卡适配器/读卡器和计算机格式化存储卡。该安装程序支持 FAT16 和 FAT32 文件系统。将micro SD卡插入计算机,转到“我的电脑”,右键单击SD卡,然后选择“格式化...”

Arduino阿杜伊诺音响机

接下来,在该Micro SD卡上创建一个名为MP3的新文件夹,并将mp3文件复制到那里。MP3文件应具有名称“0001名称.mp3”,“0002名称.mp3”等。请记住,您将MP3文件复制到micro SD卡中的顺序会影响播放顺序,即播放(1)功能在这里使用的Arduino Sketch中将播放复制到micro SD卡中的第一个MP3文件。



在下面,您可以看到我在上述硬件设置中使用的快速测试Arduino Sketch。坦率地说,这个Arduino Sketch是从Web获取的代码的改编版本。Arduino Sketch需要三个库 - “Arduino h”,“SoftwareSerial h”和“DFRobotDFPlayerMini.h”。


下载并安装第三个库后,只需复制并粘贴Arduino Sketch并上传(库下载链接https://github.com/DFRobot/DFRobotDFPlayerMini).



[code]
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h" // Requisite Library
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  Serial.println();
  Serial.println(F("MP3 TF 16P Module Test"));
  Serial.println(F("Initializing MP3 TF 16P >>> (May take a couple of seconds)"));
  if (!myDFPlayer.begin(mySoftwareSerial)) { 
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  Serial.println(F("MP3 TF 16P Module Active!"));
  myDFPlayer.volume(30);  //Set volume value to 30
  myDFPlayer.play(1);  //Play the first mp3
}
void loop()
{
  static unsigned long timer = millis();
  if (millis() - timer > 5000) {
    timer = millis();
   // myDFPlayer.next();  //Play next mp3 every 5 seconds
  }
  if (myDFPlayer.available()) {
    printDetail(myDFPlayer.readType(), myDFPlayer.read());
    /*Print the detail message from MP3 TF 16P Module to handle different errors and states*/
  }
}
void printDetail(uint8_t type, int value){
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}
[/code]

这是上述Arduino Sketch的Serial Monitor窗口:

Arduino阿杜伊诺音响机

这是我的快速测试设置:

Arduino阿杜伊诺音响机

老实说,我讨厌我的小聚酯薄膜扬声器的微弱单声道MP3输出。因此,我寻找一种简单的方法来获得立体声输出,并找到了一个很棒的技巧!我将MP3-TF-16P模块的输出引脚DAC_R和DAC_L连接到一个有点“黑客入侵”的PC多媒体扬声器的信号输入点L和R,通过100Ω电阻,而其公共信号输入点(G)连接到GND。然后,模块的现有单声道扬声器输出引脚(SPK_1和SPK_2)连接到2引脚螺丝端子,作为可选的单声道声音插座。尽管如此,修改后的设置仍然发挥出色!

Arduino阿杜伊诺音响机

这是我使用的PC多媒体扬声器系统。幸运的是,它有自己的USB电源。

Arduino阿杜伊诺音响机

下一步是什么?

最初的DFPlayer模块(来自DFRobotics)是一个很棒的小型MP3播放器模块,价格实惠。这款便宜的MP3-TF-16P模块的性能也相当不错。该MP3-TF-16P模块的原理图基本上是YX5200-24SS MP3播放器芯片供应商描述的官方参考设计的近似复制品(见下文),但它在BTL(桥接负载)模式下采用了伪造的AB类(不是D)8引脚8002音频放大器芯片。

Arduino阿杜伊诺音响机

随它去!您刚刚学习了如何将MP3-TF-16P迷你MP3播放器模块连接到Arduino Uno以及如何开始播放。显然,将基于micro SD卡的MP3播放器模块连接到Arduino打开了一个真正的数字音频的新世界。您可以编辑此基本想法,以便在许多需要自定义基于语音的报警器的项目中使用。


结语

这里介绍的Mini MP3播放器模块是一个小巧而便宜的模块,可直接输出一个扬声器。该模块还可以用作独立模块,并附有电池、扬声器和按钮。值得注意的是,这个超级可爱的模块有很多变体,包括假货。我观察到这些假货并不支持最新DFR库的所有功能(假货有效,但形式有限)。此外,如果您在播放过程中听到非常响亮的噪音,则需要将模块电源与Arduino电源分开和/或简单地将模块的Vcc降低到4.2VDC。这是DFPlayerMini备忘单的有用链接

https://reprage.com/post/dfplayer-mini-cheat-sheet

展开阅读全文

页面更新:2024-04-29

标签:可调   假货   扬声器   文件夹   模块   音响   模式   通信   功能   文件   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top