2020年1月28日火曜日

ドラクエ8のカジノビンゴを完全自動化しました

久しぶりに電子工作しました
iOS のスイッチコントロールが便利だという話です

環境

  • macOS 10.15.2
  • Arduino IDE 1.8.10
  • Arduino Pro mini (5V, 16Mhz)
  • サーボモータ SG90

成果物


Arduino Pro mini + サーボモータ (SG90) を使って先端につけたスタイラスペンを使って自動で画面にタップする感じです
回路などポイントは後述しています

これと iOS のスイッチコントロールを組み合わせることで永遠にビンゴし続けます
ちなみに土台はダンボールを使って簡単に作っています

背景

スイッチコントロールという iOS の機能を知ったがスイッチコントロールだけだと自動化できなかったので定期的にタップしてくれるロボットを作成した感じです
あとは久しぶりに電子工作したかった感じです

回路

fritzing で書いたブレッドボード回路は以下の通りです
スライドスイッチを入れていますがなくても OK です
サーボモータに VCC (5V) と GND を接続しあとは制御するようのピンに接続しているだけです

実写は以下の通りです
緑色のひょろひょろと出ているジャンパー線は GND から出ておりスタイラスペンにつながっています (これポイント)
電源は面倒なので FTDI のシリアルケーブルでそのまま Mac の USB ポートから供給しています
もちろん 5V 電源であればアダプタでも電池でもリチウムイオンでも何でも OK です

ブレッドボード上の回路部分だけアップ
ノイズ除去用に VCC と GND のすぐそばに並列でセラミックコンデンサを接続しています

スケッチ

大したスケッチではないですが一応紹介します
9 番ピンでモータの制御をしています

#include <Servo.h>

Servo myservo;
int led = 9;

void setup() {
  myservo.attach(led);
}

void loop() {
  myservo.write(90);
  delay(10000);
  myservo.write(180);
  delay(500);
}

タッチペン

先程紹介したひょろひょろの接続先です
スタイラスペンは人間の GND とスマホの電極を使って静電気を発生させタップしています
なので人間の手と同じ原理にするために GND をスタイラスペンの先端に接続する必要があります
この手法はタップをロボット化している方のほとんどが実践している手法のようです

またスタイラスペンは先っちょだけ外せるやつがたまたま手元にあったのでそれを使っています
固定は面倒だったので瞬間接着剤を使いました


あとはサーボモータの位置もポイントです
タップする際にふわっとしたタッチだと反応してくれません
結構しっかりタッチしないと反応してくれなかったので写真を見るとわかりますが調整してかなりスマホに近い位置にサーボモータを固定するようにしました
また画面の端っこすぎても反応してくれませんでした
なのでなるべくサーボモータをダンボールから前に突き出すことで画面の真ん中辺りをタップするようにしています

スイッチコントロールとは

iOS12 から使える機能なのですが特定のタップ、スワイプなどをレシピとして管理してワンタップするだけでそのレシピを実行してくれる機能です
https://support.apple.com/ja-jp/guide/iphone/iph400b2f114/ios

これを使うことでビンゴのスタートボタンを一定のタイミングで押すレシピを事前に作成しておき、あとは画面のどこをタップしてもいいようにサーボモータを制御しています

スイッチコントロールと組み合わせるメリットはロボット側が画面のどこをタップしても良いという点です
例えばロボットに「初めにここをタップして次にここをタップして」みたいな感じで全部やらせることもできるのですがそれだと回路も複雑になるしロボットのアームとして制御するサーボモータの数も膨大になってしまうので大変です
なのでスイッチコントロールと組み合わせることで簡単に複雑な画面タップを実現することができるのです

ただスイッチコントロールにもデメリットはあり「5 タップ、10 秒」までしかやってくれません
なので 10 とか 20 ある操作をスイッチコントロールにやらせることはできません

応用したい

今回作ったのは単純に自動タップマシンなので他にも何か使えないかなと思っています
スマホだけじゃなくて実は物理的なスイッチを押したりできるようになると更に便利かなと思っています
あとはモータの始動をスライドスイッチだけじゃなくてスマホからも制御できるようにするとか、、さすがにやりすぎかな

サーボモータ自体かなり簡単に制御できるアクチュエータなので 2, 3 個であれば複数組み合わせても良いかなと思っています
ただサーボモータを固定するのが大変で今回は手元にあった適当なダンボールを使いましたが本当であればプラスチックや木材、ステンレスなどでしっかり固定するべきかなと思っています
そうなってくると今度は単純な工作技術が必要になってくるのでそれはそれで大変になってくるかなと思います

今後

ちゃんとユニバーサル基板にはんだ付けしようかなと思います
あとは土台作りをちゃんとしてみたいです
というかこうなってくると電子工作というよりかは土台作成がしっかりしてこないとダメだなと思いました
実はロボティクスの世界はフレームとかそういうのを作成するほうが大変なんじゃないかな

0 件のコメント:

コメントを投稿