Fabriquer une boite à sons (avec un Arduino et un DFPlayer)
Nous avons vu, dans un précédent dossier, comment utiliser le lecteur audio "DFPlayer" pour réaliser une boite à sons très simplement. Aujourd'hui, je vous propose d'y brancher un microcontrôleur "Arduino" pour le rendre plus polyvalent et "intelligent". Dans un autre dossier, je vous ai aussi décris comment réaliser une boite à sons avec un Raspberry Pi (multipiste possible). Comme toujours, si vous avez la moindre question, allez sur le forum dédié au bricolage électronique ! J'y répondrais personnellement, avec l'aide de la communauté.
Si vous n'êtes pas bricoleur, je vous propose d'acheter l'ensemble, déjà réalisé et soudé, sur ma boutique : le module "Ambi'son".
Voici l'illustration de ce qu'il est possible de faire avec un DFPlayer + Arduino. Mon fameux "Quiz'O'Phone, spécial Noël" :
Mais aussi :
- Une boite à sons.
- Un Quiz'O'Phone mono-question.
- Un ancien téléphone d'hôtel poétique.
- Un autre téléphone ancien.
- Etc.
VOTRE ATTENTION !
Les DF Player Mini existent en diverses versions, par divers fabricants, chez divers fournisseurs. Je ne sais pas quel DFPlayer vous avez, ou aurez, et ce qu'il sera possible d'en faire.
Plus d'informations sur mon dossier relatif au "DF Player Mini".
Présentation
Le DFPlayer un petit composant qui lit les fichiers audio contenus dans sa carte micro-SD. Il dispose d'une sortie "Line" stéréo et même d'une sortie amplifiés 3W (mono). Il est très simple d'utilisation, mais il est assez bête, tout seul. C'est l'Arduino qui va se charger de lui donner des ordres.
L'Arduino est donc un "microcontrôleur", c'est à dire un petit ordinateur. Il ne dispose pas d'OS (contrairement aux Raspberry Pi), mais il est capable de faire tourner un petit programme en language C++. C'est lui qui va contrôler notre DFPlayer pour le rendre autonome.
A terme, comme l'Arduino dispose de nombreuses entrées et sortie, il serait possible de faire ce que vous souhaitez sur la base de ce dossier :
- Un vieux téléphone qui sonne et délivre un fichier aléatoire à celui qui écoute.
- Les fans de modélisme ferroviaire pourraient installer un capteur RFID pour différencier leurs différents trains avant d'entrer en gare et ainsi diffuser une annonce spécifique.
- Etc.
Voici une courte vidéo d'illustration, avant de vous détailler, étape par étape, comment réaliser la même installation :
Étape par étape
1. Préparation
Prenez un Arduino. La version "Nano" est suffisamment puissante pour notre utilisation peu gourmande. Pas la peine d'en acheter un de marque "Arduino" à 20€, un clone chinois à 3€ fonctionne tout aussi bien. C'est ce que j'utilise... Sachez qu'en tous les cas, l'un comme l'autre est fabriqué en Chine...
Il vous faut aussi un DFPlayer, une plaque de prototypage, quelques fils, une résistance de 1 kOhm (1 000 Ohms), ainsi qu'une prise jack et un casque, ou bien un HP de 3 Watts sous 4 Ohms. Il vous faudra un ordinateur pour alimenter l'Arduino, et le programmer.
Il faut aussi mettre une carte micro SD dans le DFPlayer, contenant plusieurs fichiers MP3, WAV ou WMA. De préférence des fichiers courts, téléchargés sur LaSonotheque.org, pour rapidement voir le résultat de ce tuto.
2. Branchement
Nous allons disposer le jack (ou HP), l'Arduino et le DFPlayer sur la plaque de prototypage de manière à ce que les pattes soient toutes indépendantes. Puis on suit ce schéma de câblage.
Sur ce schéma, on alimente le DFplayer avec le 5V et le GND de l'Arduino. On relie les TX, RX et Busy du DFPlayer au pattes D13, D12 et D11 de l'Arduino et on branche une prise jack ou un haut parleur 3 Watts / 4 Ohms en sortie du DF Player. Ne pas oublier la résistance 1 kOhms.
En gros, ça doit ressembler ça, avec une alimentation via USB, et un HP de 3 W :
Il n'est pas obligatoire de relier la sortie Busy du DFPlayer, peu de tutos l'indiquent. Mais je la trouve personnellement indispensable dans de nombreuses utilisations, alors je vous conseille de l'utiliser aussi.
L'alimentation électrique de l'ensemble sera fournie par le câble USB que vous allez brancher de l'ordinateur à l'Arduino, pour le programmer. Par la suite, vous pouvez mettre de 5 volts à la patte "5V" ou entre 7 et 12 volts à la patte "Vin" de l'Arduino
3. Programmation
L'idée est d'écrire un programme en C++ depuis l'ordinateur, puis de le transmettre à l'Arduino.
Téléchargez et installez sur votre ordinateur l'application "Arduino IDE" (pour Mac, Linux et Windows). Un IDE ou EDI en français, est un "Environnement de Développement Intégré" qui rassemble un tas d'outils indispensables à la programmation de l'Arduino.
Une fois dans IDE, allez dans "gérer les bibliothèque" et installez "DFRobotDFPlayerMini.h". La version 1.0.3 est la celle qui fonctionne le mieux à mes yeux.
En suite, je vous propose de copier/coller l'intégralité de ce code. Ou de cliquez droit sur ce lien pour télécharger directement le fichier :
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(12,13);
DFRobotDFPlayerMini myDFPlayer;
void setup() {
delay(3000);
mySoftwareSerial.begin(9600);
Serial.begin(9600);
pinMode(11,INPUT_PULLUP);
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Pb communication : verifier SDcard"));
while(true);
}
myDFPlayer.setTimeOut(500);
myDFPlayer.volume(30);
myDFPlayer.play(1);
}
void loop() {
if(digitalRead(11)==1) {
lecture();
}
}
void lecture() {
myDFPlayer.next();
delay(500);
}
Une fois le programme collé, il faut cliquer en haut, sur la flèche qui va vers la droite, pour "Téléverser". Quelques secondes après, le programme est sur l'Arduino.
Celui-ci va lancer le fichier suivant, à chaque fois que le précédent est finit.
Pour expliquer simplement ce code :
- On importe les bibliothèques "SoftwareSerial" et "DFRobotDFPlayerMini"
- On connecte le DFPlayer aux entrées/sorties digitales 12 et 13
- On appel le DFPlayer "myDFPlayer"
- On va définir la fonction "setup()"
- Le délai de 3000 millisecondes permet au DFPlayer d'être bien allumé avant de lancer le reste du code.
- On définit les deux serial sur 9600
- On définit la patte 11 comme entrée permettant de savoir sur le DFPlayer est en lecture
- On test la micro SD contenue dans le DFPlayer et on affiche un message si problème
- On définit le TimeOut à 500
- On met le volume du lecteur à 30, c'est à dire 100%
- On met le premier fichier en lecture
- On va définir la fonction "loop()"
- On regarde si le DFPlayer est déjà en lecture
- Si non, on lance lecture()
- On va définir la fonction "lecture()"
- On passe au fichier suivant sur la micro SD
- On fait une petite pause de 500 millisecondes dans le script pour être sûr que le DF démarre bien.
4. Aller plus loin (facultatif)
Il est possible de faire appel à de nombreuses autres fonctions :
- myDFPlayer.next(); // Jouer le fichier suivant
- myDFPlayer.previous(); // Jouer le précédent fichier
- myDFPlayer.play(2); // Jouer le deuxième fichier
- myDFPlayer.loop(2); // Jouer le deuxième fichier en boucle
- myDFPlayer.pause(); // Mettre en pause la lecture
- myDFPlayer.start(); // Reprendre la lecture du fichier en pause
- myDFPlayer.readFileCounts(); // Compter le nombre de sons à la racine de la SD
- myDFPlayer.playFolder(15, 4); // Jouer le fichier N°4 du dossier N°15. Le nom du dossier allant de 1 à 99 et le nom du fichier de 1 à 255
- myDFPlayer.enableLoopAll(); // Lire en boucle tout les fichiers
- myDFPlayer.disableLoopAll(); // Arrêter de lire en boucle tout les fichiers.
- myDFPlayer.randomAll(); // Jouer tous les fichiers au hasard
- myDFPlayer.enableLoop(); // Jouer en boucle
- myDFPlayer.disableLoop(); // Arrêter la boucle
- Etc.
Questions, Problèmes, Résolutions & Idées
- Fichier(s) non lisible(s) ? Formatez votre microSD en "Fat16", "Fat32" voir "exFAT".
- Ne lit que les fichiers impaires ? Parfois, la fonction "readFileCounts()" double le comptage des fichiers dans la carte SD car Windows ou MacOS ont tendance à ajouter des fichiers invisibles, ce qui fausse le comptage. Il faut donc les supprimer grâce au terminal. Sur MacOS : Une fois les fichiers sur votre carte SD, Ouvrez le "Terminal" puis écrivez "ls /Volumes" (entrer) qui va vous donner le nom de votre SD, Écrivez "dot_clean /Volumes/MY_SD_CARD" (entrer), Puis éjectez la carte, Le problème doit être résolu.
- Un "clic" entre les fichiers ? Un problème rencontré une fois lors d'une conversion MP3/WAV. Restez en MP3.
- Un problème de reconnaissance du Nano par IDE ? Utilisez la version 1.0.3 de la librairie "DFRobotDFPlayerMini.h", et essayez les boards "ATmega328P" avec ou sans "(Old bootloader)".
- Nommez vos fichiers avec le format numérique "0001" (à la racine) ou "001" (dans un dossier), suivi de l'extension. Bien qu'un fichier nommé normalement fonctionne souvent, ce n'est pas toujours le cas.
- Bien laisser le temps au DFPlayer de démarrer avec les 3000 millisecondes au début du setup(). Sans quoi, le programme va tenter de réaliser des choses impossibles et ne va pas fonctionner.
- Nommer la SD avec un nom sans espaces ni caractères spéciaux.
- Le module chauffe ? Oui, selon mes mesures le Nano atteint 40 à 60°C au niveau des LED (le composant au dessous du circuit chauffe en régulant les tentions). Pas de panique, le Nano peut chauffer jusqu'à 70°C sans crainte. Si ça vous inquiète, vous pouvez coller un dissipateur thermique.
- Si vous rencontrez des problèmes et/ou trouvez des solutions non listées, merci de poster sur le forum dédié au bricolage électronique ! J'y répondrais personnellement, avec l'aide de la communauté. !
Conclusion
La réalisation d'un tel bricolage n'est pas difficile. Il suffit de suivre mes indications avec précision. Cependant, si vous avez le moindre problème, comme toujours : n'hésitez pas à poser vos questions sur le forum dédié au bricolage électronique ! J'y répondrais personnellement, avec l'aide de la communauté.
♥ - Joseph SARDIN - Fondateur et Sonothécaire de BigSoundBank.com et LaSonotheque.org - Contact