Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Jogo Pong Neon em Matriz NeoPixel com Arduino Nano

Componentes e Materiais

Fita NeoPixel (LED endereçável individualmente) × 1
Jumpers × 1
Arduino Nano R3 × 1
Header Fêmea 8 pinos (0,1") × 1
Perma-Proto Meia Placa (Adafruit) × 1
Joystick Analógico (genérico) × 1
Potenciômetro Rotativo (genérico) × 1

Ferramentas

Software

Sobre o Projeto

A Matriz

Não é o filme, é a matriz de NeoPixels! Compre uma fita de LEDs NeoPixel endereçáveis individualmente. Desenrole e observe as setas na fita: a conexão só funciona em UM SENTIDO; inverter a orientação pode queimar os LEDs.

Jogo Pong Neon em Matriz NeoPixel com Arduino Nano

Usei fita de 30 LEDs/m (5 m) e cortei em segmentos de 10 LEDs. Colei sobre papel cartão alternando a orientação (zig-zag). Soldei os fios nos terminais de cada segmento. Após 14 soldas, a matriz estava pronta. Testar com multímetro para evitar curtos (um curto pode queimar o Nano, a matriz e a porta USB — experiência própria). Carregue o sketch de teste neomatrix com parâmetros NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG. Se rolar "howdy", a matriz está OK.

Jogo Pong Neon em Matriz NeoPixel com Arduino Nano

A Lógica do Jogo

O Pong tem: pala, paredes, bola. Variáveis ballX, ballY guardam posição da bola. Direção controlada por +1 ou -1 nas variáveis de direção. A pala é um retângulo controlado por potenciômetro mapeado para 0–15 (eixo Y fixo). No início, a bola nasce em (1,1) e o jogador deve deixar quicar uma vez para iniciar. A física considera a direção da bola e onde ela atingiu a pala.

Diversão!

Conecte a matriz ao Arduino Nano: +5V do joystick no 5V do Arduino, GND no GND, eixo X no A0. Divirta-se! Tente adicionar mais jogadores e física melhorada como desafio.

Código

Arquivo principal (C/C++):

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(15, 10, PIN,
  NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB + NEO_KHZ800);

int paddleX = 0, paddleY = 0;
int oldPaddleX, oldPaddleY;
int ballDirectionX = 1, ballDirectionY = 1;
int score = 0;
int ballSpeed = 10; // menor = mais rápido
int ballX, ballY, oldBallX, oldBallY;

void setup() {
  Serial.begin(9600);
  matrix.begin();
  matrix.fillScreen(0);
  matrix.setTextColor(matrix.Color(0,255,0));
  matrix.print("GO");
  matrix.show();
  delay(2000);
  matrix.fillScreen(0);
  matrix.show();
}

void loop() {
  int myWidth = matrix.width();
  int myHeight = matrix.height();
  paddleX = map(analogRead(A0), 0, 1023, 0, 12);
  paddleY = 8;
  if (oldPaddleX != paddleX || oldPaddleY != paddleY) {
    matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1, matrix.Color(0,0,0));
  }
  matrix.fillRect(paddleX, paddleY, 4, 1, matrix.Color(0,0,255));
  oldPaddleX = paddleX;
  oldPaddleY = paddleY;
  matrix.show();
  if (millis() % ballSpeed < 2) {
    moveBall();
  }
  matrix.show();
  if (ballY > 8 && (millis() > 10000)) {
    score += 1;
    matrix.fillScreen(0);
    matrix.setTextColor(matrix.Color(255,0,0));
    matrix.setCursor(0,2);
    matrix.print(String(score));
    matrix.show();
    delay(4000);
    ballX = random(3,11);
    ballY = random(1,1);
    matrix.fillScreen(0);
    matrix.show();
    delay(1000);
  }
  delay(5);
}

void moveBall() {
  if (ballX > matrix.width() - 1 || ballX < 0) ballDirectionX = -ballDirectionX;
  if (ballY > matrix.height() || ballY < 0) ballDirectionY = -ballDirectionY;
  if (inPaddle(ballX, ballY, paddleX, paddleY, 4, 1)) {
    if (ballX == paddleX && ballY == paddleY) {
      ballDirectionX = -ballDirectionX; ballDirectionY = -ballDirectionY;
    } else if (ballX == paddleX + 3 && ballY == paddleY) {
      ballDirectionX = ballDirectionX; ballDirectionY = -ballDirectionY;
    } else if (ballX == paddleX + 1 && ballY == paddleY) {
      ballDirectionX = -ballDirectionX; ballDirectionY = -ballDirectionY;
    } else if (ballX == paddleX + 2 && ballY == paddleY) {
      ballDirectionX = ballDirectionX; ballDirectionY = -ballDirectionY;
    }
  }
  ballX += ballDirectionX;
  ballY += ballDirectionY;
  if (oldBallX != ballX || oldBallY != ballY) {
    matrix.drawPixel(oldBallX, oldBallY, matrix.Color(0,0,0));
  }
  matrix.drawPixel(ballX, ballY, matrix.Color(150,150,0));
  oldBallX = ballX;
  oldBallY = ballY;
}

boolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) {
  boolean result = false;
  if ((x >= rectX && x <= (rectX + rectWidth)) && (y >= rectY && y <= (rectY + rectHeight))) result = true;
  return result;
}

Esquemático

Jogo Pong Neon em Matriz NeoPixel com Arduino Nano

Processo de manufatura

  1. Detector de Idiomas TinyML com Edge Impulse no Arduino Nano 33 BLE Sense
  2. Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
  3. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  4. Construa um Homem de Ferro com Arduino: Componentes, Sensores e Guia Passo a Passo
  5. Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
  6. Controlador de Umidificador DIY com Arduino e Relé – Configuração Segura de Alta Tensão
  7. Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
  8. MobBob: Construa Seu Próprio Robô Arduino, Controlado via Smartphone Android
  9. Lâmpada de Mesa Reativa a Áudio com Arduino Nano
  10. Volante Joystick Arduino Personalizado para Jogos