P4 Jukebox multi-pièces

De Wiki de Projets IMA
Révision datée du 13 février 2016 à 15:03 par Jherin12 (discussion | contributions) (Amplificateur)

Cahier des charges

Présentation générale du projet

Contexte

La diffusion de musique dans différentes pièces d'une maison est problématique si l'on veut avoir une source. Il serait possible de tirer des câbles mais cette solution n'est ni esthétique ni pratique (réseau peu reconfigurable).

Objectif du projet

Réaliser une plateforme permettant de jouer de la musique dans différentes pièces.
P4 Presentation Modules.png

Description du projet

Pour arriver au bout de ce projet, il conviendra de développer :

  • Une enceinte embarquant un amplificateur audio et un système Wifi pour recevoir le flux de données
  • Une application sur PC afin de permettre le choix du flux musical à envoyer (chaque enceinte pourra recevoir un flux différent si souhaité) ainsi que le contrôles habituels (volume, corrections, ...)
  • Une application sur Smartphone permettant de commander le système

Choix techniques : matériel et logiciel

Matériel envisagé :

  • Possibilité d'utiliser également des haut parleurs actifs avec la Raspberry Pi

Logiciels envisagés :

  • Création d'une application pour Android avec Android Studio
  • Utilisation des logiciels intégrés pour les autres plateformes (AirPlay, Windows Media player)


Architecture des modules

Présentation des modules
Type #1
Type #2

Pour clarifier les choses, nous appellerons « module » le haut-parleur et ses équipements embarqués, la partie applicative pour streamer la musique étant mise de côté.
Dans le cadre de ce projet, nous sommes partis sur deux types de module distincts puisque nous souhaitons proposer au public une solution modulaire et non fermée.
Dans les deux solutions, nous avons choisi d’ajouter à la Raspberry Pi une carte son USB afin d’améliorer considérablement la qualité sonore que nous envoyons vers le haut-parleur.

Type de module 1

Le premier module embarque une Raspberry Pi avec MusicBox pour la réception de la musique ainsi qu’une carte son USB.
Cette solution permet à l’utilisateur de brancher n’importe quel haut-parleur actif à la carte son avec un connecteur jack 3.6 mm. Il pourra ainsi garder son propre haut-parleur s’il le désire.

Type de module 2

Le second module embarque lui aussi une Raspberry Pi avec MusicBox ainsi qu’une carte son USB.
Cependant nous proposons en plus dans celui-ci un amplificateur audio auquel nous connecterons un haut-parleur passif.
L’avantage de cette solution est de maîtriser la qualité audio du haut-parleur pour notre utilisateur et de ne fournir qu’une seule « boite » avec solution toute intégrée.



Les modules seront connectés à un réseau Wi-Fi domestique sur lequel un smartphone ou un ordinateur envoyant la musique y seront aussi connectés.
P4 Principe Chaine Transmission.png

Étapes du projet

  • Définition du cadre du projet
  • Création du cahier des charges
  • Création de l'enceinte connectée (boitier, circuit d'amplification, logiciels de la plateforme Linux embarquée)
  • Développement du logiciel de diffusion de l'ordinateur central
  • Développement de l'application mobile

Objectifs à long terme

Une solution DIY pour des coûts maitrisés

Un des objectifs importants de ce projet est le coût puisque nous verrons par la suite après établissement d’un état de l’art (Sprint 2) qu’un haut-parleur multi-room dans le commerce se trouve dans une fourchette de prix allant de 100 à 500 euros. Il est donc évident que l’achat d’une enceinte par pièce revient très rapidement assez cher.

Notre but sera donc d’obtenir un module ayant un coût maximum de 80 euros pour une solution prête à l’emploi. La modularité du projet permettra à l’utilisateur de mettre le prix qu’il souhaite pour la qualité sonore de son choix (un haut-parleur actif pour le module 1, un couple amplificateur/haut-parleur pour le module 2).

Le danger majeur porte sur la qualité audio qui diminue très rapidement quand le coût baisse. La somme de 80 euros est un bon compromis pour notre projet. Nous avons aussi vu très récemment que la Raspberry Pi Zero à 6 euros d’une puissance suffisante pour notre projet était disponible, contre une trentaine d’euros pour la solution actuelle. Elle a également l’avantage d’être beaucoup plus compacte que le modèle B+.
Cette solution permettra dans le futur de pouvoir faire diminuer le coût total du projet pour une personne voulant le réaliser par la suite.

Suivi de l'avancement du Projet

Planning prévisionnel mis à jour :

P4 Gantt.png

Semaine 1 (21/09/2015)

Nous avons fait des recherches sur des solutions déjà existantes pour diffuser de la musique dans plusieurs pièces d'une maison. Samsung propose déjà un système permettant de diffuser plusieurs flux différents dans différentes pièces via le réseau wifi du domicile, cependant le prix pour un module d'entrée de gamme est d'environ 150€.

Nous avons également pensé à une première architecture matérielle de notre projet qui consisterait en :

  • La Raspberry pi qui recevrait le flux via le réseau wifi
  • Une carte son USB pour améliorer la qualité du signal
  • Un amplificateur de puissance pour amplifier le signal en sortie de la carte son
  • Des enceintes passive pour diffuser la musique

Voici une première version du devis pour un module wifi avec deux enceintes : lien

Semaine 2 (28/09/2015)

Nous avons pu discuter avec Rodolphe Astori et Alexandre Boé ce qui nous a permis de définir plus précisément la teneur du projet. L'objectif principal de ce projet est de développer une solution "low cost" que n'importe quel étudiant pourrait réaliser au Fablab, tout cela pour un faible coût (moins de 100 euros).

En effet, ce type de système déjà existants sur le marché présente un coût très important, allant de 200 euros pour Sonos et Bose jusqu'à 400 euros par haut-parleur.

Les points clés du projet seraient :

  • Entièrement réalisable soi-même
  • Coût maîtrisé
  • Modulable
  • Possibilité de pouvoir choisir la gamme de chaque module (amplificateur de meilleur qualité mais plus cher...)


Fonctionnement par SPRINT

Logo Scrum

Nous nous sommes également convenus avec Rodolphe Astori de procéder par "sprint", c'est à dire d'essayer de réaliser un système fonctionnel le plus rapidement possible, et de faire un point sur notre réalisation au bout de 15 jours. Si au bout de ces 15 jours, le projet prend la direction voulue, on continue dans cette voie, sinon on revoit le cahier des charges. Il est également essentiel de faire des points très régulièrement (une à deux fois par semaine) pour faire ressortir les éventuelles difficultés rencontrées.

Sprint #1 (15/10/2015)
Objectif : Envoyer un flux musical vers une enceinte déjà existante

Préparation

A la fin des recherches préliminaires nous avons alors défini les objectifs à atteindre en fin de sprint 1. Il s’agissait d’arriver à streamer une musique depuis un appareil quelconque, vers une Raspberry Pi Connectée à une enceinte.

Nous avons alors pris la décision de partir sur une application destinée à fonctionner sur un PC. Nous avons choisi de développer cette application en C++, en utilisant le framework Qt, car il permet la réalisation de programmes graphiques sur toutes les plates formes.

On a alors commencé à développer une application en C++ tout en cherchant des méthodes pour arriver à streamer simplement sur la Raspberry Pi. Une des voies envisagée était d’utiliser une librairie VLC intégrable à Qt disponible sur le site vlc-qt.tano.si. L’avantage de passer par VLC pour streamer un flux musical est que c’est un logiciel open source, disponible à la fois sur Windows, Linux, Mac OS et qui s’intègre parfaitement à Qt.
On a également réussi à streamer un flux musical depuis VLC, ainsi que depuis un Mac, en installant SharePort, vers la Raspberry Pi.

Réunion

Stream depuis un Mac

A la fin du sprint, on a alors effectué un retour sur ce qu’on avait fait avec nos tuteurs ainsi que Jean-Eude Laurenge. On n’a malheureusement pu faire la démonstration que du stream depuis un Mac.
On a alors rediscuté de l’avancement du projet et des objectifs futurs. En effet, la démonstration n’était pas convaincante, et assez restreinte par rapport au résultat attendu.

Etat en fin de sprint

On a déterminé ensemble qu’il était alors nécessaire pour le sprint 2 de :

  • Réaliser une veille technologique complète sur les solutions existantes
  • Se concentrer sur l’application mobile dans un premier temps.

En effet, l’intérêt principal de pouvoir streamer de la musique dans plusieurs pièces à la fois est de pouvoir contrôler la musique tout en se déplaçant. L’intérêt de contrôler le flux musical à l’aide d’un PC est donc assez limité.


Sprint #2 (10/11/2015)
Objectif : Envoyer deux flux musicaux différents vers deux enceintes déjà existantes

Préparation

Veille technologique

Dans un premier temps il s’agissait de réaliser une veille technologique décrivant les solutions existantes autant au niveau logiciel et matériel DIY que celles commercialisées par des marques connues.
Il fallait également arriver à streamer de la musique vers au moins deux enceintes en utilisant les solutions trouvées.


Les solutions commercialisées (sous le nom d'enceintes multiroom) sont les suivantes :
P4 veilletechno.png

Pi MusicBox

Pour la Raspberry Pi nous avons choisi d’installer un OS Linux modifié nommé MusicBox. Ce système d’exploitation est prévu pour gérer les flux musicaux.

En effet, il intègre un serveur DLNA,
P4 DLNA logo.jpg
la possibilité d’y associer un compte Spotify ou encore de streamer un flux Youtube ou une musique située sur une clé USB branchée à la Raspberry.

Il dispose également d’une interface web qui permet de contrôler facilement tous les flux et son code est entièrement open source. C’est donc la solution idéale pour streamer facilement de la musique depuis un mobile en utilisant le DLNA.

Nous affichons directement l'interface de MusicBox depuis un ordinateur connecté au même réseau Wi-Fi :
P4 MUSICBOX.png

Le protocole de streaming utilisé par MusicBox est le protocole UPnP (pour Universal Plug and Play), un des nombreux protocoles de la Digital Living Network Alliance.

Application Android BubbleUPnP

Nous téléchargeons donc une application Android supportant le protocole UPnP pour tester l'envoi d'un flux audio du téléphone vers "BedRoom1" : BubbleUPnP.

Notre but sera maintenant de créer une application multi-plateformes disposant des mêmes fonctionnalités.

Réunion

Nous avons pu effectuer une démonstration d’une chaine complète. Nous avons réussi à diffuser deux musiques différentes depuis un même smartphone vers deux enceintes séparées.
P4 Sprint2.png

Etat en fin de sprint

L’objectif fixé en début de sprint est donc atteint et nous avons pu définir de nouveaux objectifs pour le sprint suivant :

  • Réaliser notre propre application et arriver à streamer une musique vers une enceinte
  • Réaliser le PCB du circuit d’amplification à base de LM3886

Sprint #3 (05/01/2016)
Objectif : Ampli audio & Réalisation de notre propre application Android

Préparation

Application Android
Pour le sprint 3 nous nous sommes concentrés sur la réalisation d’une application Android. En effet, comme iOS dispose d’une solution intégrée déjà existante nous avons jugé n’il n’était pas nécessaire de développer une application dédiée.
Notre application Android


Nous avons choisi de développer notre application en utilisant Android Studio. Cette application est donc réalisée en Java, et nous avons fait en sorte qu’elle soit compatible avec tous les téléphones disposant de la version 4.1 (Jelly Bean) ou plus. Cela permet qu’un maximum d’utilisateurs puisse profiter de l’application tout en la rendant compatible avec les versions récentes.
Dans un premier temps nous avons créé une activity Android standard disposant d’un panneau latéral qui nous permettra par la suite de rajouter les fonctions de recherche de serveur DLNA. Dans un second temps nous avons créé une classe Song qui contient les variables liées à chaque chanson et les méthodes nécessaires pour pouvoir les manipuler.
On a ensuite implanté une barre permettant de contrôler la lecture (lecture, pause, chanson suivante…). Les contrôles étant déjà présents dans le service « Media Player » il était seulement nécessaire de rajouter le widget contenant notre barre à l’activité principale puis de lier les boutons aux contrôles.


Il a ensuite été nécessaire de créer une autre classe contenant les méthodes permettant de manipuler les chansons. Cette classe, nommée MusicService, permet de lier la liste des chansons que l’on a récupérées dans l’Activity principale au lecteur de média. En effet, le lecteur de média est un service sous Android et est donc indispensable à lier si l’on veut lire un média quelconque.
Une fois ces étapes faites, nous avons affiché cette liste dans l’activité principale et l’avons trié par ordre alphabétique. On initialise alors le service permettant de lire les médias et on lit l’action de toucher une chanson dans la liste au démarrage de ce service. On a alors une première version du lecteur musical, qui pour l’instant est limitée à la lecture en local.

Amplificateur Audio
Nous avons également réalisé le layout des deux PCB du module 2 : un pour l’amplification à base de LM3886 et un pour le circuit d’alimentation. Afin de dissiper sa chaleur importante lors de l’utilisation de l’amplificateur, nous avons commandé un dissipateur thermique sur lequel nous visserons le LM3886.
Schema audio à base de LM3886


Nous nous sommes fortement inspirés de l’amplificateur ci-contre où les informations sur le site correspondant sont très détaillées et nous permettent de comprendre l’importance de beaucoup de composants dans un amplificateur audio.
Par rapport au circuit d’origine, nous avons ajouté une LED de fonctionnement de l’amplificateur, un switch ON/OFF ainsi qu’un potentiomètre rotatif pour pouvoir agir sur le volume sonore.

Pour l’entrée audio, l’utilisateur trouvera en façade de l’amplificateur une entrée stéréo RCA ainsi qu’une entrée jack 3.6 mm. Pour la sortie, nous avons prévu un bornier standard pour connexion de haut-parleur ainsi qu’une sortie jack femelle 3.6 mm.
Bornier 2.1

La version quasiment finale du PCB est donc la suivante :

P4 PCB Ampli.PNG

Principe de l'Amplificateur Audio
P4 Ampli Principe.png


Nous avons commandé

  • les derniers connecteurs nécessaires à la réalisation de cette carte (et la carte d'alimentation (carte 2/2))
  • un dissipateur thermique pour dissiper la chaleur du LM3886.

Dissipateur thermique 70x40x10(Lxlxh)(mm)

Etat en fin de sprint

Les objectifs de ce sprint n’ont donc pas tout à fait été atteints :

  • Le lecteur Android ne permet pour l’instant que de lire localement les musiques
  • Le PCB n’a pas encore été tiré

Il est donc nécessaire pour le sprint suivant de corriger au plus vite ces deux points de manière à ce que le projet puisse aboutir. Les objectifs pour le sprint suivant sont donc de faire en sorte d’arriver à streamer un flux musical vers une enceinte avec notre application ainsi que de tirer les PCB, les souder et commencer les tests.

Sprint #4 (18/01/2016)
Objectif : Envoyer une musique via la chaine de transmission avec notre ampli audio

Préparation

Partie Hardware

Amplificateur

La version finale de notre carte d'amplificateur est la suivante :
Ampli 2D.png Ampli Photo.jpg
Un dissipateur a été fixé sur l'amplificateur (composant rectangulaire noir visible en haut de la carte sur la photo).
Nous avons testé la carte avec une alimentation de labo +/-25V. Elle est tout à fait fonctionnelle.

Alimentation


Dans la version finale du projet, l'amplificateur devra être alimenté en +/-25V avec une carte d'alimentation intégrée au module.

Schéma de base d'une alimentation

Nous nous sommes alors basés sur un schéma classique d'alimentation (pour passer d'un courant alternatif à un courant continu).
Son principe de fonctionnement est le suivant :

Le signal fourni par les bobines secondaires du transformateur 220/18V est le suivant :
Principe Alim 1.png

Après double redressement par les bobines, on se retrouve avec ce signal :
Principe Alim 2.png

Après filtrage par les condensateurs, on se retrouve avec un signal lissé :
Principe Alim 3.png

La différence entre les tensions maximum et minimum de la tension au borne des condensateurs est appelée tension de "ronflement".
Notre but est donc de diminuer cet écart afin d'obtenir une alimentation la plus stable possible pour notre amplificateur, au risque de détériorer le matériel !

On a donc ajouté un filtre CRC, visible sur le schéma suivant (schéma final de notre alimentation) :
Supply Schematics.png
NB : Le composant "KB1" est notre pont de Graetz (pont de diodes).

Afin de bien dimensionner les composants, nous avons effectué diverses simulations sous Altium Designer.
On ne se basera que sur les composants de la moitié supérieure (C1, C3, R1, C5 et C7) car les résultats seront les mêmes pour les autres puisqu'il s'agit d'une alimentation symétrique.

  • Influence de la valeur capacitive d'entrée du filtre (C1+C3)

InfluenceCapaEntree.png
Plus elle est élevée, plus la tension efficace de sortie sera élevée.

  • Influence de la valeur de R1

InfluenceResistance.png
Moins la résistance est élevée, plus la tension de sortie est importante. (Mais on augmente le ripple)

  • Influence de la valeur capacitive de sortie du filtre (C5+C7)

InfluenceCapaSortie.png
Plus la capacité de sortie est importante, plus on limite le ripple.

Boîtier du module

Nous avons choisi de réaliser le boîtier du module en bois. En effet, cela nous permet d'utiliser la découpeuse laser du Fabricarium, et le rendu final est très esthétique.
Il nous a suffit de nous rendre sur un site de génération de boîtes. Une fois le fichier sauvegardé, nous y avons ajouté des trous de manière à y intégrer

  • des LEDs diverses
    SVG de la boite
  • des boutons
  • le bouton principal de volume sonore
  • Un haut-parleur passif interne au module
  • Un bornier pour y connecter un haut-parleur passif externe (8 ohms/50 Watts maxi)
  • Un switch pour passer du haut-parleur externe au haut-parleur interne
  • Le connecteur mâle IEC pour l'alimentation de l'amplificateur
Boite Finale

ainsi qu'un design musical.

Toutes les instructions d'utilisation de la découpeuse laser du Fabricarium sont disponibles à cette adresse.