Inhaltsverzeichnis:
- Schritt 1: Der Schaltplan
- Schritt 2: Aufbau der Godot-Maschine
- Schritt 3: Der Code: Zufallszahlen aus dem Chaos?
- Schritt 4: Bestaunen Sie Ihre Godot-Maschine
Video: Die Godot-Maschine - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Was ist eine Godot-Maschine?
Es ist Teil der menschlichen Erfahrung, dass wir uns in einem Zustand des Wartens auf etwas befinden können, das nach einer langen Zeit des Wartens schließlich oder überhaupt nicht passieren könnte.
The Godot Machine ist ein solarbetriebenes Stück Elektro-"Kunst", das versucht, die verzweifelte Emotion einzufangen, die mit möglicherweise sinnlosem Warten einhergeht.
Der Name stammt von Samuel Becketts berühmtem Stück Waiting for Godot, in dem zwei Männer auf das Kommen eines bestimmten Godot warten, der morgen, übermorgen oder nie ankommen könnte.
Was macht die Godot-Maschine?
- 1. Bei Sonnenschein beginnt eine Joule-Dieb-Schaltung, eine Kondensatorbank aufzuladen.
- 2. Nach dem Aufladen auf etwa 5 V wird der Arduino Nano mit Strom versorgt.
- 3. Der Arduino generiert eine echte 20-Bit-Zufallszahl, die auf einer 4-Bit-LED-Leiste angezeigt wird.
- 4. Diese Zahl wird mit einer anderen, allen unbekannten Zufallszahl verglichen, die beim ersten Booten der Schaltung im eeprom gespeichert wurde.
- 5. Bei Gleichheit ist die Wartezeit vorbei, die Maschine speichert diese Tatsache im eeprom und von nun an werden die grüne LED und der Piezo-Beeper aktiviert (wenn genügend Energie vorhanden ist).
- 6. Wenn nicht gleich, hoffen, verzweifeln, wiederholen.
…auch ab und zu wird die generierte Zahl durch den Piepser hörbar gemacht, damit Sie nicht vergessen, dass Sie eine Godot-Maschine haben.
Angesichts der Tatsache, dass die Wahrscheinlichkeit, die Godot-Zahl zu treffen, 1 über 2^20 oder etwa eins zu einer Million beträgt und die Maschine insbesondere im Winter und Herbst nicht sehr schnell ist, kann es Jahre dauern, sie zu finden. Ihre Godot-Maschine könnte sogar Teil Ihres Erbes werden. Während Sie darauf warten, dass die nächste Nummer getestet wird, können Sie davon träumen, wie Ihre entfernten Ururenkel sie endlich zu Ende bringen werden. Kurzum: Es ist das ideale Geschenk für die kommende Weihnachtszeit!
Schritt 1: Der Schaltplan
Die Godot-Maschine besteht aus:
-Ein Joule Thief Energy Harvester (Q1), der 9x2200uF Kondensatoren lädt. Für diejenigen, die unter Helixaphobie leiden (eine irrationale Angst vor Induktoren, während Kondensatoren und Widerstände kein solches Problem darstellen), keine Angst, da kein manuelles Wickeln erforderlich ist: Die Kopplung wird durch Anordnen von Standard-Koaxialinduktoren in der Nähe hergestellt, wie hier in der 2. Bild. Genialer Trick!
-Ein diskreter Transistor-Leistungsschalter (Q2, Q3, Q4), der bei etwa 5 V1 ein- und bei etwa 3,0 V ausschaltet. Möglicherweise möchten Sie R2-R4 ein wenig abstimmen, wenn Sie verschiedene (Allzweck-) Transistortypen verwenden.
-Ein Entropiegenerator (Q6, Q7, Q8). Diese Schaltung verstärkt das in der Umgebung vorhandene elektronische Rauschen von Mikrovolt auf Volt. Dieses Signal wird dann abgetastet, um einen auf Chaos basierenden (ausgelesenen) Zufallszahlengenerator zu erzeugen. Als Antenne dient ein Stück Gitarrensaite.
-Eine LED-Leiste mit 4 LEDs oder 4 roten separaten LEDs, einem Piezo-Pieper und einer grünen LED.
Beachten Sie, dass der Ausgang des Netzschalters (Kollektor von Q4) mit dem 5V-Pin des Arduino Nano verbunden ist, NICHT mit dem VIN-Pin!
Schritt 2: Aufbau der Godot-Maschine
Ich baute die Schaltung auf einem Stück Perfboard. Da ist nichts besonderes. Das 2V/200mA Solarpanel ist ein Überbleibsel aus einem anderen Projekt. Die Marke ist Velleman. Es ist leicht mit einem scharfen Messer aufzuhebeln, um Löcher für Schrauben etc. zu bohren. Platine und Solarpanel werden, wie im Bild gezeigt, auf zwei Sperrholzstücke geschraubt. Die Idee ist, dass das Solarpanel auf einem Fenster noch in Richtung der Sonne positioniert werden kann.
Schritt 3: Der Code: Zufallszahlen aus dem Chaos?
Wie werden die Zufallszahlen gebildet? Nun, sie sind mit Mathe gemacht!
Anstatt die Arduino-Zufallszahlengeneratorfunktion random() zu verwenden, habe ich mich entschieden, meinen eigenen Zufallszahlengenerator (RNG) zu schreiben, nur zum Spaß.
Es basiert auf der logistischen Karte, die das einfachste Beispiel für deterministisches Chaos ist. So funktioniert das:
Angenommen, x ist ein reeller Wert zwischen 0 und 1, dann berechnen Sie: x*r*(1-x), wobei r=3,9. Das Ergebnis ist Ihr nächstes 'x'. Bis ins Unendliche wiederholen. Dadurch erhalten Sie eine Reihe von Zahlen zwischen 0 und 1, wie im ersten Bild, wo dieser Vorgang für den Anfangswert von x = 0,1 (rot) und auch x = 0,1001 (blau) gestartet wird.
Jetzt kommt der coole Teil: Egal wie nah Sie zwei verschiedene Anfangsbedingungen wählen, wenn sie nicht genau gleich sind, wird die resultierende Zahlenreihe schließlich divergieren. Dies wird als 'empfindliche Abhängigkeit von Anfangsbedingungen' bezeichnet.
Mathematisch ist die Abbildungsgleichung x*r*(1-x) eine Parabel. Wie in der 2. Abbildung gezeigt, können Sie die x-Reihe mit einer sogenannten Spinnennetzkonstruktion grafisch bestimmen: beginnend mit x auf der horizontalen Achse, finden Sie den Funktionswert auf der y-Achse, dann spiegeln Sie an einer geraden Linie bei 45 Grad Winkel durch den Ursprung. Wiederholen. Wie für die rote und blaue Reihe gezeigt, divergieren sie, auch wenn sie anfangs nahe beieinander liegen, nach etwa 30 Iterationen vollständig.
Woher kommt nun die Zahl 'r=3.9'? Es stellt sich heraus, dass wir für kleine Werte von r nur zwei alternierende x-Werte erhalten. Das Erhöhen des r-Parameters wird dann irgendwann zu einer Oszillation zwischen 4, 8, 16 Werten usw. wechseln. Diese Verzweigungen oder Bifurkationen kommen immer schneller, wenn r erhöht wird, in einer sogenannten "Periodenverdopplungsroute ins Chaos". Ein Plot mit r auf der horizontalen Achse und vielen vertikal überlappenden x-Iteraten führt zu einem sogenannten Bifurkations-Plot (3. Abbildung). Für r=3,9 ist die Karte vollständig chaotisch.
Wenn wir also viele x-Updates berechnen und daraus Stichproben ziehen, erhalten wir eine Zufallszahl? Nun, nein, an dieser Stelle wäre es ein Pseudo-Zufallszahlengenerator (PRNG), denn wenn wir immer mit dem gleichen Anfangswert beginnen (nachdem wir den Reset verlassen haben), würden wir immer die gleiche Sequenz erhalten; auch bekannt als deterministisches Chaos. Hier kommt der Entropie-Generator ins Spiel, der die logistische Karte mit einer Zahl besät, die aus elektrischem Rauschen in der Umgebung erzeugt wird.
In Worten, der Code des Zufallsgenerators tut dies:
- Spannung vom Entropiegenerator an Pin A0 messen. Behalten Sie nur die 4 niederwertigsten Bits bei.
- Verschieben Sie diese 4 Bits in einen "Seed"-Wert, wiederholen Sie dies 8 Mal, um einen 32-Bit-Gleitkomma-Seed zu erhalten.
- Skalieren Sie das Saatgut zwischen 0 und 1.
- Berechnen Sie den Durchschnitt dieses Seeds und x, den aktuellen Zustand der Logistikkarte.
- Erweitere die Logistikkarte um viele (64) Schritte.
- Extrahieren Sie ein einzelnes Bit aus dem logistischen Kartenzustand x, indem Sie eine unbedeutende Dezimalstelle überprüfen.
- Verschieben Sie dieses Bit in das Endergebnis.
- Wiederholen Sie alle oben genannten Schritte 20 Mal.
Hinweis: Im Code werden Serial.println und Serial.begin auskommentiert. Entfernen Sie das //, um die generierten Zufallszahlen auf dem seriellen Monitor zu überprüfen.
Um fair zu sein, habe ich die Qualität der Zufallszahlen (z. B. NIST-Testsuite) nicht statistisch überprüft, aber sie scheinen in Ordnung zu sein.
Schritt 4: Bestaunen Sie Ihre Godot-Maschine
Viel Spaß mit Ihrer Godot-Maschine und bitte teilen, kommentieren und/oder fragen, wenn etwas unklar ist.
Während Sie darauf warten, dass die Godot-Nummer gefunden wird, stimmen Sie bitte für dieses Instructable im Made With Math-Wettbewerb! Vielen Dank!
Zweiter im Made with Math Contest
Empfohlen:
DIY So zeigen Sie die Zeit auf dem M5StickC ESP32 mit Visuino an - Einfach zu tun: 9 Schritte
DIY So zeigen Sie die Zeit auf dem M5StickC ESP32 mit Visuino an - Einfach zu machen: In diesem Tutorial lernen wir, wie Sie den ESP32 M5Stack StickC mit Arduino IDE und Visuino programmieren, um die Zeit auf dem LCD anzuzeigen
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): 3 Schritte
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): Manchmal korrigiert die Autokorrektur möglicherweise etwas, das Sie nicht korrigieren möchten, z. Textabkürzungen beginnen sich in Großbuchstaben zu setzen (imo korrigieren zum Beispiel zu IMO). So erzwingen Sie, dass die Korrektur eines Wortes oder einer Phrase beendet wird, ohne aut zu deaktivieren
So laden Sie die Sony A6000-Kamera auf: 17 Schritte
So laden Sie die Sony A6000-Kamera auf: Wenn Sie die Kamera zum ersten Mal verwenden, laden Sie den Akku auf. Der geladene Akku entlädt sich nach und nach, auch wenn Sie ihn nicht verwenden. Um eine Aufnahmegelegenheit nicht zu verpassen, laden Sie den Akku vor der Aufnahme auf. (App
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: 3 Schritte
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: In diesem Tutorial erfahren Sie, wie Sie die Android-Anwendung mit dem AWS IOT-Server verbinden und die Spracherkennungs-API verstehen, die eine Kaffeemaschine steuert. Die Anwendung steuert die Kaffeemaschine über Alexa Sprachdienst, die c
So bauen Sie eine Uhr, die die Zeit an die Wand projiziert – wikiHow
So bauen Sie eine Uhr, die Zeit an die Wand projiziert: Dieses Instructable zeigt Ihnen, wie Sie eine Projektoruhr bauen. Mit diesem Gerät können Sie die Zeit an die Wand projizieren. Basierend auf einem kleinen LCD-Wecker (nicht zu klein, sondern kann nicht projiziert und bearbeitet werden) ist dies eine gute Möglichkeit