Computerkunst to Go

Elektronik, die man in die Hand nehmen und überall hin mitnehmen kann, hat mich schon immer fasziniert. Beispiele dafür sind Fotoapparate, programmierbare Taschenrechner, Pocketcomputer, Palmtops, kleine Spielekonsolen oder Smartphones. Um so kleiner, um so faszinierender. Vermutlich habe ich darum auch so viel Freude an den kleinen Mikrocontrollern auf Basis des ESP32. Seit letztem Jahr gibt es bei Banggood ein Board mit diesem Mikrocontroller und einem daran angeschlossenem Display. Das Display ist ziemlich gut, blickwinkelstabil, farbkräftig und hell.

Seit ich die kleinen Controller mit dem tollem Display kenne, reizte es mich, darauf etwas zu programmieren was sie richtig zur Geltung bringt. Es sollte etwas sein, was keinen wirklichen Nutzen hat, außer schön anzusehen zu sein.  Dafür soll es aber lange anzusehen sein. Zum Beispiel ein Anhänger für eine Halskette. Das Ziel war es etwas zu schaffen, was so faszinierend ist, das man den Blick kaum abwenden kann. Das geht natürlich nicht, wenn auf dem Display lediglich ein Bild zu sehen wäre und selbst eine Animation, bzw. ein kleiner Film, der sich immer wieder wiederholt, wäre bald langweilig. Es musste etwas sein, was sich niemals identisch verhält und selbst mir, dem Programmierer, im Idealfall etwas zeigt, was ich nicht vorausberechnen kann.

Eine meiner ersten Ideen dazu war es, einem Lösungsalgorithmus für das Durchlaufen eines Labyrinths, bei seiner Arbeit zuzusehen. Das bedingte aber auch die Erzeugung eines Labyrinths! Also programmierte ich einen Labyrinth-Generator und einen Labyrinth-Löser. Da ich mich für beides damit beschäftigen musste, eine kleine Klötzchenwelt im ESP32 zu halten, kam ich auf weitere Ideen, die Klötzchen bedurften. So hatte ich zum Beispiel vor langer Zeit einmal einen Tetris Clone in Turbo-Pascal programmiert. Diesen Code konvertierte ich nach C++ und passte ihn an das kleine Display an. Schon war ein zweiter Anhänger programmiert.

Als nächstes viel mir ein, dass es auch in der realen Welt Entsprechungen für meine Idee gibt: Zum Beispiel ein Feuer. Da kann man auch stundenlang hinein starren. 🙂 Ich erinnerte mich daran, so etwas vor Jahrzehnten als Programm für MS-DOS gesehen zu haben. Heutzutage gibt es Feuer in jedem zweiten Spiel. Aber wie macht man das eigentlich?

Auf Youtube fand ich einen Feuer-Algorhitmus, mit dessen Umsetzung ich anfangs etwas Probleme hatte und auch als er lief, sah das Ergebnis nicht so aus, wie ich mir das vorgestellt hatte. Doch nach einigen kleinen Ergänzungen, hatte ich schließlich ein ansehnliches Feuer. Ich ergänzte es noch um einen wandernden Mond und blinkende Sterne.

Im Laufe der Zeit sind noch ein paar andere Anhänger dazu gekommen, die ich Euch nachfolgend vorstelle.

Lagerfeuer

Hast Du schon einmal an einem Lagerfeuer gesessen? An einem lauen Sommerabend in den Nachthimmel gesehen und die Sterne betrachtet? Vielleicht darüber nachgedacht, ob einer der vielen Sterne Planeten mit Leben besitzt? Schöne Gespräche geführt? Vielleicht hast Du Dich sogar am Lagerfeuer zum ersten Mal verliebt? Mit dem Lagerfeuer-Anhänger kannst Du jederzeit die Erinnerungen an diese schöne Zeit aufleben lassen! Oder, wenn Du ihn abends auf Deinen Nachttisch stellst, betrachten und Dich durch die Flammen in den Schlaf flackern lassen.

Die Idee ein Feuer auf einem kleinen Display zu realisieren hatte ich schon länger. Aber wie? Eine Zeit lange erwog ich einfach eine Art kleinen Film abzuspielen. Aber den muss man ja auch erst einmal filmen, verkleinern und auf den ESP32 bringen. Wo kann man den ablegen, so dass er vom ESP32 abgespielt werden kann? Gibt es überhaupt geeignete Abspielprogramme für Filme für den ESP32? Oder muss ich die Animation selbst programmieren und viele kleine Einzelbilder auf dem ESP32 ablegen? Außerdem wäre der Flammenverlauf dann immer wieder der gleiche, was dazu führt, das Betrachter dies nach kurzer Zeit erkennen und die Illusion eines Feuers damit beendet.

Andererseits ist ein Feuer so konfus, dass man die Illusion vielleicht auch einfach aus einer Handvoll zufällig ausgewählter Einzelbilder erzeugen kann.

Doch alle diese Lösungen gefielen mir nicht wirklich. Ich wollte dem Wesen des Feuers mit einem Programm näher kommen, als es durch das Abspielen von Einzelbildern der Fall gewesen wäre. Ein Algorithmus soll es richten. Und so entwickelte ich ein Programm, welches Feuer per Algorithmus simulieren kann. Zufallsgesteuert zeigt es niemals das Gleiche noch einmal an und darum erzeugt jeder Lagerfeuer-Anhänger Dein eigenes individuelles Feuer!

Kerze

Ein Lagerfeuer habe ich jetzt. Ob man da nicht eine Kerze daraus machen kann? Ich fotografierte eine Kerze unseres Adventskranzes 2019 und modifizierte den Feuer-Algorithmus so, dass er die Flamme einer Kerze erzeugt. Die Kerze hat eine ähnlich warme Wirkung wie das Lagerfeuer. Für den Nerd mit romantischem Einschlag ist sie der ideale Begleiter.

Tetris

Wer kennt Tetris nicht? Obwohl schon 1986 auf dem PC erschienen und 1989 noch einmal auf dem Nintendo Gameboy, kennt es auch heutzutage noch fast jeder. Das Spielprinzip ist simpel, jeder versteht es innerhalb von Sekunden und trotzdem ist es herausfordernd einen gutes Score zu erreichen. So war es einmal das Bestreben meiner Freundin, jetzigen Frau, unbedingt den Score meiner Ex zu übertreffen. 🙂

1990 habe ich das Spiel mit Turbo Pascal nachprogrammiert und ‘Clone’ genannt. Ich wollte einmal sehen, wie lange es dauert so ein Spiel zu programmieren. In ein, zwei Abenden hatte ich es geschafft. Natürlich habe ich es nicht verkauft.

Ich dachte mir, das so zufällig fallende Tetris-Steine auch sehr hübsch auf dem TTGO T Display ausehen müssten und erinnerte mich an meinen alten Programmcode. Es war nicht all zu schwer, ihn auf C++ anzupassen. Die größten Änderungen bestanden im Weglassen von Code für die Highscore-Verwaltung, den Score und im Grunde unbedeutende Anzeigen rund um das eigentliche Spielfeld. Die Spielfeldgröße und die Farben der Blöcke entsprechen dem Original Tetris!

Außerdem baute ich noch eine Funktion ein, die es gestattet, das zufällige Hin- und Herwandern der Steine abzustellen und es stattdessen mit den 2 eingebauten Tasten richtig zu spielen.

Labyrinth

Ich verbinde mit einem Labyrinth meist das Verirren in einer Höhle mit labyrinthartig verschlungenen Gängen. Wie einfach es ist sich zu verirren und in Panik zu geraten, erlebte ich einmal bei einem Besuch einer Burg, die in ihrem Untergrund ein Gangsystem besaß. In manchen der Gänge konnte man nur geduckt bzw. kriechend vorwärts kommen und ich entschloss mich alte Kindheitsvorstellungen wahr zu machen und für einen kurzen Moment Höhlenforscher zu sein. Ich krabbelte also, nur mit einer kleinen Taschenlampe ausgerüstet, einige zig Meter in das Gangsystem hinein. Dabei bog ich an zwei Stellen jeweils um 90 Grad ab. Insofern mich meine Erinnerung nicht trügt, war es dort, bis auf mein Licht, stockdunkel und ich war von meinem Ausgangspunkt optisch völlig getrennt. Wäre die Taschenlampe ausgegangen, hätte ich überhaupt nichts mehr sehen können. Da im Scheinwerferlicht um mich herum jetzt nur noch Steinwände zu sehen waren, verlor ich komplett den Bezug zu meiner Umgebung und merkte, wie sich ein klein wenig Panik in mir ausbreitete. Ich entschloss mich meine Karriere als Höhlenforscher sofort zu beenden und wieder zurück zum Ausgangspunkt zu krabbeln. Die erste Abbiegung zurück war noch einfach, aber schon bei der zweiten war ich mir nicht mehr sicher, aus welchem Gang ich gekommen war. War es der im dunklen Scheinwerferlicht erste oder der zweite Gang? Hätte ich jetzt den falschen genommen, wäre ich vielleicht nie mehr heraus gekommen. Wer das nicht einmal selbst erlebt hat, mag jetzt sagen, dass ich, wenn ich jetzt nicht nach kurzer Zeit den Ausgang gefunden hätte, einfach wieder zurück gehen und den zweiten Gang hätte nehmen können. Aber der Mensch, oder zumindest ich, weiß nach einigen wenigen Abzweigungen nicht mehr genau, welchen Weg er tatsächlich genommen hat! Das, denke ich, ist die Basis allen Verirrens.

Aus der Sicht des Programmierers gibt es zwei Aufgaben: Die Erzeugung eines Labyrinths, die Platzierung des Punktes und eines Ausgangs und die Suche nach dem Ausgang. Also Grund genug, als Informatiker darüber nachzudenken, wie man das systematisch lösen kann. Wenn man sich alle gegangenen Abzweigungen genau merken und beim Zurückgehen vermerken könnte, dass der gerade gegangene Weg nicht zum Ausgang geführt hat, so braucht man ihn nicht noch einmal zu gehen.

Mandelbrot

Dieser Anhänger zeigt alle 3 Sekunden eine wunderschöne Computergrafik. Wobei eine Zeit lang jedes neue Bild die Vergrößerung eines Ausschnittes des vorhergehenden Bildes ist. Nach einer gewissen Zeit wird ein neues Startbild berechnet und das Hineinzoomen beginnt von neuem. Auch dieser Anhänger ist so programmiert, das er niemals das gleiche Bild noch einmal anzeigen wird!

Diese Bilder sind eigentlich ein alter Hut, ich denke ihre große Zeit war so vor ungefähr 30 Jahren. Der berühmte Mathematiker Benoît B. Mandelbrot hat sie bei Untersuchungen von Computergrafiken entdeckt, die mit Hilfe einer bestimmten Formel erzeugt wurden. Wer sich für die Thematik interessiert, findet im Internet viele Artikel dazu. Gut erklärt hat es Florian Freistetter auf dieser Seite. Dabei geht es um Chaos und Fraktale, obwohl ich ja eigentlich kein Chaos darin entdecken kann. Damals haben viele des Programmierens fähige Leute eigene Programme zur Berechnung der Computergrafik entwickelt und durch Angabe eines bestimmten Ausschnitts ihre ganz eigenen Bilder erzeugt. Ich erinnere mich noch, wie ich eines der Bilder auf ein T-Shirt drucken lies und es meiner damaligen Freundin schenkte. Ein typisches Nerd-Geschenk und doch ist die Freundin später meine Frau geworden.

Die Visualisierung der Mandelbrot-Menge bringt wunderschöne Bilder hervor. Vor etwa 30 Jahren habe ich eigene Programme dazu entwickelt, die ich, unter anderem, auf einem Amiga 2000 liefen lies. Die Berechnungszeit für ein einziges Bild hat oft mehrere Stunden gedauert. Das waren die Ergebnisse aber wert. Da das Display des von mir eingesetzten ESP32-Mikrocontroller-Boards mehr Farben besitzt, als alle damals für Privatanwender zur Verfügung stehenden Computer (auch mehr als der HAM Modus des Amiga mit seinen 4096 Farben), kann man mit dem Board schönere Bilder erzeugen, als es damals möglich war. Dazu kommt die hohe Geschwindigkeit des ESP32: die Berechnung eines einzigen Bild benötigt nur etwa eine Sekunde Zeit!

Der Anhänger besitzt ein raffiniertes System zur Erzeugung von Farbpaletten. Ein paar sind vordefiniert, eine wird per Zufall aus den Grundfarben erzeugt und eine hat einen komplett schwarzen Bereich, so dass bei geeigneten Ausschnitten gelegentlich Bilder entstehen, die für Momente an ferne Galaxien erinnern. Die Paletten lassen sich durch Tastendruck durch schalten. Die Helligkeit kann in 5 Stufen gesteuert werden.

Herzflimmern

Der Anhänger erzeugt ein animiertes Herz, welches in Abhängigkeit der Anzahl der umgebenden WiFis unterschiedlich schnell pulsiert.

Dies ist im Moment der einzige Anhänger, der nicht dafür ausgelegt wurde, längere Zeit betrachtet zu werden. Statt dessen ist sein ununterbrochen kleiner und größer werdendes Herz ein auffälliger Blickfang, bei dem sich jeder Betrachter fragt, ob er die Geschwindigkeit Deines Herzschlags anzeigt. Scheinst Du kurz vor einem Herzinfarkt zu sein, so weißt Du, dass im Moment sehr viele WiFis in Deiner Umgebung aktiv sind. Pulsiert es ganz langsam, so ist die Anzahl der aktiven Netzwerke in Deiner Nähe gering.

Bei diesem Anhänger wird die Dual Core Fähigkeit des ESP32 richtig ausgenutzt: Ein Kern sorgt dafür, dass das Herz ohne Unterbrechungen ständig gleichmäßig pulsiert und der andere Kern ermittelt alle paar Sekunden neu die Anzahl der umgebenden WiFis um damit die Frequenz des Pulsierens zu steuern.

 

9 Kommentare

  1. Hallo, coole Sache. besteht die Chance, den Code für das Tetris zu bekommen? Hab hier ein paar der Module und wollte die eigentlich mit dem Snake-Spiel zu Weihnachten verschenken. Tetris fänd ich aber hübscher 😉

    Grüße

  2. Das läuft mit Stromversorgung! Im Gehäuse ist ein kleiner Akku mit 250 mAh. Der lässt den TTGO, je nach Anwendung zwischen 2 und 3 Stunden laufen. Bei Verwendung von Deep sleep sind auch viele Stunden möglich. Man kann meine Programm auch per Tastendruck zwischendurch in einen Deep sleep versetzen und dann per Reset wieder aktivieren. So ist es möglich die Anhänger einen Abend lang immer mal wieder zu verwenden. Der Akku lässt sich über den USB-C Anschluss wieder aufladen.

Kommentar hinterlassen

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