Snake 1D

[ en ]

snake 1D

Um dos meus repositórios mais antigos no github é uma implementação do jogo da cobrinha em python. Eu tinha umas fitas de LEDs RGB endereçáveis (os WS2812, às vezes chamados de NeoPixels) e um fadecandy parados pros quais eu queria dar um uso e lembrei que vários anos atrás eu vi o line wobbler num evento e achei muito bom o jeito que eles usam fitas de LED e um controle feito por eles como a interface do jogo. Se a gente tirar uma dimensão do tradicional jogo da cobrinha, ele cabe em uma fita de LED, então só faltava juntar as coisas.

O fadecandy tem um servidor com o qual a gente pode se comunicar usando Open Pixel Control, então dá pra usar python pra mandar os dados pro servidor e, assim, controlar os LEDs. Como o código de 9 anos atrás também era em python, bastou copiar e colar boa parte dele e fazer algumas pequenas adaptações, trocando a tela pela fita de LED e mudando um pouco a jogabilidade pra caber em uma só dimensão.

O jogo é o mais simples possível: a cobra (em amarelo) anda em uma direção e na fita aparece comida (em verde). Apertar o botão faz a cobra mudar de direção. A cada comida capturada passamos pra próxima fase, enquanto bater numa parede (branca) é o fim do jogo.

Jogo rodando em uma fita de led, controlada por python usando o fadecandy

Isso funciona bem e tem todas as vantagens que o fadecandy traz, principalmente as cores e transições bonitas (que infelizmente não dá pra ver bem no video). O problema é que ainda precisa de um computador conectado por USB e um teclado inteiro pra usar só um botão.

O próximo passo é, então, portar o código pra um microcontrolador. Assim a gente consegue fazer o jogo ser razoavelmente portátil (você ainda precisa de uma fita de LED ligada na tomada). Eu acabei escolhendo o ATTiny 85 porque ele é muito barato, pequeno e é fácil de programar, já que tem integração com a IDE do arduino através do ATTinyCore.

Jogo rodando direto no microcontrolador

Como fica claro no segundo vídeo, as transições são bem menos fluidas do que na versão com o fadecandy. Com certeza é uma coisa que pode melhorar com um pouco mais de código, mas aqui a gente também esbarra nas limitações do microcontrolador, então o resultado nunca vai ser igual.

O hardware tem pouco mais do que o ATTiny 85 em si e um botão Cherry MX que faz a nossa querida personagem mudar de direção. Só proteção pra o caso de conectar ele com a polaridade invertida e um circuito de debouncing pra evitar que um clique no botão seja registrado como dois (o que faria a cobra não mudar de direção).

Esquema elétrico do jogo com o ATTiny 85
Esquema elétrico do jogo com o ATTiny 85

Com o esquema elétrico e o layout prontos, bastou encomendar as placas de circuito impresso, juntar os componentes, soldar tudo e programar o microcontrolador. Depois disso, eu modelei no Freecad e imprimi em 3D uma caixa pra ficar mais confortável segurar tudo enquanto se joga.

Todo o código e a descrição do hardware são livres, e estão disponíveis no repositório no github.