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:36]
laurent [Description]
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 26: Ligne 25:
  
 === circuit === === circuit ===
-{{:projets:lecteurs_audio_dfplayer:circuitlamartine_schema.png?direct&200 |}} +{{ :projets:lecteurs_audio_dfplayer:circuitlamartine_schema.png?direct&200 |}} 
-Le circuit pour deux lecteurs indépendants comprends donc deux DFplayers, un arduino nano qui centralise les contrôles et communique avec les DFplayersdeux boutons par lecteur pour choisir la piste à lire ainsi que 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 circuit pour deux lecteurs indépendants comprends donc
 +  * deux DFplayers : outre leur connection à l'arduinoil 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 ===== ===== Code =====
-Guide pas à pas pour la réalisation du projet.+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); 
 +}
  
-===== Photos ===== +void initialise(player DFplayer) { 
-Code pour afficher les images du projet : +  pinMode(DFplayer.button1pin, INPUT_PULLUP); 
-<code>{{gallery>?&crop&lightbox}}</code>+  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.1559903785.txt.gz · Dernière modification: 2019/06/07 12:36 de laurent