[TUTORIEL] Lecteur MP3 télécommandé

Le forum de support du shield Tune, décodeurs MP3 DiY pour Arduino

[TUTORIEL] Lecteur MP3 télécommandé

Message non lude Laetitia » Ven 25 Juil 2014 19:03

Bonjour,

Aujourd'hui nous allons apprendre à télécommander un lecteur MP3 à base d'Arduino !
Pour ce faire nous utiliserons le shield Tune : il faut souder un récepteur infrarouge à l'emplacement prévu à cet effet (relié à la pin D3), vous pouvez en trouver dans notre kit IR en boutique. Nous utiliserons également la télécommande IR de notre catalogue pour piloter le lecteur.

Note : la LED IR contenue dans le kit ci-dessus peut également émuler la télécommande, mais il vous faudra coder la partie "émission" avec un autre Arduino !

- MATÉRIEL -

- Arduino Uno (x1)
- Tune - MP3 decoder shield (x1) équipé d'un récepteur IR TSOP 32138
- Télécommande IR (x1)

- MONTAGE -

Pas de schéma pour cette fois ! Il suffit de mettre le shield Tune en mezzanine sur l'Arduino et d'y souder le récepteur IR :geek:
Dans cet exemple, nous utilisons 10 fichiers audio, nommés "track000.mp3" à "track009.mp3", et un dernier nommé "Chanson.mp3". Libre à vous de modifier les titres des pistes, pensez à modifier votre code en fonction !

- EXPLICATIONS -

Nous utiliserons la librairie IRremote, compatible avec toutes les télécommandes NEC, Philips, Sony... Elle est disponible ici, de pas hésiter à parcourir la documentation pour bien comprendre son fonctionnement.

La télécommande infrarouge émet une séquence spécifique pour chaque bouton. Ces codes sont répertoriés sur la fiche produit de la télécommande.

Dans le sketch suivant, nous allons faire correspondre à chacune de ces séquences (ou presque) une action prédéfinie :
- le bouton MENU servira à faire une vérification des registres du codec, affichée sur moniteur série
- le bouton TEST servira à tester la sortie audio grâce au générateur de sinusoïdes
- le bouton + permettra de monter le volume
- le bouton - permettra de baisser le volume
- les boutons 0 à 9 déclencheront la lecture des pistes portant le numéro correspondant
- le bouton PLAY déclenchera la lecture de la piste "Chanson.mp3"

- CODE -

Code: Tout sélectionner
/*
 * Lecteur MP3 télécommandé
 * Mise en situation du shield Tune
 * Copyleft Snootlab 2014
 */

// Inclusion de la librairie IR : https://github.com/shirriff/Arduino-IRremote
#include <IRremote.h>

// Inclusion de la librairie Tune
#include <SdFat.h>
#include <Tune.h>

// TSOP 32138 > D3
#define RECV_PIN 3

// Définition des codes de la télécommande
#define POWER 0x00FFA25D
#define MENU  0x00FFE21D
#define TEST  0x00FF22DD
#define PLUS  0x00FF02FD
#define BACK  0x00FFC23D
#define PREV  0x00FFE01F
#define PLAY  0x00FFA857
#define NEXT  0x00FF906F
#define ZERO  0x00FF6897
#define LESS  0x00FF9867
#define C     0x00FFB04F
#define ONE   0x00FF30CF
#define TWO   0x00FF18E7
#define THREE 0x00FF7A85
#define FOUR  0x00FF10EF
#define FIVE  0x00FF38C7
#define SIX   0x00FF5AA5
#define SEVEN 0x00FF42BD
#define EIGHT 0x00FF4AB5
#define NINE  0x00FF52AD

// Initialisation de la réception IR
IRrecv irrecv(RECV_PIN);

// Variable pour stocker les commandes reçues
decode_results results;

// Déclaration de l'objet Tune
Tune player;

// Variable pour stocker la valeur du volume
int volume = 200;

void setup()
{
  // Début de la réception IR
  irrecv.enableIRIn();
 
  // Initialisation du shield
  player.begin();
  // Paramétrage du volume
  player.setVolume(volume);
}

void loop()
{
  // Si l'on reçoit une commande IR
  if (irrecv.decode(&results))
  {
    // On effectue l'action correspondante
    switch (results.value)
    {
      // Vérification des registres (affichage sur moniteur série)
      case MENU : player.checkRegisters(); break;
      // Test : générateur de sinusoïdes @ 1 KHz
      case TEST : player.sineTest(STD); break;
      // Monter le volume
      case PLUS : volume += 5; player.setVolume(volume); break;
      // Baisser le volume
      case LESS : volume -= 5; player.setVolume(volume); break;
      // Jouer la piste 0
      case ZERO : player.playTrack(0); break;
      // Jouer la piste 1
      case ONE : player.playTrack(1); break;
      // ...etc
      case TWO : player.playTrack(2); break;
      case THREE : player.playTrack(3); break;
      case FOUR : player.playTrack(4); break;
      case FIVE : player.playTrack(5); break;
      case SIX : player.playTrack(6); break;
      case SEVEN : player.playTrack(7); break;
      case EIGHT : player.playTrack(8); break;
      case NINE : player.playTrack(9); break;
      // Jouer une autre piste
      case PLAY : player.play("Chanson.mp3");
      // Si commande inconnue, attendre la prochaine commande
      default : break;
    }
    irrecv.resume();
  }
}

- COMMENTAIRES -

Je vous invite vivement à aller voir la datasheet du codec pour comprendre l'organisation de ses registres si vous voulez aller plus loin, mais ceux qui vous intéresseront probablement le plus sont SCI_BASS (Reg 2) et SCI_VOL (Reg 11).
Ces deux registres sont celui qui stocke l'état de l'amplification des basses et aigus ; et celui qui stocke l'état du volume. En utilisant la fonction checkRegisters(), vous pouvez vérifier que la modification du volume ou des basses a bien été prise en compte !

C'est tout pour cette fois ! J'espère que ce tutoriel vous aura plu, et bonne bidouille en attendant le prochain !
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Retourner vers Tune

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron