Hallo Zusammen,
ich möchte eine kleine Automatisierung für ein Halloween Projekt bauen, dass bei Eingang eines Signals, der Arduino über das DMX shield Scheinwerfer langsam zur Farbe rot ein faden soll. Bei meinem Testbau kommt das signal von 2 Buttons. Einer der einen fade in machen soll und einen der fade out machen soll. Das funktioniert auch soweit bis auf das dass der Scheinwerfer die ganze Zeit im DMX modus Flackert (siehe Video). Ich habe auch schon einen anderen Scheinwerfer getestet der dabei auch flackert.
Hat jemand eine Idee wo das Problem liegt? Wenn nicht werde ich das DMX Shield umtauschen, vielleicht ist dass ja das Problem.
Ich habe einen Elegoo Mega mit dem CTC-DRA-10-R2 DMX Shield.
Der Scheinwerfer ist ein Eurolite LED Party TCL Spot.
Ich setze im Anhang noch ein Foto von der Konstruktion welches das Signal gibt, das sind zwei Buttons, eine LED und einen Wiederstand.
#include <DMXSerial.h>
int buttonApin = 40;
int buttonBpin = 41;
int ledPin = 22;
void setup() {
// Initialisiere die DMX-Schnittstelle im Controller-Modus
DMXSerial.init(DMXController);
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop() {
int channels[5] = {1, 4, 6, 9, 16};
if (digitalRead(buttonApin) == LOW)
{
digitalWrite(ledPin, HIGH);
for (int value = 0; value <= 255; value++) {
for (int i = 0; i < sizeof(channels) / sizeof(channels[5]); i++) {
DMXSerial.write(channels[i], value); // Setze jeden Kanal auf den aktuellen Wert
}
delay(30);}
}
if (digitalRead(buttonBpin) == LOW)
{
digitalWrite(ledPin, LOW);
// Optional: Umgekehrter Fade von hell (255) nach dunkel (0)
for (int value = 255; value >= 0; value--) {
// Durchlaufe alle Kanäle im Array und setze sie auf den aktuellen Wert
for (int i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {
DMXSerial.write(channels[i], value); // Setze jeden Kanal auf den aktuellen Wert
}
delay(30); // Warte 20 Millisekunden für einen sanften Fade-Effekt
}
}
}
ist es nun richtig? was ist der Vorteil vom auto Formatieren?
#include <DMXSerial.h>
int buttonApin = 40;
int buttonBpin = 41;
int ledPin = 22;
void setup() {
// Initialisiere die DMX-Schnittstelle im Controller-Modus
DMXSerial.init(DMXController);
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop() {
int channels[5] = { 1, 4, 6, 9, 16 };
if (digitalRead(buttonApin) == LOW) {
digitalWrite(ledPin, HIGH);
for (int value = 0; value <= 255; value++) {
for (int i = 0; i < sizeof(channels) / sizeof(channels[5]); i++) {
DMXSerial.write(channels[i], value); // Setze jeden Kanal auf den aktuellen Wert
}
delay(30);
}
}
if (digitalRead(buttonBpin) == LOW) {
digitalWrite(ledPin, LOW);
// Optional: Umgekehrter Fade von hell (255) nach dunkel (0)
for (int value = 255; value >= 0; value--) {
// Durchlaufe alle Kanäle im Array und setze sie auf den aktuellen Wert
for (int i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {
DMXSerial.write(channels[i], value); // Setze jeden Kanal auf den aktuellen Wert
}
delay(30); // Warte 20 Millisekunden für einen sanften Fade-Effekt
}
}a
}
ein Vorschlag, bin nicht sicher dass es dein Problem löst:
#include <DMXSerial.h>
const int buttonApin = 40;
const int buttonBpin = 41;
const int ledPin = 22;
const int channels[5] = {1, 4, 6, 9, 16};
const byte amount = sizeof(channels) / sizeof(channels[0]);
void setup() {
// Initialisiere die DMX-Schnittstelle im Controller-Modus
DMXSerial.init(DMXController);
pinMode(ledPin, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop() {
if (digitalRead(buttonApin) == LOW && digitalRead(ledPin) == LOW) {
digitalWrite(ledPin, HIGH);
for (int value = 1; value <= 255; value++) {
for (int i = 0; i < amount; i++) {
DMXSerial.write(channels[i], value); // Setze jeden Kanal auf den aktuellen Wert
}
delay(30);
}
}
if (digitalRead(buttonBpin) == LOW && digitalRead(ledPin) == HIGH) {
digitalWrite(ledPin, LOW);
// Optional: Umgekehrter Fade von hell (255) nach dunkel (0)
for (int value = 255; value >= 0; value--) {
// Durchlaufe alle Kanäle im Array und setze sie auf den aktuellen Wert
for (int i = 0; i < amount; i++) {
DMXSerial.write(channels[i], value); // Setze jeden Kanal auf den aktuellen Wert
}
delay(30); // Warte 20 Millisekunden für einen sanften Fade-Effekt
}
}
}
im Betrieb? das heißt auch dann wenn Arduino nix schickt. hast du versehentlich den Kanal für Mikrofone Empfindlichkeit mit gesteuert?
man kann es testen indem man nur einen Kanal auf einmal ändert, um fest zu stellen wann die Flackerei beginnt
gibt es eine Anleitung zu dem DMX-Strahler/-Slave?
Oftmals gibt es da unterschiedliche Tabellen (je nach 3,4,5,7-Channel Mode o.ä.), was an welchem Kanal und mit welchen Wertebereichen geregelt wird. Nicht, daß du hier einen ungewollten Strobe-/Farbwechsel- oder sonstiges Preset ansteuerst.
Wenn vom Arduino kein Signal kommt, also alles auf 0 ist flackert der Scheinwerfer nicht. nur beim Faden und dann beim betrieb. Laut der Anleitung ist das MIC auf Kanal 5. Ich Steuer Kanal 1 für Rot und Kanal 4 für die Helligkeit an. Die anderen Kanäle ab 6 waren dann für die weitere Scheinwerfer gedacht.
Guter Gedanke. ja es gibt eine Anleitung .
Der Scheinwerfer ist ein ganz einfacher der nur im 5 Kanalmodus läuft, auf dem 5. kanal sind Strobo und Musiksteuerung
..und dann haben wir schon die erste Überschneidung:
Kanal 1 (wie im channels-array angegeben) bekommt den Wert für rot
Kanal 4 (ebenfalls im array hinterlegt) bekommt den gleichen Wert wie rot, aber ist für die Gesamt-Helligkeit zuständig.. (1 = rot, 2 = grün, 3 = blau, 4(!) = Gesamthelligkeit, 5 = Zusatzfunktion)
Sind da mehrere Strahler (5?) in Verwendung? Dann sollten die Startadressen im Array auch die 5 Kanäle auseinanderliegen ( z.B. channels[5] = { 1,6,11,16,21 }; )
Desweiteren würde ich auch pro Gerät alle 5 Kanäle schreiben, da ich nicht weiß, ob die unangesteuerten Kanäle auch wirklich immer 0 haben. Kanal 4 würde ich voll aufdrehen, da du den Farbwert ja pro RGB-Kanal änderst.
Edit: eben erst gesehen, daß du Kanal 4 bewusst mit ansteuerst und daß es noch weitere Strahler gibt. Ich würde aber trotzdem davon weggehen, den Farbkanal und Helligkeit gleichzeitig einzufaden.
Falls das Flackern trotzdem noch besteht, sollte die Fehlersuche dann im Hardware-Setup weitergehen: Geräte einzeln anschließen und auch mal die Kabel tauschen.
Leider flackert der Scheinwerfer immer noch, Kabel habe ich verschiedene probiert. Ich werde mich jetzt beim Händler melden ob mein DMX shield nicht einen Defekt oder so hat. Vielen dank für eure Hilfe!
Sehr unwahrscheinlich. Gehe das Problem doch mal systematisch an. Statt den For Schleifen erst mal einzelne Werte senden. Nicht mehrere Werte auf ein mal ändern. Dein Delay in die innere Schleife verschieben.....
Das ist etwas, das man zumindest überprüfen und ausprobieren sollte. Normalerweise spielt es keine große Rolle, wenn die Leitung kurz ist (weniger als einen Meter), aber bei längeren Leitungen ist das auf jeden Fall der Fall!
Der DMX Terminator ist mir ein neuer Gegenstand, aber werde ich ausprobieren. Kannte das vorher nicht. Hab schon etwas Länge an Kabel und insgesamt sollen dann 4 vllt 5 Scheinwerfer hintereinander gehängt werden. Ich werde nochmal alles von Anfang an testen.
Gestern Abend hatte ich noch das Phänomen, dass das Licht erst angefangen hat zu faden, wo ich meine Hand dem Shield genähert habe. Als ich sie wieder weggezogen habe, war das Licht auch weg.
Danke für die Erklärung mit dem Formatieren und Entschuldigung das ich es vorher nicht gemacht hatte
Also gut ich probiere es heute Abend nochmal aus. Schritt für Schritt und nehme mir von meiner Firma nochmal testweise 2 andere Scheinwerfer mit. Danke nochmal für die Sichtweisen.
Ein DMX Terminator ist nur ein 120-Ohm-Widerstand zwischen den Pins 2 und 3 des DMX-Kabels und sollte am Ende der Leitung angebracht werden, um zu verhindern, dass er wie eine Antenne wirkt. Einfach genug, um einen mit einem übrig gebliebenen männlichen XLR-Stecker zu bauen
Sollten sie nicht auf der -uart-Seite stecken? Sonst sind sie ja mit den Pins 3&4 verbunden. Ich weiß nicht, ob das auch die Pins sind, über die die Library standardmässig kommuniziert..