Construye un Clon Arduboy Tamaño Tarjeta de Crédito con Arduino Nano y OLED I2C
Componentes y suministros
| Arduino Nano R3 | 1 |
| OLED Gráfico 128x64 (I2C) | 1 |
| Zumbador | 1 |
| Interruptor Táctil Superior | 6 |
| LED RGB Difuso Cátodo Común | 1 |
| Resistencia 221 ohm | 3 |
| Resistencia 10k ohm | 1 |
Herramientas y máquinas necesarias
- Impresora 3D (genérica)
- Soldador (genérico)
Sobre este proyecto
Arduboy es una mini consola del tamaño de una tarjeta de crédito. Viene con un juego clásico de 8 bits y se puede reprogramar desde una biblioteca de juegos open source online. Es open source para aprender a programar y crear tus propios juegos. La original usa ATmega32U4 y pantalla OLED 128x64 serie.
La consola que se muestra usa Arduino Nano y la versión I2C del display OLED, más fácil de encontrar y barata. Descarga librerías y código en:
https://github.com/harbaum/Arduboy2
Si tienes impresora 3D, descarga archivos .STL para la carcasa en el mismo sitio. Guía de instalación detallada allí. Se alimenta con Arduino Nano y una batería Li-ion 3.7V, funciona muy bien.
Probé muchos juegos, todos funcionan genial:
- ArduBreakout
- Pinball
- Shadow-Runner
- Snake
- VIRUS-LQP-79
- Nineteen43
- y muchos más...
El esquema se muestra abajo. Como ejemplo presento el código de ArduBreakout, pero puedes descargar cualquier juego compatible del sitio de Arduboy.
Código
Juego ArduBreakout
/* Breakout Copyright (C) 2011 Sebastian Goscik. Modificaciones por Scott Allen 2016.
* Licencia GNU LGPL v2.1 o posterior.
*/
#include <Arduboy2.h>
#define EE_FILE 2 // Bloque EEPROM para high scores
Arduboy2 arduboy;
BeepPin1 beep;
const unsigned int FRAME_RATE = 40;
const unsigned int COLUMNS = 13;
const unsigned int ROWS = 4;
int dx = -1, dy = -1; // Movimiento inicial bola
int xb, yb; // Posición inicial bola
boolean released; // Bola liberada por jugador
boolean paused = false;
byte xPaddle; // Posición X pala
boolean isHit[ROWS][COLUMNS]; // Ladrillos golpeados
boolean bounced = false;
byte lives = 3;
byte level = 1;
unsigned int score = 0;
unsigned int brickCount;
boolean pad, pad2, pad3; // Buffer botones para evitar repetición pausa
boolean oldpad, oldpad2, oldpad3;
char text_buffer[16];
boolean start = false; // Menú o juego
boolean initialDraw = false;
char initials[3]; // Iniciales high score
// Límites bola y ladrillos para colisiones
byte leftBall, rightBall, topBall, bottomBall;
byte leftBrick, rightBrick, topBrick, bottomBrick;
byte tick;
void setup() {
arduboy.begin();
beep.begin();
arduboy.setFrameRate(FRAME_RATE);
arduboy.initRandomSeed();
}
void loop() {
if (!(arduboy.nextFrame())) return;
beep.timer();
// Pantalla título y high scores hasta presionar FIRE
while (!start) {
start = titleScreen();
if (!start) start = displayHighScores(EE_FILE);
}
// Dibujo inicial nivel
if (!initialDraw) {
arduboy.clear();
level = 1;
newLevel();
score = 0;
initialDraw = true;
}
if (lives > 0) {
drawPaddle();
// Pausa si FIRE presionado
pad = arduboy.pressed(A_BUTTON) || arduboy.pressed(B_BUTTON);
if (pad && !oldpad && released) {
oldpad2 = false;
pause();
}
oldpad = pad;
drawBall();
if (brickCount == ROWS * COLUMNS) {
level++;
newLevel();
}
} else {
drawGameOver();
if (score > 0) enterHighScore(EE_FILE);
arduboy.clear();
initialDraw = false;
start = false;
lives = 3;
newLevel();
}
arduboy.display();
}
// ... (resto del código completo en el repositorio GitHub)
Nota: El código completo está disponible en el repositorio. Aquí se muestra un extracto representativo.
Piezas personalizadas y cajas
- Archivos 3D:
3d_parts_ThLGvJvWga.rar
Esquemáticos
Esquema del circuito disponible en el repositorio del proyecto.
Proceso de manufactura
- Integración I2C Fluida entre Arduino y Raspberry Pi 2 para Proyectos IoT con Sensores
- Construye una Consola de Juegos Portátil con el Clon Arduboy
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
- Controla Dos Motores Paso a Paso con Arduino Nano y Joystick - Tutorial Sencillo
- Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
- Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64
- Contador Geiger Portátil con Arduino Nano: Construye tu Detector de Radiación
- Circuito de entrada analógica aislada para Arduino