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

スコアカウンター内蔵「イライラ棒」ゲームの製作:Arduino Nano 作品

プロジェクト概要

定番の「イライラ棒(Buzz Wire)」に、接触回数をカウントする 7 セグメント表示と、10 回失敗するとブザーと LED が激しく点滅する「ゲームオーバー演出」を追加した拡張版です。Arduino Nano とシフトレジスタ(74HC595)で 7 セグ LED を駆動し、シンプルな配線で実現しています。

主要パーツ

パーツ数量
Arduino Nano R31
74HC595 シフトレジスタ1
7 セグメント LED 表示器(赤、カソードコモン)1
ブザー1
赤色 LED(ストップ表示用)1
緑色 LED(ゴー表示用)1
220Ω 抵抗10
9V 電池 + スナップ1

必要な工具

ゲームルールとロジック

配線のポイント

ソースコード構成(3 ファイル)

nervous_meter_score.ino(メインループ)

int latchPin = 3, clockPin = 4, dataPin = 2;
const int STOP_LED = 6, GO_LED = 7, BUZZ = 8, TOUCH = 10;
const int fail_threshold = 9;
enum Status { STOP = 0, GO = 1 };

void setup() {
  Serial.begin(9600);
  displayInitialSetup();
  gameInitialSetup();
}

Status status = GO;
int failCounter = 0;

void loop() {
  while (failCounter > fail_threshold) { gameover(); }
  switch (status) {
    case GO:
      digitalWrite(GO_LED, HIGH); digitalWrite(STOP_LED, LOW); digitalWrite(BUZZ, LOW);
      if (digitalRead(TOUCH) == HIGH) status = STOP;
      break;
    case STOP:
      digitalWrite(GO_LED, LOW);
      failCounter++;
      if (failCounter > fail_threshold) break;
      displayDigit(failCounter);
      Serial.println(failCounter);
      failAlarm();
      status = GO;
      break;
  }
}

void gameover() {
  byte seg_spin[6] = { B10000000, B01000000, B00100000, B00010000, B00001000, B00000100 };
  for (int i = 0; i < 6; i++) {
    digitalWrite(BUZZ, HIGH); delay(5); digitalWrite(BUZZ, LOW); delay(50);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, seg_spin[i]);
    digitalWrite(latchPin, HIGH); delay(10);
  }
}

score_display.ino(7 セグ制御)

byte seg_digits[10] = {
  B11111100, B01100000, B11011010, B11110010, B01100110,
  B10110110, B10111110, B11100000, B11111110, B11100110
};

void displayDigit(int x) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, seg_digits[x]);
  digitalWrite(latchPin, HIGH);
}

void displayInitialSetup() {
  pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT);
  displayDigit(0);
}

game.ino(効果音・初期化)

void gameInitialSetup() {
  pinMode(STOP_LED, OUTPUT); pinMode(GO_LED, OUTPUT);
  pinMode(BUZZ, OUTPUT); pinMode(TOUCH, INPUT_PULLDOWN);
}

void failAlarm() {
  digitalWrite(STOP_LED, HIGH); beep(); delay(150);
  digitalWrite(STOP_LED, LOW); digitalWrite(BUZZ, LOW); delay(500);
}

void beep() {
  for (int i = 0; i < 3; i++) {
    digitalWrite(BUZZ, HIGH); delay(50); digitalWrite(BUZZ, LOW); delay(50);
  }
}

カスタマイズのヒント

製造プロセス

  1. ティアラの芸術と職人技:歴史、素材、現代デザイン
  2. 有刺鉄線:歴史、構造、現代の用途
  3. Arduino Nano 33 IoT製 フライトシミュレーター2020用コックピットパネル - LCD&CDI表示
  4. Microsoft Flight Simulator 2020用Arduinoスイッチ&LEDパネル
  5. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  6. 音声反応型 8 LED ライトディスプレイ
  7. MOSMusicプロジェクトキット: MOSFET、Arduinoで音楽同期照明制御
  8. E3.cableでE3.series電気プロジェクトのワイヤ挿入をマスター
  9. 複雑金型・ダイ生産向け先駆的ワイヤーEDMソリューション(重複記事:1007023971と同内容)
  10. タングステンワイヤメッシュは空気と反応するか?技術概観
  11. Python collections.Counter:効率的なカウント、更新、演算操作