Owen Hollingsworth

All projects

ScanBoy

An RFID scanner dressed up as an original Game Boy. ScanBoy reads and writes both common card types, 13.56 MHz (MIFARE/NFC) and 125 kHz, from a single TAP spot on its back.

Status
In development
Controller
ESP32
13.56 MHz
RC522 module (MIFARE/NFC)
125 kHz
EM4095 module
Display
16×2 blue-backlit LCD
Controls
Rotary encoder in the D-pad spot, A and B buttons
Storage
Full-size SD card
Power
18650 cell with USB-C charging
Size
90 × 152 × 32 mm, the same width as an original Game Boy
Enclosure
3D-printed in six colors, my own design
Firmware
C++ on the Arduino framework (just started)
Skills
RFID (13.56 MHz and 125 kHz), ESP32, SPI and I2C, soldering, battery power and charging, parametric CAD (build123d), 3D printing, AI-assisted development

The goal

I'd researched RFID access control systems for work, but my boss decided to go a different direction. I still wanted to learn how RFID works, so I ordered some cheap reader modules and taught myself on my own time.

Design matters to me, and I didn't want those boards sitting on a breadboard on my desk while I learned. I wanted them in something that looked cool, in a nerdy way. While digging through a box of my classic video game consoles, I found my original Game Boy and knew that was the look.

How it works

Reading and writing

Two reader modules cover both common kinds of access card: an RC522 for 13.56 MHz MIFARE and NFC cards, and an EM4095 for 125 kHz cards. Their antennas are stacked behind a single TAP spot on the back, so you never have to know which kind of card you're holding. An ESP32 runs both.

Using it

Results show up on a 16×2 blue-backlit LCD behind a Game Boy-style screen bezel. A rotary encoder sits where the D-pad would be, and the A and B buttons do what you'd expect. A full-size SD card slot on the right side stores your scans.

Power and build

An 18650 cell powers it, with USB-C charging on the bottom edge. The on/off slide switch is on the top edge, right where the original Game Boy's was. Inside, the electronics are wired together, but every board clips or press-fits into its own printed holder, so any of them lifts out of the case without desoldering. The two shells are held together by six screws in heat-set inserts.

Render of the two halves of the case opened side by side, with colored circuit boards held in printed clips and a green 18650 battery at the bottom of the right half.
Render of the opened case: the RC522, EM4095 and SD module in the back shell (left), and the LCD, ESP32 perfboard and 18650 battery in the front shell (right).
Exploded render of the handheld: the front shell with knob and pink buttons, the circuit boards and the back shell pulled apart.
Exploded render of the case and its parts.

I designed ScanBoy and wrote its code with Claude as a coding partner.

Problems and fixes

  • The perfboard didn't fit. The first test print showed that a 70 × 30 mm board was too narrow for the ESP32's pin rows, which sit 25.4 mm apart, and a 50 × 70 mm board ran into the encoder. A 40 × 60 mm board fits, with room left for wiring.
  • The SD module slid back. Pushing a card in shoved the whole module backward. A backstop wall behind it now takes the push.
  • The encoder sat off-center. The knob's shaft isn't centered on its circuit board, so the board's clips and pads moved 1.8 mm to line the knob up with its hole.
Side-by-side comparison: a printed silver prototype case on a cutting mat, and a render of the revised design with a blue LCD and pink buttons.
Left: my first test print. Right: the v2 render, with a wider LCD window and Game Boy-style A and B buttons.

Where it is now

The v2 enclosure is designed, with the fixes from the first test print and the 125 kHz reader added. I'm still refining the print so every component is held properly. The firmware is just getting started, in C++ on the Arduino framework, and hasn't been tested on the device yet.

What's next

  • Finish the printed design so every component is held securely.
  • Cut down the soldering so anyone else who wants to build one can.
  • Assemble it and test the firmware on the real device.