← retour à la liste des projets

Ambilight HDMI avec Raspberry Pi et Hyperion : Prototype / v1

Publié le 05/07/2020, dernière modification le 05/07/2020
image

Principe

Le principe de fonctionnement est assez simple : l'idée est de pouvoir piloter la couleur d'un bandeau de LEDs RGB installé derrière la TV en fonction de l'image à l'écran.

Ces LEDs sont dites "adressables", c'est à dire qu'on peut choisir la couleur de chaque LED du bandeau indépendamment.

Chaque LED du bandeau devra prendre la couleur de la partie de l'image diffusée sur la TV positionnée au même endroit que la LED.

Pour la partie logicielle, Hyperion est utilisé.

Le matériel nécessaire

Voici le matériel utilisé dans le cadre de ce projet :

  • Un Raspberry Pi, modèle 1B (le tout premier)
  • Un "grabber" vidéo USB, capable de lire un signal vidéo composite
  • Un "splitter" HDMI, qui à partir d'une seule entrée HDMI copie le signal sur deux sorties
  • Un convertisseur "HDMI2AV", qui transforme le signal numérique HDMI en signal composite
  • 5m de ruban de LEDs WS2812b
  • Une alimentation 5V 20A, pour alimenter les LEDs ainsi que le Pi et la plupart des autres composants

Juste avec ce matériel, on peut déjà faire un ambilight fonctionnel, mais en rajoutant quelques composants on peut améliorer son fonctionnement :

  • Un relai, pour couper l'alimentation 5V/20A quand l'ambilight est éteint
  • Un arduino, qui pilote le relai et communique en i2c avec le Raspberry Pi pour que ce dernier s'éteignent proprement avant de couper le relai
  • Un transformateur 220v vers 5v HLKPM-01, qui permet d'alimenter l'arduino en permanence
  • Un convertisseur de logique, pour remonter la logique 0-3.3v en sortie des GPIO du Pi à une logique 0-5v, plus appropriée au pilotage des LEDs WS2812b (voir ci-après)
  • Un bouton poussoir, relié à l'arduino, pour l'allumage / l'extinction

Schéma global - signal vidéo / LEDs

Les différents composants ci-dessus sont connectés entre eux de cette façon :



La source HDMI de votre choix est connectée sur le splitter (HDMI IN). L'une des deux sorties du splitter est connectée à la TV, pour avoir l'image et le son (c'est mieux).

La deuxième sortie du splitter est connectée au convertisseur HDMI2AV, qui transforme le signal numérique HDMI en un signal analogique composite, lisible par notre grabber.

On connecte ensuite le RCA jaune (vidéo) du HDMI2AV au RCA jaune du grabber USB, qui lui même est connecté en USB au Raspberry Pi.

Il ne reste plus qu'à connecter les WS2812b aux GPIO du Pi (plus précisément, on connecte le DIN des LEDs à l'un des pins du Pi, en passant idéalement par un convertisseur de logique).

Alimentation électrique

Nous avons vu la partie vidéo / LEDs, reste maintenant plus qu'à alimenter électriquement les différents composants.

Il suffit de connecter le + et le - des LEDs, du Raspberry Pi, du Splitter et du HDMI2AV sur l'alim 5v 20A.

Pour les LEDs, pas de problème. Pour les autres composants, j'ai utilisé des connecteurs microUSB et miniUSB. Le Pi aurait pu être alimenté directement par ses GPIO, mais j'ai préféré ne pas bypasser les protections du Pi. De la même façon, on pourrait directement souder le + et le - sur le circuit imprimé sur splitter et du HDMI2AV, mais utiliser des connecteurs permet de démonter et changer le composant si besoin (très utile, en phase de prototypage).

Installation & configuration d'Hyperion

Pour installer Hyperion, il suffit de suivre la doc officielle dispo ici. La configuration se fait grâce au logiciel HyperCon, disponible ici.

Il faut choisir le type de LEDs utilisé, configurer le nombre de LEDs et surtout leur position, puis il faut activer l'option "GrabberV4L2" depuis l'onglet Grabber d'HyperCon.

D'autres options peuvent être activées ou désactivées, en fonction du comportement souhaité.

Boîtier & assemblage

Après un premier prototype dans une boîte à chaussures, j'ai décidé de faire un boîtier en plexiglass pour que les entrailles de la bête soient visibles.

Les différents faces du boîtier sont assemblées par des coins imprimés en 3D (pièces blanches). La plaque supérieure n'est pas collée, et peut donc être détachée pour les éventuelles maintenances.

J'ai fait quelques pièces imprimées en 3D pour clipser différents composants, d'autres sont directement vissés à la plaque inférieure, et enfin certains autres sont simplement en "lévitation" dans le boîtier, tenus uniquement par leurs câbles HDMI.

Il faut trouver des câbles HDMI suffisamment courts pour connecter les composants et réussir à faire tenir le tout dans un boîtier qui fait environ la taille d'une Xbox One (1ère génération). L'alim 5v 20A prend une très grande partie de l'espace.

Résultat final

Voici quelques vidéos et photos du prototype finalisé.





Notes, améliorations futures, problèmes rencontrés

Le boîtier est assez gros, mais avec l'alimentation 5V 20A intégrée difficile de faire plus petit. J'aurais pu laisser l'alimentation à l'extérieur, mais je n'aurais pas pu la piloter avec un relai, ou plus difficilement en tout cas.

Je ne souhaite pas laisser l'alimentation sous-tension sans surveillance. En effet, je ne fais pas trop confiance à ces alimentations chinoises et préfère les couper dès que possible, pour éviter de foutre le feu.

Je pourrais utiliser une alimentation externe de type "PC Portable", en 19v, mais je devrais dans ce cas faire de la réduction de voltage, et trouver un régulateur capable d'encaisser les ampères que tirent les 248 LEDs derrière la TV de mon salon serait compliqué.

Pour la version 2, je pense partir sur une alimentation 12v, probablement externe, coupée ou non avec un relai. J'ai déjà commandé des rubans de LEDs adressables en 12v, j'espère qu'elles fonctionneront avec Hyperion.

Toujours dans l'idée de réduire l'encombrement, l'idéal serait de développer et faire produire un circuit imprimé regroupant le splitter, le HDM2AV et le grabber USB. Le Raspberry Pi pourrait être un Compute Module, connecté en SO-DIMM au circuit imprimé en question. Cette solution ferait très pro, mais demande beaucoup de travail de conception.

Je vais aussi essayer de remplacer le HDMI2AV et le grabber USB par une carte d'acquisition HDMI USB. Ces cartes ont fait leur apparition sur les sites chinois à des prix dérisoires, et cela permettrait aussi de réduire l'encombrement, et potentiellement de me simplifier la tâche de conception d'un PCB.