Lightpainting mit dem Raspberry Pi

Dies ist ein Gastartikel von Tobi

Schon seit längerer Zeit habe ich mal ein Foto-Projekt gesehen, das mich fasziniert hat: LightScythe. Die Ergebnisse fand ich damals super, allerdings hat mich die Hardware- und Elektronik Bastelei abgeschreckt.  Idee des Projektes ist es mit einen Streifen von RGB LEDs spaltenweise über die Zeit ein Bild auszugeben und durch Bewegung des LED-Streifens das Bild im Raum darzustellen. Durch Langzeitbelichtung sieht das Bild dann aus, als würde es im Raum stehen.

LightPainting-3750

In diesem doch sehr nassen und grauen Winter habe ich mich mal wieder an diese Idee erinnert und gesehen, dass es durch den Bastelrechner Raspberry Pi wesentlich leichter geworden ist.

Mein recht einfacher LED-Stick besteht nun aus folgenden Teilen:

  • LED Streifen mit 50 LEDs vom Typ WS2812B (bei Adafruit heißen die „neopixels“)
    gibt’s bei Amazon** oder z.B. hier bei ebay
  • Raspberry Pi, ich habe die Version B+** verwendet
  • Raspberry Pi Gehäuse**
  • USB-Stromquelle z.B. einen mobilen Akku von Anker zur Stromversorgung des Raspberry Pi
  • Batteriehalterung für 4 Standard 1,2V Akkus Größe AA** zur Stromversorgung der LEDs
  • „Level Shifter“ TI 74AHCT125 zur Ansteuerung der LEDs
  • Holzlatte – 1,70m lang – als Träger
  • Kabel, Steckbrett**, Klettband

Eine genaue Anleitung zur Verkabelung der LEDs und des Raspberry Pi gibt es bei Adafruit.

LightPainting-1 LightPainting-2

Zur Programmierung der LEDs braucht man noch die rpi_ws281x Software Library. Diese stellt auch eine Python Schnittstelle bereit, mit der man die LEDs recht einfach ansteuern kann. Dazu habe ich mir ein kleines Python Programm geschrieben, das ein Bild öffnen, auf 50 Pixel vertikal skalieren und Spalte für Spalte auf den LED Streifen ausgeben kann. Das Skript gibt’s hier.

Damit man auch unterwegs den Raspberry Pi ansteuern kann habe ich mir noch einen WLAN Stick** besorgt und den Raspberry Pi zum Access Point gemacht. Ähnlich wie bei einer GoPro Kamera kann man sich so per Handy mit Raspberry Pi verbinden, ein Bild auswählen und an die LEDs ausgeben lassen. Das dazugehörende Web-Interface will ich hier allerdings nicht weiter beschreiben.

Bei der Auswahl der Bilder ist zu beachten, dass diese keine zu hohe Auflösung haben, da sie auf 50 Pixel herunter skaliert werden und so immer noch gut erkennbar sein müssen.

Hier die ersten Bilder die ich mit Tom und Thorsten zusammen gemacht habe – alle sind >= 30s belichtet.

LightPainting-3751LightPainting-7LightPainting-10LightPainting-3736LightPainting-6

Tobi kenne ich schon einige Jahre aus den Anfangszeiten meiner Fotografie. Und vor kurzem war ich mit ihm und seinem neuen Projekt unterwegs. Da ich das Thema so interessant fand und er aus erster Hand natürlich besser darüber berichten kann, war er so nett und hat hierzu diesen Gastartikel verfasst.

** Amazon Affiliate Link

13 Gedanken zu „Lightpainting mit dem Raspberry Pi

  1. Wow, für mich ein Thema der Kategorie: Was es nicht alles gibt. ;o)
    Aber geniale und super Ergebnisse.
    Bekommt man die „Figuren“ wirklich in >=30s so hin?
    Wie bildet man die Reihen? Freihändig? Mit Schablone?

    Dazu die Bilder vor dem ZKM. Eigentlich müsste dort schon eine Ausstellung dafür reserviert sein, oder?!? ;o)

    • Danke Andreas!
      Du hast ja eine Leiste die du hochkant einfach durchs Bild ziehst.
      Die 50 Pixel in der Höhe bildest du also Spalte für Spalte auf einmal ab… und dann bewegst du den Balken durchs Bild, während die Spalten durchlaufen.

  2. Sieht echt sehr gut aus. Versuche das gerade nach der Anleitung auch mal. 1. Problem: Es sind noch nicht alle Teile da, um die LEDs an den RaPI2 anzuschließen und 2. Problem: Das Skript läuft (ohne LEDs angeschlossen) los, bricht aber nie ab. Liegt das an der noch fehlenden Hardware, oder habe ich was anderes falsch gemacht?

    • Hallo Oliver! Cool dass du auch bastelst.
      Das Skript ist ziemlich rudimentär gehalten. Als Argument an das Skript musst du den Pfad zu einem darzustellenden Bild angeben, also beispielsweise so:
      python showImage.py /home/oliver/pfadZuMeinenBildern/meinBild.png. Das Bild wird dann zuerst verkleinert auf deine Pixelanzahl und danach spaltenweise wiedergegeben. Zwischen jeder Spalte wird 0.3s gewartet.
      Im Skript wird die Python Image Library benutzt, die einige Bildformate unterstützt. Einfach mal googlen, z.B. PIL supported file formats.
      Das Skript läuft auch ohne angeschlossenen LEDs, Wenn das Bild „breiter“ ist, dauert’s eben länger, sind eben immer 0.3s zwischen jeder Spalte. Ob was passiert kannst du dir auch ausgeben lassen, indem du anstatt des strip.show() Befehls einfach ein print einfügst.
      Viel Spaß beim Basteln!

      • Hallo,
        danke schon mal für die Hinweise! Es hat sich rausgestellt, dass der Raspberry PI 2 nicht mit der rpi_ws281x-Library arbeiten kann. Da wird zwar dran gearbeitet, aber für´s Warten bin ich nicht geboren! 😉 Hab mir den PI B+ geholt und der tut es direkt. Mit einem winzigen Problem:
        Die Bilder stehen kopf, d.h. oben ist da, wo die Kabel in den LED-Streifen gehen (bei DIN). Da ich meine Aperatur so gebaut habe, dass ich entweder 1m oder 2m-LEDs nehmen kann, ist das ein Problem. Kann ich das im Skript ändern (also OBEN und UNTEN vertauschen). Ich müsste doch nur die Start-LED umdefinieren, oder?

        Schon mal vielen Dank für die bisherige und die hoffentlich zukünftige Hilfe.
        Gruß
        Olli

          • Hallo,

            läuft alles sehr gut. DANKE!
            Hätte da gleich aber schon die nächste Frage! 😉
            Will das ganze nicht über Smartphone oder blind über Tastartur steuern, sondern würde gern ein 16×2-Display und 3 Taster nutzen, um durch die JPGs hoch- und runterzuscrollen und dann mit dem dritten Schalter das Skript zu Starten. Gibt es da evtl. Ideen oder Seiten, wie man so etwas realisieren könnte? Hab schon einen Schalter für den „Shutdown“ eingerichtet, aber das hier scheint mir deutlich umfangreicher…
            Bin für jeden Hinweis dankbar!
            Gruß
            Olli

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.