LED WS2818 mit Arduino Nano

Hallo zusammen,

ich bin neu in diesem Forum und auch mit Arduinos habe ich auch das erste Mal mit diesen Boards zu tun, deshalb habe ich gleich eine Frage zwecks Ansteuerung von LEDs WS2812.

Und zwar hab ich letztens 10 LEDs vom WS2812 Streifen an einen Arduino (ohne ext. Stromversorgung) getestet, jedoch habe ich es leider nicht geschafft irgendeine LED zum Leuchten zu bringen.

Brauche ich schon für 10 LEDs eine ext. Stromversorung in diesem Fall?
Oder wird eine falscher Widerstand bei der Datenleitung benutzt (dieser war vorgegeben im Projekt) ?

Folgender Aufbau war vorhanden:

Arduino <–> WS2810
GND <–> GND
5V <–> 5V
PIN 6 <–> 60 Ohm <–> Data

Ich wäre Dankbar, wenn ihr mir helft, den Fehler zu lokalisieren :slight_smile:

Über den Daumen gepeilt benötigen 10 dieser LEDs ca 600mA.
Damit ist der 5V Anschluss überfordert.

Aber wenigstens hätte etwas leuchten müssen, bevor die Angelegenheit abraucht.
Also: Du machst auch noch was anderes falsch.

Danke für die schnelle Antwort.

Dann versuche ich mal mit einer ext. Stromversorgung das ganze und gebe Bescheid.

Die 60 Ohm sind okay? Oder wird da auch ein anderer benötigt?

peterrre:
Die 60 Ohm sind okay? Oder wird da auch ein anderer benötigt?

LadyAda von Adafruit empfiehlt 300 bis 500 Ohm. Adafruit NeoPixel Überguide

Hallo,

also ich verwende für diese Stripes immer 330 Ohm Widerstände mit einem 5V USB Netzteil, welches auf VIN und den Stripe geht.

LG

Dennis201911:
Hallo,

also ich verwende für diese Stripes immer 330 Ohm Widerstände mit einem 5V USB Netzteil, welches auf VIN und den Stripe geht.

LG

Danke! Anleitungen diesbezüglich gibt es ja genügend im Internet. Ich melde mich, ob es geklappt hat!

Es sollte mit 10 Leds auch am USB-Port funktionieren.
Knapp wird es, wenn alle 10 weiß leuchten sollen.

Zum testen also kein Problem. Auch der Widerstand ist nicht dein Problem, auch damit wird es funktionieren, 330 Ohm sind nur sicherer.
Wie schon geschrieben wurde, du machst noch einen anderen Fehler.

Z.B. hast du einen falschen Sketch geladen. Ohne die richtige Ansteuerung der Leds funktioniert es nicht.

peterrre:
Ich wäre Dankbar, wenn ihr mir helft, den Fehler zu lokalisieren :slight_smile:

Ohne dem dazugehörigen Script kann man ja kaum helfen :wink:

Hi

Würde hier eher einen Sketch fordern - aber wir meinen wohl beide den Quellcode :slight_smile:
(Der beim Arduino aber halt Sketch heißt)
Und: Ja, Der fehlt

MfG

postmaster-ino:
(Der beim Arduino aber halt Sketch heißt)
Und: Ja, Der fehlt

Stimmt.....der fehlt ja immer noch.

Einfacher Vorschlag zum Start. Beachte: Es muss immer pixels.show() ausgeführt werden, damit etwas aus dem Puffer tatsächlich in den Strip geschoben wird.

#include <Adafruit_NeoPixel.h>

#define pix_pin   2   //WS2812 Data z.B. an D2
#define pix_anz   10  //Anzahl der LEDs im Strip
#define pix_pow   64  //Pixel Power 0...255

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(pix_anz, pix_pin, NEO_GRB + NEO_KHZ800);

uint32_t green = strip.Color(0, 255, 0); //z.B. Grün

void setup()
{
  pixels.begin();
  pixels.clear();
  pixels.setBrightness(pix_pow);
  pixels.show();
}

void loop()
{
    pixels.clear(); //alle Pixel im Puffer auf RGB(0,0,0) - aus.
    for(int i=0; i<pix_anz; i++)//zähle die Pixel-Anzal durch
    {
      pixels.setPixelColor(i,green); //setzt bei jedem Durchlauf einen Pixel im Puffer auf Grün
      pixels.show(); //erst jetzt wird das sichtbar!
      delay(10);//kurz anhalten, um es zu sehen
    } 
    delay(1000);    //den voll geschrieben Strip 1s anzeigen, dann löschen und wieder von vorn
}

Hallo,

Danke für die zahlreichen Antworten.
Es waren zwei Fehler, die wir entdeckt haben:

Die Pins am Arduino hatten keinen sauberen Kontakt und mussten nochmals nachgelötet werden und die vorgegebene Library war für den ProMini und da war dann die Pindefinition natürlich anders.

Beides wurde behoben und eine TestLED hat dann erfolgreich geleuchtet.

Jetzt gehts dann an den Streifen :slight_smile:

Danke!

peterrre:
Die Pins am Arduino hatten keinen sauberen Kontakt und mussten nochmals nachgelötet werden und die vorgegebene Library war für den ProMini und da war dann die Pindefinition natürlich anders.

Das solltest du mal näher erklären.
Du kannst einen Nano und einen Pro Mini mit der selben Pindefinition ansprechen.
Das wird nicht der Grund sein.

peterrre:
... die vorgegebene Library war für den ProMini und da war dann die Pindefinition natürlich anders.

UNO, Nano und ProMini haben den selben µC ATmega328, weshalb die Pindefinition identisch sein sollte. Diese Aussage irritiert mich daher schon.

peterrre:
Jetzt gehts dann an den Streifen :slight_smile:

Da gibt es neben der Adafruit-Bibliothek auch noch FastLED als Alternative. Wie immer gibt es Vor- und Nachteile abzuwägen.

Hmm… okay da kenn ich mich zu wenig aus.

Auf der Pinbelegung vom ProMini ist es der PIN PD6, das war auch der definierte Wert im Code aber wir könnten den Nano nur ansprechen indem der PIN zu DD6 umbenannt wurde.

Dann ging es, davor leider nicht.

Hi (& sorry für Fill-Quote)

qualidat:
Einfacher Vorschlag zum Start. Beachte: Es muss immer pixels.show() ausgeführt werden, damit etwas aus dem Puffer tatsächlich in den Strip geschoben wird.

#include <Adafruit_NeoPixel.h>

#define pix_pin  2  //WS2812 Data z.B. an D2
#define pix_anz  10  //Anzahl der LEDs im Strip
#define pix_pow  64  //Pixel Power 0…255

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(pix_anz, pix_pin, NEO_GRB + NEO_KHZ800);

uint32_t green = strip.Color(0, 255, 0); //z.B. Grün

void setup()
{
  pixels.begin();
  pixels.clear();
  pixels.setBrightness(pix_pow);
  pixels.show();
}

void loop()
{
    pixels.clear(); //alle Pixel im Puffer auf RGB(0,0,0) - aus.
    for(int i=0; i<pix_anz; i++)//zähle die Pixel-Anzal durch
    {
      pixels.setPixelColor(i,green); //setzt bei jedem Durchlauf einen Pixel im Puffer auf Grün
      pixels.show(); //erst jetzt wird das sichtbar!
      delay(10);//kurz anhalten, um es zu sehen
    }
    delay(1000);    //den voll geschrieben Strip 1s anzeigen, dann löschen und wieder von vorn
}

Was soll das pixel.clear() bezwecken?
Wenn sich NICHTS ändert, muß man keine neuen Daten an den Stripe schicken.
Wenn sich irgendwo EINE der LEDs ändert, muß man auch nur diese Änderung in den Puffer schreiben - und dann - klar - die Daten erneut zum Stripe jagen.
Hier kann man sich die Lib umschreiben, daß man noch sagen kann, bis zu welcher LED die Daten gesendet werden sollen - die dahinter bekommen nämlich keine neuen/anderen Daten und so kann man sich diese Zeit locker schenken!

Dein .clear() bringt Dir nur den Mehr-Aufwand, daß Du den kompletten Puffer erneut füllen musst - bitte helfe mir, darin einen Sinn zu sehen - Das will mir nämlich absolut nicht gelingen!

Auch muß dieses .show() NUR aufgerufen werden, wenn Änderungen an den Stripe gesendet werden sollen - auch klar: bei einer Animation wird Das ‘immer’ der Fall sein.
Aber dort brauche ich ebenfalls das .clear() vorher nicht, da ich eh enue Farben in den Puffer schreibe … wird wohl kurz vor dem .show() der Fall sein.

MfG

a) das clear() steht jeweils vor der Schleife, löscht also den internen Puffer, damit die Animation in der Schleife immer bei Null beginnt

b) in der Schleife wird der Strip nach und nachgefüllt. Will man das im Sinne einer Animation (zunehmende Anzahl von LEDs leuchtet) auch sehen, muss man nach jedem Durchlauf ein show() machen

Was ist daran schwierig zu verstehen? Es geht in diesem Beispiel NICHT darum, den Strip mit einem Rutsch zu füllen und einzuschalten ... das ginge natürlich auch, war aber nicht meine Absicht.

qualidat versteht was anderes unter Animation.

ElEspanol:
qualidat versteht was anderes unter Animation.

Wieso? Ist ein wandernder Lichtpunkt keine Animation? Zugegeben, es ist das absolute Minimum für eine Animation, aber immerhin ... :smiling_imp: