Glühwürmchen sind an sich schon toll, aber es gibt ein paar Arten, die es sogar schaffen, als Schwarm gemeinsam im Takt zu blinken. Und zwar ohne, dass es einen "Dirigenten" gibt! Forscher haben untersucht, wie sie das hinbekommen, daher können wir mit mehreren Calliopes so einen sich selbst synchronisierenden Glühwürmchen-Schwarm nachbauen. Und wer nur einen einzelnen Calliope hat, kann einen Schwarm aus 25 Glühwürmchen auf der 5x5-LED-Matrix simulieren :-)
Hier aber erstmal das "Original". Es heißt, dass die Kamera die komplette Magie, wenn ein ganzer Baum voller Glühwürmchen im Takt blinkt, nicht ansatzweise einfangen kann. Aber man bekommt immerhin eine Idee davon:
Warum die Glühwürmchen das machen, weiß keiner so ganz genau. Tatsache ist, dass herumfliegende männliche Glühwürmchen, die auf Partnersuche sind, blinken und weibliche Glühwürmchen dann ein paar Sekunden danach antworten. Es kann sein, dass ein ganzer Schwarm synchron blinkender Glühwürmchen einfach beeindruckender wirkt und es deshalb vorteilhaft für jedes einzelne Glühwürmchen ist, "mitzumachen". Auch möglich, dass die Männchen die Antwort des Weibchens nur dann gut sehen können, wenn nicht alle durcheinander blinken! Die Natur verrät uns das nicht und es ist ja auch ganz schön, wenn manche Dinge ein Geheimnis bleiben.
Was man aber herausgefunden hat ist, wie die Glühwürmchen es schaffen, sich auf einen gemeinsamen Rhythmus zu "einigen". Es gibt dabei kein "Master-Glühwürmchen", das den Takt vorgibt. Auch keine demokratische Abstimmung per Handzeichen. Was mit den Glühwürmchen passiert, ist auf den ersten Blick total simpel und trotzdem unglaublich genial: Jedes Glühwürmchen hat eine "innere Uhr". Immer, wenn eine bestimmte Zeit vergangen ist (die ist je nach Art unterschiedlich), blinkt das Glühwürmchen kurz und setzt die Uhr zurück auf Anfang. Wenn nun ein Glühwürmchen ein anderes in der Nähe aufleuchten sieht, stellt es seine eigene Uhr einfach ein Stückchen vor. Das ist alles.
Wichtig ist aber ein Detail: Um wieviel ein Glühwürmchen seine innere Uhr vorstellt, hängt vom ihrem aktuellen "Stand" ab. Dadurch holen die "Nachzügler" immer mehr auf. Und wenn erstmal zwei Glühwürmchen im Takt blinken, geben sie einem dritten quasi den "doppelten Schubs". So bilden sich erst kleine Grüppchen, bis nach einer Zeit tatsächlich alle Glühwürmchen gleichzeitig blinken. Mann kann mathematisch beweisen, dass das in "fast allen Fällen" funktioniert, aber der Beweis hat es in sich. Wer ihn nachlesen will, findet hier den Artikel: https://www.clear.rice.edu/comp551/papers/MirolloStrogatz-TemporalSynchronization-SIAM1990.pdf .
In Excel simuliert sieht das Ganze so aus: Die "innere Uhr" jedes Glühwürmchens läuft kontinuierlich von 0 bis 1 hoch, dann wird sie zurückgesetzt und beginnt wieder bei 0. Zunächst "blinken" die Glühwürmchen nacheinander (d. h. sie erreichen den Wert 1 zu unterschiedlichen Zeitpunkten). Weil sich die inneren Uhren durch das gegenseitige "Anschubsen" im Verlauf der Zeit immer mehr angleichen (sie machen in dem Moment einen Mini-Sprung nach oben, so klein, dass man ihn hier nicht einmal sehen kann), "feuern" die Glühwürmchen irgendwann gleichzeitig:
Das Programm für den Calliope "baut" nun einfach nur das nach, was die Natur macht. Es ist für jeden Calliope/jedes Glühwürmchen gleich: Am Anfang setzen wir die innere Uhr auf eine zufällige Zahl zwischen 0 und 1. Der Trick ist: Zahl zwischen 0 und 999 wählen und diese durch 1000 teilen. Außerdem legen wir fest, in welchen Schritten die Uhr normalerweise hochgezählt wird (Variable "schritt") und um welchen Faktor die Uhr vorgestellt wird, wenn ein anderes Glühwürmchen blinkt (Variable "schubs"). Um nachzubilden, dass die Glühwürmchen nur in einer begrenzten Umgebung für andere sichtbar sind, können wir beim Start noch die Sendeleistung anpassen (es wird gleich klar, warum):
Jedes Glühwürmchen führt nun immer wieder folgende Fallunterscheidung aus: Wenn seine innere Uhr den Wert 1 erreicht oder überschreitet (uhr >= 1), benachrichtigt es per Funk die Calliopes in der Nähe (die können, anders als die echten Glühwürmchen, das "Blinken" ja nicht "sehen"). Das tatsächliche Blinken kommt im nächsten Schritt, da nutzen wir den Block "ändere Spielstand", weil der eine entsprechende Animation auf dem Display des Calliope macht. Zum Schluss stellen wir seine "innere Uhr" noch zurück auf 0. Wenn andernfalls diese den Wert 1 noch nicht erreicht hatte, zählen wir sie einfach um die beim Start eingestellte Schrittweite hoch. In jedem Fall warten wir danach eine kurze Zeit (6 Millisekunden):
Wenn ein Glühwürmchen per Funk erfährt, dass ein anderes geblinkt hat, gibt es seiner eigenen Uhr einfach nur einen kleinen "Schubs". Dessen Größe hatten wir beim Start ja schon festgelegt:
Das komplette Programm ist im Anhang als "firefly_sync, js" enthalten. Und so sieht es aus, wenn man es auf mehrere Calliopes überspielt und startet. Zu Beginn starten die Glühwürmchen mit einem zufällig gewähltem Muster, aber nach und nach synchronisieren sie sich und blinken irgendwann gemeinsam im Takt:
Aber auch wer nur einen einzelnen Calliope hat, kann den Effekt nachbilden: Das Display des Calliope besteht ja aus 5x5 LEDs, so dass wir daraus 25 sich synchronisierende Glühwürmchen "machen" können! Das ist im Anhang das Programm "firefly_matrix.js". Das Prinzip ist genau gleich, nur natürlich ohne Funk. Alle Uhren sind in einer Liste mit 25 Einträgen gespeichert, es muss ja alles auf diesem einen Calliope passieren. Berücksichtigt für die Synchronisation werden jeweils die unmittelbar benachbarten Glühwürmchen. Hier eine kurze "Demo":
Und, weil es so schön ist, noch eine Variante :-) : Im auch angehängten Programm "firefly_cascade.js", das wieder für mehrere Calliopes gedacht ist, synchronisieren sich die Glühwürmchen zwar nicht, jedes "angefunkte" Glühwürmchen wird aber mit einer bestimmten (einstellbaren) Wahrscheinlichkeit manchmal zurückfunken, manchmal nicht. So entstehen immer neue Abläufe!
Dieses letzte Programm ist relativ "1:1" übernommen aus: https://microbit-micropython.readthedocs.io/en/v1.0.1/tutorials/radio.html. Die Simulation auf nur einem Calliope ist komplett selbstgeschrieben. Das erste Programm hat seine Grundlage in https://makecode.microbit.org/projects/fireflies, welches erstaunlicherweise aber nicht korrekt ist, da dort die "inneren Uhren" immer um den gleichen Wert verstellt werden. So schubsen sich zwei Glühwürmchen zwar gegenseitig an, aber genau gleich "stark", dadurch verändern sie im Ergebnis nichts und synchronisieren sich auch nicht.
Zum Schluss noch eine sehr hübsch gemachte Seite mit einer Simulation eines Glühwürmchen-Schwarms im Browser, die sich auf jeden Fall lohnt, einmal anzusehen: https://ncase.me/fireflies/.
Viel Spaß beim Ausprobieren! :-)
Thorsten Kimmeskamp




Comments