[TUTO] Adrilight, nouveau logiciel léger de gestion Ambilight sous Windows

 

Présentation

 

Dans de précédent tuto j'avais abordé la mise en place d'un système Ambilight pour mon ordinateur portable soit en utilisant AmbiBox soit Prismatik. Le but de ce tuto est de vous faire découvrir, pour ceux qui ne le connaisse pas, un nouveau logiciel de gestion Ambilight sous Windows à savoir Adrilight.

 

Voici une vidéo de présentation et d'information sur Adrilight, malheureusement en Allemand, donc du chinois pour moi.

 

Et 2 vidéos de mon ami JC-Omega qui à suivi mon tuto et qui à réaliser une installation Ambilight avec l'utilisation d'Adrilight. Plus d'info sur son blog http://www.jc-omega.com.


 Magnifique, ça donne envie de se baigner.

 

 

Adrilight est en fait une version amélioré de son frère jumeau Bambilight,( peut être que ces noms ne vous disent rien, moi-même je ne les connaissais pas il y a une semaine) mais qui n'a malheureusement pas fonctionné sur mon Ordinateur ( plus d'informations sur Bambilight ) et c'est la raison pour laquelle j'utilise Adrilight à la place de celui-ci. ( Vous pouvez tester les 2 mais Adrilight est plus souvent mis à jour ).

 

Le but de ce tuto sera donc de reprendre mon installation Ambilight mise en place pour mon Ordinateur Portable et utiliser Adrilight à la place de Prismatik ou AmbiBox.

 

Pour ce Tuto j'ai utilisé :

  • Mon Ordinateur Portable sous Windows 10
  • Un Arduino Nano ( mais vous pouvez utiliser un autre modèle).
  • une bande de LEDs WS2812B
  • Le logiciel Adrilight ( actuellement en version 0.14, vérifier si une nouvelle version est dispo).
  • Le logiciel Arduino IDE correctement configuré pour votre Arduino et avec la bibliothèque FastLED d'installé.

 

Préalable

 

Nous aurons besoin de : 

  

Programmation de l'Arduino Nano

 

Comme mentionner plus haut il est possible d'utiliser divers modèles d'Arduino mais n'ayant qu'un Nano en ma possession, je ne peux vous proposer que celui-ci en programmation.

 

Nous allons donc programmer notre nano avec le fichier adrilight.ino se trouvant dans notre archive adrilight_0.1.4.zip.

Une fois l'archive téléchargé :

  • La décompresser, Entrer dans le dossier adrilight_0.14 puis Arduino et enfin double cliquer sur adrilight.ino
  • Si vous n'avez pas lié l'ouverture des fichiers ino, ouvrir le logiciel Arduino IDE puis cliquer sur Fichier, Ouvrir puis naviguer jusqu’à votre dossier extrait et sélectionner le fichier adrilight.ino
  • On vous demandera de déplacer le fichier dans un dossier adrilight, cliquer sur Oui.
  • Votre fichier s'ouvre.

 

Il n'y a pas grand chose à modifier dans ce fichier seulement 3 valeurs à savoir le nombre de LEDs, le type de bande utilisé et le numéro de la broche sur laquelle celle-ci est connectée.

 

Si vous utilisez des bandes SPI ( 4 fil ) il va falloir ajouter des lignes de code. Nous allons donc rajouter :

  • En haut de fichier, sous la ligne #define LED_DATA_PIN

#define LED_CLOCK_PIN 7

  • Dans la partie void Setup, sous la ligne FastLED.addLeds<WS2812B, LED_DATA_PIN, GRB>(leds, NUM_LEDS); ces 2 lignes

 //FastLED.addLeds<APA102, LED_DATA_PIN, LED_CLOCK_PIN , RGB>(leds, NUM_LEDS);

 //FastLED.addLeds<WS2801, LED_DATA_PIN, LED_CLOCK_PIN , RGB>(leds, NUM_LEDS);

 

Nous obtenons donc un fichier ressemblant à ceci :

 

Passons maintenant à la configuration de notre fichier. Voici un petit rappel de mon installation et des schémas de câblages.

J'ai utilisé 2 bandes de WS2812B de 19 LEDs à l’horizontale et 2 bandes de 12 LEDs à la verticale portant le nombre total à 62 LEDs. Pour le câblage, n'ayant pas de Clock j'utiliserai le 1er schéma en connectant le DATA sur la broche D5.

Voici donc les modifications effectués sur le fichier :

  • #define NUM_LEDS (2*73+2*41) en #define NUM_LEDS (2*19+2*12)
  • #define LED_DATA_PIN 3 en #define LED_DATA_PIN 5 
  • #define LED_CLOCK_PIN 7 en //#define LED_CLOCK_PIN 7 ( car bande à 3 fil )

Je n'ai pas modifié le type de bandes car il correspond à ma configuration.

 

Si vous avez des WS2801 ou des APA102/APA102C/SK9822, il faudra commenter la ligne  FastLED.addLeds<WS2812B, LED_DATA_PIN, GRB>(leds, NUM_LEDS); en ajoutant un // devant et de-commenter, en supprimant ce // celle qui correspond à vos bandes.

 

Par exemple pour des APA102/APA02C/SK9822, voici les modifications que j'aurai apportés :

 

Pour résumé j'aurai :

  • De-commenté les lignes #define LED_CLOCK_PIN 7 ansi que FastLED.addLeds<APA102, LED_DATA_PIN, LED_CLOCK_PIN , RGB>(leds, NUM_LEDS); 
  • Commenté la ligne FastLED.addLeds<WS2812B, LED_DATA_PIN, GRB>(leds, NUM_LEDS); 

Une fois que le fichier prêt programmons notre Arduino en cliquant sur  Outils puis sur Téléverser.

 

Pour Information : Lorsque vous alimenterez votre Arduino,  vos LEDs doivent s'allumer et former un Arc-en-Ciel rotatif. ( Illumination d'attente ). Celui-ci confirmera la bonne configuration de votre installation.

 

Passons maintenant  à la configuration de notre logiciel Adrilight.

 

Configuration d'Adrilight

 

Maintenant que nos LEDs sont en place et que notre Arduino est programmé, nous allons voir comment configurer notre logiciel de gestion Ambilight.

 

Dans l'archive que nous avons décompresser nous avions un dossier PC de présent. Il contient le programme à exécuter.

Renommer ce dossier PC en Adrilight et copier le par exemple dans Program Files ou un autre dossier de votre choix.

Entrer dans ce dossier puis exécuter Adrilight.exe

Nous arrivons donc sur cette interface de configuration:

( je vous ai mis les 2 fenêtres de configuration pour vous montrer la faible différence entre Bambilight et Adrilight, seulement l'ajout d'une ligne de choix).

 

Cette ligne supplémentaire permet de choisir entre 2 mode de luminosité, Linear Lighting et Non-Linear fading qui, si on traduit en français nous donne Eclairage Linéaire et Fondu Non-linéaire. Ne me demander pas la différence entre les 2 je ne serai pas quoi vous repondre.

 

Par contre j'ai trouvé que le mode Linear Lighting était plus lumineux et les blancs moins terne qu'avec l'option Non-linear Fading.

Voici des impressions que j'ai trouvé sur le Github pour vous montrez les 2 modes en fonctionnement :

 

 

Pour revenir à notre interface, il y a plusieurs options à modifier sur celle-ci. Procédons par ordre. Dans un premier temps :

  • Vérifier que le port COM sélectionner est celui qui correspond a celui de l'Arduino, dans mon cas COM3
  • Allumer les LEDs en cochant la case LED-Output ( les LEDs s'allument de différentes couleurs ).
  • Ensuite nous allons afficher la disposition virtuel de nos LEDs en cochant la case Test-Overlay ( à cocher / décocher au fur et à mesure de vos modifications pour en vérifier les effets, car l'interface reste au 1er plan lorsque la case est cocher, pas évident pour tester sinon).

Pour Information  : lorsque vous cocherai la case Test Overlay, si vous avez choisi le mode Non-linear fading cliquer sur Linear Lighting pour allumer plus intensément vos LEDs, sinon vous ne verrez pas grand chose lors de vos tests ( Leds à peine allumées lorsque le mode Non-linear Fading est sélectionné).

 

Nous obtenons cette interface :

ps: Ne pas prêter attention à Paint, je m'en suis servi pour avoir un fond blanc et pour la sauvegarde de mes impressions écrans.

On notera les 4 cases noirs dans chaque coins qui correspondent virtuellement aux LEDs.

 

Passons à la configuration de nos bandes. Comme indiqué je possède 19 LEDs à l’horizontale, 12 LEDs à la verticale et le sens de rotation de mes LEDs est l'inverse des aiguilles d'une montre face à l’écran. Je vais donc :

  • Incrémenter la valeur X de 2 à 19 et la valeur Y de 2 à 12
  • Cocher la case Mirror X-Axis pour modifier le sens de rotation.

Voici ce que j'obtiens :

On constatera que le sens de rotation à était inversé et que j'ai bien 19 cases à l'horizontale, 12 à la verticale.

 

On voit aussi que les zones de détection sont petites et espacées, nous allons donc les modifier en conséquence.

Petit calcul : Je dispose d'une résolution de 1920*1080 donc je vais diviser:

  • La Résolution Horizontale / par Nombres de LEDs X ce qui nous donne : 1920 / 19 = 101
  • La Résolution Verticale / par Nombres de LEDs Y ce qui nous donne : 1080 / 1290

Je vais donc assigner dans Spot Width la valeur 101 et dans Spot Heigth la valeur 90. Pour une meilleur détection de couleurs je vais réduire les valeurs Border Distance X et Y à 0 pour les rapprocher au plus prés du bord de l’écran.

Voici le résultat :

 Les plus attentifs verrons une erreur. En effet si l'on regarde attentivement l'interface de configuration, le nombre de LEDs est inexact, il affiche 58. Certains me dirons mais 19*2 + 12*2 = 62 alors comment se fait-il que celui affiche 58, donc 4 LEDs de moins.

 

Je pense que le logiciel ne prend pas en compte les LEDs se trouvant dans les coins dans le calcul. Il faudra donc lui indiquer une LED de plus par bandeau ce qui ferai dans mon cas :

  • 20 ( 19 + 1 )*2 + 13 ( 12 + 1 )*2 = 66 ( on arrive à 62 si on enlève 4 LEDs, valeur qui est affiché dans le logiciel ).

J'ai également redimensionner mes zones de capture en fonction du nouveau nombre de LEDs en passant de 101 à 96 pour la valeur Spot Width et de 90 à 83 pour la valeur Spot Heigth.

 

A vous de voir les valeurs qui vous conviennent le mieux pour arriver a un paramétrage parfait.

 

Ma  disposition est maintenant conforme. Lorsque je lance la vidéo ci-dessous, malgré le fait que je n'ai pas de LEDs dans les coins, les couleurs sont synchrones, aussi bien en ayant les 4 couleurs primaires formant un + qu'en formant un x ( voir plus bas ). Tout est parfaitement aligné et concorde avec ma disposition de LEDs ( alors que j'avais un décalage en ayant paramétré le nombre réel de mes LEDs à savoir 19 et 12 LEDs ).

 

Certains me diront après avoir lu ces lignes : 

 

Comment se fait-il que l'alignement soit bon alors que l'on rajoute 4 LEDs dans les coins, soit disant pour combler leurs manque, d'autant que cette installation n'en dispose pas ?

 

Je ne peux malheureusement pas répondre à cette question pour le moment mais je vais en faire part au créateur en vue d'éclaircir ce point, bien que cette question à déjà était posé sur le github de Bambilight et est resté sans réponses depuis.

 

Pour ceux qui ont fait débuter leur bande autre part que dans un coin il est possible de faire glisser la position la première LED en jouant sur la variable Offset qui se trouve dans la partie LEDs.

 

Imaginons que ma 1ère LED, se trouve sur la partie basse droite de mon écran, débutant au milieu et non plus dans le coin bas à gauche. Il faudra donc que je déplace sa position de 10 LED vers la droite. Pour cela :

  • Incrémenter la variable Offset de 0 à 10.

Comme indiqué plus haut, pour faciliter la configuration de votre installation, lancer la vidéo de test RGB, faite un pause lorsque les 4 couleurs forme un + et un x. Si vous constater un décalage, incrémenter ou diminuer la valeur Offset par dichotomie puis relancer la vidéo pour vérifier vos modifications sur vos LEDs.

Je n'ai pas modifié d'autres valeurs sur cette interface. Voici une petite explication des autres options que l'on trouvera :

  • Jouer sur les valeurs Offset X et Y fera se déplacer les zones de détection de couleurs vers la Gauche/Droite ou vers le Haut/Bas.
  • Incrémenter la valeur Leds per Spot de 1 à X multipliera le nombre de LEDs par X ( Par exemple, incrémentons la valeur à 2. Si je compte le nombre de LEDs allumées en bleu lorsque j'affiche l'image de gauche, il passera de 11 LEDs à 22 LEDs et ainsi de suite ). Personnellement, cette fonction ne me sert pas donc laisser par défaut sur 1.
  • Incrémenter la valeur Saturation Threshold ( Seuil de saturation ) n'a pas agi sur mon installation. Je ne vois pas à quoi cette fonction peut servir. ( Si quelqu'un sais, si il peu m'enoyer un mail ça serai sympa de sa part, merci. )
  • Incrémenter Minimum Refresh Rate ms ( Taux de rafraîchissement Minimum en millisecond ) augmentera le délai de transition dans les changement de couleurs. Par exemple, si vous incrémenter la valeur jusqu’à 1000, le changement de couleurs de vos LEDs se fera après 1 secondes et non plus de manière instantanée( 0 ) . Cette option est utile pour ceux qui veulent réduire le temps de transition entre chaque changement de couleurs.

 

Il ne me reste plus que quelques options à aborder, notamment celle qui se trouve dans la partie Control.

Nous avons déjà vu l'effet de 2 des 4 options présentes à savoir LED-Output, pour allumer ou éteindre les LEDS et Test-Overlay  pour afficher ou pas le schéma de disposition des LEDs.

 

Les 2 autres,  vous l'aurez compris en voyant leurs noms servent à activer le démarrage minimisé ( Start Minimized ) et à démarrer automatiquement notre programme ( Autostart ).

 

Petit regret, l'incapacité de désactiver l'Ambilight par Double Clic, bien utile lorsque l'on est absent pendant une courte période pour éteindre momentanément les LEDs et les réactiver facilement à son retour. ( obligation de décocher la case LED-Output ou de  quitter le programme pour éteindre les LEDs ).

 

Conclusion

 

A part ce petit désagrément Adralight reste une bonne alternative à AmbiBox ou Prismatik. Je l'ai même trouvé plus stable que ces 2 solutions. Il en existe encore une autre, à base d'un Nodemcu/ESP8266 que je traiterai ultérieurement dans un nouveau tuto.

 

C'est toujours mieux de pouvoir comparer et d'avoir le choix entre plusieurs solutions différentes. A vous de choisir celle qui vous faut...

 

Un grand merci à Fabsnet et à MrBoe pour leur travail.

 

 

Bon mod à tous !!!

Commentaires : 10 (Discussion fermée)
  • #1

    loic (samedi, 24 juin 2017 20:33)

    tres bon tutos malheureusement pour moi je pense avoir un probleme avec les leds ws2812b j ai que 2 leds d allumer en permanence et elle ne reagi pas j utuilise une alimentation dc 5v 10A si vous avez des recomoandation je suis preneur

  • #2

    YouS (dimanche, 25 juin 2017 18:07)

    Merci loic.

    Est ce que tu as moyen de tester tes LEDs autrement, par exemple en envoyant un autre Sketch ino dans ton Arduino pour voir si elles s'allument.

    Sinon créer un nouveau Ino dans Arduino IDE, supprime son contenu et copie ceci à l’intérieur sans oublier de changer le nombre de LED.

    #include <Adafruit_NeoPixel.h>

    #define PIN 5
    #define N_LEDS 144

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

    void setup() {
    strip.begin();
    }

    void loop() {
    chase(strip.Color(255, 0, 0)); // Red
    chase(strip.Color(0, 255, 0)); // Green
    chase(strip.Color(0, 0, 255)); // Blue
    }

    static void chase(uint32_t c) {
    for(uint16_t i=0; i<strip.numPixels()+4; i++) {
    strip.setPixelColor(i , c); // Draw new pixel
    strip.setPixelColor(i-4, 0); // Erase pixel a few steps back
    strip.show();
    delay(25);
    }
    }

    Tu saura si c'est un problème de LED ou pas. Envoi moi un message sur la page contact au pire en mettant ton adresse mail.
    @+

  • #3

    jC_Omega (mercredi, 19 juillet 2017 11:13)

    Merci pour tous ces tuto, je viens de tester celui ci qui donne des résultat très correct.
    Suite à tes conseil je vais approcher mon écran du mur (actuellement les LED sont à 18cm) (j'ai 138led ws2812 soit 26 led de haut sur 43 de large)
    Petite question à l'expert : pour une utilisation confort de travail + jeux quel logiciel préfère tu ? adrilight, Prismatik, AmbiBox, ou autre? (j'ai juste testé adrilight)

    Je ne manquerais pas de poster quelques photos sur mon blog dans les prochains jours une fois terminé.
    a++

  • #4

    YouS (mercredi, 19 juillet 2017 15:09)

    Salut Omega !!!

    Voici mon classement de préférence :
    - Synlight car celui-ci fonctionne en Wifi avec des NodeMCU
    - Adrilight et Prismatik au même rang car ils se valent tout les 2. Par contre prendre la version Unofficial. Prismatik fonctionne pour les jeux d’âpres ce qu'on m'a dit donc à voir. ( Tu peux que confirmer si ça marche ou pas avec Adrilight STP. Merci d'avance /;-/) )
    - Ambibox dernier car c'est une usine à gaz comparé au 3 autres bien qu'il soit pas si mal que ça non plus.

    Après tu en a d'autres que je n'ai pas traité comme Blinckstick, JambiLight, Lightz...

    J'irai voir ton install sur ton blog. Par contre pour moi l'aventure s’arrête la. Je dois m'occuper de ma situation et ne peux malheureusement pas continuer à alimenter le blog avec de nouveau sujet. ( bien que je pense avoir traité une grande majorité de possibilité ).

    Je suis en train de finaliser un dernier sujet sur le Hue et empêcherai de poster des commentaires sur l'ensemble des articles mais ils resteront toutefois accessible. ( d'ici la fin du mois je pense ).

    Si tu as besoin d'autres choses...++

  • #5

    jC_Omega (mercredi, 19 juillet 2017 15:38)

    Merci du retour. Je vais tester prismatik, J'en t'enverrais un message, une fois l'article fait sur mon blog poussiéreux.
    A++

  • #6

    jC_Omega (mercredi, 19 juillet 2017 15:39)

    A oui zut : Adrilight marche très bien pour les jeux (j'ai testé Firewatch qui est très coloré). Il est très léger.

  • #7

    YouS (mercredi, 19 juillet 2017 15:45)

    Ok merci c'est bon à savoir. Je n'avais pas de jeux donc merci pour les infos.
    Je le rajouterai sur l'article.
    @+

  • #8

    baptboy (jeudi, 20 juillet 2017 19:50)

    salut a toi déjà un grand merci pour ton tuto bon tous fonctionne sauf que si j affiche une couleur bleu la led et rouge par contre si j affiche le vert ces bien le vert
    et le rouge s affiche en bleu a tu une solution

  • #9

    YouS (jeudi, 20 juillet 2017 19:56)

    Salut. Merci.

    Tu peux reprogrammer ton Arduino en changeant l'ordre des couleurs. Il faut que mette rgb au lien de bgr ou vice versa. Le vert est bon donc ne change pas de place.
    @+

  • #10

    baptboy (jeudi, 20 juillet 2017 21:59)

    Merci ca fonctionne en GRB