Création d'un système audio personalisé pour Clio 2
July 2013.
Introduction
Heureux propriétaire d'une Clio 2.2 essence 1.2L, je me suis fabriqué un petit système audio sympathique et sans prétention.
La problématique
J'aime écouter de la musique. J'ai plein de fichiers audio sur mon NAS. Lorsque je roule, j'aime avoir toute ma musique à disposition dans ma voiture.
Problèmes:
- J'aime avoir mes commandes aux volant. Il est indispensable que tout système gère celles incluses dans ma clio.
- La grande majorité des fichiers audio de ma librairie est constituée de formats barbares tels que le FLAC, l'APE ou tout autre format sans pertes.
- Ma librairie étant importante, il faut que le système soit munis de mécanismes pour gérer facilement les albums, artistes et autres listes de lectures.
- Ma voiture étant déjà équipée d'une autoradio Alpine sympathique, je souhaite en garder les fonctionnalités; en particulier le bluetooth pour le téléphone.
Pourquoi ne pas utiliser simplement un autoradio avec un disque dur externe branché dessus en USB?
- Je vois mal un autoradio lire les fichiers CUE pour extraire les méta-données d'un CD transcodé en FLAC ou en WAV.
- Parce que compiler la liste des fichiers au démarrage prendrait une demie heure, si la mémoire pour la stocker était suffisante.
J'avais déjà réalisé un prototype qui utilisait la liaison bluetooth pour envoyer la musique. La musique passait dans le profil A2DP et les commandes au volant étaient récupérées par le profil AVRCP.
Problème: je perds alors la possibilité de connecter mon téléphone à l'autoradio et ne peux plus passer ou recevoir des appels en roulant en utilisant le micro placé au dessus de mon rétroviseur.
Présentation du système construit
Pour résoudre tous ces problèmes, j'ai décidé de monter les éléments suivants:
- Pour le son: un PC embarqué avec toute la musique sur un disque dur, qui envoie le son en analogique dans l'entrée auxiliaire de l'autoradio.
- Pour les commandes au volant: une interface commande au volant maison Clio vers Alpine et/ou PC.
Conception et construction
Démontage et repérage du système en place
Le système en place est constitué des éléments suivant:
Une clio | Un autoradio Alpine CDE-133BT | Une interface commande au volant Alpine KCE-840B + le câble KWE-845E |
Le commodo de commande au volant est relié par son connecteur exotique rouge au câble KWE-845E, qui se contente d'être un adaptateur pour le connecteur de l'interface KCE-840B. Cette interface est branchée sur un câble électrique bleu blanc; et par un jack 3.5 standard sur l'autoradio.
Identification du fonctionnement du commodo de commande au volant
Une fois ouvert, le commodo de commande au volant se rélève être un morceau de plastique avec des interrupteurs dedans. Un petit tour à l'ohmmètre nous révèle qu'il s'agit d'une simple matrice d'interrupteurs.
Le connecteur d'arrivée du commodo | La correspondance des boutons |
La molette est composée de trois interrupteurs. On peut déterminer le sens de rotation en regardant leurs états courant et leurs états précédant. On retrouve les autres boutons: Volume plus, Volume moins, Dessous (Bot), Dessus 1 et Dessus 2 (Top1 et Top2).
On notera que cette disposition nous permettra d'utiliser d'autres combinaisons que la célèbre Vol Plus + Vol Moins.
Identification du fonctionnement du bus Alpine
Identification du connecteur
Le connecteur est un jack 3.5 standard. On en trouve facilement, même en supermarché.
Pin n° | Contenu |
---|---|
1 | Masse |
2 | 5V |
3 | Données |
Identification du bus de données
Le bus de données est assez particulier en son genre.
On y trouve:
- Une séquence de démarrage: un état haut de 8ms (on pourrait aussi imaginer que c'est un octet de valeur 0xFF).
- 7 octets
Chaque bit est constitué d'un état haut ou bas de 0.5ms, et d'un état bas de 0.5ms. On pourra noter que dans aucune trame rencontrée ne se suivent deux zéros.
Les commandes associées que j'ai rencontré sont:
Commande | Valeurs |
---|---|
Volume plus | 1A FB 75 7B 7A DA A0 |
Volume moins | 1A FB 75 6D BE DA A0 |
Molette bas | 1A FB 75 75 7D EA A0 |
Molette haut | 1A FB 75 6A BF EA A0 |
Dessous | 1A FB 75 77 7B 5A A0 |
Dessus 1 | 1A FB 75 76 FB 6A A0 |
Dessus 2 | 1A FB 75 6D 7E EA A0 |
Mute (Volume plus + Volume moins) | 1A FB 75 75 BD DA A0 |
Réalisation de interface commande au volant
Parce que j'ai eu la flemme de fabriquer une carte électronique sur mesure, j'ai utilisé un kit de développement de chez Texas Instrument, le EK-LM4F120XL. Il comprend un CPU Cortex M4 LM4F120, qui suffit largement pour ce qu'on souhaite faire avec. Il est largement sur-dimensionné pour l'instant, mais pourra servir plus tard pour s'interfacer avec d'autres éléments de la voiture.
Le kit a aussi l'avantage de disposer d'une liaison série qui transite par le port USB (qui d'ailleurs sert à alimenter la carte), qui pourra être relié au PC.
Le code utilise 3 GPIO en sortie pour alimenter la matrice d'interrupteurs, et 3 autres en entrée pour lire les valeurs.
Un autre GPIO sert à émuler le BUS Alpine montré précédemment.
Le circuit se comportera exactement comme l'interface Alpine si il est tout seul, et enverra certaines commandes au PC lorsque celui ci manifestera sa présence.
Les autres éléments de l'interface sont:
- Un régulateur 5V, pour l'alimentation depuis le 12V de la voiture (à brancher sur le même câble que l'interface Alpine)
- Un convertisseur 3.3V -> 5V pour convertir le GPIO de la carte vers le bus Alpine. J'ai utilisé un transistor 2N2222 en montage inverter.
Montage du PC
Pour lire l'audio, j'ai choisi de monter un ordinateur en architecture PC. J'aurais pu préparer une carte embarquée avec un coeur ARM et un Linux embarqué mais avec un PC je n'ai pas à me prendre la tête avec tous les drivers (SATA, Bluetooth, WiFi, etc.).
Matériel
Élément | Modèle | Commentaire |
---|---|---|
Carte mère | Intel D525MW | J'ai pris celle là parce qu'elle était en solde. N'oubliez pas de rajouter de la RAM |
Alimentation | M3-ATX | S'occupe de gérer les problématiques liées à la batterie de la voiture |
Disque dur | Un 600GB 2.5" SATA standard | Plein de place pour plein de musique |
Boitier | Un vieux boitier mini ITX qu'il me restait | Pas cher ^^ |
L'alimentation M3-ATX, conçue spécialement pour ce genre de projet, permet de sortir tous les connecteurs nécessaire au fonctionnement d'un PC (Alim ATX, Alim 12V pour CPU, Molex/SATA) à partir d'une batterie dégueulasse (6-24V). Elle démarre automatique le PC dès la présence confirmée d'un signal moteur; et une fois ce dernier confirmé éteint (5s), elle éteint proprement le PC avant de couper l'alimentation au bout d'une minute. Aussi, si la tension batterie est trop faible, elle ne fait rien, ce qui évite de se retrouver vidé bêtement.
On trouve toutes les entrées nécessaires sur le connecteur ISO du système audio de la voiture (12V => Jaune, Masse => Noir, Signal moteur => Rouge).
Logiciel
Le choix du système d'exploitation est entièrement personnel. La plupart des systèmes habituels (UNIX, Windows) fonctionnent (tant qu'ils arrivent à faire fonctionner une liaison série).
J'ai choisi un FreeBSD 9.1 Release, dernière version en date. Ceci me permet de synchroniser facilement le pool ZFS contenant ma musique de mon NAS vers le système grâce au système de snapshots.
Le système utilise pour lire la musique est un Music Player Daemon, qui présente les avantage suivant:
- Il n'a pas besoin d'interface graphique pour fonctionner.
- Il existe des clients pour interagir avec pour pratiquement toutes les plateformes.
Le contrôle local (suivant, précédant, pause, etc.) est effectué avec les commandes au volant, grâce à la carte embarquée et à sa liaison série.
Le contrôle avancé (gestion des playlists, sélection de la liste de lecture courante, etc.) est effectué avec un ordinateur ou un téléphone.
Conclusion
Le système réalisé a les caractéristiques suivantes:
- Lorsque tout est éteint, tout le système ne consomme que 0.5mA (tension de fuite de l'alim) , c'est à dire rien.
- Lorsque le contact moteur est présent, le PC démarre.
- Lorsque le contact moteur disparait, le PC est éteint proprement.
L'interface au volant se comporte comme celle d'Alpine, sauf en présence du PC, où elle lui envoi la moitié des commandes. Ce qui permet:- De toujours gérer le volume grâce à l'autoradio
- De pouvoir naviguer dans la discographie rapidement grâce aux commandes habituelles mais aussi grâce à des nouveaux combos (par exemple Dessous + Volume plus).
- De ré-attribuer le bouton pour changer la plage de fréquences du tuner FM, parce qu'il faut bien l'avouer, c'est une fonction indispensable.
- L'autoradio se comporte comme avant et peut toujours lire la radio, les CDs, les clé USB ou disques dur externes; et surtout la fonction téléphone main libre est toujours active.
- Comme on est sur un PC, on peut virtuellement lire tous les formats audio, même les plus exotiques.
Codes sources
Le code source de tout ce bazar est disponible ici:
ZeWaren/nuclear-muse on GitHub.