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

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Componentes e Materiais

ComponenteQuantidade
Arduino Nano R31
Anel Adafruit NeoPixel: WS2812 5050 RGB LED1
Protoboard Meio Tamanho Sem Solda1
Resistor 10k ohm1
Botão SparkFun 12mm1
Fios jumpers (genéricos)1

Aplicativos e Serviços Online

Sobre o Projeto

Costumava ser desenvolvedor de jogos, e um dos "santos graais" no desenvolvimento de jogos mobile é criar o jogo definitivo de "um toque".

Quis ver se conseguia fazer um incrível jogo de "física" de um clique usando um microcontrolador, um botão e alguma forma de feedback visual.

Apresentando PIXEL CHASER!

É uma construção bastante fácil, então vamos direto a ela!

Que peças precisamos?

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 1

Coloque o Nano em uma extremidade da protoboard com o conector USB na borda.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 2

Coloque o botão na outra extremidade da protoboard, o mais próximo da borda possível para fácil acesso.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 3

Adicione o resistor 10k entre um dos lados do botão e o trilho GND da protoboard. Este será o estado LOW padrão do botão. Usamos um resistor para garantir que não haja curto entre VCC e GND quando o botão é pressionado, pois isso pode danificar o microcontrolador e outros componentes.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 4

Conecte um fio jumper do lado oposto do botão ao trilho VCC. O botão irá para HIGH quando pressionado.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 5

Conecte um fio jumper do lado GND do botão ao D3 no Nano. Leremos D3 para determinar o estado do botão.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 6

Conecte a tira/anél RGB à protoboard. Conecte o fio VCC ao trilho de alimentação VCC, o fio GND ao trilho GND e o fio DI (Data In) ao D4 no Nano. Controlaremos os pixels com D4.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 7

Conecte um fio jumper do pino 5V no Nano ao trilho VCC, então conecte um fio jumper do pino GND no Nano ao trilho GND.

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Passo 8

Envie o código e jogue!

Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano

Espero que tenha gostado deste projeto!

Você pode encontrar mais projetos divertidos como este no meu canal do YouTube.

Siga-me:

Código

Pixel Chaser Game - Arduino Code Arduino

Adicione este código no Arduino e siga as instruções de montagem!

/* ---------------------------------------------------------------------------
Pixel Chaser Game - v1.0.0 - 24/03/2019.
AUTOR/LICENÇA:
Criado por Seon Rozenblum - seon@unexpectedmaker.com
Copyright 2016
Licença: GNU GPL v3
https://www.gnu.org/licenses/gpl-3.0.html
LINKS:
Blog: unexpectedmaker.com
YOUTUBE: youtube.com/c/unexpectedmaker
AVISO:
Este software é fornecido "como está", sem suporte técnico, e sem garantia, expressa ou implícita, quanto à sua utilidade para qualquer propósito.
PROPÓSITO:
Este controlador é o software que roda no controlador de forno toaster Reflow Master feito por Unexpected Maker
HISTÓRICO:
24/03/2019 v1.0.0 - Lançamento inicial.
NOTA: Este é um trabalho em andamento...
--------------------------------------------------------------------------- */
// Precisamos destas bibliotecas instaladas do gerenciador de bibliotecas
#include <Adafruit_NeoPixel.h>
#include "OneButton.h"

// Qual GPIO a tira está conectada
#define PIXELPIN 4
// Quantos NeoPixels na tira
#define NUMPIXELS 24
// Qual GPIO o botão está conectado?
#define BUTTON_TAP 3

// Inicializa o botão, com LOW padrão
OneButton buttonTAP(BUTTON_TAP, false);

// Inicializa a tira de pixels
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIXELPIN, NEO_GRB + NEO_KHZ800);

// Variáveis
int playerIndex = -1;
int playerIndexTrail = -1;
int playerDirection = 1;
float nextMove = 0;
float currentPlayerSpeed = 150;
unsigned long countdown = 0;
int enemyIndex = -1;
int coinIndex = -1;
int score = 0;
int bestScore = 0;
int lastScore = 0;
bool gameOver = false;

void setup() {
  // torna pino do botão entrada
  pinMode( BUTTON_TAP, INPUT );
  // Anexa funções de clique ao botão
  buttonTAP.attachClick(singleClick);
  buttonTAP.attachLongPressStart(longClick);
  // Inicializa a tira e define brilho para 20%
  pixels.begin();
  pixels.setBrightness(20);
  // define contagem regressiva de 2 segundos antes do jogador aparecer e começar a mover
  countdown = millis() + 2000;
}

void loop() {
  // Cada ciclo precisamos atualizar estado do botão
  buttonTAP.tick();
  // Se jogo em game over, sai do loop cedo
  if ( gameOver ) return;
  // Define estado de exibição do nível
  // Isso define posição do inimigo e da moeda
  SetLevel();
  // espera um segundo para o jogador se preparar
  if ( countdown > millis() ) {
    pixels.show();
    return;
  }
  // Toda lógica de exibição, movimento e jogo do jogador está aqui
  DisplayPlayer();
  // Envia cores atualizadas para o hardware.
  pixels.show();
}

// Limpa o nível, definindo todos pixels como pretos
void ClearLevel() {
  for(int i=0;i= 0 )
      pixels.setPixelColor(playerIndexTrail, pixels.Color(0, 0, 0));
    if ( playerIndex >= 0) {
      pixels.setPixelColor(playerIndex, pixels.Color(0, 100, 0));
      playerIndexTrail = playerIndex;
    }
    // Move jogador na direção atual
    playerIndex += playerDirection;
    // Envolve jogador nas bordas da tira
    if ( playerIndex < 0 ) playerIndex = NUMPIXELS - 1;
    else if ( playerIndex == NUMPIXELS ) playerIndex = 0;
    pixels.setPixelColor(playerIndex, pixels.Color(0, 255, 0));
    // Jogador acertou a moeda?
    // Se sim, aumenta pontuação, reseta posições de moeda e inimigo e limpa nível
    // Próximo loop SetLevel() resetará inimigo e moeda
    // Velocidade do jogador também aumenta para cada moeda acertada
    if ( playerIndex == coinIndex ) {
      enemyIndex = -1;
      coinIndex = -1;
      score++;
      currentPlayerSpeed = constrain( currentPlayerSpeed - 10, 50, 150 );
      ClearLevel();
      pixels.setPixelColor(playerIndex, pixels.Color(0, 255, 0));
    }
    // Jogador acertou o inimigo?
    // Define última/melhor pontuação e chama game over
    else if ( playerIndex == enemyIndex ) {
      lastScore = score;
      if ( score >= bestScore ) bestScore = score;
      GameOver();
      gameOver = true;
      enemyIndex = -1;
      coinIndex = -1;
      playerIndex = -1;
    }
  }
}

// Clique simples no botão
void singleClick() {
  // Sem entrada até jogador ficar visível
  if ( countdown > millis() ) return;
  // inverte direção do jogador
  playerDirection = -playerDirection;
}

// Clique longo no botão
void longClick() {
  // Alterna estado game over
  // Se era game over, inicia jogo, senão cancela jogo em andamento
  gameOver = !gameOver;
  if ( gameOver ) {
    enemyIndex = -1;
    coinIndex = -1;
    playerIndex = -1;
    currentPlayerSpeed = 150;
    ClearLevel();
  } else {
    ClearLevel();
    score = 0;
    currentPlayerSpeed = 150;
    countdown = millis() + 2000;
  }
}

Processo de manufatura

  1. Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
  2. Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
  3. Construa o Clássico Jogo Pong no Arduino UNO com Display OLED – Tutorial Passo a Passo
  4. Construa Seu Próprio Jogo de Roleta com 37 LEDs e Arduino Nano
  5. Controle USB para Jogos DIY com Arduino – Construa Seu Próprio Gamepad de Alto Desempenho
  6. Jogo Breakout Touch com Arduino: Arcade Clássico em LCD TFT 2,4″
  7. Construa um Jogo Tetris com Arduino Nano em Matriz LED 16×8 DIY
  8. Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY
  9. Automatize o Jogo do Dinossauro do Chrome com Arduino e LDR
  10. Controlador Residencial Arduino com Alexa: Automação Inteligente Simplificada