Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

hswiki:misc:materix

Materix

Die Mate-rix ist eine Pixelmatrix, die pro Bildpunkt aus dem Flaschenboden einer leeren Mateflasche leuchtet, und in originalen Getränkekästen angeordnet ist. Vergleichbare Projekte werden auch Matelight (c-base) oder FlaschenTaschen (Noisebridge) genannt. Im Krautspace hat dafür Gecko den Hut auf.

Unsere Materix im Krautspace ist am frühen Morgen des 19. Januar 2018 fertig gestellt worden und ist seitdem mit einem Arduino Uno-Klon in Betrieb. Darauf läuft aktuell ein Example der FastLED-Library namens Fire2012WithPalette. Die Matelight geht einige Momente nach Anschalten der Steckdosenleiste mit den Ambience-LEDs und der Audioanlage in Betrieb.

In Arbeit ist eine Ansteuerung per Raspberry Pi oder Arduino/ESP8266, worauf dann per Netzwerk neue Patterns geladen werden können.

Benutzung

Zum Anschalten der Matelight kann man die Steckdosenleiste mit den Ambience-LEDs und der Musikanlage anschalten. Nach einigen Momenten ist der Arduino gestartet und die LEDs fangen mit ihrer Aktivität an.

Zum Ausschalten kann noch unbedenklich die Steckdosenleiste ausgeschaltet werden. Dabei wird der Arudino mit ausgeschaltet, das ist aber kein Problem für den Arduino. Mit einem Raspberry Pi sollte man sich dann eine andere Lösung ausdenken.

Den Arduino Uno mit einem neuen Pattern flashen kann man per USB. Hierbei ist empfehlenswert, den 5V-Pin der Materix vom Arduino zu trennen, bevor ein Computer per USB angesteckt wird. Anschließend kann der Arduino Uno mit einem neuen Skript geflasht werden. Die LED-Chips sind 120 Stück WS2811 (Neopixel) und stecken auf Arduino Pin 5. Eine Empfohlene Library für die Arduino IDE ist FastLED (download, anschließendes Unzippen und Umbenennen des Ordners ohne Bindestriche und Punkte, und Import per Arduino IDE > Sketch > Import Library > Add Library).

Mapping

Da die Lichterkette an einem Daten-Pin hängt und so alle LEDs entlang einer Leitung adressiert werden, existiert hier physisch ein Raum für 1-dimensionale Animationen.

Um Bilder (2D) korrekt darzustellen, muss jede Pixel-Adresse wissen, wo sie sich in der fertigen Matrix befindet.

Dazu hier der Aufbau der Lichterkette in der Flaschenmatrix:

      (in den Lichtstrahl blickend)
      ┏━━━━━━━━━━━━━━━━━━━PP━━━━━━━━━━━━━━━━━━━┓
      ┃ ○ ← ○   ○ ← ○   ○ ←← ○   ○ ← ○   ○ ← ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○   ○   ○   ○ ┃┃ ○   ○   ○   ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○   ○   ○   ○ ┃┃ ○   ○   ○   ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○ ← ○   ○ ← ○ ┃┃ ○ ← ○   ○ ← ○   ○ ┃
      ┗━↓━━━━━B-DOWN━━━━━━┛┗━━━━━━━A-UP━━━━━━↑━┛
      ┏━↓━━━━━━━━━━━━━━━━━┓┏━━━━━━━━━━━━━━━━━↑━┓
      ┃ ○   ○ → ○   ○ → ○ ┃┃ ○ → ○   ○ → ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○   ○   ○   ○ ┃┃ ○   ○   ○   ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○   ○   ○   ○ ┃┃ ○   ○   ○   ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○ → ○   ○ → ○   ○ ┃┃ ○   ○ → ○   ○ → ○ ┃
      ┗━━━━━━━A-DOWN━━━━↓━PP━↑━━━━━B-UP━━━━━━━━┛
      ┏━━━━━━━━━━━━━━━━━↓━PP━↑━━━━━━━━━━━━━━━━━┓
      ┃ ○ ← ○   ○ ← ○   ○ ┃┃ ○   ○ ← ○   ○ ← ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○   ○   ○   ○ ┃┃ ○   ○   ○   ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○   ○   ○   ○ ┃┃ ○   ○   ○   ○   ○ ┃
      ┃ ↓   ↑   ↓   ↑   ↓ ┃┃ ↑   ↓   ↑   ↓   ↑ ┃
      ┃ ○   ○ ← ○   ○ ← ○ ┃┃ ○ ← ○   ○ ← ○   ○ ┃
      ┗━━━━━━━B-DOWN━━━━━━┛┗━━━━━━━A-UP━━━━━━↑━┛
                                             ↑
                                           {DIN}
                                           
P...Power input: Hier wird 5V/GND an alle anliegenden LED-Kettenenden eingespeist
A-UP/DOWN...A und B sind zwei verschiedene Steckmuster. UP ist normal, DOWN indiziert eine 180°-Drehung um die Y-Achse in den Raum (Achsenbeschriftungen vgl. CNC und 3D-Druck)

Lookup Table

Lycian hat eine Matrix in Arduino zusammengeschrieben.

// Eindimensional
static int matrix[120] = { 
     76, 75, 68, 67, 60, 59, 52, 51, 44, 43 ,
     77, 74, 69, 66, 61, 58, 53, 50, 45, 42 ,
     78, 73, 70, 65, 62, 57, 54, 49, 46, 41 ,
     79, 72, 71, 64, 63, 56, 55, 48, 47, 40 ,
     80, 87, 88, 95, 96, 23, 24, 31, 32, 39 ,
     81, 86, 89, 94, 97, 22, 25, 30, 33, 38 ,
     82, 85, 90, 93, 98, 21, 26, 29, 34, 37 ,
     83, 84, 91, 92, 99, 20, 27, 28, 35, 36 ,
     116, 115, 108, 107, 100, 19, 12, 11, 4, 3 ,
     117, 114, 109, 106, 101, 18, 13, 10, 5, 2 ,
     118, 113, 110, 105, 102, 17, 14, 9, 6, 1 ,
     119, 112, 111, 104, 103, 16, 15, 8, 7, 0 
    };
// Zweidimensional
  int matrix[12][10] = { 
    { 76, 75, 68, 67, 60, 59, 52, 51, 44, 43 },
    { 77, 74, 69, 66, 61, 58, 53, 50, 45, 42 },
    { 78, 73, 70, 65, 62, 57, 54, 49, 46, 41 },
    { 79, 72, 71, 64, 63, 56, 55, 48, 47, 40 },
    { 80, 87, 88, 95, 96, 23, 24, 31, 32, 39 },
    { 81, 86, 89, 94, 97, 22, 25, 30, 33, 38 },
    { 82, 85, 90, 93, 98, 21, 26, 29, 34, 37 },
    { 83, 84, 91, 92, 99, 20, 27, 28, 35, 36 },
    { 116, 115, 108, 107, 100, 19, 12, 11, 4, 3 },
    { 117, 114, 109, 106, 101, 18, 13, 10, 5, 2 },
    { 118, 113, 110, 105, 102, 17, 14, 9, 6, 1 },
    { 119, 112, 111, 104, 103, 16, 15, 8, 7, 0 } 
    };

Codebeispiele

Ihr könnt im Repository auf Github Beispiele finden, diese verbessern und neue hinzufügen.
Pixelart kann zum Beispiel so aussehen:

void happy()
{
  CRGB bg = CRGB(0,0,0);
  CRGB gg = CRGB(0,255,0);
  
  CRGB colormap[12][10] = {
      { bg, bg, bg, bg, bg, bg, bg, bg, bg, bg  },
      { bg, bg, bg, bg, bg, bg, bg, bg, bg, bg },
      { bg, bg, bg, gg, bg, bg, gg, bg, bg, bg },
      { bg, bg, bg, gg, bg, bg, gg, bg, bg, bg },
      { bg, bg, bg, gg, bg, bg, gg, bg, bg, bg },
      { bg, bg, bg, gg, bg, bg, gg, bg, bg, bg },
      { bg, bg, bg, bg, bg, bg, bg, bg, bg, bg },
      { bg, gg, gg, gg, gg, gg, gg, gg, gg, bg },
      { bg, gg, bg, bg, bg, bg, bg, bg, gg, bg  },
      { bg, bg, gg, bg, bg, bg, bg, gg, bg, bg  },
      { bg, bg, bg, gg, bg, bg, gg, bg, bg, bg  },
      { bg, bg, bg, bg, gg, gg, bg, bg, bg, bg }
  };
  for(int i = 0; i < 12; i++){
    for(int k = 0; k < 10; k++){
      leds[matrix[i][k]] = colormap[i][k];
    }
  }
}

Komponenten, Baukosten und Eigentum

Gecko bezieht seine Elektronikbauteile meistens über Aliexpress.

Leergut (Eigentum Krautspace): 27,00 €

  • 6x Leerkasten Club-Mate 0,5l á 1,50 €
  • 120x Flasche 0,5l Schraubverschluss á 0,15 € (wenn man es bei Loscher abgibt)

LEDs und Elektronik, etc. (Eigentum Gecko): 37,09 €

  • 3x 50er-Lichterkette WS2811 „Finger“ LEDs á 7,90 €
  • 5V 10A-Netzteil: 8,04 €
  • aktuell Arduino Uno-Klon á 2,45 €
  • (in Zukunft Raspberry Pi Zero W (10 €) oder/und ESP8266 (1,72 €))
  • 2x 30m Alufolie á 1,45 €

Totalpreis: 64,09 €

Verein (Pfand): 27,00 € (42%)

Bar-Spenden: 30,00 € (47%)

Geckos: 7,09 € (11%)

Danksagungen

Beim Bau mitgeholfen haben chronologisch:

  • Lycian
  • Corneus
  • Hornig
  • Joe
hswiki/misc/materix.txt · Zuletzt geändert: 2018/02/24 01:54 von lycian