Problema LED RGB

Ciao a tutti , ho appena comprato una scheda arduino con alcuni componenti per poter realizzare qualche progetto . Volevo far funzionare un led RGB, ma ho riscontrato un problema che non riesco proprio a risolvere , per timore di aver sbagliato a far circuito io o aver commesso qualche altro errore ho seguito un video tutorial su youtube , ma il risultato non è cambiato . Il mio led fa sempre il colore Blu senza cambiare . Questo è il tutorial : TUTORIAL LED RGB CHE HO SEGUITO mentre questo è il datasheet del mio led RGB : DATASHEET. Grazie mille.

Pako52:
Il mio led fa sempre il colore Blu senza cambiare .

Quello non è un normale led rgb da pilotare direttamente tramite pwm, è un led con driver integrato che si controlla tramite bus seriale, qui trovi maggiori dettagli e una libreria che dovrebbe funzionare.

Ah ecco perchè . Quindi collego VDD a +5v e GND a GND , DIN su una porta che da il segnale giusto ? E DOUT invece ? . Scusate ma ho appena iniziato con arduino . Ps: Ho arduino micro. Grazie

Se ne hai più in serie, DOUT è l'uscita verso DIN del successivo :wink:

Guardati QUESTA sezione di Adafruit ... loro li chiamano NeoPixel ... ma sono gli stessi ... troverai un sacco di modelli e molti tutorials (segui quelli in cui si parla di WS2812) ... :slight_smile:

Guglielmo

DOUT serve per far transitare il bus seriale verso altri led, in pratica li puoi collegare in cascata collegando DOUT su DIN, è possibile collegare fino a 1024 led in cascata mantenendo un refresh rate di oltre 30 fps.

gpb01:
Se ne hai più in serie, DOUT è l'uscita verso DIN del successivo :wink:

Abbiamo postato assieme :slight_smile:
Aggiungo un cosa che "zia Ada" non dice, se è necessario pilotare molti led in cascata variando continuamente colore/luminosità il carico di lavoro per Arduino può risultare tale da impedirgli di fare altre cose.

Il numero massimo di LED in serie non é limitato. Una limitazione avviene se si vuole modificare il contenuto con una certa frequenza (numero di immagini per secondo) Questo perché l' interfaccia ha una velocitá fissa di 800kHz.

Ogni LED consuma fino a 60mA. Se si ha tanti la corrente puó essere sostanziosa. Tramite Arduino alimentato via USB si possono alimentare ca 7. I 1024 led nominati da astrobeed consumano ca 62A a 5V.

Ciae Uwe

uwefed:
Ogni LED consuma fino a 60mA. Se si ha tanti la corrente puó essere sostanziosa. Tramite Arduino alimentato via USB si possono alimentare ca 7. I 1024 led nominati da astrobeed consumano ca 62A a 5V.

... si, infatti, con i vari array, specie quelli proposti da Adafruit (... ce** ne sono alcuni con decine e decine di LED), e sempre obbligatorio un bel alimentatore esterno da 5V dedicato alla loro alimentazione (... ovviamente ricordati di mettere i GND, quello dei LED e quello di Arduino, collegati assieme così da avere un riferimento comune).

Guglielmo

Grazie a tutti . Sono riuscito a far funzionare il led con il programma di esempio di adafruit . Come mi posso studiare la libreria per conoscere tutte le sue funzioni ?

Pako52:
Come mi posso studiare la libreria per conoscere tutte le sue funzioni ?

In che senso ? ? ? :o

La libreria è normale codice C/C++ ... aprila con un editor di testo (o con l'IDE di Arduino) e guarda cosa fanno le varie funzioni che trovi all'interno :wink:

Guglielmo

Cioè come posso fare un programma da caricare poi su arduino usando questa libreria ? Credo inserisca delle funzioni etc . Questo intendo . Grazie

Ragazzi mi sto studiando lo strandtest della libreria NeoPixel_Master. Siccome per me è abbastanza complesso lo sto studiando poco a poco provando poi se funziona solo quel pezzo di programma e capendolo. Solo che ci sono cose che proprio non riesco a capire e/o trovare sul web per poter capire . Vi posto il programma dove vi dico pure ciò che non capisco , magari qualcuno riesce a spiegarmelo . Grazie

#include <Adafruit_NeoPixel.h>

#define PIN 6


Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); // Questo inizializza la libreria ? 

void setup() {
  strip.begin();
  strip.show(); // Porta tutto allo stato off ? 
}

void loop() {
  // ColorWipe praticamente è la funzione che è sotto su void colorWipe , e poi strip.Color sarebbero i colori giusto ? il ",50) E' il tempo che rimane ?
  colorWipe(strip.Color(255, 0, 0), 50); 
  colorWipe(strip.Color(0, 0, 255), 50); 
  colorWipe(strip.Color(0, 255, 0), 50); 
}

void colorWipe(uint32_t c, uint8_t wait) {  // uint32_t c, uint8_t wait , cosa vuole dire , cosa sono ?
  for(uint16_t i=0; i<strip.numPixels(); i++) { // numPixels dove l'ha preso ? 
    strip.setPixelColor(i, c); // La c sta per ? 
    strip.show();
    delay(wait);
  }
}

Quello che devi fare è studiare la libreria, non solo gli esempi ...
... ti devi guardare il .h ed il .cpp, individuare tutti i vari metodi, leggere tutti i commenti e guardare cosa fa il codice.

Esempio dal file "Adafruit_NeoPixel.h" :

// Constructor: number of LEDs, pin number, LED type
Adafruit_NeoPixel(uint16_t n, uint8_t p=6, uint8_t t=NEO_GRB + NEO_KHZ800);

se leggi il commento e guardi i vari parametri capisci che :

  • il primo parametro è il numero dei LED che compongono la striscia/array ed è di tipo uint16_t
  • il secondo parametro è il pin con cui comandi la striscia/array ed è di tipo uint8_t
  • il terzo parametro identifica il tipo di LED che stai usando ed è di tipo uint8_t

Così devi analizzarti tutti gli altri metodi ...

Guglielmo

P.S. : uint16_t equivale a "unsigned integer" mentre uint8_t equivale a "byte"