rando
Eu comecei esse projeto nas férias da faculdade no final de 2014, na época eu estava brincando com alguns circuitos de portas lógicas usando transistores BJT, eu estava pesquisando sobre eles e testando usando uma protoboard. Um circuito que tinha me chamado atenção era o de um flip-flop, onde havia duas portas NAND conectadas de forma cruzada: Qual o comportamento do circuito quando ele é ligado?
Em teoria o bit guardado no sistema deveria ser aleatório, porém ao montar o circuito ele sempre era iniciado da mesma forma. Eventualmente aprendi que isso acontecia por conta das características dos transistores, mesmo os componentes com o mesmo código não são idênticos. Caso eu invertesse eles o valor era invertido. Fiz um teste colocando um potenciômetro entre as duas portas e pela minha surpresa era possível controlar a frequência em que os valores eram “gerados”.
Simplificando o circuito para a parte que interessa, eu conectei duas portas NOT em laço, com a saída de uma conectada na entrada da outra, coloquei um botão para ligar e dois LEDs para indicar o estado de cada porta.
Quando conectado a um osciloscópio é possível ver sistema se estabilizando entre um dos dois estados:
Sequência de diferentes resultados aleatórios (gifScope)
Compilação das respostas "sim"
Compilação das respostas "não"
Comparação das multiplas oscilações que ocorrem no sistema até o mesmo se estabilizar em um dos estados
Queria testar o quão aleatório era o circuito e se seria possível criar um gerador de números aleatórios usando essa ideia, porém esse circuito nunca funcionava quando conectado a uma fonte de bancada, muito menos a um Arduino. Pois, mesmo calibrando o circuito para ficar 50%, ele ficava cada vez mais sensível a influências externas. Até mesmo a minha posição em relação ao circuito acabava influenciando o resultado.
Minha próxima ideia foi isolar ele em uma caixa eletromagneticamente blindada. A caixa era envelopada com papel alumínio e possuía uma bateria interna e um reed-relay acionado por um Arduino. O valor gerado era lido usando um LED e um LDR acoplados usando fita isolante e papel alumínio. O dispositivo ficou com uma aparência bem curiosa, e levou a alguns experimentos interessantes. Em um deles era possível, através de um programa feito em Processing, ver um gráfico do histograma dos valores gerados.
Devido a metaestabilidade do sistema, quanto mais preciso e isolado era o dispositivo, mais sensível ele se tornava, gerando respostas enviesadas. Era como tentar gerar números aleatórios equilibrando um lápis pela ponta e vendo para que lado ele caia. Eventualmente esse ruído era acumulado/amplificado influenciando o comportamento do circuito, fazendo sempre pender para um dos lados com o tempo.
Geradores de números aleatórios são normalmente bem complexos, principalmente se o que se procura é uma sequência “balanceada”. O processo mais comum é aumentar o laço de portas lógicas NOT conectadas e medir o tempo que leva para o sistema mudar de estado, depois os resultados são lidos e passados por outros sistemas/algoritmos que ficam constantemente validando, calibrando e compensando qualquer "tendência" que o circuito tenha.
Não é tão simples gerar uma sequência de números aleatórios consistente e balanceada usando apenas dois transistores. Mas mesmo não chegando nesse resultado, esse projeto representou bem o processo de ir estudando enquanto experimentando e descobrindo, essa é a forma que eu mais gosto de aprender. No início de 2015, achei que seria bem interessante fazer um dispositivo portátil e dar de presente de aniversário para uma das minhas melhores amigas, a Elza.
Esse ano (2022), resolvi refazer esse dispositivo como um kit faça-você-mesmo, achei que seria ótimo para treinar como soldar e por diversão. O resultado foi um chaveiro circular com 3.8 cm de diâmetro, que usa uma bateria de relógio para funcionar.
Se você tiver interesse em participar de uma oficina ou comprar um kit, entre em contato comigo ou acompanhe as atualizações deste blog (página da plaquinha).
tags: game apekind
/home