Mise en situation:
Vous êtes de retour à la maison après une longue journée de travail. La maison est malheureusement déserte, mais quel plaisir d'entendre votre salueur élecronique qui, ayant détecté votre arrivée, vous lance un tonitruant "Bonjour, ça va?".
Matériel et connexions:
Vous avez besoin d'un Arduino (j'ai utilisé un UNO), d'un module mp3 VS1053, d'un module lecteur de carte SD, d'une carte SD, d'un détecteur de mouvement à infrarouge (PIR) et d'un système de haut-parleurs multimédias (du genre qu'on branche à un ordinateur pour avoir du son) .
Je vous réfère à ma rubrique précédente pour une description détaillée de la façon de connecter votre module VS1053 et votre lecteur de carte SD. Si vous êtes l'heureux propriétaire du shield mp3 de Sparkfun (qui est déjà muni d'un VS1053 et d'un lecteur de carte SD), c'est encore plus simple: vous l'insérez sur l'Arduino et vous venez d'économiser au moins 15 minutes.
Le détecteur de mouvement à infrarouge PIR est muni de trois connecteurs: GND, OUT et 5 V. Branchez le "OUT" à l'entrée 3 de l'Arduino. Je vous laisse deviner où vous branchez GND et 5V...
Préparation des fichiers mp3:
Pour plus de variété, nous allons préparer plusieurs fichiers mp3, chacun contenant une salutation différente. Vous pouvez créer ces fichiers vous-même (j'ai utilisé le logiciel gratuit Audacity): dans un fichier vous pouvez dire "Bonjour!", dans l'autre vous dites "Te voilà enfin! Tu y as mis du temps!", et dans un autre vous dites "Salut, je commençais à m'ennuyer...". Une autre option possible consiste à télécharger des fichiers mp3 contenant des salutations dans différentes langues étrangères.
Attention: pour que le sketch que je vais bientôt vous présenter fonctionne correctement, vous devez baptiser vos fichier "Track001.mp3", "Track002.mp3", etc. Et vous les placez dans votre carte SD.
Le sketch:
Mon sketch nécessite l'installation de la librairie SFEMP3Shield. Chaque fois que le détecteur de mouvement...détecte un mouvement, l'entrée 3 de l'Arduino devient haute pendant quelques secondes. Le sketch vérifie alors à quand remonte la plus récente détection de mouvement. S'il s'agit du premier mouvement détecté depuis plus de 15 minutes (temps que vous pouvez évidemment modifier selon vos préférences), un fichier mp3 choisi au hasard sera joué.
Votre salueur électronique vous saluera donc chaque fois que vous serez de retour dans la pièce après y avoir été absent pendant plusieurs minutes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/***********************PIR_MP3*************************** | |
* Ce sketch joue au hasard un mp3 stocké sur une carte SD | |
* lorsque le capteur PIR détecte une présence. | |
* | |
* Utilisation intensive de la libraire SFEMP3Shield par | |
* Bill Porter et Michael P. Flaga. | |
* | |
* La carte SD doit contenir des fichiers mp3 nommés "Track001.mp3", "Track002.mp3", etc. | |
* | |
* Connexions: | |
* | |
* Module de carte SD: | |
* SD GND // Arduino GND | |
* SD +5 // Arduino 5 V | |
* SD CS // Conversion 5 V à 3,3 V // Arduino 9 | |
* SD MOSI // Conversion 5V à 3,3 V // Arduino 11 | |
* SD MISO // Arduino 12 | |
* SD SCK // Conversion 5 V à 3,3 V // Arduino 13 | |
* | |
* Module VS1053: | |
* VS1053 5V // Arduino 5 V | |
* VS1053 DGND // Arduino GND | |
* VS1053 DREQ // Arduino 2 | |
* VS1053 XCS // Conversion 5 V à 3,3 V // Arduino 6 | |
* VS1053 XDCS // Conversion 5 V à 3,3 V // Arduino 7 | |
* VS1053 XRST // Conversion 5 V à 3,3 V // Arduino 8 | |
* VS1053 MOSI // Conversion 5 V à 3,3 V // Arduino 11 | |
* VS 1053 MISO // Arduino 12 | |
* VS1053 SCK // Conversion 5 V à 3,3 V // Arduino 13 | |
* | |
* Capteur PIR branché à la pin 3. | |
* | |
* http://electroniqueamateur.blogspot.com/2013/07/la-machine-dire-bonjour.html | |
* | |
***********************************************************/ | |
// les librairies necessaires | |
#include <SPI.h> | |
#include <SdFat.h> | |
#include <SdFatUtil.h> | |
#include <SFEMP3Shield.h> | |
SdFat sd; | |
SFEMP3Shield MP3player; | |
#define Infrarouge 3 // capteur infrarouge branché pin 3 | |
unsigned long precedent=millis(); // quand le fichier a été jouée la dernière fois | |
unsigned long delai = 15 * 60000; //délai d'attente avant de jouer à nouveau la mélodie, en millisecondes. | |
void setup() { | |
//Initialisation de la carte SD | |
if(!sd.begin(SD_SEL, SPI_HALF_SPEED)) sd.initErrorHalt(); | |
if(!sd.chdir("/")) sd.errorHalt("sd.chdir"); | |
//Initialisation du VS1053 | |
MP3player.begin(); | |
pinMode(Infrarouge, INPUT); | |
MP3player.setVolume(10, 10); // réglage du volume | |
randomSeed (millis()); // pour la fonction aléatoire | |
MP3player.playTrack(random(1,5)); // optionnel: juste pour vérifier que tout marche correctement | |
} | |
void loop() { | |
if (digitalRead(Infrarouge)){ // détection d'un mouvement | |
if ((millis()-precedent)>delai) { // si aucun mouvement n'avait été détecté depuis longtemps | |
MP3player.playTrack(random(1,5)); // en supposant 5 fichiers nommés Track001.mp3, etc. | |
} | |
precedent=millis(); // on consigne le moment de la plus récente détection de mouvement | |
} | |
} |
L'appareil peut aussi servir à jouer des tours: placez-le dans le bureau d'un collègue qui ne se doute de rien, et il sera bien surpris d'être salué par un fantôme. Il peut aussi servir de système d'alarme: quelqu'un qui s'en approche pourrait être accueilli par un agressif "Sortez de ma chambre!!!".
Et lorsque vous en avez assez de votre salueur électronique, vous le démontez pour utiliser ses composants dans un futur projet...
P.S.: Les lecteurs perspicaces remarqueront une certaines ressemblance avec un projet précédent, dans lequel l'Arduino jouait une courte mélodie lorsqu'il détectait l'arrivée de quelqu'un.
Yves Pelletier (Twitter: @ElectroAmateur)
Bonjour je viens de testé votre code , j'ai bien mis les librairie comme il le fallait , mais j'ai un message d'erreur qui voici ( SFEMP3Shield does not name a type)
RépondreSupprimerje posède une carte arduino uno est se shield http://snootlab.com/shields-snootlab/541-memoire-20-ds1307-fr.html et le Capteur de mouvement infrarouge http://www.arobose.com/shop/capteurs-robot/98-capteur-de-mouvement-infrarouge.html, voilà en attente d'une réponse de votre pare merci a vous.