35
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ポケモンGOプラスを完全自動化Hack(物理)してみました

Last updated at Posted at 2016-09-23

発売日にAmazonで運良く「Pokémon GO Plus」を手に入れることができました。

ポケモンGOプラスの登場により通知がきたらいち早くボタンを押すゲームと化したポケモンGOですが、
物理的にボタンを押すだけなら、簡単に自動化できそうだったのでArduinoで自動化してみました!
タイトルなし.gif
ポケモンGOプラスが反応したら検知して、サーボモーターでボタンを押せるようなものを作りました。

材料

Pokémon GO Plus本体と制御のためのArduino Uno

部品 画像 値段
Pokémon GO Plus 3,780
Arduino Uno 3,240

材料はたったこの2つ、Arduinoの初心者セットに良く入っている圧電スピーカーマイクロサーボです。

部品 画像 値段
マイクロサーボ SG92G 500
圧電スピーカー SPT15 100

また、ジャンパーワイヤ、両面テープ、結束バンドなども使っています。
既にArduinoを持っていれば秋月電子で送料込みで1000円以内で自動化ライフが始められますね。

作り方

圧電スピーカーを分解

今回は手元に圧電スピーカーしかなかったので、圧電スピーカーを分解し圧電素子を取り出します。

圧電素子だけでも売っているので、こっちの方が50円お得

部品 画像 値段
圧電サウンダ FGT-15T-6.0A1W40 50

爪で引っかかってるだけで結構簡単に外れるので、裏蓋をパカっと外して圧電素子をとりだします。

圧電素子をセンサーとして使う

電圧を加えると振動して音を出のが圧電スピーカーですが、逆に外部から与えられた振動を電圧に変換することもできます。
今回はこの効果を利用しセンサーとして使います。

圧電素子から伸びるワイヤーをGNDA1に繋ぎます。

(圧電素子のイラストなかったので圧電スピーカーで代用)

ArduinoでanalogRead()で圧電素子の値を読み取ります。

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

void loop() {
  int sensorValue = analogRead(1);
  Serial.println(sensorValue);
}

このコードをArduinoに書き込み、圧電素子を指で叩いてみると数字が変動しセンサーになっているのが分かります。

ポケモンGOプラスの振動を検知する

ちょうど良くポケモンGOプラスの裏のクリップが付いているので、ここに圧電素子を挟みました。
これでポケモンGOプラスのバイブを検知できます。

コードはこんな感じ、センサーの値が150を超えたらボタンを押すという想定。

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

void loop() {
  int sensorValue = analogRead(1);
  if (sensorValue > 150) {
    Serial.println("push!");
    delay(5000);
  }
}

閾値は環境によって変動するので調整してみてください。

サーボモーターを動かしてみる

頭には付属でついてくる、片側しかないやつをネジ止めしておきます。このとき0度のときに上から見てサーボモーターからはみ出ないような位置でセッティングしてください。

そしてサーボモーターから伸びるコードとArduinoの5VGNDD8にそれぞれ接続します。

先程のセンサーと組み合わせて、通知がきたらサーボモーターで15度動かして、すぐに元の位置に戻すという動作をします。

#include <Servo.h>

Servo servo;
int SERVO_PIN = 8;

void setup() {
  servo.attach(SERVO_PIN);
  servo.write(0);
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(1);
  if (sensorValue > 150) {
    servo.attach(SERVO_PIN);
    servo.write(15);
    delay(500);
    servo.write(0);
    delay(7000);
  }

  if (servo.attached()) {
    servo.detach();
  }
  delay(5);
}

サーボを動かした後にdelayで7秒間待っていますが、これはdelayを行わないとポケモンを捕まえたときの振動にも反応してしまうためです。
あと使わないときはservo.detach()しないと待機音が結構うるさい。

ポケモンGOプラスとサーボモーターを固定する

ここからは力技です。
両面テープでサーボモーターでボタンを押せる位置に合わせて、結束バンドで動かないように固定してしまいます。

Artboard.png

最初ビニールタイでを使ってたのですが使用しているうちにズレてきてしまったので、結束バンドにしたら良い感じで固定できました。

完成!動かしてみる!

最終的にこんな感じで動かしています。
Artboard.jpg

これで24時間ポケモンが現れた瞬間に捕まえてくれています。お台場にまる1日放置してみたいw

タイトルなし.gif

あちゃんでいいのとかArduino Nanoとか小さいマイコンに取っ換えれば、多分ポータブル化できる、はず。

35
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?