Inhoudsopgave:

De Godot-machine: 4 stappen (met afbeeldingen)
De Godot-machine: 4 stappen (met afbeeldingen)

Video: De Godot-machine: 4 stappen (met afbeeldingen)

Video: De Godot-machine: 4 stappen (met afbeeldingen)
Video: How to Debug Your Game in Godot (Breakpoints, debugger, print statements, and more) 2024, Juli-
Anonim
De Godot-machine
De Godot-machine

Wat is een Godot-machine?

Het maakt deel uit van de menselijke ervaring dat we ons in een staat van wachten kunnen bevinden op iets dat uiteindelijk zou kunnen gebeuren na lang wachten, of helemaal niet.

De Godot Machine is een op zonne-energie aangedreven stuk elektro-'kunst' dat probeert de wanhopige emotie vast te leggen die gepaard gaat met mogelijk zinloos wachten.

De naam komt uit het beroemde toneelstuk Wachten op Godot van Samuel Beckett, waarin twee mannen wachten op de komst van een zekere Godot, die morgen, overmorgen of nooit zou kunnen aankomen.

Dus wat doet de Godot-machine?

  1. 1. Bij wat zonneschijn begint een Joule Thief-circuit een reeks condensatoren op te laden.
  2. 2. Eenmaal opgeladen tot ongeveer 5V, wordt de Arduino Nano van stroom voorzien.
  3. 3. De Arduino genereert een 20-bits echt willekeurig getal, dat wordt weergegeven op een 4-bits LED-balk.
  4. 4. Dit nummer wordt vergeleken met een ander willekeurig nummer, dat voor iedereen onbekend is, dat de eerste keer dat het circuit opstartte in eeprom werd opgeslagen.
  5. 5. Indien gelijk is het wachten voorbij, de machine slaat dit feit op in eeprom en vanaf nu worden de groene LED en piezo pieper geactiveerd (mits er voldoende energie is).
  6. 6. Indien niet gelijk, hoop, wanhoop, herhaal.

…ook wordt het gegenereerde nummer af en toe hoorbaar gemaakt door de pieper, zodat je eigenlijk niet vergeet dat je een Godot Machine hebt.

Aangezien de kans om het Godot-getal te raken 1 over 2^20 of ongeveer één op een miljoen is, en de machine niet erg snel is, vooral in de winter en de herfst, kan het jaren duren om hem te vinden. Uw Godot Machine kan zelfs onderdeel worden van uw erfenis. Terwijl je wacht tot het het volgende nummer test, kun je fantaseren over hoe je verre achterachterkleinkinderen het eindelijk tot een einde kunnen zien komen. Kortom: het ideale cadeau voor de aankomende feestdagen!

Stap 1: Het schema

het schema
het schema

De Godot Machine bestaat uit:

- Een Joule Thief-energieoogster (Q1) die 9x2200uF-condensatoren oplaadt. Voor degenen die last hebben van helixafobie (een irrationele angst voor inductoren, terwijl condensatoren en weerstanden niet zo'n probleem vormen), vrees niet, want handmatig opwinden is niet nodig: de koppeling wordt gemaakt door standaard coaxiale inductoren in elkaars nabijheid te plaatsen, zoals hier getoond in de 2e foto. Geweldige truc!

- Een discrete transistorschakelaar (Q2, Q3, Q4), die bij 5V1 ongeveer inschakelt en uitgaat bij ongeveer 3,0V. Misschien wil je R2-R4 een beetje afstemmen als je verschillende (algemene) transistortypes gebruikt.

-Een entropiegenerator (Q6, Q7, Q8). Deze schakeling versterkt de elektronische ruis die in de omgeving aanwezig is, van microvolt tot volt. Dat signaal wordt vervolgens gesampled om een op chaos gebaseerde (lees verder) willekeurige nummergenerator te zaaien. Een stuk gitaarsnaar fungeert als antenne.

- Een LED-balk met 4 LED's of 4 rode aparte LED's, een piëzo-pieper en een groene LED.

Merk op dat de uitgang van de stroomschakelaar (collector van Q4) is verbonden met de 5V-pin van de Arduino Nano, NIET met de VIN-pin!

Stap 2: De Godot-machine bouwen

De Godot-machine bouwen
De Godot-machine bouwen
De Godot-machine bouwen
De Godot-machine bouwen
De Godot-machine bouwen
De Godot-machine bouwen

Ik bouwde het circuit op een stuk perfboard. Niets bijzonders daar. Het 2V/200mA zonnepaneel is een overblijfsel van een ander project. Het merk is Velleman. Het is gemakkelijk om het open te wrikken met een scherp mes, om gaten te boren voor schroeven enz. Printplaat en zonnepaneel worden op twee stukken triplex geschroefd, zoals op de afbeelding te zien is. Het idee is dat het zonnepaneel op een raam nog naar de zon kan worden geplaatst.

Stap 3: De code: willekeurige getallen uit chaos?

De code: willekeurige getallen uit chaos?
De code: willekeurige getallen uit chaos?
De code: willekeurige getallen uit chaos?
De code: willekeurige getallen uit chaos?
De code: willekeurige getallen uit chaos?
De code: willekeurige getallen uit chaos?

Hoe worden de willekeurige getallen gemaakt? Nou, ze zijn gemaakt met wiskunde!

In plaats van de Arduino random number generator functie random() te gebruiken, besloot ik om mijn eigen Random Number Generator (RNG) te schrijven, gewoon voor de lol.

Het is gebaseerd op de logistieke kaart, het eenvoudigste voorbeeld van deterministische chaos. Dit is hoe het werkt:

Stel dat x een reële waarde is tussen 0 en 1, bereken dan: x*r*(1-x), waarbij r=3.9. Het resultaat is je volgende 'x'. Herhaal tot in het oneindige. Dit geeft je een reeks getallen tussen 0 en 1, zoals in de eerste afbeelding, waar dit proces wordt gestart voor de beginwaarde van x=0.1 (rood) en ook x=0.1001 (blauw).

Dit is het coole gedeelte: hoe dicht je ook kiest voor twee verschillende beginvoorwaarden, als ze niet precies gelijk zijn, zal de resulterende reeks getallen uiteindelijk divergeren. Dit wordt 'Gevoelige afhankelijkheid van beginvoorwaarden' genoemd.

Wiskundig gezien is de kaartvergelijking x*r*(1-x) een parabool. Zoals weergegeven in de 2e figuur, kunt u de x-reeks grafisch bepalen met behulp van een zogenaamde spinnenwebconstructie: begin bij x op de horizontale as, zoek de functiewaarde op de y-as en reflecteer vervolgens tegen een rechte lijn op 45 graden hoek die door de oorsprong gaat. Herhalen. Zoals getoond voor de rode en blauwe reeks, zelfs als ze aanvankelijk dicht bij elkaar liggen, divergeren ze volledig na ongeveer 30 iteraties.

Waar komt het getal 'r=3.9' vandaan? Het blijkt dat we voor lage waarden van r slechts twee afwisselende x-waarden krijgen. Het verhogen van de r-parameter zal dan op een gegeven moment overschakelen naar een oscillatie tussen 4, 8, 16 waarden enz. Deze vertakkingen of vertakkingen komen steeds sneller naarmate r toeneemt, in wat een 'periodeverdubbelingsroute naar chaos' wordt genoemd. Een plot met r op de horizontale as en veel x-iteraties die verticaal overlappen, resulteert in een zogenaamde bifurcatieplot (3e figuur). Voor r=3.9 is de kaart volledig chaotisch.

Dus als we veel x-updates berekenen en daaruit een steekproef trekken, krijgen we een willekeurig getal? Nou nee, op dit punt zou het een Pseudo Random Number-generator (PRNG) zijn, want als we altijd beginnen met dezelfde initiële waarde (nadat we uit reset komen), zouden we altijd dezelfde reeks krijgen; oftewel deterministische chaos. Dit is waar de entropiegenerator binnenkomt, die de logistieke kaart zaait met een nummer dat is gemaakt op basis van elektrische ruis die in de omgeving wordt aangetroffen.

In woorden, de code voor het genereren van willekeurige getallen doet dit:

- Meet de spanning van de entropiegenerator op pin A0. Bewaar alleen de 4 minst significante bits.

- Verschuif deze 4 bits naar een 'seed'-waarde, herhaal 8 keer om een 32-bit floating point seed te krijgen.

- Schaal de seed opnieuw tussen 0 en 1.

- Bereken het gemiddelde van dit zaad en x, de huidige staat van de logistieke kaart.

- Voer de logistieke kaart vele (64) stappen uit.

- Extraheer een enkel bit uit de logistische kaartstatus x door een onbeduidend decimaalteken te controleren.

- Verschuif dat stukje naar het eindresultaat.

- Herhaal alle stappen boven de 20 keer.

Opmerking: in de code worden de Serial.println en Serial.begin weggelaten. Verwijder de // om de gegenereerde willekeurige getallen op de seriële monitor te controleren.

Om eerlijk te zijn, heb ik de kwaliteit van de willekeurige getallen (bijv. NIST-testsuite) niet statistisch gecontroleerd, maar ze lijken in orde te zijn.

Stap 4: Bewonder je Godot-machine

Bewonder je Godot-machine!
Bewonder je Godot-machine!

Veel plezier met je Godot Machine en deel, becommentarieer en/of vraag als er iets onduidelijk is.

Terwijl je wacht tot het Godot-nummer wordt gevonden, kun je op deze Instructable stemmen in de Made With Math-wedstrijd! Bedankt!

Gemaakt met wiskundewedstrijd
Gemaakt met wiskundewedstrijd
Gemaakt met wiskundewedstrijd
Gemaakt met wiskundewedstrijd

Tweede plaats in de Made with Math-wedstrijd

Aanbevolen: