Ws2812 prb aléatoire

Bonjour,

J’ai un soucis avec des WS2812, pour faire une word clock, sur lequel je sèche depuis qq jours, et pour lequel quelqu’un aura, j’espère, une idée pour m’aider à le résoudre.

J’ai monté ma matrice de 15*15. Si je la teste avec les exemples fournis avec les matrices Neopixel, Neomatrix ou FatLed, je n’ai aucun problème de fonctionnement, donc il n’y a pas d’erreur de câblage.

Dans mon programme, toutes les minutes, j’ai une fonction qui décortique l’heure, et envoie à une autre fonction le numéro de la première et la dernière led de chaque mot, ainsi que la couleur à utiliser. Cette deuxième fonction est pour l’instant une simple boucle qui envoie aux leds correspondantes la nouvelle couleur à utiliser. J’ai ajouté dans cette deuxième fonction des Serial.print pour vérifier les infos transmises, et elles correspondent bien aux numéros des leds et à la couleur (il n’y a donc à priori pas d’erreur de programmation).

Par contre, ça se gâte quand je l’exécute …

De façon aléatoire, au moment du rafraichissement, les leds s’allument n’importe comment. Des leds auxquelles je n’ai rien envoyé s’allument (ou s’éteignent), et avec des couleurs non demandées !!!

J’ai eu plusieurs fois le cas ou les mots ‘Six heures’ vont correctement s’allumer une minute, mais la minute suivante, alors que j’exécute le même code, ce n’est plus bon …

J’ai même eu le cas (en voulant faire les photos jointes), ou 6h03 était mal affiché. En m’approchant, j’ai par erreur coupé mon alim (qui alimente les leds et l’arduino) et quand j’ai relancé, la même heure s’est affichée correctement !!

Est-ce que quelqu’un aurait une idée de ce qui peut se passer, ou au moins me donner une piste pour chercher d’où vient le problème ?

Voilà ma partie initialisation et setup

#include <Adafruit_NeoPixel.h>

// Paramétrage du ruban de leds
Adafruit_NeoPixel strip_2812 = Adafruit_NeoPixel(225, 11, NEO_GRB + NEO_KHZ800);

// Déclaration des tableaux qui définissent les leds utilisées pour chaque mot
// 1ère valeur : Numéro de la première led du mot (première ou dernière lettre selon le sens de la ligne data)
// 2ème valeur : Numéro de la dernière led du mot
int M1H[] = {199, 201};
int M2H[] = {214, 217};
int M3H[] = {185, 189};
int M4H[] = {165, 170};
int M5H[] = {180, 183};
int M6H[] = {207, 209};
int M7H[] = {210, 213};
int M8H[] = {191, 194};
int M9H[] = {195, 198};
int M10H[] = {218, 220};
int M11H[] = {221, 224};
// etc ... pour tous les mots à afficher

// Tableau de définition des couleurs
int Couleur[10][3] = {
  {255, 255, 255},      //Blanc
  {0, 255, 0},          //Vert
  {255, 0, 0},          //Rouge
  {0, 0, 255},          //Bleu
  {255, 204, 0},        //Doré
  {174, 170, 170},      //Gris
  {153, 204, 255},      //Bleu_Clair
  {0, 102, 204},        //Bleu_Moyen
  {153, 102, 51},       //Marron
  {255, 153, 153}       //Rose
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Setup
//////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);
  strip_2812.begin();
  strip_2812.setBrightness(30);
  strip_2812.show(); 
}

Le code qui gère l’affichage.

void Gestion_Leds(int Prem_Led, int Der_Led, uint32_t couleur) {
  int i;

  Serial.println(Prem_Led);
  Serial.println(Der_Led);
  Serial.println(couleur);

  // boucle sur les valeurs reçues en paramètre
  for (i = Prem_Led; i < Der_Led + 1; i++)
  {
    strip_2812.setPixelColor(i, couleur);
  }
  // mise à jour des leds
  strip_2812.show();
}

Bonjour,

Est ce que tu as bien découplé l'alim des leds avec un condensateur de l'ordre de 1000 µF comme recommandé?

Oui, j'ai bien un 1000µF, et une résistance (j'ai plus sa valeur en tête) sur ma ligne data.

pepe:
15×15 leds WS2812, cela fait jusqu'à 13,5 A, ce qui n'est pas rien.

Oui mais dans son application, notre ami n'allume que moins d'une vingtaine de leds à la fois.

J'ai réalisé ce branchement (juste un doute sur la résistance, je vérifierais sa valeur ce soir), mis à part que ma ligne data est sur la pin 11, et que ce n'est pas à base d'un ruban, mais des minipcb.

Ensuite mes leds sont simplement arrangées en zigzag.

Que j'alimente l'arduino avec mon pc, ou en direct depuis mon alim via la pin 5v, le problème est le même.

J'ai calculé que j'aurais besoin au max d'allumer 30 leds, ce qui fait en théorie jusqu'à 1,8A. Pour me laisser de la marge, j'ai pris une alim 3A.

Si c'était un prb de retour ou de boucle de courant, est-ce que ça ne devrait pas se faire aussi avec les exemples des librairies ?

il faut blinder la commande si non des parasites perturbent le signal envoyer aux leds