Índice:

Console Arduino VGA com cinco jogos: 4 etapas
Console Arduino VGA com cinco jogos: 4 etapas

Vídeo: Console Arduino VGA com cinco jogos: 4 etapas

Vídeo: Console Arduino VGA com cinco jogos: 4 etapas
Vídeo: Arduino VGA game console - 8 games 2024, Julho
Anonim
Image
Image
Console Arduino VGA com cinco jogos
Console Arduino VGA com cinco jogos
Console Arduino VGA com cinco jogos
Console Arduino VGA com cinco jogos

Em meus Instructables anteriores, reproduzi versões simplificadas de alguns dos jogos de arcade clássicos mais populares, por meio de um Arduino vazio e alguns outros componentes. Mais tarde, juntei cinco deles em um único esboço. Aqui vou mostrar como você pode construir um console simples que pode jogar Pong, Breakout, Bomber, Tetris e um brinquedo de desenho inspirado no Etch-a-Sketch. Este console também pode ser usado para jogar Snake e mais dois jogos escritos por outros autores: Bit Ninja de Sandro Maffiodo também conhecido como "Smaffer" e Stacker de Nikita Kurylev.

A principal característica é a geração de um sinal VGA, graças à biblioteca VGAx, portanto, o console precisa de um monitor VGA. Meu objetivo, como de costume, é evitar qualquer "componente especial" para construí-lo, você não precisa de nenhum IC ou escudo de suporte! Os únicos componentes são dois potenciômetros, cinco botões, alguns resistores e um conector DSUB15 (VGA). Um alto-falante piezo é opcional. Você pode ver como esses jogos se parecem nas fotos desta página.

A biblioteca VGAx permite usar quatro cores com resolução de 120 x 60 pixels, não muitas, mas o suficiente para este console retro-game. O gráfico é cru, mas, graças ao uso dos potenciômetros, os jogos funcionam perfeitamente. Efeitos sonoros simples também estão disponíveis.

Etapa 1: como construir seu próprio console VGA Arduino

Como construir seu próprio console VGA Arduino
Como construir seu próprio console VGA Arduino
Como construir seu próprio console VGA Arduino
Como construir seu próprio console VGA Arduino

Primeiro baixe os códigos ArduinoVGAgame.ino e / ou Snake.ino na parte inferior desta página e copie-os em seu PC em um diretório com o mesmo nome. Baixe a biblioteca VGAx deste link no GitHub. A maneira mais fácil é copiá-lo para a subpasta do software Arduino chamada "bibliotecas", para ser imediatamente reconhecido.

IMPORTANTE: esta biblioteca funciona para Arduno IDE 1.6.4, mas não é totalmente compatível com versões anteriores ou mais recentes.

Faça upload do código em sua placa Arduino (testei o Uno e o Nano). Um aviso de pouca memória disponível é normal. Se você não tiver outros erros, está tudo ok e você pode começar a construir seu próprio console imediatamente.

Para isso, você precisa de:

  • um Arduino Uno Rev. 3 ou Arduino Nano 3.x (ATmega328)
  • um Conector DSUB15, ou seja, um conector VGA fêmea ou um cabo VGA a ser cortado.
  • resistores: 2 x 68 Ohm e 2 x 470 Ohm e 5 x 1 a 2 kOhm
  • dois potenciômetros lineares de 10 kOhm (valores semelhantes também são adequados)
  • cinco botões
  • algum pedaço de cabo
  • uma ou duas belas caixas para colocar todos os componentes.

Facultativo:

  • uma placa de ensaio ou uma placa de strip
  • um alto-falante piezo

O esquema é relatado no topo desta etapa, junto com um exemplo de um “console” acabado.

o esquema mostra como conectar um botão e um potenciômetro. Mais especificamente, você precisa conectar cinco botões aos pinos 5, 10, 11, 12 e 13, respectivamente. A ação realizada por cada botão é descrita na tabela superior direita do esquema. À esquerda, é mostrado como conectar um potenciômetro (você precisa de dois potenciômetros nos pinos A1 e A2). O alto-falante deve ser conectado ao pino analógico A0.

Coloquei a placa Arduino com o conector VGA em uma caixa de madeira, que contém também o potenciômetro do primeiro jogador e quatro botões, enquanto o potenciômetro do segundo jogador e seu botão de início estão em uma caixa separada e menor.

Se você gostou deste brinquedo e decidiu reproduzi-lo, agradeço se você escrever um comentário ou enviar uma foto na seção de comentários abaixo.

Etapa 2: jogos de outros autores

Sandro Maffiodo lançou recentemente o jogo BitNinja. Você pode encontrar mais informações aqui e baixar o código aqui.

Para usar meu console, você só precisa remapear o botão em seu código da seguinte maneira:

# define BTN_UP 11 (em vez de 13)

# define BTN_LEFT 10 (em vez de 12)

# define BTN_RIGHT 12 (em vez de 11)

Stacker, de Nikita Kurylev, está disponível aqui. Mais informações aqui.

Novamente, você deve remapear um botão, em parte diferente do código: basta substituir digitalRead (2) por digitalRead (13)

Etapa 3: Apêndice 1: Mais detalhes sobre como construir os controladores

Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores
Apêndice 1: Mais detalhes sobre como construir os controladores

Você pode realizar o controlador de muitas maneiras diferentes, dependendo do material disponível e do seu gosto.

Gosto de realizá-los com caixas de madeira (veja as fotos nesta página). Uma caixa principal para o Arduino, o conector VGA e os botões e potenciômetro do primeiro jogador; um segundo (menor) apenas para o botão e a roda do segundo jogador (necessários para Pong e o brinquedo de desenho). Outra possibilidade é colocar tudo em uma única caixa maior.

Primeiro, eu recomendo conectar a porta VGA. Na primeira e na segunda fotos você pode ver alguns detalhes: observe os dois resistores de 470 Ohm para Vermelho e Verde conectados aos pinos 6 e 7 respectivamente, e dois resistores de 68 Ohm para os pinos 3 e 9 para sinal de sincronização horizontal e vertical.

Você pode escolher diferentes combinações de cores dependendo de quais pinos você conecta no conector VGA DSUB15, os pinos 1, 2 e 3 representam Vermelho, Verde, Azul (RGB) respectivamente. Liguei os pinos 1 e 2, portanto tenho a seguinte combinação de cores: (0, 0) = preto; (1, 0) = vermelho; (0, 1) = verde; (1, 1) = amarelo.

Para todas as diferentes possibilidades, sugiro ler os detalhes na página onde você baixa as bibliotecas VGAx.

Assim que o conector VGA estiver pronto, você pode preparar todos os outros cabos para os botões, rodas e alto-falante (ver figura 2).

Agora é só juntar tudo: lembre-se que cada pino do botão precisa ser conectado ao terra por meio de um resistor de 1 ou 2 kOhm, caso contrário, quando o botão estiver aberto, o estado do pino pode ser indefinido. Isso significa que se o pino for deixado desconectado, você pode ter uma voltagem aleatória (estática) nele que pode ativá-lo. Veja para mais detalhes o esquema na segunda etapa deste instrutível.

A última etapa é consertar tudo no lugar. Usei a pistola de cola quente, mas você pode usar o seu método preferido.

Etapa 4: Apêndice 2: Algumas considerações sobre os limites de memória

É incrível que um simples Arduino seja capaz de gerar um sinal VGA e todos esses jogos juntos. O verdadeiro gargalo é a falta de SRAM. O microcontrolador AVR possui apenas 2048 bytes disponíveis para armazenar e manipular as variáveis, e a biblioteca VGAx armazena as variáveis da tela em um framebuffer de 120x60 pixels onde cada pixel necessita de 2 bits (4 cores), para um total de 1800 bytes. Isso significa que há apenas 248 bytes restantes para as variáveis de esboço. Além disso, em minha experiência, deve-se deixar pelo menos 100 bytes livres para evitar instabilidades. Usando mais de 1950 bytes de memória dinâmica, o microcontrolador começa a apresentar um comportamento estranho e imprevisível.

Isso significa que todas as variáveis devem ser compartilhadas entre os diferentes jogos, o que torna o código bastante ilegível e difícil de depurar. Não é apenas uma questão de "adicionar um novo jogo" ao esboço anterior, mas todo o código deve ser profundamente modificado e otimizado.

Além disso, tive que usar o formato de variável mínimo possível: por exemplo, para todas as coordenadas eu tive que usar "byte" em vez de "int" ou, em outros casos, tive que preferir "int" em vez de "float".

Finalmente, meu agradecimento vai para Sandro Maffiodo, também conhecido como Smaffer, o criador da biblioteca VGAx e do incrível jogo BitNinja. Sem esta biblioteca, este projeto não poderia ter sido realizado.

Obrigado também a Nikita Kurylev pelo jogo simples, mas divertido, Stacker.

Recomendado: