neopixel

ARBEITSBLATT 3: LICHTSPIELE MIT NEOPIXELS

 

 

WAS SIND NEOPIXELS

 

In absehbarer Zeit wird es nur noch Leuchtmittel geben, die aus LEDs aufgebaut sind. Eine LED ist eine Halbleiter-Diode, die den durchfliessenden Strom mit hohem Wirkungsgrad in Licht umwandelt. Je nach Material kann man verschiedene Farben erzeugen. Kombiniert man eine rote, grüne und blaue LED in einem Gehäuse, so ergibt sich eine Farb-LED, mit der man durch additive Farbmischung jede andere Farbe erzeugen kann. Das Prinzip wird auch beim Farbfernsehen angewendet.

Farb-LEDs werden manchmal mit einer elektronischen Schaltung (Controller) im gleichen Gehäuse kombiniert und hintereinader kaskadiert. Mit nur 3 Zuleitungen kann man trotzdem jeder einzelnen eine andere Farbe geben. Üblicherweise werden die LEDs auf einem LED-Streifen (LEDstrip) montiert. Es gibt aber auch Ringe oder rechteckige Anordnungen (Matrix).

Im Folgenden verwendest du entweder einen LED-Streifen, einen LED-Ring oder eine LED-Matrix mit mindestens 12 LEDs. Diese müssen den Typ WS2812B haben. Bezugsquellen: Elektronik-Shops, Online-Versand (Adafruit, Seed, Pi-Shop, Ebay, Aliexpress, usw.)

 

 

PROGRAMMIEREN MIT GROSSEM SPASSFAKTOR

 

Ein Lichtsystem, das mit einem Mikrocontroller wie dem Calliope angesteuert wird, ist extrem flexibel und vielseitig, und es es gänzlich deiner Phantasie und deinem Einfallreichtum beim Schreiben des Steuerungsprogramms überlassen, was man schliesslich sehen wird. In diesem Arbeitsblatt lernst du einige grundlegende Verfahren kennen, die du dann auf dein eigenes Projekt übertragen kannst. Wie du sehen wirst, macht das Programmieren von Lichtsystemen deshalb Spass, weil die Auswirkungen jeder Programmzeile sofort optisch sichtbar werden.

 

 

ANSCHLUSS

 

Für einfache Testsysteme kannst du den LED-Streifen, Ring oder Matrix mit drei Leitungen am Calliope anschliessen.

Dabei verwendest du die Pins GND, 3.3V und P1.

Üblich sind folgende Kabelfarben:
GND: schwarz
3.3V (VCC): rot
Datenleitung (DIN): andersfarbig

   

Achtung: Falls du eine Anordnung mit mehr als 20-30 LEDs verwendest, musst du diese mit einer externen Stromversorgung von 5 V speisen, beispielsweise mit einer PowerBank.

 

 

AUFGABE 1: PIXEL AUF BESTIMMTE FARBE SETZEN

 

Die Ansteuerung der NeoPixels erfolgt mittels eines seriellen Protokolls. Dabei werden der Reihe nach die 3 Farbwerte für das erste Pixel, dann für das zweite usw. gesendet. Das erste Pixel "schnappt" sich seine Werte weg und leitet den Rest des Datenstroms weiter. Unter MicroPython ist die Programmierung sehr einfach: Du erstellst ein "Objekt" NeoPixel, indem du angibt, welches der Datenport ist (üblicherweise pin1) und wieviele NeoPixel deine Anordnung aufweist, also für 24 LEDs:

np = NeoPixel(pin1, 24)
(np ist ein beliebiger Variablenname)

Im Speichersystem entsteht nun eine Liste mit 24 Tupels, welche die RGB-Farben der 24 LEDs aufnehmen kann (als (R, G, B)-Farbwerte je im Bereich 0..255).

Auf die einzelnen Werte kannst du mit einem Listenindex zugreifen, also beispielsweise die Farbe der ersten LED auf eine rote Intensität von 30 setzen mit:
np[0] = (30, 0, 0)
oder die Farbe der zweiten LED auf grün setzen mit
np[1] = (0, 30, 0)
Mit dieser Zuweisung ist der Farbwert aber erst in die Liste gesetzt. Damit er auch tatsächlich sichtbar wird, musst du den LEDs die Listeninformation zuzusenden,indem dur
np.show() aufrufst.

Das Programm sieht also so aus:

from calliope_mini import *
from neopixel import *

nbLeds = 24
np = NeoPixel(pin1, nbLeds)
np[0] = (30, 0, 0)
np[1] = (0, 30, 0)

np.show()
► In Zwischenablage kopieren
 

Wie du siehst, musst du neben dem Modulcalliope_mini auch noch das Modul neopixel importieren. Falls du das np.show() vergisst, so siehst du keine Veränderung der Farben, da ja deine LEDs erst bei diesem Aufruf den Datenstrom erhalten.

 

 

AUFGABE 2: EIN PIXEL LAUFEN LASSEN

 

Du brauchst vom Programmiertechnischen nur sehr wenig zu wissen, um die folgenden Aufgaben zu lösen. Versuche in dieser ersten Übung ein einzelnes rotes Pixel endlos vom Anfang an das Ende laufen zu lassen. Verwende dazu eine geeignete Wartezeit zwischen dem Pixelwechsel (z.B. 100 ms). Du kannst mit den Farben und Wartezeiten etwas spielen.

Anmerkung:
Um ein einzelnes Pixel zu löschen, verwendest du np[i] = (0, 0, 0). Du kannst auch alle Pixels miteinander mit np.clear() löschen.

 

 

 

AUFGABE 3: LÄNGER WERDENDER FARBIGER WURM

 

Es ist lustig, einen "Wurm" von gleichfarbigen Pixels zu erzeugen. Dabei soll ausgehend vom gelöschten Zustand die Pixel der Reihe nach mit der gewünschten Farbe angeschaltet werden, bis alle Pixels leuchten. Der Vorgang soll sich endlos mit verschiedenen Farben wiederholen.

Schreibe dazu am besten eine Funktion wurm(color), welche den Wurm erzeugt und rufe sie endlos der Reihe nach mit den Farben rot, grün, blau, gelb, cyan und weiss auf.

 

 

Du kannst auch auf das Löschen des alten Wurms verzichten, damit immer alle LEDs eingeschaltet bleiben.

 

 

 

AUFGABE 4: ALLE LEDs MITEINANDER HELL/DUNKEL STEUERN

 

Für viele Farbspiele möchte man alle LEDs miteinander leuchten lassen. Schreibe ein Programm, das mit fest vorgegebener Farbe alle LEDs in kleinen Schritten hell und wieder dunkel werden lässt. Das Programm soll endlos laufen und die grösste Farbkomponente soll 30 nicht übersteigen.

Spiele mit verschiedenen Farben, die sich auch laufend verändern können.

 

 

 

AUFGABE 5: KERZENFLACKERN

 

Gehe vom vorhergehenden Programm aus, aber setze die Farbkomponenten beim heller und dunkler werden zufällig. Ist also der momentane maximale Farbwert k, so verwende die Farbe

color = int(random() * k, int(random() * k,         int(random() * k)

Du musst dazu das Modul random importieren:
from random import *

 

 

 

AUFGABE 6: EIGENEN IDEEN VERWIRKLICHEN

 

Erfinde ein Lichtspiel nach eigenen Ideen.