ich habe nach einer Anleitung im Netz eine Wordclock gebaut, die auch tadellos funktioniert, nur leider die Zusatzfunktion "Dimmen" zickt rum. Der ursprüngliche Autor des sketches ist nicht mehr erreichbar, daher frage ich hier mal nach, wo es haken könnte...
Aufbau
WS2812B über Widerstand an Pin D3 verbunden. Die einzelnen LEDs sind über Daisy chain an den nano angeschlossen.
Folgenden Code verwende ich (kompletter Code ist angehängt)
FASTLED_USING_NAMESPACE
#define DATA_PIN 3
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS 156 // Gesamtanzahl der WS2812 LEDs
CRGB leds[NUM_LEDS];
uint8_t maxBrightness = 35; // Wenn Fotoresistor benutzt wird, hier min. Helligkeit eintragen (0=Off->255=max)
uint8_t minBrightness = 210; // Wenn Fotoresistor benutzt wird, hier max. Helligkeit eintragen (0=Off->255=max)
uint8_t AmbientLightPin = 0; // Fotoresistor Pin
uint8_t BRIGHTNESS = 150; // Wenn kein Fotoresistor benutzt wird hier dauerhafte Helligkeit eintragen
...
void SwitchLED(int MyArray[], int n) {
//Umgebungshelligkeit überprüfen (sofern gewünscht)
if(maxBrightness != 0){
Ambient = analogRead(AmbientLightPin);
//Nur bei größeren Helligkeitsänderungen soll die Helligkeit der LEDs angepasst werden:
if((Ambient > LastAmbient*1.10) || (Ambient < LastAmbient*0.90)){
BRIGHTNESS = map(Ambient, 0, 1023, maxBrightness, minBrightness);
LastAmbient = Ambient;
Wenn ich die Diode nutze, dann flackern die LEDs die ganze Zeit. Die Diode scheint zu funktionieren, denn die LEDs dimmen, aber flackern...
Wenn die Diode nicht angeschlossen ist, oder die Einstellungen im Code auf "0" sind, dann flackern die LEDs auch nicht...
Was habe ich versucht:
es flackert auch bei einem vorverlöteten Nano
ein anderes Breadboard benutzt
mehrere andere Dioden genutzt
Woran kann es denn noch liegen?
Kann ein Wackelkontakt "irgendwo" ein Flackern aller LEDs bewirken?
Liegt es doch am Code?
Deine Foto-Diode scheint ein LDR zu sein - Dieser sollte eigentlich träge genug sein, daß Ihm das PWM-Geflacker Nichts ausmacht.
Die WS2812B benutzen für die drei Farben selber ja auch 'nur' PWM.
Du könntest versuchen, die Messwerte des LDR zu Mitteln.
Dafür 100x einlesen, aufaddieren und das Ergebnis durch 100 teilen.
Mit Diesem dann die Helligkeit Deiner Clock beeinflussen, wobei ich hier auch nur 'ein Schritt heller/dunkler machen würde, statt den Helligkeitswert aus der Berechnung zu übernehmen.
Das Flackern verschwindet (aber die LDR Funktion bleibt unbeeinflusst), wenn ich (oder mit einer Pinzette) an das Bein des LDR anfasse, das mit den 5V verbunden ist.
Was bedeutet das für die Fehlersuche? Kann ich das Hardwaremäßig irgendwie simulieren?
Hallo,
gehen wir einmal davon aus, das es ein LDR ist.
Den verbindest Du mit einem analogen Port. Dann schreibst Du Dir einen Sketch der diesen Port liest.
Du solltest Were von 0 bis 1023 bekommen.
Wenn Du das hinbekommen hast, wirst Du feststellen das diese Werte fürchterlich zappeln.
Das rührt einmal von analogPort her- und einmal vom LDR her.
Du brauchst also stabile Werte. Wie machen? Ganz einfach.
Über eine boolsche Abfrage liest Du den Wert nur einmal- wertest diesen aus- und liest wieder.
Nun hast Du stabile Werte.
Dann werden Deine LED wohl über PWM gedimmt... ich nehme einmal an mit einem Wert von 0 bis 255.
Hier brauchst Du den Wert, bei dem Deine LED so gerade noch leuchten. Sagen wir einmal 98.
Zum dimmen der LED hast Du also einen Bereich von 98 bis 255.
Der analogPort liefert Dir 0 bis 1023.
Arne3a:
Das Flackern verschwindet (aber die LDR Funktion bleibt unbeeinflusst), wenn ich (oder mit einer Pinzette) an das Bein des LDR anfasse, das mit den 5V verbunden ist.
Du bist dann ein Kondensator, der die Spannung glättet. Das könnte auf eine schlechte Spannungsversorgung deuten. Zu schwaches oder ungenügend geglättetes Netzteil, zu dünne Kabel ... habe leider keine Glaskugel
Ich würde eher auf ein Kontaktproblem am LDR (schlechte Lötstelle oder schlechter Kontakt in der Steckplatine) tippen.
Schreib mal einen Sketch der nur den LDR einliest und dann seriel ausgibt. Sind da die Werte konstant?
danke für die vielen hilfreichen Kommentare! Wirklich!
Ich habe mich an vielem versucht
uwefed:
Ich würde eher auf ein Kontaktproblem am LDR (schlechte Lötstelle oder schlechter Kontakt in der Steckplatine) tippen.
Schreib mal einen Sketch der nur den LDR einliest und dann seriel ausgibt. Sind da die Werte konstant?
Grüße Uwe
Die Werte waren nahezu konstant, aber ich habe sie am PC ausgelesen mit USB Power...
agmue:
Du bist dann ein Kondensator, der die Spannung glättet. Das könnte auf eine schlechte Spannungsversorgung deuten. Zu schwaches oder ungenügend geglättetes Netzteil, zu dünne Kabel ... habe leider keine Glaskugel
Ja, ich hätte es nicht geglaubt, aber anscheinend ist die Spannungsversorgung das Problem...
Ohne LDR auf der Platine gar kein problem
Mit LDR und Netzteil 1 (~4,7 V) --> flackern
Mit LDR und Netzteil 2 (~5,1 V) --> kein flackern
Netzteil 3 (5,7V) brachte gar nichts zustande... Mal ne Zusatzfrage: Ist der Arduino und die WS2812B so empfindlich?
Arne3a:
Ist der Arduino und die WS2812B so empfindlich?
Mal ganz subjektiv: Der Arduino ist recht robust, die WS2812B sind eine Diva. Ich verwende daher lieber APA102, bei denen Takt- und Datenleitung getrennt sind, wenn es die entsprechende Bauform gibt. Auch eine IR-Fernbedienung ist dann problemlos zu integrieren. Diesen Streifen mit 144 Lichtpunkten pro Meter animiere ich gerade für ein Kunstobjekt: