Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


projets:lecteurs_audio_dfplayer:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
projets:lecteurs_audio_dfplayer:accueil [2019/06/07 12:26]
laurent [Hardware]
projets:lecteurs_audio_dfplayer:accueil [2019/07/10 10:34] (Version actuelle)
laurent [Code]
Ligne 1: Ligne 1:
 ====== Lecteurs audio DFplayer ====== ====== Lecteurs audio DFplayer ======
   * Porteur du projet : Réso-nance [[:user:laurent|laurent]]   * Porteur du projet : Réso-nance [[:user:laurent|laurent]]
-  * Date : 07/06/2019/ - ...+  * Date : 07/06/2019/
   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]
   * Description : Plusieurs lecteurs audio wav controllés par un arduino   * Description : Plusieurs lecteurs audio wav controllés par un arduino
-  * Fichiers sources : //mettre un lien// +  * Fichiers sources : {{ :projets:lecteurs_audio_dfplayer:audioplayer3.zip |}}
-  * Lien //mettre un lien//+
  
 {{tag>dflplayer, audio, wav, arduino, impédance}} {{tag>dflplayer, audio, wav, arduino, impédance}}
Ligne 11: Ligne 10:
 ===== Description ===== ===== Description =====
 Ce lecteur audio permet de lire deux fichiers wav simultanément sur deux sorties casques ou HP séparées. Le décodage et la lecture des fichiers depuis une carte micro SD est géré par un petit module tout-en-un : le DFplayer mini. Le code est modulaire et permet d'ajouter autant de lecteurs que nécessaire. L'interface entre le DFplayer et les boutons qui permettent de lancer la lecture est gérée par un arduino (nano pour deux lecteurs) Ce lecteur audio permet de lire deux fichiers wav simultanément sur deux sorties casques ou HP séparées. Le décodage et la lecture des fichiers depuis une carte micro SD est géré par un petit module tout-en-un : le DFplayer mini. Le code est modulaire et permet d'ajouter autant de lecteurs que nécessaire. L'interface entre le DFplayer et les boutons qui permettent de lancer la lecture est gérée par un arduino (nano pour deux lecteurs)
- 
 {{projets:lecteurs_audio_dfplayer:accueil:dfplayer.jpg?400|Lecteurs audio DFplayer}} {{projets:lecteurs_audio_dfplayer:accueil:dfplayer.jpg?400|Lecteurs audio DFplayer}}
 +
  
 ===== Hardware ===== ===== Hardware =====
Ligne 24: Ligne 23:
  
 **Contrôle du volume** Si l'on peut ajuster le volume de lecture depuis l'arduino via le port série, cela produit des petits disruptions audibles dans la lecture du fichier. Un potentiomètre double (stéréo) peut être utilisé directement entre les sorties analogique DAC et la prise casque pour un meilleur confort de lecture. **Contrôle du volume** Si l'on peut ajuster le volume de lecture depuis l'arduino via le port série, cela produit des petits disruptions audibles dans la lecture du fichier. Un potentiomètre double (stéréo) peut être utilisé directement entre les sorties analogique DAC et la prise casque pour un meilleur confort de lecture.
-===== Tutoriel ===== 
-Guide pas à pas pour la réalisation du projet. 
  
-===== Photos ===== +=== circuit ==
-Code pour afficher les images du projet : +{{ :projets:lecteurs_audio_dfplayer:circuitlamartine_schema.png?direct&200 |}} 
-<code>{{gallery>?&crop&lightbox}}</code>+Le circuit pour deux lecteurs indépendants comprends donc: 
 +  * deux DFplayers : outre leur connection à l'arduino, il est nécessaire de **connecter ensemble les deux pins de masse** par un câble le plus court possible pour éviter tout ajout de bruit numérique. 
 +  * un arduino nano qui centralise les contrôles et communique avec les DFplayers 
 +  * deux boutons par lecteur pour choisir la piste à lire 
 +  * deux résistances de 220R pour adapter l'impédance  du DFplayer à celle plus élevée du casque. Cette valeur à été choisie empiriquement pour obtenir le meilleur rapport qualité sonore / volume maximal possible. Une résistance trop élevée diminuera drastiquement le volume sonore tandis qu'une résistance trop faible laissera entendre du bruit lié à une intensité trop élevée drainée par le casque. 
 + 
 +Le potentiomètre qui ne figure pas sur le schéma est connecté comme suit : {{:projets:lecteurs_audio_dfplayer:potard.jpg?direct&200|}} 
 +===== Code ===== 
 +Le code utilisé par l'arduino utilise la librairie standard SoftwareSerial ainsi que la librairie [[https://github.com/DFRobot/DFRobotDFPlayerMini|DFRobotDFPlayerMini]] . Il est écrit de façon modulaire pour pouvoir aisément ajouter des lecteurs. Un //struct// représente chaque lecteur, les pins de ses boutons de lecture, une entrée analogique pour le volume ainsi qu'un pointeur vers l'instance de SoftwareSerial par qui il communique. 
 +Un //define// ligne 5 permet d'activer ou de désactiver le contrôle numérique du volume via un potentiomètre connecté sur une entrée analogique. 
 +En première lecture, la sortie DAC émet un buzz audible de quelques secondes, probablement le temps de charger un condensateur. Pour éviter ce défaut, un fichier est lu pendant 3 secondes à l'initialisation du lecteur. Cette astuce ne fonctionne que si un casque est connecté. 
 + 
 +<file c++>#include "Arduino.h" 
 +#include "SoftwareSerial.h" 
 +#include "DFRobotDFPlayerMini.h" 
 +#define MAXVOLUME 30 
 +#define MAX_INITIALISATION_ATTEMPTS 5 
 +//#define volumeControl 
 + 
 +SoftwareSerial softwareSerial1(10, 11); // RX, TX 
 +SoftwareSerial softwareSerial2(2, 3); // RX, TX 
 +DFRobotDFPlayerMini Player1; 
 +DFRobotDFPlayerMini Player2; 
 + 
 +struct player { 
 +  String name; 
 +  int button1pin; 
 +  int button2pin; 
 +  int potPin; 
 +  bool button1State; 
 +  bool button2State; 
 +  int volume; 
 +  SoftwareSerial* serial; 
 +  DFRobotDFPlayerMini &player; 
 +}; 
 + 
 +player player1 = {"player1", 4, 5, A0, HIGH, HIGH, 0, &softwareSerial1, Player1}; 
 +player player2 = {"player2", 6, 7, A1, HIGH, HIGH, 0, &softwareSerial2, Player2}
 + 
 + 
 +void printDetail(uint8_t type, int value); 
 + 
 +void setup() 
 +
 +  Serial.begin(115200); 
 +  pinMode(LED_BUILTIN, OUTPUT); 
 +  digitalWrite(LED_BUILTIN, LOW); 
 +  delay(300); 
 +  initialise(player1); 
 +  delay(2000); 
 +  initialise(player2); 
 +  delay(2000); 
 +  digitalWrite(LED_BUILTIN, HIGH); 
 +} 
 + 
 +void loop() { 
 +  DFRobotDFPlayerMini *test = &player1.player; 
 +  playerHandle(&player1); 
 +  playerHandle(&player2); 
 +  delay(100); 
 +
 + 
 +void initialise(player DFplayer) { 
 +  pinMode(DFplayer.button1pin, INPUT_PULLUP); 
 +  pinMode(DFplayer.button2pin, INPUT_PULLUP); 
 +  for (int i=0; iMAX_INITIALISATION_ATTEMPTS; i++) { 
 +    DFplayer.serial->begin(9600); 
 +    if (!DFplayer.player.begin(*DFplayer.serial)) {  //Use softwareSerial to communicate with mp3. 
 +      Serial.println("Unable to begin " + DFplayer.name); 
 +      Serial.println(F("1.Please recheck the connection!")); 
 +      Serial.println(F("2.Please insert the SD card!")); 
 +      } 
 +    else { 
 +       
 +      Serial.println(F("DFPlayer Mini online.")); 
 +      DFplayer.player.setTimeOut(500); //Set serial communication time out 500ms 
 +      //----Set volume---- 
 +      DFplayer.player.volume(MAXVOLUME);  //Set volume value (0~30). 
 +      //----Set different EQ---- 
 +        DFplayer.player.EQ(DFPLAYER_EQ_BASS); 
 +      //----Set device we use SD as default---- 
 +      DFplayer.player.outputDevice(DFPLAYER_DEVICE_SD); 
 +      //----Mp3 control---- 
 +      DFplayer.player.enableDAC();  //Enable On-chip DAC 
 +      delay(300); 
 +      DFplayer.player.play(1); //play for 3 seconds to eliminate the buzz which occurs the first time any file is played. 
 +      delay(3000); 
 +      DFplayer.player.stop(); 
 +      return; 
 +    } 
 +    //delay(2000); 
 +  } 
 +  Serial.println("Unable to initialise "+ DFplayer.name+ ", rebooting\n\n"); 
 +  delay(300); 
 +  asm volatile ("  jmp 0"); // reboot the arduino hoping this would help somehow 
 +}
  
  
 +void playerHandle (player *DFplayer) {
 +  bool button1 = digitalRead(DFplayer->button1pin);
 +  bool button2 = digitalRead(DFplayer->button2pin);
 +  int potValue = analogRead(DFplayer->potPin);
 +  DFRobotDFPlayerMini Player = DFplayer->player;
 +  if (button1 == LOW && DFplayer->button1State == HIGH) Player.play(1);
 +  if (button2 == LOW && DFplayer->button2State == HIGH) Player.play(2);
 +  #ifdef volumeControl
 +  int volume = map(potValue, 0, 1023, 0, MAXVOLUME);
 +  if (volume != DFplayer->volume) {Player.volume(volume); Serial.println(volume);}
 +  DFplayer->volume = volume;
 +  #endif
 +  DFplayer->button1State = button1;
 +  DFplayer->button2State = button2;
 +}
 +</file>
  
/home/resonancg/www/wiki/data/attic/projets/lecteurs_audio_dfplayer/accueil.1559903169.txt.gz · Dernière modification: 2019/06/07 12:26 de laurent