連射マシン
ドラクエ11を買った。ゲームをやるのは久しぶり。絵が綺麗なのに驚いた。
カジノにはルーレットがあって、攻略サイトを見ていると設定が緩いらしく○ボタンを押しているだけでコインが稼げるそうな。実際、連射パッドで一晩放置しておくとコインがたんまりたまるらしい。
手元には連射パッドはないがArduinoとサーボがある。というわけで連射マシンを作ってみた。
- サーボはラベルにGWServo S03T 2BBMGと書いてある。図の黄色い線はフタバ仕様のケーブルなので本当は白。
- ボタンを押すためのアームはプラスチックの90度アングル材。ホームセンターで買っておいたもの。穴は特に意味はない。サーボにネジで固定。
- 電池ではなく5VのACアダプタを使った。動作時はPCとはUSB接続しない。ACアダプタから電源供給する。
- 半固定抵抗は、それぞれ102・103と書いてある。ボタンを押す周期とアームの位置の微調整用。4秒に1回押すように調整した。
- レゴで高さを調整。サーボは結束バンドとレゴで固定してある。
- 写真のコントローラーはPS3用。ボタンの高さはPS4のコントローラーとほぼ同じみたい。
プログラムはこんな感じ:
#includeint 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万枚くらい。「工作っていいな」と思った。でも、
↑このサイトに書いてあった方法でジャックポットを狙ったら、簡単にジャックポット100万枚が出たので嬉しいような悲しいような…。ビビッとくるのを待って、1~18・19~36・宝箱の3か所にコインを置くのを繰り返して、20分くらいで出ました。感謝。