Pixel Chaser: Juego LED Interactivo de Un Toque con Arduino Nano
Componentes y suministros
| Componente | Cantidad |
|---|---|
| Arduino Nano R3 | 1 |
| Anillo Adafruit NeoPixel: WS2812 5050 RGB LED | 1 |
| Protoboard sin soldar (media) | 1 |
| Resistencia 10k ohm | 1 |
| Pulsador SparkFun 12mm | 1 |
| Cables jumper (genéricos) | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Fui desarrollador de juegos, y uno de los santos griales en desarrollo móvil es hacer el definitivo juego «un toque».
Quería ver si podía hacer un genial juego de «física» de un clic usando un microcontrolador, un botón y alguna retroalimentación visual.
¡Presentando PIXEL CHASER!
Es un montaje bastante fácil, ¡vamos al lío!
¿Qué piezas necesitamos?

- Arduino Nano (o cualquier microcontrolador con 2 pines IO libres)
- Anillo o tira RGB «NeoPixel»
- Pulsador momentáneo
- Resistencia 10k
- Protoboards
- Cables
Paso 1
Coloca el Nano en un extremo de la protoboard con el conector USB al borde.

Paso 2
Coloca el botón en el otro extremo, lo más cerca del borde posible para fácil acceso.

Paso 3
Conecta la resistencia 10k entre un lado del botón y el rail GND. Este será el estado LOW por defecto. Usamos resistencia para evitar cortocircuito entre VCC y GND al pulsar, que podría dañar el microcontrolador y otros componentes.

Paso 4
Conecta un jumper del lado opuesto del botón al rail VCC. El botón pasa a HIGH al pulsarse.

Paso 5
Conecta un jumper del lado GND del botón al pin D3 del Nano. Leeremos D3 para saber el estado del botón.

Paso 6
Conecta la tira/anillo RGB a la protoboard. VCC al rail VCC, GND al rail GND, DI (Data In) al pin D4 del Nano. Controlaremos los píxeles con D4.

Paso 7
Conecta un jumper del pin 5V del Nano al rail VCC, y otro del pin GND al rail GND.

Paso 8
¡Sube el código y a jugar!

¡Espero que disfrutéis este proyecto!
Podéis encontrar más proyectos divertidos como este en mi canal de YouTube.
Sígueme:
- https://twitter.com/unexpectedmaker
- https://www.facebook.com/unexpectedmaker/
- https://www.instagram.com/unexpectedmaker/
- https://www.patreon.com/unexpectedmaker
- https://www.tindie.com/stores/seonr/
Código
- Pixel Chaser Game - Arduino Code
Pixel Chaser Game - Arduino Code (Arduino)
/* ---------------------------------------------------------------------------
Pixel Chaser Game - v1.0.0 - 24/03/2019.
AUTOR/LICENCIA: Creado por Seon Rozenblum - seon@unexpectedmaker.com
Copyright 2016 Licencia: GNU GPL v3 https://www.gnu.org/licenses/gpl-3.0.html
ENLACES: Blog: unexpectedmaker.com YOUTUBE: youtube.com/c/unexpectedmaker
DESCARGO: Este software se proporciona «tal cual», sin soporte técnico, y sin garantía, expresa o implícita, sobre su utilidad para cualquier propósito.
PROPÓSITO: Este controlador es el software que corre en el controlador de horno tostador Reflow Master hecho por Unexpected Maker
HISTORIAL: 24/03/2019 v1.0.0 - Lanzamiento inicial. NOTA: Esto es un trabajo en progreso...
--------------------------------------------------------------------------- */
#include <Adafruit_NeoPixel.h>
#include "OneButton.h"
#define PIXELPIN 4
#define NUMPIXELS 24
#define BUTTON_TAP 3
OneButton buttonTAP(BUTTON_TAP, false);
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIXELPIN, NEO_GRB + NEO_KHZ800);
int playerIndex = -1, playerIndexTrail = -1, playerDirection = 1;
float nextMove = 0, currentPlayerSpeed = 150;
unsigned long countdown = 0;
int enemyIndex = -1, coinIndex = -1;
int score = 0, bestScore = 0, lastScore = 0;
bool gameOver = false;
void setup() {
pinMode(BUTTON_TAP, INPUT);
buttonTAP.attachClick(singleClick);
buttonTAP.attachLongPressStart(longClick);
pixels.begin();
pixels.setBrightness(20);
countdown = millis() + 2000;
}
void loop() {
buttonTAP.tick();
if (gameOver) return;
SetLevel();
if (countdown > millis()) { pixels.show(); return; }
DisplayPlayer();
pixels.show();
}
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;
}
playerIndex += playerDirection;
if (playerIndex < 0) playerIndex = NUMPIXELS - 1;
else if (playerIndex == NUMPIXELS) playerIndex = 0;
pixels.setPixelColor(playerIndex, pixels.Color(0,255,0));
if (playerIndex == coinIndex) {
enemyIndex = -1; coinIndex = -1; score++;
currentPlayerSpeed = constrain(currentPlayerSpeed - 10, 50, 150);
ClearLevel();
pixels.setPixelColor(playerIndex, pixels.Color(0,255,0));
} else if (playerIndex == enemyIndex) {
lastScore = score;
if (score >= bestScore) bestScore = score;
GameOver();
gameOver = true;
enemyIndex = -1; coinIndex = -1; playerIndex = -1;
}
}
}
void singleClick() {
if (countdown > millis()) return;
playerDirection = -playerDirection;
}
void longClick() {
gameOver = !gameOver;
if (gameOver) {
enemyIndex = -1; coinIndex = -1; playerIndex = -1; currentPlayerSpeed = 150;
ClearLevel();
} else {
ClearLevel(); score = 0; currentPlayerSpeed = 150; countdown = millis() + 2000;
}
}
Proceso de manufactura
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Construye tu Propio Juego de Ruleta de 37 LEDs con Arduino Nano
- Mando USB para juegos DIY con Arduino – Construye tu propio gamepad de alto rendimiento
- Juego Breakout táctil Arduino: Arcade clásico en pantalla TFT 2,4″
- Construye un juego Tetris con Arduino Nano en matriz LED 16x8 DIY
- Levitación magnética repulsiva con Arduino: Circuito simple y guía DIY
- Automatiza el Juego del Dinosaurio de Chrome con Arduino y Python
- Controlador doméstico Arduino con Alexa: Automatización inteligente simplificada
- Pong Neón en Matriz NeoPixel con Arduino Nano