學習如何使用 Arduino 控制 DFMini Player MP3 模組。
本專案中用到的東西
- Arduino Nano R3 ×1
- 麵包板(通用)×1
- DFPlayer 迷你 MP3模組 ×1
- C&K 開關 PTS 645 系列開關 ×2
- 電阻10千歐×2
簡介
一些項目需要聲音再現來添加某種功能。在這些項目中,我們重點關注的是:例如,視障人士的無障礙、MP3 音樂播放器和機器人執行語音。
- 在所有這些系統中,我們需要一個 MP3 聲音再現裝置來連接到 Arduino。
- 因此,在這篇文章中我們將學習以下幾點:
- DFMini Player MP3的基本工作電路;
- 記憶卡上聲音檔案的組織和配置;
- 使用 Arduino 進行音樂控制。
什麼是DF Mini Player MP3模組
DFMini 播放器模組是一款低成本、低功耗的小型音樂播放器,其目的是重現儲存在記憶卡上的聲音。
基於此,模組可以透過獨立模式進行控制,即在該模式下,只有DFMini模組、供電電池、揚聲器、控制它的按鈕以及儲存歌曲的SD卡。
另一種控制方法是使用 Arduino 或其他控制設備。例如,Arduino 將透過串行通訊與 DFMini 播放器模組發送命令。 DFMini Player 模組如圖 1 所示。
圖1-DF Mini Player模組
為了控制它,使用基本的獨立電路非常重要。此電路如圖 2 所示。
圖2-DFMini播放模組獨立電路
上面電路中顯示的兩個按鈕用於更改音樂曲目和控制聲音的音量。
連接到引腳 IO1 的按鈕用於轉到上一曲目並降低音量。
快速觸摸,系統將返回上一首歌曲,但是,如果按下按鈕超過 1 秒,系統將降低歌曲的音量。
連接到引腳 IO2 的按鈕用於轉到下一曲目並增加音量。
快速觸摸,系統將前進到下一首歌曲,但是,如果按下按鈕超過 1 秒,系統將增加歌曲的音量。
在這種獨立方法中,歌曲必須保存在記憶卡上,如圖3所示。
圖3-SD卡中的歌曲文件
這樣,每次按下按鈕時,系統都會按升序或降序播放每首歌曲。
然而,當使用Arduino或其他控制設備時,我們必須修改SD卡上音樂檔案的組織方式。
現在,我將介紹如何使用 Arduino透過串列通訊來控制 DFMini Player。
使用 Arduino 控制 DFMini 播放器
在這一步驟中,音量控制、範圍控制、均衡命令和其他功能將由Arduino發送。
Arduino 必須透過串列埠與 DFMini Player 進行通訊並發送控制命令。控制電路的電子原理圖如圖4所示。
圖4-Arduino電子原理圖
首先,我們必須組裝下圖所示的電路。
組裝好該電路後,您必須將歌曲新增到記憶卡上。在此步驟中,歌曲應重新命名為例如01、02、03。
您不能保留歌曲的名稱,因為當 Arduino 發送命令來執行特定曲目時會出現問題。因此,您必須如下所示進行配置。
圖5-以數字命名的歌曲
命名檔案後,在 Arduino 上編寫以下程式碼。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" //Inicia a serial por software nos pinos 10 e 11 SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; char command; int pausa = 0; void setup() { //Comunicacao serial com o modulo mySoftwareSerial.begin(9600); //Inicializa a serial do Arduino Serial.begin(115200); //Verifica se o modulo esta respondendo e se o //cartao SD foi encontrado Serial.println(); Serial.println(F("DFRobot DFPlayer Mini")); Serial.println(F("Initializing DFPlayer module ... Wait!")); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println(F("Not initialized:")); Serial.println(F("1. Check the DFPlayer Mini connections")); Serial.println(F("2. Insert an SD card")); while (true); } Serial.println(); Serial.println(F("DFPlayer Mini module initialized!")); //Definicoes iniciais myDFPlayer.setTimeOut(500); //Timeout serial 500ms myDFPlayer.volume(5); //Volume 5 myDFPlayer.EQ(0); //Equalizacao normal menu_opcoes(); } void loop() { //Waits for data entry via serial while (Serial.available() > 0) { command = Serial.read(); if ((command >= '1') && (command <= '9')) { Serial.print("Music reproduction"); Serial.println(command); command = command - 48; myDFPlayer.play(command); menu_opcoes(); } //Reproduction //Stop if (command == 's') { myDFPlayer.stop(); Serial.println("Music Stopped!"); menu_opcoes(); } //Pausa/Continua a musica if (command == 'p') { pausa = !pausa; if (pausa == 0) { Serial.println("Continue..."); myDFPlayer.start(); } if (pausa == 1) { Serial.println("Music Paused!"); myDFPlayer.pause(); } menu_opcoes(); } //Increases volume if (command == '+') { myDFPlayer.volumeUp(); Serial.print("Current volume:"); Serial.println(myDFPlayer.readVolume()); menu_opcoes(); } if (command == '<') { myDFPlayer.previous(); Serial.println("Previous:"); Serial.print("Current track:"); Serial.println(myDFPlayer.readCurrentFileNumber()-1); menu_opcoes(); } if (command == '>') { myDFPlayer.next(); Serial.println("next:"); Serial.print("Current track:"); Serial.println(myDFPlayer.readCurrentFileNumber()+1); menu_opcoes(); } //Decreases volume if (command == '-') { myDFPlayer.volumeDown(); Serial.print("Current Volume:"); Serial.println(myDFPlayer.readVolume()); menu_opcoes(); } } } void menu_opcoes() { Serial.println(); Serial.println(F("==================================================================================================================================")); Serial.println(F("Commands:")); Serial.println(F(" [1-3] To select the MP3 file")); Serial.println(F(" [s] stopping reproduction")); Serial.println(F(" [p] pause/continue music")); Serial.println(F(" [+ or -] increases or decreases the volume")); Serial.println(F(" [< or >] forwards or backwards the track")); Serial.println(); Serial.println(F("=================================================================================================================================")); } |