Edité le 11.09.2016

Jouer un fichier audio .wav avec l’Arduino

Pour jouer un fichier audio sur l’Arduino je pensais à tors qu’un shield MP3 était nécéssaire.
En fait, un simple lecteur de carte SD ou Micro SD peut faire l’affaire pour jouer un fichier WAV . La qualité n’est pas au rendez-vous comparé au MP3 mais ce « système D » vaut la peine d’être parcouru.

Branchements

  1. MOSI – pin 11
  2. MISO – pin 12
  3. CLK – pin 13
  4. CS – Dépend du module (pin 10)
  5. VCC – 5V
  6. GND – GND

Dans un premier temps connectez le lecteur de carte SD à l’arduino

carte_SD_arduino

Connectez ensuite votre speaker à la pin 9 de l’Arduino et au GND.

Niveau branchement c’est terminé on va maintenant convertir nos fichiers .WAV pour qu’ils soient lisible par l’Arduino.

 

schema_wav_2

 

Convertir les fichiers WAV

Tout d’abord j’ai téléchargé quelques effets audio sur le site: Soundbibble.com
Ensuite téléchargé et installé le logiciel: R8Brain

Une fois le logiciel installé il faut convertir les fichiers en 32Mhz, 8 bits. Il semblerait néanmoins que 16Mhz soit préconisé.

r8brain

Dans la vidéo ci-dessous je converti en 32Mhz. Essayez le aussi en 16Mhz.

Pour terminer la partie SD, j’ai déposé ce fichier son sur ma carte SD dans un dossier nommé « sounds ». Et replacé la carte SD dans le module connecté à l’Arduino.

Le code Arduino

Télécharger la librairie TMRpcm

Copiez et téléversez le code dans l’Arduino

//www.idehack.com
#include <SPI.h>
#include <SD.h> // Inclure la librairie SD
#define SDPIN 10 // Chip Select du lecteur SD
#include <TMRpcm.h> 

File myFile;
TMRpcm tmrpcm;

char caractere; // Définition du caractère pour la gestion dans le moniteur série

void setup(){
  Serial.begin(9600); // début de la communication série
  tmrpcm.speakerPin = 9; // Speaker sur la pin 9
  tmrpcm.setVolume(4); // gestion du volume de 0 à 7
  tmrpcm.quality(1); // qualitée audio 0 ou 1
  
  // Initialisation de la carte SD
  if (!SD.begin(SDPIN)) { 
    Serial.println("initialization failed!"); //  S'il y a un soucis "initialization failed!" s'affichera au moniteur
    return;
  }
  
  
  Serial.println("tapez un caractere -> a");
}

void loop(){
    if(Serial.available()){
      caractere = Serial.read();
      if(caractere == 'a'){ // Si le caractère recu dans le moniteur série est "a"
      Serial.println("Lecture"); // Ecrit dans le moniteur série 
        tmrpcm.play("sounds/son8bit.wav"); // Joue le son "son8bit.wav"
      }
    }
}

void playSound(char *file){
 tmrpcm.play(file);
 return; 
}

 

Une fois le code téléversé sur l’Arduino, lancez le moniteur série et envoyez le caractère « a ».

Résultat (audio)

Source: Instructable | Youtube | Blog