Enceintes Bluetooth connectées
Sommaire
Cahier des charges
Présentation générale du projet
Contexte
Lorsqu'on écoute de la musique chez soi, on ne peut profiter du son (sauf si on monte le volume très fort) quand on se déplace dans les différentes pièces. L'idée serait d'avoir une enceinte dans chaque pièce et que la musique suive notre déplacement.
Objectif du projet
L'objectif du projet est donc de créer un réseau d'enceintes bluetooth qui émettent du son en fonctione de la pièce dans laquelle on se trouve.
Description du projet
L'idée du projet est de permettre à un utilisateur d'envoyer de la musique de son téléphone via bluetooth afin d'écouter sa playlist dans toute sa maison. Les enceintes diffuseront de la musique dans la pièce où se trouve l'utilisateur. Ainsi, il pourra écouter ce qui lui plaît sans avoir à se soucier du volume de la musique.
Choix techniques : matériel et logiciel
- Micro-contrôleur équipé d'un module bluetooth : RFDuino RFD22301
- Téléphone mobile : LG G4C (Android)
- IDE : Arduino
Étapes du projet
Partie 1 : Code Arduino
Notre premier code nous a permis de nous familiariser avec l'IDE Arduino avec des LED. Nous l'avons ensuite modifié pour comprendre l'utilisation des fonctionnalités bluetooth du microcontrôleur.
#include "RFduinoBLE.h" //définition de la broche 2 de la carte en tant que variable const int led_rouge = 2; const int led_vert= 3; //fonction d'initialisation de la carte void setup() { Serial.begin(9600); RFduinoBLE.advertisementData = "CouDow"; RFduinoBLE.deviceName = "Zizou"; // name of your RFduino. //initialisation de la broche 2 comme étant une sortie pinMode(led_rouge, OUTPUT); pinMode(led_vert, OUTPUT); RFduinoBLE.begin(); // activation bluetooth digitalWrite(led_rouge, HIGH); Serial.println("setup"); } //fonction principale, elle se répète (s’exécute) à l'infini void RFduinoBLE_onReceive(char *data, int len) { Serial.println("avant réception"); // display the first recieved byte Serial.println(data[0]); } void RFduinoBLE_onConnect() { Serial.print("Nous sommes connectes\n"); digitalWrite(led_vert, HIGH); digitalWrite(led_rouge, LOW); } void RFduinoBLE_onDisconnect() { Serial.print("Nous sommes deconnectes\n"); digitalWrite(led_vert, LOW); digitalWrite(led_rouge, HIGH); } void loop() { }
Le second code concerne la génération d'un son pour tester le circuit avec l'enceinte.
#include "RFduinoBLE.h" #include <Tone.h> void setup() { RFduinoBLE.deviceName = "Zizou"; RFduinoBLE.advertisementData = "CouDow"; pinMode(2,OUTPUT); } void loop() { tone(2,660,100); delay(75);tone(2,660,100); delay(150);tone(2,660,100); delay(150);tone(2,510,100); delay(50);tone(2,660,100); delay(150);tone(2,770,100); delay(275);tone(2,380,100); delay(287);tone(2,510,100); delay(225);tone(2,380,100); delay(200);tone(2,320,100); delay(250);tone(2,440,100); delay(150);tone(2,480,80); delay(165);tone(2,450,100); delay(75);tone(2,430,100); delay(150);tone(2,380,100); delay(100);tone(2,660,80); delay(100);tone(2,760,50); delay(75);tone(2,860,100); delay(150);tone(2,700,80); delay(75);tone(2,760,50); delay(175);tone(2,660,80); delay(150);tone(2,520,80); delay(75);tone(2,580,80); delay(75);tone(2,480,80); delay(175);tone(2,510,100); delay(275);tone(2,380,100); delay(200);tone(2,320,100); delay(250);tone(2,440,100); delay(150);tone(2,480,80); delay(165);tone(2,450,100); delay(75);tone(2,430,100); delay(150);tone(2,380,100); delay(100);tone(2,660,80); delay(100);tone(2,760,50); delay(75);tone(2,860,100); delay(150);tone(2,700,80); delay(75);tone(2,760,50); delay(175);tone(2,660,80); delay(150);tone(2,520,80); delay(75);tone(2,580,80); delay(75);tone(2,480,80); delay(250);tone(2,500,100); delay(150);tone(2,760,100); delay(50);tone(2,720,100); delay(75);tone(2,680,100); delay(75);tone(2,620,150); delay(150);tone(2,650,150); delay(150);tone(2,380,100); delay(75);tone(2,430,100); delay(75);tone(2,500,100); delay(150);tone(2,430,100); delay(75);tone(2,500,100); delay(50);tone(2,570,100); delay(110);tone(2,500,100); delay(150);tone(2,760,100); delay(50);tone(2,720,100); delay(75);tone(2,680,100); delay(75);tone(2,620,150); delay(150);tone(2,650,200); delay(150);tone(2,1020,80); delay(150);tone(2,1020,80); delay(75);tone(2,1020,80); delay(150);tone(2,380,100); delay(150);tone(2,500,100); delay(150);tone(2,760,100); delay(50);tone(2,720,100); delay(75);tone(2,680,100); delay(75);tone(2,620,150); delay(150);tone(2,650,150); delay(150);tone(2,380,100); delay(75);tone(2,430,100); delay(75);tone(2,500,100); delay(150);tone(2,430,100); delay(75);tone(2,500,100); delay(50);tone(2,570,100); delay(110);tone(2,500,100); delay(150);tone(2,760,100); delay(50);tone(2,720,100); delay(75);tone(2,680,100); delay(75);tone(2,620,150); delay(150);tone(2,650,200); delay(150);tone(2,1020,80); delay(150);tone(2,1020,80); delay(75);tone(2,1020,80); delay(150);tone(2,380,100); delay(150);tone(2,500,100); delay(150);tone(2,760,100); delay(50);tone(2,720,100); delay(75);tone(2,680,100); delay(75);tone(2,620,150); delay(150);tone(2,650,150); delay(150);tone(2,380,100); delay(75);tone(2,430,100); delay(75);tone(2,500,100); delay(150);tone(2,430,100); delay(75);tone(2,500,100); delay(50);tone(2,570,100); delay(210);tone(2,585,100); delay(275);tone(2,550,100); delay(210);tone(2,500,100); delay(180);tone(2,380,100); delay(150);tone(2,500,100); delay(150);tone(2,500,100); delay(75);tone(2,500,100); delay(150);tone(2,500,60); delay(75);tone(2,500,80); delay(150);tone(2,500,60); delay(175);tone(2,500,80); delay(75);tone(2,580,80); delay(175);tone(2,660,80); delay(75);tone(2,500,80); delay(150);tone(2,430,80); delay(75);tone(2,380,80); delay(300);tone(2,500,60); delay(75);tone(2,500,80); delay(150);tone(2,500,60); delay(175);tone(2,500,80); delay(75);tone(2,580,80); delay(75);tone(2,660,80); delay(225);tone(2,870,80); delay(162);tone(2,760,80); delay(300);tone(2,500,60); delay(75);tone(2,500,80); delay(150);tone(2,500,60); delay(175);tone(2,500,80); delay(75);tone(2,580,80); delay(175);tone(2,660,80); delay(75);tone(2,500,80); delay(150);tone(2,430,80); delay(75);tone(2,380,80); delay(300);tone(2,660,100); delay(75);tone(2,660,100); delay(150);tone(2,660,100); delay(150);tone(2,510,100); delay(50);tone(2,660,100); delay(150);tone(2,770,100); delay(225);tone(2,380,100); //tells the user it is over and delays it a little before going to the top again delay(1000); tone(2,440,200); delay(200); delay(200); tone(2,440,400); delay(200); delay(200); delay(5000); }
Le dernier code est une adaptation du second avec la connection bluetooth. Un problème persiste cependant, le programme ne joue que les deux ou trois premières notes lors de la connection d'un appareil via bluetooth malgré de nombreuses recherches.
void setup() { RFduinoBLE.deviceName = "Zizou"; RFduinoBLE.advertisementData = "CouDow"; pinMode(2,OUTPUT); RFduinoBLE.begin(); // activation bluetooth } void RFduinoBLE_onReceive(char *data, int len) { if (data) { // les "tones" } else{} void loop() { }
Partie 2 : Câblage électrique
La partie centrale de notre circuit est un microprocesseur RFDuino, qui permet de recevoir les informations (la musique) du téléphone via bluetooth afin de les transmettre aux enceintes. Nous l'avons connecté à un Wireless SD Shield pour permettre de stocker la musique utilisée ainsi qu'à un haut-parleur permettant la diffusion de cette musique.
Partie 3 : Communication Smartphone-Microprocesseur
La communication entre les deux composants se fait via une application Android.
Celle-ci permet de se connecter à l'enceinte et d'envoyer une valeur pour enclencher la fonction lecture du programme.
Suivi de l'avancement du Projet
Séance 1
Séance de découverte
- IDE arduino
- premiers essais : création d'un circuit simple avec une LED
Séance 2
Début du travail avec une enceinte : tentative d'envoi de données via bluetooth à l'enceinte.
Séance 3
Test et adaptation d'applications Android déjà existantes
Séance 4
Finalisation du câblage électrique avec le Wireless SD Shield avec les Schematics des différents composants
Tentative de lecture de fichier son .wav sur la carte SD à partir du téléphone en bluetooth
#include <SD.h> #include <SPI.h> #include <AudioZero.h> void setup() { // debug output at 115200 baud Serial.begin(115200); // 44100kHz stereo => 88200 sample rate AudioZero.begin(2*44100); } void loop() { // open wave file from sdcard File myFile = SD.open("test.wav"); // until the file is not finished AudioZero.play(myFile); Serial.println("End of file. Thank you for listening!"); while (true) ; }
Problèmes rencontrés :
- toutes les librairies "audio" utilisées ne sont pas compatibles avec l'architecture de RFDUINO
- la bibliothèque "SD.h" renvoie des erreurs de compilation
library AudioZero claims to run on [samd] architecture(s) and may be incompatible with your current board which runs on [RFduino] architecture(s)
Séance 5
Finalisation du poster
Derniers essais