工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

クレジットカードサイズのArduboyクローンをArduino NanoとI2C OLEDで自作する

必要な部品と材料

部品 数量
Arduino Nano R3 1
グラフィックOLED 128×64(I2C接続) 1
ブザー 1
タクトスイッチ(上面操作タイプ) 6
RGBディフューズドLED(共通カソード) 1
抵抗 221Ω 3
抵抗 10kΩ 1

必要な工具と機械

プロジェクト概要

Arduboyはクレジットカードサイズのミニチュアゲーム機です。クラシックな8ビットゲームがプリインストールされ、オンラインのオープンソースゲームライブラリから再プログラミング可能です。Arduboyはオープンソースなので、コーディングを学び、自作ゲームを作ることもできます。オリジナル版はATmega32U4マイクロコントローラーと128×64ピクセルのシリアルOLEDディスプレイをベースにしています。

ここで紹介するコンソールは、Arduino Nanoと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リポジトリの完全なコードを参照してください。

※コード全文は長いため主要部分のみ掲載。完全版はGitHubリポジトリから入手可能です。

カスタムパーツとエンクロージャ

3Dプリント用パーツ: 3d_parts_ThLGvJvWga.rar

回路図

回路図はプロジェクトページに掲載されています。

製造プロセス

  1. ArduinoとRaspberry Pi 2のI2C連携でIoTセンサープロジェクトを実現
  2. Arduboyクローンで作る自作携帯ゲーム機 – PCB設計から実装まで
  3. Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
  4. Arduino Dueと3.2インチTFTで作る温度監視付きリアルタイムクロック
  5. Arduinoでシンプルな障害物センサーを自作 – IR LEDとフォトダイオード入門
  6. Arduino MegaとNextion HMIで作る高機能ウェザーステーション
  7. Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
  8. ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
  9. Arduino Nanoと128x64 OLEDで実行するセルラーオートマトン「ライフゲーム」
  10. Arduino Nanoで作る携帯型ガイガーカウンター
  11. Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保