Pour rendre votre projet Arduino plus interactif, il peut être amusant d’émettre des sons en fonction de certaines actions. Dans ce tutoriel, nous allons voir comment jouer un fichier audio WAV enregistré sur une carte SD avec Arduino

Prérequis: Lire et écrire sur une carte SD

 

Matériel

  • Ordinateur
  • Arduino UNO x1
  • câble USB pour connecter l’Arduino à l’ordinateur x1
  • Shield ou module pour carte SD x1
  • Amplificateur Audio ou un module transistor x1
  • Haut-parleur x1

 

Schéma de câblage

Le schéma de câblage peut varier en fonction de ce que vous utiliser. Voici quelques remarques pour vous aider à adapter ce tuto à votre projet:

Dans notre exemple, La broche CS (Chip Select) du module de carte SD est connectée à la broche 10 pour communiquer avec la carte Arduino. Cette broche peut varier en fonction du shield utilisé et en fonction de l’endroit où vous connectez la broche.

Sur la carte Arduino UNO, seule la broche 9 est compatible avec la librairie TMRpcm.h. Référez vous à la documentation (5,6,11 ou 46 pour Mega, 9 pour Uno, Nano, etc.)

Selon le haut-parleur utilisé, il est préférable de choisir une source de tension externe pour alimenter le haut-parleur afin de ne pas endommager la carte Arduino.

 

Code pour jouer un fichier Audio

Placer le fichier WAV sur la carte SD puis insérez-là dans le module SD Card. Vous pouvez ensuite charger le code suivant dans la carte Arduino.

Pour jouer le fichier audio, nous allons utiliser la librairie TMRPcm.h qui permet de jouer des fichiers audio WAV de manière asynchrone à partir d’une carte SD. Dans cet exemple, le fichier audio est joué toutes les secondes.

Fonctions à connaître:

  • tmrpcm.play(char*) pour jouer le fichier
  • tmrpcm.setVolume(int) pour régler le volume du haut-parleur
  • tmrpcm.stopPlayback() pour arrêter la lecture
  • tmrpcm.isPlaying() pour savoir si le fichier est en train d’être jouer

Pour plus d’information, reportez-vous à la documentation.

//Libraries
#include <SD.h>
#include <TMRpcm.h>
//Constants
#define SD_ChipSelectPin 11//4
const int speakerPin=9;
char* file="bonjour.wav";
//Variables
unsigned long previousTime=0;
unsigned long interval=1000;
//Objects
TMRpcm tmrpcm;
/*******************************************************************
 *                                MAIN
 *******************************************************************/
void setup(){/* function setup */ 
 Serial.begin(9600);
 //Init sd shield
 if (!SD.begin(SD_ChipSelectPin)) {Serial.println("SD fail"); return; }
 //Init speaker
 tmrpcm.speakerPin = speakerPin;
 tmrpcm.setVolume(3);
}
void loop(){/* function loop */ 
 if(millis()-previousTime>interval){
   activateOutput();
   previousTime=millis();
 }
}
/*******************************************************************
 *                               FUNCTIONS
 *******************************************************************/
void activateOutput(){/* function activateOutput */     
    Serial.println("Play sound");
    tmrpcm.play(file); 
    while(tmrpcm.isPlaying()){}//wait until file is played
    //delay(1000);tmrpcm.stopPlayback(); // or wait 1sec and stop music
}

N.B.: dans la fonction activateOutput(), vous avez le choix de ne pas attendre que le fichier soit lu pour effectuer d’autres actions. Pour cela il vous suffit de commenter la ligne avec while.

 

Vous pouvez désormais jouer n’importe quel son avec votre carte Arduino.

 

Source

Librairie TMRpcm.h