logo du siteLe Site du Gnu-Bricoleur

/!\ Un blog plébiscité par Chuck Norris O_o

Amiblight avec Arduino et ruban WS2811S

Rédigé par SuperGNU Aucun commentaire

Introduction

J'ai récupéré à mon club robotique un grand morceau de ruban de LED RGB inutilisé. J'ai eu l'idée d'en faire un clone d'ambilight (lumière d'ambiance adaptative au contenu de l'écran) pour mon grand écran de PC. Je pensais qu'avec quelques lignes de Python et une Arduino le problème serai vite réglé. J'ai en fait rencontré deux principaux obstacles, la génération d'une consigne pour le ruban et le pilotage du ruban en lui-même. Je poste donc ici la solution si jamais quelqu'un rencontre le même problème.

Génération de la consigne

Je pensais naïvement que la détermination de la couleur moyenne d'une image se faisait simplement en faisant une moyenne par composante de chaque pixel d'une image. PAS DU TOUT ! ;-)

La couleur obtenue avec cette technique étant désespérément gris~marron, j'ai réfléchi un peu et je me suis rendu compte que le mieux était non pas de faire la moyenne des couleurs mais de chercher la couleur dominante de l'image pour déterminer la couleur de l'ambiance. Là encore, ce n'est pas facile à déterminer, comme l'explique assez bien ce site, la détection de la couleur perçue comme étant la couleur dominante est plus compliqué que de chercher la couleur la plus présente dans l'image. Au passage un autre [site intéressant]( http://charlesleifer.com/blog/using-python-and-k-means-to-find-the-dominant-colors-in-images/) sur la question présentant un algorithme un peu différent et la bibliothèque que j'ai utilisé en python pour faire mes tests.

In fine (on ne dit pas au final ...;-)), j'ai réussi à avoir un programme donnant des résultats satisfaisants pour une capture d'écran et là .... katastroph ! Lorsque je fais boucler le script, pour prendre une capture, analyser, envoyer la couleur au ruban la couleur n'est mise à jour qu'un peu plus d'une fois par seconde et un cœur de mon processeur est monopolisé à 100%. Même en optimisant le code et en repartissant sur plusieurs threads pour améliorer l'utilisation des cœurs, je sentais que mon script resterait lent et consommateur de ressources. Avant d'envisager la réécriture en C, j'ai voulu regarder "ce qui ce faisait ailleurs et comment ça ce faisait" (Note à moi-même : la prochaine fois, COMMENCER par étudier l'état de l'art !).

Je suis tombé (sans me faire mal !) sur le projet Adalight (Opensource !) qui bien que n'étant pas compatible avec mon ruban (évidement, c'est compatible avec leur ruban :-)) correspondait exactement à ce que je souhaitais faire. Avec en plus comme bonus non négligeable la gestion du multi-écran et le traitement de l'image de l'écran de façon à faire correspondre la couleur du morceau de ruban avec la couleur du bout d'écran accolé (pas clair) ce qui correspondait à la deuxième étape (laborieuse) de mon projet. Le script tournant sous processing, il était donc de plus théoriquement compatible Linux (évidement) et Windows ce qui pouvait être sympa pour quand je reboot sous Windows. Lien du dépôt Github avec le code J'ai donc décidé d'utiliser le script d'Adafruit avec quelques modifications.

ATTENTION : Ce script ne fonctionne correctement qu'avec Processing 2.X.X Personnellement je n'ai aucun soucis avec Processing 2.2.1, il ne fonctionne par contre plus avec Processing 3.

Pilotage du ruban

Ayant décidé d’utiliser le code d'Adalight, il me fallait du coup coder un script Arduino compatible avec le WS2811, le driver de mon ruban. Le script d'Adalight permettait le controle d'un ruban en SPI tandis que le WS2811 se comporte plutôt comme un shift register. Le code est fortement inspiré du code original d'Adafruit et d'exemples d'utilisation de la librairie FastLed trouvés sur internet (je sais plus ou :-°). Les deux scripts dans le dépôts fonctionnement parfaitement ensemble, si vous cherchez à faire un Adalight, vous ne devriez avoir à modifier que la définition de votre écran dans le script Processing. Lien du dépôt Github avec le code

Conclusion

Une petite vidéo de démonstration (Adalightception) : https://youtu.be/6d2rLEUgs84

Sur mon i5 de 4ème génération, le programme consomme environ 10% de ressources, c'est beaucoup mais ça reste raisonnable et surtout le rafraîchissement est plutôt rapide (comme on peut le voir dans la vidéo).

Classé dans : Projets Mots clés : aucun

Ecran LCD OpenSmart et couleurs 16 bits 565

Rédigé par SuperGNU Aucun commentaire

Adafruit propose de beaux shields écran pour Arduino mais il sont un peu chers. OpenSmart vend des clones compatibles (dans une certaine mesure) avec les bibliothèques d'Adafruit. Néanmoins, sur mon écran, les couleurs ne s'affichaient pas correctement et de plus, je trouvais le choix de couleur proposé dans les exemples Adafruit un peu maigre. Voici comment corriger le problème des couleurs inversées sur certains écrans LCD et étoffer la gamme de couleurs disponibles.

Lire la suite de Ecran LCD OpenSmart et couleurs 16 bits 565

Classé dans : Projets Mots clés : aucun

Tout faire avec son Raspberry Pi

Rédigé par SuperGNU Aucun commentaire

Depuis que j'ai mon Raspberry Pi, je me suis rendu compte qu'avec un peu de persévérance et d'astuce, on peut vraiment tout faire avec son mini ordinateur.

Voila donc la liste des meilleurs programmes et logiciels pour le Raspberry Pi. Il sont tous utilisables au quotidien si on accepte le fait que le Raspberry Pi n'est pas un "foudre de guerre".

Les programmes sont rangé par catégories et sont installable via "sudo apt-get install nomduprog" en console ou via Synaptic qui tourne sur le Raspberry Pi mais qui est lent.

Lire la suite de Tout faire avec son Raspberry Pi

Fabriquer une imprimante 3D avec du matériel de récupération !

Rédigé par SuperGNU Aucun commentaire
Vous ne savez pas quoi faire avec votre Raspberry Pi ? C'est étonnant, le Raspberry Pi offre tellement de possibilités ! Pour changer un peu des Media-Centers et des tutoriels expliquant comment préparer la carte SD, je vais vous présenter mon projet d'imprimante 3D entièrement conçue avec des matériaux de récupérations (bien que commandée par un Raspberry Pi). Cela peut vous paraître impossible mais il est relativement facile d'obtenir de modestes résultats sans gros investissements financiers.

Des exemples
Je vais donc vous présenter, étape par étape, avec les codes sources et des photos, comment j'ai réalisé mon prototype. ATTENTION! : Mon projet n'est pas encore totalement abouti mais il est en très bonne voie. Les instructions complètes seront publiées quand j'en aurai le temps et quand tout fonctionnera parfaitement. En attendant, voila déjà un début pour vous donner une idée du projet et pour ceux qui sont pressés, voici un pack contenant mes codes sources:imprimante_arduino_4.zip.

Lire la suite de Fabriquer une imprimante 3D avec du matériel de récupération !

Fil RSS des articles