PokeBot – Catch Pokémon’s in your sleep (and at work)


Another robot stealing our jobs...

Description

Pokémon GO catching robot using a modified Pokémon GO plus controlled by an Arduino to automate Pokémon catching and PokeStop spinning.

Features

  • Graphic display for statistics (Low-cost Nokia 5110)
  • Configurable target of balls and PokeStop spins
  • Random delays prevent Niantic to detect the hack
  • Detachable 8pin connector (Pokémon GO plus can still be used standalone)
  • Fully customizable code (built in Arduino environment)

Development

The ongoing legendary Pokémon raids often results in a large amount of Pokémon’s needing revives and potions. I wanted to automate the monotonous task of spinning stops in Pokémon GO. There are endless ways to cheat, but most of them can be detected by Niantic, possibly resulting in banning your account. Inspired by the simple vibrator hack (wiring the vibrator of Pokémon GO plus to the pushbutton) I decided to develop a more advanced version (read overkill). By connecting each color of the RGB led, the vibrator and pushbutton to a small connector, I can hook it up to a microprocessor to detect if the mobile phone has found a PokeStop or a Pokémon. Even the number of items from a PokeStop can be read from these signals. By using random waiting times, it is very difficult to differentiate the PokeBot from a physical player.

The best feature with Pokémon GO is that the kids (read you) are active and outdoors instead of sitting still indoors. Therefore, I see this hack as a complement. PokeBot will fill up your inventory with Poké Balls after a good day’s hunt.  Please note that Pokémon GO plus will only throw red balls, so if you want to catch great Pokémon’s you still have to spend some AFK time…

Modifying the Pokémon GO Plus



The special screws can be removed with a small flat screwdriver
Pokemon GO Plus taken apart. (Top middle shows removed parts)

 

This is the most challenging part, requiring tiny tools, SMD soldering and basic plastic modification skills. I started by taking the Pokémon GO plus (PoGoP) apart. There are three tiny custom screws, but they can be unscrewed with a miniature flat screwdriver and some force… I removed the PCB and soldered enameled wire to the following pins:

  1. RGB Red
  2. RGB Blue
  3. RGB Green
  4. Vibrator
  5. Push button
  6. VBATT (3V VCC)
  7. GND

 


The enameled wire is soldered directly to the components.

Note that the positive vibrator wire is removed from the PCB, disabling it until you connect it to VBATT. The seven wires were then trimmed and soldered to a female 2×4 pin header. The eight position were filled with epoxy, avoiding the male connector to be inserted upside down. I had to cut away the tip of the black housing and remove the bottom screw to integrate the pin header nicely inside the PoGoP. I also needed to trim some plastic ribs to fit the inner part of the pins. This can be done with a Dremel, but I used a wire cutter and a breakaway knife to get more precision. Once everything is fitting prefect, I measured the signals and glued the pin head to the housing with 2k epoxy.

Since the bottom screw was removed I simply placed a piece of double sided adhesive in the battery lid to secure it to the housing.

Standalone operation


Standalone operation with small wire to enable vibration

Since all the signals are connected to a pin header the PoGoP can easily be detached from the PokeBot and used as intended for Pokémon walks. To enable the vibrator, I used a bent pin from a pin header to bridge the vibrator signal to VCC. Removing the pin enables standalone “quiet” operation, only signaling status thru LEDs (perfect for boring meetings ;)

Building the microcomputer

The microcomputer is easily built by connecting the Pokémon GO pin header, LCD and switches to the Arduino. Please note that both the Pokémon GO and LCD requires 3V signals, while the Arduino I used has 5V signals. Instead of using level converters I simply connected 1k resistors in series, reducing the current and protecting the devices. I soldered the wires directly to pin headers and added some heat glue to secure everything once I had verified the function. You can use breadboard wires if you want a quicker (but less permanent connection)

Arduino Pinout

0          NC (Not Connected)
1          NC
2          Switch 1
3          Switch 2
4          NC
5          1k to LCD D/C
6          1k to LCD RST
7          1k to LCD SCE
8          NC
9          LCD backlight (my LCD module have built in serial resistors)
10         NC
11         1k to LCD DN (MOSI)
12         NC
13         1k to LCD SCLK

A0         to 1k to PoGoP Pin Header Vibrator
A1         1k to PoGoP Pin Header Switch
A2         1k to PoGoP Pin Header Blue
A3         1k to PoGoP Pin Header Red
A4         1k to PoGoP Pin Header Green
A5         NC

3.3V       LCD VCC & PoGoP VCC
GND        LCD GND, PoGoP GND & config Switches

The program

The program is quite simple; I used the LCD functions library for the Nokia 5110 display and initialized the pinouts according to their functions (enabled weak pullups for vibrator, RGB led and the config switches).

Subroutines were created to handle repetitive commands as display updates, keypress and random waiting times. Note that the display updates also echo the info on serial, allowing information and debugging on a PC terminal. This also allows you to skip the display and run in standalone if needed.

I played around with the graphical display functions and draw a Pokémon ball that is displayed for a second during startup.

The main loop scans the PoGoP signals and determines if it found a PokeStop (blue led) or a Pokémon (green led) and acts accordingly.

Improvements

  • The first version of the program is very basic, only detecting color of the LED and decreasing the available amount of Balls and PokeStop spins (easily configurable in the code). A more advanced version would detect error messages, count successful catches and number of items from the stop. If anybody else thinks this would be interesting it is rather easy to develop.
  • I didn’t add a diode for VBAT. Power the Arduino before connecting it to PoGoP, otherwise you will drain the 220mAh CR2032 battery quite fast…
  • The Bluetooth connection on my mobile phones (Samsung S8 & S6 with Android 7.0) seems to be a bit shaky, limiting the automated function to a few hours instead of a full night. I will see if changing power scheme might help. (you can easily test the stability of your BLE connection with PoGoP by  using the PoGoP while letting the phone be unused for a while and see if connection is lost).
  • A positive side effect with the PokeBot is that it keeps Pokémon GO active for a long period causing even a slight GPS drift to add up to kilometers of walking, allowing me to hatch 10k eggs and collecting candy in my sleep! (got an 96%IV Larvitar last night). Placing your phone away from a window seems to improve drift…

Bill of Materials (BOM)

1x Pokémon go plus
1x Arduino development board (Arduino Uno or clone with ATmega 328p)
1x Nokia 5110 graphical LCD (from eBay or sparkfun)
1x 36pin header (0.1” / 2.54mm)
1x 2x4 male pin header (0.1” / 2.54mm)
1x 2x4 female pin header (0.1” / 2.54mm)
10x 1k resistors
2x slide switches
Core wire (preferably in different colors)
0.2mm Enamel wire

Version tracker – JavaScript (to generate nexa commands)

0.1         First version (only debug info)
0.2         Working auto collect
0.3         Added Nokia LCD
0.4         Config switches and improved UI

Documents

Arduino code (tested on 1.8.4)

Licensing

Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Related posts:

Leave a Reply

Your email address will not be published. Required fields are marked *