メダルゲーム スピンフィーバーを自作したい①　メインバンパー

# スピンフィーバーを作りたい
　僕が小学生のころ、スピンフィーバーというメダルゲームが大好きでした。小学生の頃に作りたいと思ったこともありました。今もたまに遊びに行きますが、最近スピンフィーバーがおいてあるお店が少なくなってきました。スピンフィーバーは初代機は2007年製、コンピュータは寿命を迎えています。僕が今遊びに行っているお店の機体も、いつ壊れてもおかしくない状態です。とても悲しいです。
 　そこで思いました。
 「今なら、作れるのではないか。」
 　そこで、作ることにしました。

# スピンフィーバーとは？（第2章）
　簡単に言えばピンボール物理抽選ゲームです。鉄球が中央のフィールドにあるバンパーに当たると跳ね返されると同時に、メダル2枚を獲得します。メダル合計が100枚になると、フィールド両端にある2つのチャンスポケットが開きます。そのポケットに鉄球が入ると、クルーンに挑戦し1/5の確率でジャックポットが当たります。フィールドから全ての鉄球が出て行ってしまうとゲーム終了。出て行ってしまうのを防ぐために8枚の壁（アウトブロック）があり、1回だけなら鉄球が外に出て行くのを防いでくれます。逆に鉄球がフィールド上に存在する限りゲームは続きます。
![スクリーンショット (189).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/04bb93b6-603f-c839-11f5-e39d24ea82d5.png)

## 細かいルール
- 通常は1球のみ発射される
- 発射後、10秒間アウトブロックは無敵になる
- ステーションで777がそろうと3球になる
- アイテムがステーションで当たると、ジャックポットが当たる確率が上がる
- アイテムは発射されるボールが2球になる「2ball」、バンパーの獲得枚数が3枚になる「Hit-Win-up」、最初の無敵時間が増える「no-out 10sec」、チャンスポケットが初めから開く「chance-poket-open」、ジャックポット枚数が300枚増える「JP+300」がある。
- レッドとブルーの2つのジャックポットがあり、2つとも当たり、さらにどちらかに当たるとスーパージャックポットを獲得できる。

気になる方は調べてみてください。

# 構想
　今回どのように作るかを考えた際、電子制御ならPICかArduinoだなと思いました。しかし、PICだと端子が少なすぎるのと、PICライターなり揃えて、基盤を作るとなると非常に面倒です。そこでArduinoにするとこにしましたが、Arduinoは同時処理ができません。
 　そこで、Arduino5機をRaspberry Piのシリアル通信で制御することにしました。うまくできるかはしりません。
![スクリーンショット 2023-11-09 171142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/35764ec9-058e-9410-a764-241b91e11026.png)


# 準備
　まず、Arduinoの互換ボードと3Dプリンターを購入しました。
 そして、これも購入しました。
 ![P_20230625_193509.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/d9467dbb-734b-15cd-1f8e-57ecc9d55bd9.jpeg)
はい、ずるしました。センターパネルですが、作るのには少し厳しすぎました。ちょうどオークションサイトにあったので買いました。これで、逃げれなくなりました。これに合わせて作っていきます。

# 設計（バンパー）
　まずはバンパーを設計していきます。設計ソフトはAutoDesk Fusion 360です。
## 動作
　まず、ボールを跳ねる仕組みですが、白い板にボールが当たると、下の図のように鉄板を押し下げてボールを押し返しています。
![スクリーンショット 2023-11-09 171541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/2d080a5e-2372-8731-9b1e-a00dd5ef2d65.png)

 鉄板を押し下げる動作のためには上下運動するアクチュエータが必要です。そこで、ソレノイドを使用することにしました。
 　ソレノイドは電流を流すと、電磁石の力によって鉄芯を引きつける装置です。今回はボール直径30mmなので、しっかり跳ね返すためには最低12mm以上のストローク（引き付ける長さ）が必要と考えました。そこで、タカハ機工のストロークが16mmで力も強い「CA1264」を購入しこれに合わせて設計することにしました。ついでにソレノイドをArduinoで制御できるコントローラーも購入しました。
![P_20230725_163441.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/6abf505d-7820-7291-e727-394716037777.jpeg)

## センサ
　センサはとても悩みました。まず、マイクロスイッチでボールの接触を感知する方法を考えました。しかし、設計が難しくなるのと反応にムラができる恐れがありました。
　そこで、白い板が傾くことで反応するセンサにすることにしました。白い板に金属棒を固定し、土台に穴の空いた金属の板を取り付けます。そして、穴に白い板とりつけた金属棒を入れて固定します。白い板が傾くと、金属棒と板が接触して反応するという仕組みです。
 ![スクリーンショット 2023-11-09 150903.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/8380f803-c143-5f5b-6fc3-76f7c1820395.png)

 ## そのほかの設計
 　そのほかメイン土台、ソレノイド土台、メイン柱、装飾なども本物をベースにして作りました。寸法も、買ったメインパネルに合うようにしました。また、配線用の穴、ネジ穴を用意しておきます。
  一番大変だったのは、ずれが発生しないようにするための穴です。センサの白い板はボールが当たった衝撃で板がずれて、センサが誤作動する恐れがありました。そこで白い板に小さな穴をあけ、板が傾いたときに引っかかるようにしました。
![スクリーンショット 2023-11-09 152108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/2d2be4a8-9c1a-9548-a952-3c144d1fa364.png)

完成したバンパーの設計図はこちらです。
![スクリーンショット 2023-11-09 150648.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/64e37b68-3193-d237-4396-2c27ea2656d0.png)


# 作製
まずは土台が必要です。ホームセンターで適当に板を買ってきて組み立てました。本当に適当に組み立てただけですので、これは割愛します。
　バンパーはセンサのネジ、バネ、板以外はすべて3Dプリンターで印刷します。ベース板だけで11時間かかりました。時間がかかりすぎるので、まずは2つ作りました。
![P_20230810_223003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/c2c90d13-f334-5bda-e0ee-dbc226d6abdb.jpeg)


# プログラミング
使用するのはArduino nanoです。D2～D5端子にソレノイド、D6～D9端子にセンサが付けられています。
```ruby:
void setup() {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(6,INPUT_PULLUP);
    pinMode(7,INPUT_PULLUP);
    pinMode(8,INPUT_PULLUP);
    pinMode(9,INPUT_PULLUP);
}

void loop() {
    if(digitalRead(6)==LOW){
      digitalWrite(2,HIGH);
      delay(50);
      digitalWrite(2,LOW);
      delay(10);
   }
   if(digitalRead(7)==LOW){
      digitalWrite(3,HIGH);
      delay(50);
      digitalWrite(3,LOW);
      delay(10);
   }
   if(digitalRead(8)==LOW){
      digitalWrite(4,HIGH);
      delay(50);
      digitalWrite(4,LOW);
      delay(10);
   }
   if(digitalRead(9)==LOW){
      digitalWrite(5,HIGH);
      delay(50);
      digitalWrite(5,LOW);
      delay(10);
   }
}
```
　とりあえず適当です。else ifにしてないのは後から変更を加えるつもりだからです。このプログラムは、もし同時にセンサが反応しても動作できません。それはまた後日変更します。

# テスト
とりあえず動くか試しました。ソレノイドの電圧は24V。
![P_20230729_235928.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/8c9134d5-de0c-de18-9f54-5abf1b9f6559.jpeg)

お判りでしょうか。ボールを跳ね返す板が折れました。

仕方ないので、支える棒のみネジにして、板だけ次のように加工しました。
![スクリーンショット 2023-11-09 160340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/0a344342-1e66-c22b-9515-8e822d8078f3.png)

結果は成功です。写真では当然わからないですが、しっかり跳ねてます。
**この記事の最後に動画へのリンクを張っておきます。**
![Screenshot_20231109-173045264.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/1f79e88a-30c1-5c59-6af2-15b2733fb3c2.jpeg)


# 4つ作って遊んでみた。
　4つ作って遊んでみました。よければ見てみてください。
 ![Screenshot_20231110-122255136.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479060/a3407633-c9ca-4a4e-fb21-9dee3d75a4d9.jpeg)

 https://youtu.be/bERlESo885E

# おわりに
　今回、せっかくなので挑戦してみましたが、かなり難しいです。さらっと紹介しましたが、いろいろ失敗していますし、だいたい2週間かかっています（作ったのは夏休み）。やることはオススメしません。次回は、アウトブロックを作っていきたいです。できるかわかりませんが。
https://youtu.be/bERlESo885E