Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Este projeto é destinado a iniciantes e experientes experientes. Em um nível básico isso pode ser feito com uma placa de ensaio, fios de jumper e preso a um pedaço de material (usei madeira) com Blu-Tack e sem solda. No entanto, em um nível mais avançado, ele pode ser soldado a uma placa de desempenho ou a um PCB personalizado.
Como este foi um projeto de bloqueio, não tive acesso a muitas ferramentas ou materiais, por isso está preso a um pedaço de madeira que é um pouco pequeno demais com o Blu-Tack; no entanto, apesar disso, é um projeto divertido que vem junto rapidamente e é composto de peças comumente disponíveis que podem ser encontradas on-line de maneira econômica.
Etapa 1: Peças
Para fazer o Jogo Pong você precisa;
- 1x um Arduino (qualquer tipo funcionará)
- 4 matrizes de LED MAX7219 8x8
- 2x joysticks
- 1 campainha piezoelétrica (opcional)
- 15 fios de ligação fêmea-fêmea (3x grupos de 5)
- 15 fios de jumper macho-fêmea (3x grupos de 5)
- Fios de jumper 18x Macho-Macho
- 1x breadboard
- 1x resistor 220Ω
Em vez de uma placa Arduino Uno ou Nano, você pode usar um Arduino baseado em breadboard;
- 1x ATmega328p 28 pinos IC
- 1x oscilador de cristal de 16kHz
- 2x capacitores de cerâmica 22pF
- 1x conversor USB FTDI UART
- 1x capacitor eletrolítico 100uF
- 1x Micro USB Breakout (opcional)
Ferramentas;
- PC com Arduino IDE (e biblioteca LedControl)
- Cabo USB relevante para o seu Arduino
- Banco de energia para alimentar o jogo longe de seu computador
Etapa 2: Fiação
A fiação é muito simples, pois tudo o que você precisa são fios de jumper para conectar os conectores das Matrizes e Joysticks ao Arduino. A única complicação é a alimentação, pois o Arduino Uno possui apenas 3 conexões GND e uma conexão de 5v. É aqui que a placa de ensaio entra e atua como um trilho de distribuição de energia para todos os componentes. Se você estiver usando um NANO, a placa de ensaio terá a mesma finalidade, além de permitir que você conecte tudo.
Para a fiação, siga estas conexões.
- Joystick esquerdo - GND e 5v para seus respectivos trilhos de alimentação. SW - pino 9, VRx - A0, VRy - A1.
- Joystick direito - GND e 5v para seus respectivos trilhos de alimentação. SW - pino 8, VRx - A2, VRy - A3.
- Matriz de LED mais à direita - GND e 5v para seus respectivos trilhos de alimentação. DIN - 13, CS - 11, CLK - 12. (De acordo com a linha 25)
- Todas as outras matrizes de LED podem ser encadeadas na saída da primeira, indo da direita para a esquerda para que o código funcione corretamente.
- Campainha opcional - Ânodo (+) através do resistor limitador de corrente de 220Ω para o pino 10, Cátodo (-) - GND.
Etapa 3: Fiação Alternativa
Depois de conectá-lo a um Arduino UNO para economizar espaço, decidi colocar o Arduino IC do UNO na placa de ensaio com um oscilador de cristal de 16Mhz e um par de capacitores de 22pF de cada lado ao aterramento. Acho que esta foi uma modificação que valeu a pena, pois faz com que o projeto pareça mais organizado e mais acabado, mas você precisa usar um programador USB FTDI para atualizar o programa.
Etapa 4: Código + Explicação
Para fazer o upload do código para o Arduino, baixe a biblioteca LedControl do GitHub aqui, github.com/wayoda/LedControl e adicione o arquivo Zip ou adicione-o por meio do Library Manager no IDE. Depois disso, abra o esboço em anexo, selecione seu Arduino nas configurações de placa e porta em ferramentas e faça o upload para o arduino.
Explicação
Linha 1: adiciona a biblioteca
Linha 5-23: Configura todas as variáveis, constantes e números de pinos.
Linha 25: configura o LED Martix e configura os pinos de controle e quantos visores.
Linha 27: configura a função de reinicialização.
Linha 30-35: Função de desligamento para ligar / desligar todos os visores juntos.
Linha 38-43: função SetIntensity para definir o brilho de todos os monitores juntos.
Linha 46-51: função ClearAll para limpar todos os visores juntos.
Linha 53-64: joystick Função para obter a posição dos joysticks, mapeá-los para as 7 posições possíveis do bastão para acertar a bola e então mover o bastão para a nova posição.
Linha 67-435: Função que move a bola para o jogador esquerdo na altura e velocidade especificadas, verifica se o jogador bateu nela e continua e define o status de acidente como verdadeiro ou rebate a bola de volta, adiciona 1 ao placar e aumenta a velocidade.
Linha 438-811: Função que move a bola para o jogador certo na altura e velocidade especificadas, verifica se o jogador bateu nela e continua e define o status de acidente como verdadeiro ou devolve a bola, adiciona 1 ao placar e aumenta a velocidade.
Linha 813-823: Função para exibir um rosto sorridente, tique, cruz ou ponto de interrogação no visor especificado (0 à direita a 3 à esquerda).
Linha 861-979: Função para exibir os números 0-9 no display especificado.
Linha 981-1047: Função para exibir a pontuação de cada lado da tela do jogador.
Linha 1049-1064: Função para verificar se o player está pronto.
Linha 1066-1076: Seção de configuração do código que é executado uma vez quando o programa é iniciado.
Linha 1078-1136: Seção do loop principal para lógica do jogo onde todas as funções são usadas e onde quem ganha é decidido e então reinicia o programa após 5 segundos de mostrar a pontuação.
Etapa 5: Obrigado pela leitura
Obrigado por ler este Instructable, foi um projeto divertido de bloqueio que surgiu ao longo de alguns dias enquanto eu aprendia mais sobre a programação do Arduino. Se você gostou, sinta-se à vontade para votar no concurso do Arduino.