Índice:

A máquina Godot: 4 etapas (com fotos)
A máquina Godot: 4 etapas (com fotos)

Vídeo: A máquina Godot: 4 etapas (com fotos)

Vídeo: A máquina Godot: 4 etapas (com fotos)
Vídeo: Advanced state machine techniques in Godot 4 2024, Novembro
Anonim
A máquina Godot
A máquina Godot

O que é uma máquina Godot?

Faz parte da experiência humana que podemos nos encontrar em um estado de espera por algo que pode eventualmente acontecer após um longo tempo de espera, ou não acontecerá.

A Máquina Godot é uma obra de eletro "arte" movida a energia solar que tenta capturar a emoção desesperada que acompanha a espera possivelmente inútil.

O nome vem da famosa peça de Samuel Beckett, Esperando Godot, em que dois homens esperam a vinda de um certo Godot, que pode chegar amanhã, depois de amanhã ou nunca.

Então, o que a Máquina Godot faz?

  1. 1. Com um pouco de sol, um circuito Joule Thief começa a carregar um banco de capacitores.
  2. 2. Uma vez carregado a cerca de 5 V, o Arduino Nano é alimentado.
  3. 3. O Arduino gera um número aleatório verdadeiro de 20 bits, que é mostrado em uma barra de LED de 4 bits.
  4. 4. Este número é comparado a outro número aleatório, desconhecido para todos, que foi armazenado no eeprom na primeira vez que o circuito foi inicializado.
  5. 5. Se igual, a espera acabou, a máquina armazena este fato no eeprom e a partir de agora o LED verde e o bip piezo são ativados (se houver energia suficiente).
  6. 6. Se não for igual, espere, desespere, repita.

… Também, de vez em quando, o número gerado torna-se audível pelo bipe, para que você não se esqueça de que tem uma máquina Godot.

Dado que a probabilidade de atingir o número de Godot é 1 sobre 2 ^ 20 ou cerca de um em um milhão, e a máquina não é muito rápida, especialmente no inverno e no outono, pode levar anos para encontrá-lo. Sua máquina Godot pode até se tornar parte de sua herança. Enquanto espera por ele para testar o próximo número, você pode fantasiar sobre como seus bisnetos distantes podem finalmente vê-lo chegar ao fim. Resumindo: é o presente ideal para as próximas festas de fim de ano!

Etapa 1: o esquema

O Esquemático
O Esquemático

A Máquina Godot consiste em:

-Um coletor de energia Joule Thief (Q1) que carrega capacitores de 9x2200uF. Para aqueles que sofrem de helixafobia (uma angústia irracional dos indutores, enquanto os capacitores e resistores não representam esse problema), não tema, pois nenhum enrolamento manual é necessário: o acoplamento é criado colocando indutores coaxiais padrão nas proximidades uns dos outros, conforme mostrado aqui no 2ª foto. Truque incrível!

-Um interruptor de alimentação de transistor discreto (Q2, Q3, Q4), que liga em 5V1 aproximadamente e desliga em torno de 3,0V. Você pode querer sintonizar R2-R4 um pouco se usar diferentes tipos de transistores (de uso geral).

-Um gerador de entropia (Q6, Q7, Q8). Este circuito amplifica o ruído eletrônico presente no ambiente de níveis de microvolts a volts. Esse sinal é então amostrado para semear um gerador de números aleatórios baseado no caos (leitura). Um pedaço de corda de violão atua como uma antena.

-Uma barra de LED com 4 LEDs ou 4 LEDs vermelhos separados, um sinalizador piezoelétrico e um LED verde.

Observe que a saída da chave liga / desliga (coletor de Q4) é conectada ao pino 5V do Arduino Nano, NÃO ao pino VIN!

Etapa 2: Construindo a Máquina Godot

Construindo a Máquina Godot
Construindo a Máquina Godot
Construindo a Máquina Godot
Construindo a Máquina Godot
Construindo a Máquina Godot
Construindo a Máquina Godot

Eu construí o circuito em um pedaço de perfboard. Nada de especial aí. O painel solar de 2V / 200mA é uma sobra de outro projeto. A marca é Velleman. É fácil abri-lo com uma faca afiada, para fazer furos para parafusos etc. A placa de circuito e o painel solar são aparafusados em duas peças de compensado, conforme mostrado na foto. A ideia é que o painel solar possa ser posicionado voltado para o sol em uma janela parada.

Etapa 3: O código: números aleatórios do caos?

O Código: Números Aleatórios do Caos?
O Código: Números Aleatórios do Caos?
O Código: Números Aleatórios do Caos?
O Código: Números Aleatórios do Caos?
O Código: Números Aleatórios do Caos?
O Código: Números Aleatórios do Caos?

Como são feitos os números aleatórios? Bem, eles são feitos com matemática!

Em vez de usar a função de gerador de números aleatórios do Arduino, random (), decidi escrever meu próprio Gerador de números aleatórios (RNG), apenas por diversão.

Baseia-se no mapa logístico, que é o exemplo mais simples de caos determinístico. Funciona assim:

Suponha que x seja algum valor real entre 0 e 1, então calcule: x * r * (1-x), onde r = 3,9. O resultado é o seu próximo 'x'. Repita ad infinitum. Isso lhe dará uma série de números entre 0 e 1, como na primeira figura, onde este processo é iniciado para o valor inicial de x = 0,1 (vermelho) e também x = 0,1001 (azul).

Agora, aqui está a parte legal: não importa o quão perto você escolha duas condições iniciais diferentes, se elas não forem exatamente iguais, a série de números resultante irá eventualmente divergir. Isso é chamado de 'dependência sensível das condições iniciais'.

Matematicamente, a equação do mapa x * r * (1-x) é uma parábola. Conforme mostrado na 2ª figura, você pode determinar graficamente a série x usando o que é conhecido como construção de teia de aranha: comece de x no eixo horizontal, encontre o valor da função no eixo y e, em seguida, reflita contra uma linha reta em 45 ângulo de graus passando pela origem. Repetir. Conforme mostrado para as séries vermelha e azul, mesmo que inicialmente próximas, elas divergem completamente após cerca de 30 iterações.

Agora, de onde vem o número 'r = 3,9'? Acontece que, para valores baixos de r, obtemos apenas dois valores x alternados. Aumentar o parâmetro r irá, então, em algum ponto mudar para uma oscilação entre 4, 8, 16 valores, etc. Essas ramificações ou bifurcações vêm mais e mais rapidamente à medida que r é aumentado, no que é chamado de 'rota de duplicação do período para o caos'. Um gráfico com r no eixo horizontal e muitas iterações x sobrepostas verticalmente resultará no que é conhecido como gráfico de bifurcação (3ª figura). Para r = 3,9, o mapa é totalmente caótico.

Portanto, se calcularmos muitas atualizações x e obtermos uma amostra delas, obteremos um número aleatório? Bem, não, neste ponto seria um gerador de números pseudo-aleatórios (PRNG), pois se sempre começarmos com o mesmo valor inicial (após sair do reset), sempre obteremos a mesma sequência; também conhecido como caos determinístico. É aí que entra o gerador de entropia, que semeia o mapa logístico com um número gerado a partir do ruído elétrico encontrado no ambiente.

Em palavras, o código do gerador de número aleatório faz isso:

- Meça a tensão do gerador de entropia no pino A0. Mantenha apenas os 4 bits menos significativos.

- Mude esses 4 bits para um valor de 'semente', repita 8 vezes para obter uma semente de ponto flutuante de 32 bits.

- Redimensione a semente entre 0 e 1.

- Calcule a média desta semente ex, o estado atual do mapa logístico.

- Avance no mapa logístico várias (64) etapas.

- Extraia um único bit do estado x do mapa logístico verificando algum decimal insignificante.

- Mude essa parte para o resultado final.

- Repita todos os passos acima 20 vezes.

Observação: no código, Serial.println e Serial.begin são comentados. Remova o // para verificar os números aleatórios gerados no monitor serial.

Para ser justo, não verifiquei estatisticamente a qualidade dos números aleatórios (por exemplo, suíte de teste NIST), mas eles parecem estar OK.

Etapa 4: Maravilhe-se com sua máquina Godot

Maravilhe-se com sua máquina Godot!
Maravilhe-se com sua máquina Godot!

Aproveite a sua máquina Godot e compartilhe, comente e / ou pergunte se algo não estiver claro.

Enquanto você espera que o número de Godot seja encontrado, vote neste Instructable no concurso Made With Math! Obrigado!

Feito com concurso de matemática
Feito com concurso de matemática
Feito com concurso de matemática
Feito com concurso de matemática

Vice-campeão no concurso Made with Math

Recomendado: