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