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

Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム

必要な部品と材料

必要な工具と機器

アプリとオンラインサービス

プロジェクト概要

マトリックスの作り方

映画『マトリックス』ではなく、NeoPixelマトリックスの話です! 個別にアドレス指定可能なNeoPixel LEDストリップを1本購入します。ストリップを広げ、矢印の向きを確認してください。1方向にしか接続できません。向きを間違えると破損する恐れがあります。

Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム

私は30 LED/mの5mストリップを使用し、10 LEDずつにカットしました。厚紙の上にストリップを敷き、向きを交互に(ジグザグに)配置します。適切な長さにカットした配線をNeoPixelの端子にはんだ付けします。これを14回繰り返せばマトリックス完成! 次にテスターでショートしていないか確認します。ショートがあるとNano、マトリックス、場合によってはUSBポートまで焼損します(経験済み)。「NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG」パラメータでneomatrixテストスケッチを書き込みます。「howdy」が画面をスクロールすればディスプレイ部分は完成です!

Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム

ゲームロジック

Pongゲームにはいくつかのオブジェクトがあります:パドル、壁、ボール。コードにはボールの位置を追跡する ballX と ballY 変数があります。ボールの方向は、方向変数に 1 または -1 を代入して管理します。パドルはポテンショメータで制御される長方形で、0〜15にマッピングされます。パドルのY座標は固定なので、マッピング用変数は不要です。ゲーム開始時、ボールは (1,1) からスタートし、プレイヤーはボールを1回バウンドさせてゲームを開始します。物理演算ではボールの方向と、パドルのどこに当たったかを考慮します。

プレイタイム!

NeoPixelマトリックスをArduino Nanoに接続し、ジョイスティックの+5Vを5Vに、GNDをArduinoのGNDに、X軸をA0に接続するだけです。新しいPongゲームをお楽しみください! プレイヤーを増やしたり、物理演算を改良したりして、さらに面白くしてみてください!

コード

The Arduino Code (C/C++)

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(15, 10, PIN,
  NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB + NEO_KHZ800);

// パドルとボールの位置変数
int paddleX = 0;
int paddleY = 0;
int oldPaddleX, oldPaddleY;
int ballDirectionX = 1;
int ballDirectionY = 1;
int score = 0;
int ballSpeed = 10; // 小さいほど高速
int ballX, ballY, oldBallX, oldBallY;

void setup() {
  Serial.begin(9600);
  matrix.begin();
  matrix.fillScreen(0);
  matrix.setTextColor(matrix.Color(0,255,0));
  matrix.print("GO");
  matrix.show();
  delay(2000);
  matrix.fillScreen(0);
  matrix.show();
}

void loop() {
  int myWidth = matrix.width();
  int myHeight = matrix.height();
  paddleX = map(analogRead(A0), 0, 1023, 0, 12);
  paddleY = 8;
  if (oldPaddleX != paddleX || oldPaddleY != paddleY) {
    matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1, matrix.Color(0,0,0));
  }
  matrix.fillRect(paddleX, paddleY, 4, 1, matrix.Color(0,0,255));
  oldPaddleX = paddleX;
  oldPaddleY = paddleY;
  matrix.show();
  if (millis() % ballSpeed < 2) {
    moveBall();
  }
  matrix.show();
  if(ballY > 8 && (millis() > 10000)){
    score += 1;
    matrix.fillScreen(0);
    matrix.setTextColor(matrix.Color(255,0,0));
    matrix.setCursor(0,2);
    matrix.print(String(score));
    matrix.show();
    delay(4000);
    ballX = random(3,11);
    ballY = random(1,1);
    matrix.fillScreen(0);
    matrix.show();
    delay(1000);
  }
  delay(5);
}

void moveBall() {
  if (ballX > matrix.width() - 1 || ballX < 0) {
    ballDirectionX = -ballDirectionX;
  }
  if (ballY > matrix.height() || ballY < 0) {
    ballDirectionY = -ballDirectionY;
  }
  if (inPaddle(ballX, ballY, paddleX, paddleY, 4, 1)) {
    if(ballX == paddleX && ballY == paddleY){
      ballDirectionX = -ballDirectionX;
      ballDirectionY = -ballDirectionY;
    } else if(ballX == paddleX + 3 && ballY == paddleY){
      ballDirectionX = ballDirectionX;
      ballDirectionY = -ballDirectionY;
    } else if(ballX == paddleX + 1 && ballY == paddleY){
      ballDirectionX = -ballDirectionX;
      ballDirectionY = -ballDirectionY;
    } else if(ballX == paddleX + 2 && ballY == paddleY){
      ballDirectionX = ballDirectionX;
      ballDirectionY = -ballDirectionY;
    }
  }
  ballX += ballDirectionX;
  ballY += ballDirectionY;
  if (oldBallX != ballX || oldBallY != ballY) {
    matrix.drawPixel(oldBallX, oldBallY, matrix.Color(0,0,0));
  }
  matrix.drawPixel(ballX, ballY, matrix.Color(150,150,0));
  oldBallX = ballX;
  oldBallY = ballY;
}

boolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) {
  boolean result = false;
  if ((x >= rectX && x <= (rectX + rectWidth)) && (y >= rectY && y <= (rectY + rectHeight))) {
    result = true;
  }
  return result;
}

回路図

Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム

製造プロセス

  1. TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
  2. Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
  3. Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
  4. Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
  5. ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
  6. DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
  7. Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
  8. MobBob:Arduino製ロボットをAndroidスマホでシームレスに制御
  9. Arduino Nanoで作る音声反応デスクライト:音楽に合わせて光るイルミネーション
  10. ゲーム用カスタムArduinoジョイスティックハンドルの製作
  11. Arduino 101で作る万歩計:DHT11温湿度センサー&LCD表示付き