DesignSpark Electrical Logolinkedin
Menu Suche
Ask a Question

16 Apr 2019, 13:24

Spaßige Lichteffekte mit NeoPixel-Matrix und FadeCandy-Steuerung

Mit einer NeoPixel-Matrix und einer FadeCandy-Steuerung werden Lichteffekte zum Red Tin hinzugefügt.

Ich hatte gesehen, dass bei der Design Challenge von DesignSpark diesmal Lights Fantastic das Thema ist. Da dachte ich mir, dass das Red Tin definitiv von einigen interessanten Beleuchtungseffekten profitieren würde, und habe recherchiert, welche Möglichkeiten es gibt.

Als ich vor kurzem am RS-Stand auf der Electronica beimVorführmodell für die Leak Killer Challenge mitwirkte, habe ich die Adafruit Dotstar-LEDs kennengelernt und dachte deshalb zuerst daran. Dann entdeckte ich die NeoPixels, die ihnen ähnlich sind. Beim Vergleich von Dotstar und NeoPixel entschied ich mich für Letztere, zumal sie auch in verschiedenen interessanten Formfaktoren erhältlich sind.

Dann entdeckte ich die FadeCandy-Steuerung, die mich ganz besonders fasziniert hat. Sie ist für ein Beleuchtungsprojekt beim Burning Man Festival entwickelt worden und erschien mir deshalb sofort attraktiv. Im Einführungs-Tutorial sah es so aus, als ob die Einrichtung mich nicht überfordern würde, aber auf der anderen Seite genügend Spielraum vorhanden wäre, auf Wunsch tiefer in die Materie einzudringen.

Installation der erforderlichen Software

Ich habe eine FadeCandy (905-4624) und eine NeoPixel NeoMatrix (124-5498) genommen und das FadeCandy-Tutorial auf der Webseite von Adafruit befolgt. Zunächst wird Processing installiert. Dabei handelt es sich um die Programmiersprache, die meist zur Steuerung der FadeCandy verwendet wird. Skripte für FadeCandy können auch in Python, HTML und JavaScript/Node.js geschrieben werden, falls Ihnen eine dieser Sprachen mehr zusagt.

Das Tutorial beschreibt die Einrichtung und Nutzung mit Windows und OS X, aber auf der Webseite von Processing gibt es auch Downloads und Anleitungen für Linux.

Außerdem brauchte ich die FadeCandy-Software. Ich habe die Datei „Source code.zip“ von den FadeCandy-Releases auf GitHubheruntergeladen.

Zunächst ging es darum, den FadeCandy-Server in Betrieb zu nehmen. Wieder fanden sich im Tutorial Angaben zu Windows und OS X, aber ich musste im FadeCandy-GitHub nach Anweisungen für Linux suchen. Hier habe ich sie gefunden.

Wenn Sie den Server mit sudo ./fcserver config.json ausführen, wird er mit der Standardkonfigurationsdatei gestartet. Wenn er nicht als Root ausgeführt wird, erhalten Sie die Fehlermeldung „Error opening FadeCandy: Access denied (insufficient permission)“ („Fehler beim Öffnen von FadeCandy: Zugriff verweigert (unzureichende Berechtigungen)“).

Als der Server in Betrieb war, habe ich einen Webbrowser geöffnet und zu http://localhost:7890 navigiert. Ich sah, dass er funktionierte, aber nicht mit einer FadeCandy verbunden war.

Die FadeCandy und die NeoPixel-Matrix verbinden

Jetzt zum Löten. Die NeoPixel-Matrix hat 2 Gruppen mit je 3 Pins, wobei 3 als DOUT, 5V und GND und die anderen 3 als DIN, 5V und DND gekennzeichnet sind. Ich habe jeweils einen Draht an beiden 5V und dem GND aus der ersten Gruppe angelötet.

Ich wollte zunächst ein Tischnetzteil verwenden und habe daher die anderen Drahtenden so belassen, wie sie waren, um später eine geeignete Buchse zur Verbindung mit einem 5-V-Netzteil anzulöten.

Die FadeCandy muss mit GND und DIN verbunden werden. Daher lötete ich an jedem dieser Pins einen Draht an, wobei die anderen Enden mit einem der 8 Kanäle der Steuerung verbunden werden müssen. Diese sind entlang einer Kante der FadeCandy angeordnet und mit + und - gekennzeichnet. Es schien mir sinnvoll, meine NeoPixels mit Kanal 0 zu verbinden.


Hübsche Muster erstellen

 

Nachdem ich die FadeCandy mit einem USB-Anschluss des Computers und die NeoPixels mit einem 5-V-Netzteil verbunden hatte und der FadeCandy-Server auf dem Computer lief, konnte ich nun Testläufe mit Sketches durchführen. Die Datei „Source code.zip“, die ich zuvor heruntergeladen hatte, enthielt einige Beispiele.

Bei der Ausführung der Beispiel-Sketches trat zunächst ein Problem auf und es wurde eine Fehlermeldung ausgegeben. Ich konnte das Problem mithilfe dieser Seite lösen – es ging einfach darum, die fehlerhafte Zeile folgendermaßen zu bearbeiten:

parent.registerDraw(this);

wurde ersetzt durch:

parent.registerMethod("draw", this);


Ich probierte die Beispiel-Sketches aus: Die Sketches, die auf Mausbewegungen reagierten, waren faszinierend, aber nicht wirklich ideal für ein Display, das Musik begleitet. Ich spiele oft bei Veranstaltungen mit psychedelischen Musikvisualisierungen im alten Stil und suchte daher nach etwas, das gut dazu passen würde. Letztendlich wäre ein interaktiver Effekt ideal, der mit Licht auf den Ton reagiert, aber zunächst musste ich die Grundlagen lernen.

Eines der Beispiele zeigt einige zufällig generierte Wolkenformen, bei denen die Funktion „noise()“ von Processing zum Einsatz kommt und die mir geeignet schienen. Auf der Webseite von Processing heißt es dazu:

„Perlin-Noise ist ein Zufallsgenerator, der eine natürlichere, harmonischere Folge von Zahlen erzeugt als die Standardfunktion random(). Er wurde in den 1980er Jahren von Ken Perlin entwickelt und in grafischen Anwendungen verwendet, um prozedurale Texturen, Formen, Gelände und andere scheinbar organische Formen zu erzeugen.“

Ein paar einfache Optimierungen

// A simple example of using Processing's noise() function to draw LED clouds
OPC opc;
PImage clouds;
void setup()
{
size(500, 500);
colorMode(HSB, 100);
noiseDetail(5, 0.4);
loadPixels();



// Render the noise to a smaller image, it's faster than updating the entire window.
clouds = createImage(128, 128, RGB);
opc = new OPC(this, "127.0.0.1", 7890);
opc.ledGrid8x8(0, width/2, height/2, height / 8.0, 0, false);
}
void draw()
{
float hue = (noise(millis() * 0.0001) * 200) % 100;
float z = millis() * 0.0001;
float dx = millis() * 0.0001;
for (int x=0; x < clouds.width; x++) {
for (int y=0; y < clouds.height; y++) {
float n = 500 * (noise(dx + x * 0.01, y * 0.01, z) - 0.4);
color c = color(hue, 80 - n, n);
clouds.pixels[x + clouds.width*y] = c;
}
}
clouds.updatePixels();
image(clouds, 0, 0, width, height);
}

 

Ich fand bald heraus, dass ich die Geschwindigkeit, mit der sich die Wolkenformen bewegen, einfach durch Bearbeitung der Zeilen „float z“ und „float dz“ ändern konnte.

Außerdem stellte ich fest, dass ich einen ganz anderen Effekt erhalte, wenn ich „colorMode“ von HSB (steht für „Hue, Saturation, Brightness“, zu Deutsch „Farbton, Sättigung, Helligkeit“) in RGB (Rot, Grün, Blau) ändere.

Als ich mit den verschiedenen Einstellungen in dem Sketch spielte und sie ausprobierte, bemerkte ich, wie hell die LEDs waren – auf jeden Fall brauchte ich eine Art Streuscheibe. Ich versuchte es mit verschiedenen Resten von matten Acrylplatten, um zu sehen, welche mir am besten gefiel, und veränderte außerdem den Abstand von der Streuscheibe zum Licht, um es unterschiedlich stark zu streuen.

Mit diesen physikalischen Änderungen und den Änderungen im Sketch ergeben sich aus einem sehr einfachen Aufbau ziemlich viele verschiedene Effekte.

Ich habe ein einfaches Gehäuse für die NeoPixel-Matrix und die FadeCandy gebaut, mit dem ich ganz einfach die Farbe der Streuscheibe ändern kann.

So sieht es aus

Fazit

Ich habe bei diesem Projekt viel Spaß gehabt und ein paar schöne Lichteffekte produziert. Das Spannendste daran ist jedoch, dass ich anscheinend gerade erst an der Oberfläche gekratzt habe und es noch unheimlich viel mehr gibt, was ich tun kann. Man kann die Beleuchtung interaktiv auf Ton- oder Videosignale reagieren lassen und das Display lässt sich erweitern, da NeoPixels-Matrizen miteinander verkettet werden können und eine FadeCandy bis zu 8 davon steuern kann.

I currently look after production at AB Open. I have a background in the arts, environmental conservation and IT support. In my spare time I do a bit of DJing and I like making things.

16 Apr 2019, 13:24

Kommentare