Problema con striscia led ws2812 (musica)

Buonasera a tutti,

Ho un problema con la striscia led ws2812 e il mio arduino uno r3
Innanzitutto il codice e’ questo:

#include <Adafruit_NeoPixel.h>
#define PIN A5
#define lightCount 300

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream
//   NEO_HZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(300, PIN, NEO_GRB + NEO_KHZ800);



//fadeThickness = 0;  // CHANGE THICKNESS (0-10)

int vol = 0;
float total = 0;
int fadeCol = 0;
int val[25];
int volLast = 0;
int fadeAmt = 0;
int counter = 0;




void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
//Serial.begin(9600); 
}

void loop() {
  fadeCol = 0;
total = 0;

  for (int i = 0; i < 80; i++){
      counter = 0;
       do{
      vol = analogRead(A0);
 
      counter = counter + 1;
      if (counter > 500){
         rainbowCycle(10);
        
      }
    }while (vol == 0);
    
    total = total + vol;
 
  }
  
  vol = total / 80;
// Serial.println(vol);
  
  vol = map(vol,20,255,0,20);
  
  
  if (volLast > vol) {
    vol = volLast - 4;
  }
  
  volLast = vol;
  fadeAmt = 0;
   
//   Serial.print(vol);
  for (int i = 0; i<25;i++){
    
   
 
    if (i < vol){ 
    
          
         
         strip.setPixelColor((i+25), strip.Color(0,255,0));
         strip.setPixelColor((25-i), strip.Color(0,255,0));
    }
    else if (i < (vol + 8)) {
      
         strip.setPixelColor((i+25), strip.Color(255,0,0));
         strip.setPixelColor((25-i), strip.Color(255,0,0));
      
    }
    else
    {
       
      
         strip.setPixelColor((i+25), strip.Color(0,0,255));
         strip.setPixelColor((25-i), strip.Color(0,0,255));

      
    }
  }
    
 
    
  
  
  
  strip.show();
  
}

void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
     vol = analogRead(A0);
     if (vol> 10) {
       
      return;
       
     }
    
    
  }
}

uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

La mia striscia e’ da 300 led e di conseguenza ho messo 300 nel codice ma stranamente si illuminano solo i primi 49 led… ed e’ questo il problema.
Per il resto l’effetto che deve fare lo fa tranquillamente ma solo in questi primi led.
L’effetto che voglio e’ il seguente del video: ws2812 led strip to music with arduino

Inoltre all’inizio del video si vede l’effetto del comando fadein e fadeout che nel codice non c’e’ e non so dove inserirlo. Principalmente pero’ mi interessa avere tutti i led funzionanti.
Altre informazioni sono:
-Alimentazione con batteria esterna a 5v e max 4.8A. (Negli esempi degli sketch tutto funziona regolare quindi non penso sia un problema di alimentazione)
-Condensatore 1000 microfarad 25v
-Tra il pin A5 e il data input della striscia ho messo una resistenza da 330ohm
Grazie mille anticipatamente per l’aiuto

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento (… 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 il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Grazie della risposta Gugliemo,

Mi scuso per la dimenticanza, ho letto il regolamento solo per postare correttamente e mi e' sfuggita la presentazione che ho fatto poco fa.

300 WS2812 consumano fino a 18A.
Secondo me non hai abbastanza corrente.

Nel Video da Te citato secondo me usa 60 LED e percui 4A bastano e avanzano.

Ciao Uwe

Non ci avevo proprio pensato.
Ho fatto uno sketch veloce e collegato tutto e con il multimetro ho cercato di leggere la corrente tra il + e - della striscia e non supera 3.5A e man mano che i led aumentano la corrente si abbassa perche' va sottosforzo e inoltre ho dovuto staccare perche' scaldavano i cavi :smiley:
Se fosse questo il motivo come dovrei procedere? O meglio... qualcuno mi sa indicare come alimentare la striscia con 18A. Sia alimentatore che i cavi fino alla striscia stessa.
Inoltre tra l'inizio della striscia e il connettore c'e' 5cm circa di cavi (rispettivamente per 5v / GND/ DI) e quelli per l'alimentazione presumo siano un problema dato che dovranno sopportare una corrente non proprio bassa... Ditemi voi come dovrei procedere al meglio.
Grazie

Scusate se faccio il doppio post ma rileggendo ho paura di essermi spiegato male sul come ho misurato l'amperaggio. Specifico che ovviamente lo letto attivando il circuito con il tester stesso quindi in serie al circuito. Scusate ma non volevo che qualcuno pensasse che avessi letto l'amperaggio in parallelo :o :grin:

Simsniper99:
Scusate se faccio il doppio post ma rileggendo ho paura di essermi spiegato male sul come ho misurato l'amperaggio. Specifico che ovviamente lo letto attivando il circuito con il tester stesso quindi in serie al circuito. Scusate ma non volevo che qualcuno pensasse che avessi letto l'amperaggio in parallelo :o :grin:

Ma perché si abbassa la corrente se aumentano i LED accesi?

Teoricamente parlando e' colpa dei cavi che surriscaldandosi perdono in prestazioni. Questi cavi hanno letteralmente circa 10/20 fili di rame dentro.
In ogni caso ho visto su ebay degli appositi alimentatori stabilizzati per strisce led ed ho trovato questo: Alimentatore

L'ali sulla carta e' perfetto o mi sbaglio ?
Ora mi preoccupa il fatto della striscia... se prendo questo alimentatore come lo collego alla striscia? Devo tagliare il connettore e saldare direttamente o cosa? Siccome non vado molto d'accordo con la stagnatura chiedevo altri modi :smiley:

Con assorbimenti del genere, sarebbe il caso di usare come minimo fili 22AWG, meglio ancora 20AWG, e riportare positivo e negativo con altri fili extra circa ogni mezzo metro di strip circa, o comunque almeno ad entrambe le estremita' della striscia se e' da un metro ...

L'alimentatore e i cavi li ho per oggi pomeriggio ma come dovrei agire per collegarli alla striscia ?
I cavi che escono dall'alimentatore come li collego alla striscia ?
Per capirci questa è la striscia: Striscia
Non ho proprio idea di come agire...

Se la strip e' come quella delle foto, senza plastica trasparente sopra, dove vedi i pad di saldatura, ogni 50cm circa ci saldi due fili, rosso e nero, o quello che preferisci, basta che sappia tu quali polarita' corrispondono ai colori, e tutti i fili li porti all'alimentatore ... solo ai 2 pad esterni del + e del - ovviamente, il data va collegato solo all'inizio della striscia ... e stando attento a non mandare in corto i pad ...

Per 18A servono cavi da 2,5 mm^2 (se stesi e non arrotolati), che sarebbero ca 13 in AWG.

Come dice Etemenanki devi collegare l'alimentazione alla striscia ogni 50 cm.

Ciao Uwe

Scusate ma se io tolgo i +e - che mi escono dalla striscia e ci saldo direttamente i nuovi fili non va bene ?
Non capisco la cosa dei ogni 50cm..

C'e' anche da considerare che il rame della strip non regge quelle correnti ... chi le fabbrica e' in genere un po "coglione" (solo un po ... :D), e se ne frega se lo strato sottile di rame che compone le piste della strip non e' in gradi di reggere piu di 2 o 3 A senza iniziare a scaldare, ed a 5 va in crisi ... certo, potrebbero usare strip a 3 strati, con 2 degli strati che fanno da piste di alimentazione principale, ma chi glie lo fa fare ? ... tanto il problema e' dell'utente ...

Il riportare i fili ogni 50cm, distribuisce il carico su diversi fili, e da corrente in diversi punti, evitando di stressare le piste troppo sottili e garantendo che non ci saranno malfunzionamenti dovuti a sovraccarico o cadute di tensione ... :wink:

Buonasera a tutti,

allora... per ora non ho saldato i fili per mancanza di tempo, ma ho provato riprovato velocemente il nuovo alimentatore utilizzando i cavi che escono dalla striscia.
Ho collegato sia i cavi all'inizio della striscia che quelli alla fine, di conseguenza aveva già 2 punti da dove prendere corrente.
Ma il risultato rimane invariato.. sempre cosi: Immagine
Lo sketch rimane invariato.
I collegamenti che ho effettuato sono:
Inizio e fine della striscia ai corrispettivi V+ e V- dell'alimentatore. Ed inoltre il negativo al GND dell'arduino.
Per il resto i collegamenti di arduino si limitano alla sola scheda audio che comunque si comporta bene perchè appunto in quei soli led che si accendono il tutto funziona.
Il pin 6 dell'arduino è collegato al data input della striscia ma nel mezzo si trova una resistenza da 330ohm.
Insomma il circuito rimane invariato tranne la nuova alimentazione per la striscia ma nulla cambia.
Per quanto riguarda la saldatura vorrei prima fare una prova senza saldatura ovvero:
se appoggio semplicemente i fili + e - nel mezzo (per esempio) della striscia va bene ? Potrei fare questo fino a 3 volte con l'aiuto di altre persone oppure utilizzando del nastro adesivo.
In pratica prima di saldare vorrei essere sicuro che tutto funzioni.

PS: ho inserito l'immagine tramite comando link perchè con comando image non caricava.

al tuo posto proverei ad accendere un singolo led alla volta e scorrerlo fino ad accenderli tutti, così hai un assorbimento molto minore dell'avere parecchi led accesi, altra cosa che proverei è con i led accesi come li hai adesso di misurare la tensione nel mezzo della striscia per vedere se c'è una caduta di tensione tale da non permettere agli altri ledi di accendersi

Proverò a leggere la tensione perché so già che tutti i led funzionano.
Con una funzione della libreria neopixel (ora non ricordo quale) si ha una decina di led che si accendono dal primo e “corrono” fino alla fine, in pratica un serpente e tutto funziona normalmente.

Ho letto la tensione in più punti della striscia ma nessuna caduta di tensione...
Soprattutto ora che ho collegato all'alimentatore entrambi i capi della striscia non è possibile che sia un problema di alimentazione tensione parlando.
Inoltre sempre con la striscia accesa nel modo della foto ho provato ad attaccare temporaneamente con due fili sempre a 5v presi dall'alimentatore proprio nel successivo led spento e niente... rimane sempre cosi.
A questo punto non penso sia un problema di alimentazione ma non so dove andare a cercare...

Tre possibilita' mi vengono in mente, istintivamente ...

  1. non ha "detto" allo sketch quanti sono i led della striscia ...

  2. uno dei led e' bruciato o difettoso (potrebbe essere l'ultimo che si accende che non manda fuori il segnale dal DOUT, oppure il primo che non si accende ad essere bruciato)

  3. per qualche motivo il tuo sketch aggiorna troppo rapidamente lo stato dei led, per cui i dati in uscita riescono ad essere spediti solo fino ad un certo led prima che la sequenza ricominci daccapo (ma non ho idea di quanto tempo effettivamente serva per pilotare tutti i led della tua striscia, e' solo un'idea)

Ora e' successo questo: Video
Andava tutto bene (ovviamente solo con i primi led) e ad un tratto come si vede nel video tutti si sono accesi cosi'... ma i primi funzionano come devono.. ma che diamine :o :o