산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 나노와 I2C OLED로 신용카드 크기 Arduboy 클론 만들기

부품 및 소모품

부품수량
아두이노 나노 R31
그래픽 OLED, 128x64 (I2C)1
부저1
택타일 스위치 (상단 작동)6
RGB 디퓨즈드 공통 캐소드 LED1
저항 221 옴3
저항 10k 옴1

필수 도구 및 장비

프로젝트 개요

Arduboy는 신용카드 크기의 미니어처 게임기입니다. 클래식 8비트 게임이 기본 설치되어 있으며, 온라인에서 오픈소스 게임 라이브러리를 다운로드해 재프로그래밍할 수 있습니다. Arduboy는 오픈소스라 코딩을 배우고 자신만의 게임을 만들 수 있습니다. 원본은 ATmega32U4 마이크로컨트롤러와 128x64 픽셀 직렬 OLED 디스플레이 기반입니다.

아래 소개할 콘솔은 아두이노 나노와 I2C 버전 OLED 디스플레이로 구성되어 있으며, 더 쉽게 구할 수 있고 저렴합니다. 필요한 라이브러리와 코드는 다음에서 다운로드할 수 있습니다:

https://github.com/harbaum/Arduboy2

3D 프린터가 있다면 콘솔을 장착할 수 있는 박스 옵션의 .STL 파일도 다운로드 가능합니다. 자세한 조립 가이드도 같은 사이트에 있습니다. 3.7V 리튬이온 배터리 하나로 구동되며 꽤 잘 작동합니다.

이 콘솔로 많은 게임을 테스트했는데 모두 훌륭하게 작동합니다:

회로도는 아래에 나와 있습니다. 예제로 ArduBreakout 게임 코드를 제시하지만, 이 콘솔 버전과 호환되는 다른 게임도 Arduboy 사이트에서 다운로드할 수 있습니다.

소스 코드

ArduBreakout 게임

/* Breakout Copyright (C) 2011 Sebastian Goscik
 * Modifications by Scott Allen 2016
 * GNU Lesser General Public License v2.1 또는 이후 버전
 */
#include <Arduboy2.h>

// EEPROM에 하이스코어 저장용 블록
#define EE_FILE 2

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; // 공 초기 이동 방향
int xb, yb;           // 공 시작 위치
boolean released;     // 플레이어가 공을 발사했는지
boolean paused = false;
byte xPaddle;         // 패들 X 위치
boolean isHit[ROWS][COLUMNS]; // 벽돌 맞음 여부
boolean bounced = false;
byte lives = 3;
byte level = 1;
unsigned int score = 0;
unsigned int brickCount;
boolean pad, pad2, pad3;
boolean oldpad, oldpad2, oldpad3;
char text_buffer[16];
boolean start = false;
boolean initialDraw = false;
char initials[3];

// 충돌 감지용 경계
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();
  
  // 타이틀 화면 루프
  while (!start) {
    start = titleScreen();
    if (!start) start = displayHighScores(EE_FILE);
  }
  
  // 초기 레벨 그리기
  if (!initialDraw) {
    arduboy.clear();
    level = 1;
    newLevel();
    score = 0;
    initialDraw = true;
  }
  
  if (lives > 0) {
    drawPaddle();
    // 일시정지 처리
    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();
}

// ... (이하 이동, 충돌, 점수, 하이스코어, 사운드 등 전체 게임 로직 구현)
// 전체 코드는 GitHub 저장소 참조: https://github.com/harbaum/Arduboy2

커스텀 파트 및 인클로저

회로도

회로도 이미지 참조

제조공정

  1. 아두이노-라즈베리파이 2 I2C 통합으로 IoT 센서 프로젝트 구현하기
  2. 아두이노 마이크로로 아듀보이(Arduboy) 클론 휴대용 게임기 만들기
  3. 아두이노 우노와 OLED 디스플레이로 클래식 퐁(Pong) 게임 만들기: 단계별 튜토리얼
  4. 아두이노 듀(Due) + 3.2″ TFT로 만드는 실시간 시계 & 온도 모니터
  5. 아두이노로 간단한 장애물 센서 만들기 - IR LED & 포토다이오드 튜토리얼
  6. 아두이노 메가와 센서를 활용한 인터랙티브 넥시온 HMI 프로젝트
  7. 아두이노 나노와 조이스틱으로 2개 스테퍼 모터 제어하기 – 비주이노(Visuino) 튜토리얼
  8. 아두이노와 노키아 5110 LCD로 만드는 DIY 전압계 - 단계별 가이드
  9. 아두이노 나노 + 128x64 OLED로 실시간 셀룰러 오토마타 (생명 게임) 구현
  10. 아두이노용 절연 아날로그 입력 회로 만들기