fbpixel
Étiquettes : , , ,
3.4
(9)

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, Créer ou modifier un fichier audio pour Arduino

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. Pour plus d’information sur la connexion du module carte SD, lisez cet article. 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() ou tmrpcm.disable() 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 10//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

Prochaines étapes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 3.4 / 5. Vote count: 9

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?