Créer un contrôleur ARGB avec Arduino Nano

J’ai récemment monté un nouveau PC trouvé dans les poubelles avec des ventilateurs RGB vraiment sympas, mais malheureusement, la carte mère est un peu ancienne et ne dispose pas de header ARGB. Plutôt que d’acheter un contrôleur ARGB tout fait, j’ai décidé d’en fabriquer un moi-même avec un Arduino Nano qui traînait dans mes tiroirs. Voici comment j’ai procédé !

Câblage

L’avantage de l’Arduino Nano, outre sa taille facile à glisser dans un boîtier, est qu’il fonctionne en 5 V. Il est donc facile de l’alimenter avec un câble Molex ou en USB.

Le câblage est très simple, le seul composant additionnel requis est une résistance de 470 ohms. Le pin D2 transmet le signal ARGB aux ventilateurs et le pin D3 est connecté au bouton Reset du PC qui servira plus tard à contrôler l’éclairage. Il est possible d’alimenter l’Arduino en 5V depuis l’alimentation du PC ou bien d’utiliser en câble USB.

Schéma de câblage de l'Arduino Nano

L’Arduino peut être collé facilement avec un adhésif double face. Pour ma part j’ai utilisé une bande Command 3M ce qui permet de le détacher pour le reprogrammer puis le replacer par la suite. L’important est que l’adhésif soit suffisamment épais pour éviter tout court-circuit avec le métal du boitier.

Code

Pour piloter les LEDs, j’ai utilisé la bibliothèque FastLED, qui est une référence pour contrôler des LEDs adressables. Elle supporte une tonne de modèles de LEDs (WS2812B, WS2811, APA102, etc.) et offre des fonctions très pratiques pour créer des animations.

Installation de FastLED

Dans l’IDE Arduino :

  1. Croquis → Inclure une bibliothèque → Gérer les bibliothèques
  2. Rechercher « FastLED »
  3. Installer la dernière version

Exemple simple

Voici un bout de code pour tester que tout fonctionne. Les LEDs devraient toutes s’allumer en blanc. Pensez à modifier le nombre de LED et le type (les WS2812B sont très répandues).

#include <FastLED.h>

#define NUM_LEDS 8         // 8 LEDs
#define DATA_PIN 2         // Pin de données
#define LED_TYPE WS2812B   // Type de LED
#define COLOR_ORDER GRB    // Ordre des couleurs (important !)

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(255);
}

Réglage de la colorimétrie

Ce premier test a été plutôt… décevant. Pour du blanc pur (255, 255, 255), j’ai obtenu une couleur dans les bleu-rose.

Après quelques recherches, j’ai découvert que les LEDs WS2812B bon marché (comme celles de mes ventilateurs) ont souvent des composantes RGB très mal équilibrées.

La solution : FastLED.setCorrection()

FastLED dispose d’une fonction pratique qui permet de corriger automatiquement ces déséquilibres : FastLED.setCorrection(). Il suffit de lui passer une valeur hexadécimale qui compense les défauts de vos LEDs.

FastLED.setCorrection(0xFFD750);  // Ma correction personnalisée

Pour trouver la bonne valeur, il n’y a qu’une seule solution : faire des essais successifs jusqu’à trouver une bonne valeur d’équilibre. Cela demande beaucoup de patience mais le résultat final sera à la hauteur de vos attentes !

Astuce : Déterminer automatiquement le nombre de LEDs

Au début, je n’étais pas sûr du nombre de LEDs de mes ventilateurs. Il n’existe pas de documentation détaillée pour mes ventilateurs donc j’ai créé un petit programme de test qui allume chaque LED une par une :

#include <FastLED.h>

#define MAX_LEDS 255        // Maximum possible
#define DATA_PIN 2
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define DELAY_MS 200        // Délai entre chaque LED (en millisecondes)

CRGB leds[MAX_LEDS];

void setup() {
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, MAX_LEDS);
  FastLED.setBrightness(100);  // Luminosité moyenne pour le test
  FastLED.clear();
  FastLED.show();
}

void loop() {
  // Allume chaque LED successivement en rouge
  for (int i = 0; i < MAX_LEDS; i++) {
    FastLED.clear();           // Éteint toutes les LEDs
    leds[i] = CRGB::Red;       // Allume la LED courante en rouge
    FastLED.show();
    delay(DELAY_MS);
    
    // Si vous voyez cette LED s'allumer, notez son numéro !
    // Le comptage commence à 0, donc LED 0 = première LED
  }
  
  // Pause avant de recommencer
  FastLED.clear();
  FastLED.show();
  delay(2000);
}

Création d’une animation « Fleurs de cerisier »

Une fois la base fonctionnelle, je voulais créer quelque chose de visuellement agréable. J’ai opté pour un effet « fleurs de cerisier » (sakura) avec des tons roses qui se déplacent doucement le long des LEDs.

Le concept

L’idée est simple : générer aléatoirement des couleurs dans les tons roses pastel, puis les faire circuler d’une LED à l’autre avec des transitions fluides. Ça donne l’impression de pétales qui flottent au vent.

Génération des couleurs

CRGB generateBlossomColor() {
  byte hue = random(220, 256);    // Teintes rose-rouge
  byte sat = random(50, 130);     // Saturation basse = effet pastel
  byte val = random(200, 255);    // Luminosité douce
  return CHSV(hue, sat, val);
}

J’utilise le modèle HSV (Teinte, Saturation, Valeur) plutôt que RGB car c’est beaucoup plus intuitif pour créer des palettes de couleurs. Les valeurs aléatoires donnent un côté organique très sympa.

Animation fluide avec interpolation

Le secret d’une animation fluide, c’est l’interpolation. Au lieu de changer brutalement de couleur, je fais une transition progressive :

CRGB color1 = colors[i];
CRGB color2 = colors[i + 1];
leds[i] = color1 % (255 * (1 - position)) + color2 % (255 * position);

La variable position varie de 0 à 1, créant une transition en douceur. J’incrémente cette position à chaque frame avec un petit FADE_STEP de 0.003, ce qui donne une animation très lente et hypnotique.

Contrôle de la luminosité avec le bouton du boîtier

La dernière amélioration, et pas des moindres : pouvoir contrôler la luminosité sans avoir à reprogrammer l’Arduino. J’ai utilisé le bouton Reset de mon boîtier (celui qui sert normalement à réinitialiser le PC mais qui fait double emploi avec le bouton Power) pour cycler entre différents niveaux de luminosité.

Connexion du bouton

Le bouton reset de la plupart des boîtiers PC a deux fils : un signal et une masse. Je les ai connectés à la pin D3 de l’Arduino (avec la résistance pull-up interne activée) et au GND.

pinMode(BUTTON_PIN, INPUT_PULLUP);

Niveaux de luminosité

J’ai défini 6 niveaux de luminosité : 100%, OFF, 20%, 40%, 60%, 80%. À chaque pression sur le bouton, on passe au niveau suivant.

const uint8_t brightnessLevels[] = { 255, 0, 51, 102, 153, 204 };

Sauvegarde en EEPROM

Enfin, le niveau de luminosité est sauvegardé dans l’EEPROM de l’Arduino. Comme ça, quand j’éteins et rallume mon PC, la luminosité reste celle que j’avais choisie !

EEPROM.update(EEPROM_BRIGHTNESS_ADDR, brightnessIndex);

Le code complet

Voici le code complet que j’utilise actuellement sur mon PC. N’oubliez pas d’adapter NUM_LEDS selon votre configuration ! Il est disponible dans ce gist : https://gist.github.com/LenweSaralonde/3ded8133064a41106923e75b11ee9269

Résultat final

Le résultat est franchement stylé, surtout pour du matériel d’entrée de gamme et issue en grande partie de récupération.

Ça claque, hein ?

Personnalisation

Il est possible de modifier très simplement le code pour donner un tout autre style :

Autres effets de couleurs :

  • Bleu glacier : hue = random(140, 180)
  • Coucher de soleil : hue = random(0, 40)
  • Arc-en-ciel : hue = random(0, 255)

Vitesse d’animation :

  • Animation rapide : FADE_STEP = 0.01
  • Animation ultra lente : FADE_STEP = 0.001

Il est aussi possible d’utiliser le bouton pour switcher entre différents patterns et couleurs. La seule limite est votre imagination !

Ajout du RGBs sur une Nintendo 64 PAL (EUR) avec le N64 RGB de Tim Worthington

Une sortie vidéo RGBs permet d’obtenir la meilleure qualité d’image possible sur une console de jeux vidéo rétro car les signaux des trois couleurs primaires ainsi que de la synchronisation sont séparés sur 4 fils différents.

Ce qui représente pour nous le Saint Graal au XXIè siècle était en réalité une bidouille des constructeurs comme Nintendo et SEGA dans les années 80 afin de rendre les consoles compatibles avec nos téléviseurs SECAM, en injectant directement le signal RGB vers le tube cathodique par la prise Péritel.

Dans les années 90, la plupart des téléviseurs supportant désormais le standard PAL, les constructeurs ont commencé à retirer la sortie RGBs de leurs machines. C’est ce choix qu’à fait Nintendo pour sa Nintendo 64.

Les premiers modèles de Nintendo 64 NUS-001(FRA) vendus en France sont équipés d’une puce vidéo capable de sortir un signal RGBs nativement, un mod très simple permet de rétablir la sortie RGBs en ajoutant quelques composants passifs mais cette version est très recherchée par les collectionneurs et les prix s’envolent.

L’autre modèle, beaucoup plus répandu (et donc beaucoup moins cher), est la version européenne PAL NUS-001(EUR). Son chipset vidéo produit des signaux composite et s-vidéo mais pas de RGB. Il est toutefois possible de fabriquer un câble s-video PAL mais beaucoup de téléviseurs CRT d’entrée de gamme ainsi que l’OSSC ne disposent pas d’entrée s-video.

Le N64 RGB est un mod qui a été inventé par l’australien Tim Worthington. Doté d’une puce vidéo moderne, il permet de rétablir une sortie RGB avec quelques extras comme un filtre deblur et la possibilité de reset la console avec la manette.

Le mod est disponible sur sa boutique en ligne pour 60 dollars australiens (soit environ 35 €) mais les frais de port (et de douane) sont très élevés. Heureusement, il est aussi disponible sur Mod in France qui le propose pour environ 50 € avec les frais de port et une livraison rapide.

Le kit comprend un PCB à coller sur le radiateur, des connecteurs à souder sur le chipset vidéo de la N64 et sur le PCB ainsi qu’une nappe pour relier les deux. Il vous faudra prévoir quelques fils de câblage en plus pour relier le PCB au multi-out de la console, ainsi qu’à la manette et au bouton reset.

⚠️ Avant d’acheter, vous devrez vérifier quelle puce vidéo est installée dans votre console car certaines sont plus petites et nécessitent un adaptateur. Le câblage est également différent selon le modèle.

Les instructions sur le site de Tim Worthington sont relativement simples à comprendre et les connecteurs désormais fournis avec le kit rendent l’installation très facile, même avec un fer à souder d’entrée de gamme. Astuce : la Patafix pour maintenir les composants en place c’est super pratique !

⚠️ Le câblage de la nappe peut être inversé, auquel cas il faudra souder le connecteur sur le PCB du N64 RGB à l’envers par rapport à celui soudé à la puce graphique de la console. En cas d’erreur, n’essayez pas de déssouder le connecteur du PCB au risque de l’endommager de façon irréversible. À la place, démontez la nappe en glissant une lame de cutter sous les broches en plastique et tirez sur les fils, ils viendront très facilement et vous pourrez les réordonner en suivant le bon câblage.

Ce mod prend moins d’une heure à installer et le résultat est juste parfait. Pour ma part, j’utilisais un upscaler chinois doté d’une entrée s-vidéo à 20 € mais avec un désentrelacement catastrophique. Je peux désormais utiliser le câble de ma Super Nintendo sur mon OSSC et jouer en 60 FPS sur mon écran OLED.

Et vous, envisagez-vous d’installer ce mod dans votre N64 PAL ? Dites-le nous en commentaire !

Soirée Warcraft 30 World Tour à Londres pour les 30 ans du jeu

Pour célébrer les 30 ans de la licence Warcraft, Blizzard a organisé le Warcraft 30 World Tour, une tournée mondiale de soirées exceptionnelles pour les fans, dans 6 grandes villes du monde : Londres, Séoul, Toronto, Sydney, São Paulo et Boston.

Le samedi 22 février 2025 s’est tenu le premier événement, à Londres au One Marylebone, auquel j’ai eu le privilège de participer, accompagné de Lina, Embu et Olivier.

Olivier, Embu, Lenwë et Lina

Des places très limitées

L’inscription aux soirées se fait par l’intermédiaire d’une billetterie gratuite. Les places, en quantité très limitée (seulement 500 pour la soirée de Londres), sont mises à disposition par vagues dans la logique du premier arrivé, premier servi. La plateforme de billetterie est très rudimentaire et ne propose pas de système de file d’attente aléatoire comme pour la BlizzCon ou le Hellfest. Il nous a donc fallu être très rapides pour cliquer à la seconde précise de l’ouverture de la billetterie pour avoir eu une chance d’obtenir le précieux sésame. Fort heureusement, les limites du système ne semblent pas avoir été exploitées par des scalpers puisqu’à ma connaissance, aucune revente de billet n’a eu lieu sur le marché noir.

Le précieux sésame a été obtenu !

Les créateurs de contenu présents sur le Discord des partenaires de Blizzard ont quant à eux pu recevoir des invitations.

Déroulement de la soirée

Le programme de la soirée était plutôt bien garni. Ce programme est plus ou moins le même pour les autres soirées de la tournée.

Tout d’abord, il était possible de rencontrer des membres importants de l’équipe de production de World of Warcraft comme Holly Longdale, Ion Hazzikostas et Maria Hamilton, ainsi que de Hearthstone avec Cora Georgiou et Christian Scharling.

Christian Scharling, Cora Georgiou,  Ion Hazzikostas et Holly Longdale

Un jeu du type de « roue de la fortune » permettait de gagner un lot supplémentaire (en plus de ceux du goody bag) déterminé en fonction du numéro obtenu. Plus le numéro est faible, plus le lot est important. Les gagnants ont ainsi pu être récompensés par des lots allant d’une mini peluche, un plaid WoTLK Classic, une édition collector de The War Within à un système de watercooling AIO pour PC customisé avec le logo des 30 ans de Warcraft.

Parmi les autres activités on pouvait aussi retrouver un « bar à patches ». Concrètement, on pouvait choisir une écharpe et un patch à faire broder dessus. Malheureusement, les deux couturières se sont retrouvées très vite débordées et on a fini par écouler le stock d’écharpes et de patches restants en quittant la soirée.

Écharpe avec patch exclusif "Warcraft 30"

Il y avait aussi l’incontournable photo booth, dans le même esprit que celui que l’on peut retrouver dans tous les mariages et autres soirées d’entreprise mais avec des accessoires bien plus badass !

Des petits fours, sandwiches et boissons sans alcool étaient distribuées aux invités tout le long de la soirée. Des cocktails alcoolisés étaient également disponibles contre £15.

Olivier présente un sandwich "Blizzard bite" et un cocktail

Beaucoup de créateurs de contenu, essentiellement anglophones, étaient présents. Le nombre d’invités étant limité, ils étaient très accessibles et échanger avec eux se faisait très naturellement, loin du stress des grosses conventions.

Un petit plateau TV était aussi installé pour y faire quelques interviews des invités.

En milieu de soirée, le DJ Kristian Nairn, plus connu pour son rôle de Hodor dans Games of Thrones, nous a offert un set personnalisé qui nous a permis d’éliminer quelques calories sur le dancefloor.

Le DJ Kristian Nairn

Enfin, la soirée s’est conclue en beauté par un concert du groupe de metal nain italien Wind Rose. 🤘

Concert de Wind Rose, avec des pioches de nain gonflables

Des goodies à gogo

Comme à son habitude, Blizzard a régalé ses invités avec un goody bag plutôt bien garni :

  • Un T-shirt exclusif « Warcraft est. 1994 » avec les dates de la tournée ;
  • Un pin’s exclusif « Warcraft 30 » ;
  • Une mini peluche ;
  • Des pièces de transmogrification dorées pour World of Warcraft ;
  • Des paquets de cartes pour Hearthstone ;
  • Un bon de réduction de -10% sur le Gear Store.
Le goody bag et son contenu

Conclusion

Je crois qu’on peut dire à l’unanimité que cette soirée était une réussite et qu’elle restera dans les mémoires des rares privilégiés qui ont pu y participer.

L’évènement ressemblait davantage à une soirée presse, avec son lot de cadreurs, photographes et journalistes, que d’une véritable fête comme l’inoubliable soirée anniversaire des 10 ans de WoW à Paris en 2014. On regrette le manque d’animation proposée, l’absence de concours cosplay, de concours de danse et autres mini jeux qui auraient pu davantage renforcer l’ambiance festive.

Le nombre de cosplayers se comptait sur les doigts d’une main, alors que cette soirée aurait pu être l’occasion de les mettre en avant. Dommage.

Enfin, même si on a pu croiser beaucoup de créateurs anglophones comme Esfand (aka « le streamer qui ressemble à Seb du Grenier »), MrGM, BelluarGaming ou encore TheKexman, il y avait très peu de créateurs européens comme la cosplayeuse suisse Kenika en tant qu’Ysera, également rencontrée à la BlizzCon. Côté francophone, seul le couple de streamers Les Goules et leur équipe avaient fait le déplacement.

Kenika en cosplay d'Ysera avec Lina

Big up à Lugia, notre CM francophone qui a parfaitement accompli son rôle de maître des cérémonies.

Vlog à la BlizzCon 2023 avec Zoltan et Embu

Après 4 années d’absence en version physique, j’ai eu l’immense privilège de me rendre à la dernière édition de la BlizzCon avec Zoltan et Embu, ainsi que les abonné(e)s de la commu WoW FR !

Ce nouveau vlog offre une belle part au cosplay.

La BlizzCon 2023 n’était qu’une étape de mon road trip californien avec Zoltan. Un autre vlog suivra soon™ sur la chaîne où nous vous montrerons des choses qui vous raviront, j’en suis sûr ! 🤩

Bon visionnage !