たま日記

たまに書く

連射マシン

ドラクエ11を買った。ゲームをやるのは久しぶり。絵が綺麗なのに驚いた。

 

カジノにはルーレットがあって、攻略サイトを見ていると設定が緩いらしく○ボタンを押しているだけでコインが稼げるそうな。実際、連射パッドで一晩放置しておくとコインがたんまりたまるらしい。

 

手元には連射パッドはないがArduinoとサーボがある。というわけで連射マシンを作ってみた。

 

f:id:androuet:20170905173328p:plain

  • サーボはラベルにGWServo S03T 2BBMGと書いてある。図の黄色い線はフタバ仕様のケーブルなので本当は白。
  • ボタンを押すためのアームはプラスチックの90度アングル材。ホームセンターで買っておいたもの。穴は特に意味はない。サーボにネジで固定。
  • 電池ではなく5VのACアダプタを使った。動作時はPCとはUSB接続しない。ACアダプタから電源供給する。
  • 半固定抵抗は、それぞれ102・103と書いてある。ボタンを押す周期とアームの位置の微調整用。4秒に1回押すように調整した。
  • レゴで高さを調整。サーボは結束バンドとレゴで固定してある。
  • 写真のコントローラーはPS3用。ボタンの高さはPS4のコントローラーとほぼ同じみたい。

プログラムはこんな感じ:

#include 

int val0 = 0;
int val1 = 0;
char buf[50];
int angle = 90;

int interval = 3 * 1000; // 押下間隔(msec)
int duration = 200; // 押下時間(msec)
unsigned long lasttime; // 最後に押下した時刻
unsigned long t;
boolean down;
int adj;

Servo myServo;

void setup() {
  myServo.attach(9);
  Serial.begin(9600);
  lasttime = millis();
  down = false;
}

void loop() {
  val0 = analogRead(0);
  interval = 1000 + map(val0, 0, 1023, 0, 20000);
  val1 = analogRead(1);
  adj = map(val1, 0, 1023, 0, 10);

  t = millis() - lasttime;
  if (t > interval && !down) {
    down = true;
  }
  if (t > interval + duration && down) {
    down = false;
    lasttime = millis() - duration;
  }
  sprintf(buf, "%d %d", val0, interval);
  myServo.write(angle-(down ? 4 : 0)+adj);
  //Serial.println(buf);
  delay(10);
}

 

一晩動かしてみたら、コインが増えていた。10万枚くらい。「工作っていいな」と思った。でも、

sibafu.hatenablog.com

↑このサイトに書いてあった方法でジャックポットを狙ったら、簡単にジャックポット100万枚が出たので嬉しいような悲しいような…。ビビッとくるのを待って、1~18・19~36・宝箱の3か所にコインを置くのを繰り返して、20分くらいで出ました。感謝。