Controllo LED WS2812B (Corsair LL120)

Ciao,
voglio controllare una ventola Corsair LL120 con un Arduino Nano.

Dico subito che sono nuovo in questo campo.

Ecco il codice che ho trovato su Internet e “adattato” (ho solamente acceso tutti i led con il colore bianco):

#include <FastLED.h>
#define LED_PIN     3

#define NUM_LEDS    16
#define LED_TYPE    WS2812B
CRGB leds[NUM_LEDS];

void setup() {
  delay(1000);
  LEDS.addLeds<LED_TYPE, LED_PIN>(leds, NUM_LEDS);
  leds[1] = CRGB(255, 255, 255);
  FastLED.show();

  leds[2] = CRGB(255, 255, 255);
  FastLED.show();

  leds[3] = CRGB(255, 255, 255);
  FastLED.show();
 
  leds[4] = CRGB(255, 255, 255);
  FastLED.show();

  leds[5] = CRGB(255, 255, 255);
  FastLED.show();

  leds[6] = CRGB(255, 255, 255);
  FastLED.show();
 
  leds[7] = CRGB(255, 255, 255);
  FastLED.show();

  leds[8] = CRGB(255, 255, 255);
  FastLED.show();

  leds[9] = CRGB(255, 255, 255);
  FastLED.show();

  leds[10] = CRGB(255, 255, 255);
  FastLED.show();

  leds[11] = CRGB(255, 255, 255);
  FastLED.show();

  leds[12] = CRGB(255, 255, 255);
  FastLED.show();
 
  leds[13] = CRGB(255, 255, 255);
  FastLED.show();

  leds[14] = CRGB(255, 255, 255);
  FastLED.show();

  leds[15] = CRGB(255, 255, 255);
  FastLED.show();
 
  leds[16] = CRGB(255, 255, 255);
  FastLED.show();
}

void loop() {

}

I led si accendono, ma sembra che ci sia un disturbo di qualche tipo (allego foto e video). Inoltre, se avvicino l’orecchio alla ventola sento uno strano rumore ad alta frequenza.

Ho notato che non mettendo il codice principale nel void loop ottengo un risultato migliore.

Edit: ricordo di aver connesso per sbaglio +5v sul data pin della ventola… potrebbe essere questo il motivo?

video_2020-07-18_02-34-59_(1).gif

Invece di mettere ripetuamente
leds[1] = CRGB(255, 255, 255);
FastLED.show();
cambiando solo un numero sarebbe più leggibile se usassi un ciclo for.

Kikkiu:
Ciao,

Benvenuto,
essendo il tuo primo post in sezione ITALIANO, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:
nid69ita
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Ok, ho postato la mia presentazione nel thread fornito e letto il regolamento.
Tornando alla risposta che ha dato Arco_500… ho modificato il codice, eccolo qui

#include <FastLED.h>

#define LED_PIN     3
#define NUM_LEDS    16
#define LED_TYPE    WS2812B
CRGB leds[NUM_LEDS];
int x       =   1   ;
int DELAY   =   500 ;

void setup() {
  delay(1000);
  LEDS.addLeds<LED_TYPE, LED_PIN>(leds, NUM_LEDS);
  Serial.begin(9600);
}

void loop() {
  for(int x = 1; x < 17; x++) {
    Serial.println(x);             
    delay(DELAY);
    leds[x] = CRGB(255, 255, 255);
    FastLED.show();
  }
}

Ho usato un monitor seriale per vedere se il codice funzionasse a dovere, ed è così. Purtroppo, come prima, funziona a metà. I led si accendono uno dopo l’altro, come previsto, ma arrivati al nono led, il tutto si blocca e compare di nuovo l’effetto di disturbo, accompagnato dal solito rumore ad alta frequenza, come prima. Questo comportamento, però, sembra un po’ causale, infatti non succede sempre questo.

Forse è perché ho collegato il +5v sul data pin e quindi ho rotto qualcosa? È magari l’Arduino Nano che non funziona e quindi sarebbe meglio provare con un altro? Oppure sarà la ventola difettosa?

Ho caricato un video che potete vedere qui: Imgur: The magic of the Internet

Edit: ho messo anche il ciclo for nel void setup, ma succede la stessa cosa.

non son molto pratico, ma potrebbe essere un problema di consumi?
magari fino a 8 led l'alimentazione regge, dal nono va in crisi...

fratt:
non son molto pratico, ma potrebbe essere un problema di consumi?
magari fino a 8 led l'alimentazione regge, dal nono va in crisi...

Non penso... ho usato un piccolo alimentatore a parte (5v), non ho preso la corrente direttamente dall'Arduino. L'unico cavo collegato all'Arduino è il pin data in.

E quindi niente GND in comune? Quello lo devi sempre mettere, anche con alimentatori separati.

Ciao, Ale.

ilguargua:
E quindi niente GND in comune? Quello lo devi sempre mettere, anche con alimentatori separati.

Ciao, Ale.

Grazie a tutti per la risposta, effettivamente non ci avevo pensato. Ora riesco a controllare i led, solo che una volta accesi tutti, i 4 led in mezzo si spengono. Tornando all’ipotesi di fratt,

fratt:
non son molto pratico, ma potrebbe essere un problema di consumi?
magari fino a 8 led l’alimentazione regge, dal nono va in crisi…

molto probabilmente è l’alimentatore che non ce la fa, infatti misurando la tensione d’uscita del piccolo alimentatore (con tutti i led accesi, tranne i quattro in mezzo) ottengo un valore di 4v. Ora devo solo trovare un alimentatore più potente e posterò il risultato.

Un WS2812 consuma 60mA se é illuminato bianco.
9 WS2812 consumano ca 540mA.
16 Ws2812 consumano ca 960mA

Sei sicuro che l'alimentatore non dia solo 500ma?

Ciao Uwe

uwefed:
Un WS2812 consuma 60mA se é illuminato bianco.
9 WS2812 consumano ca 540mA.
16 Ws2812 consumano ca 960mA

Sei sicuro che l'alimentatore non dia solo 500ma?

Ciao Uwe

È proprio lui che fa casino, infatti ho visto che il regolatore AMS1117 5v arriva a picchi massimi di 1A. Accendendo, ad esempio, solo i led rossi, tutto va come previsto. A breve dovrebbero arrivare i cavi e pezzi vari in modo che possa collegare il tutto all'alimentatore del PC, che arriva fino a 24A.

Sono finalmente riuscito a sistemare il circuito e la ventola. Grazie a tutti per l'aiuto!