Maixduino Pokédex
A standalone device that snaps a photo, identifies one of 150 Pokémon with an on-device neural network, and shows a themed Pokédex panel — no internet, no phone, no cloud.
- accuracy
- 79%
- model size
- < 1 MB
- classes
- 150
- board memory
- 8 MB
A weekend build on a Sipeed Maixduino — a board the size of an Arduino with a small neural-network accelerator baked into its chip. Press a button, the camera captures a frame, a MobileNet classifier running on the K210 identifies one of the 150 Gen-1 Pokémon, and a themed Pokédex panel lights up. The whole loop runs offline, on the device.
A weekend project: a standalone device that snaps a photo, identifies one of 150 Pokemon with an on-device neural network, and shows a themed Pokedex panel — no internet, no phone, no cloud.
The Motivation
Every kid who grew up with Pokemon wanted the real Pokedex — point it at a creature, get the name, the stats. I had a Sipeed Maixduino sitting in a drawer, a board the size of an Arduino with a tiny AI accelerator baked into its chip. This weekend I decided to actually build the thing.
The goal was deliberately strict: it all had to run offline. No phone tether, no API call to a server. Press a button, the camera captures a frame, a neural network on the chip itself figures out what it's looking at, and a Pokedex screen lights up. The whole loop happens on a handheld device.
Spoiler: it works. Here's the short version of how — and where it tried to defeat me.
Teaching a chip to recognise 150 Pokemon
The brain here is a Kendryte K210 — a dual-core RISC-V chip with a small neural-network accelerator and a strict 8 MB of memory to its name. That constraint shaped every decision.
I trained an image classifier (MobileNet, a model family built for exactly this kind of low-power work) to recognize all 150 original Gen-1 Pokemon. Training happened on a laptop GPU; the interesting part was shrinking the result so it would fit and run on the K210. A full-size model simply does not fit — too big for the chip's memory. A smaller variant lands at under 1 MB and runs comfortably. Picking that size was the difference between a working device and a board that crashes the instant you ask it to think.
The final model hits 79% accuracy on validation images while running entirely on-device. For 150 lookalike cartoon creatures squeezed onto a chip with less memory than a single photo from your phone, I'll take it.
The part nobody warns you about
Getting a model to train well is the famous part. Getting it to run on tiny hardware is the quiet challenging
A few of the walls I hit:
- The white screen of death. One bad flash and the board booted to a blank white display, completely unresponsive. The fix is a genuine recovery ritual — hold a button while powering on to drop into the chip's permanent built-in ROM, then reflash from scratch. Reassuring once you know it; terrifying the first time.
- The invisible image-format trap. the model gave confident, wildly wrong answers on the device while being perfectly accurate on my laptop. The cause was a subtle mismatch in how pixel values were scaled before reaching the model. Nothing crashes — it just quietly lies to you. Hours spent here.
- Memory Tetris. With only a limited working memory, drawing the full Pokedex screen at once would blow the budget. The UI is rendered in thin horizontal strips, one at a time, freeing memory between each. The screen you see is assembled like a Polaroid developing in slices.
Making it feel like a Pokedex
A working classifier is a tech demo. A Pokedex needs UI.
So the device has a proper scan mode — a live camera feed with a sweeping green scan line, a pokeball icon, a battery gauge, a "DEX 150" counter down the side panels. Press the button and it plays a brief "ANALYZING" animation before snapping to a themed result panel: the Pokemon's number and name in a red header, the captured photo, type, height, weight, species, and a wrapped line of flavor text.
Small trick I'm fond of: the analyzing animation is pure theatre. The actual identification finishes the instant you press the button — the 700ms of suspense is just for fun, while the answer is already sitting in hand.
The case is 3D printed. I didn’t have any red filament on hand, so I know it’s not true to the classic Pokedex colors. Maybe I’ll print another one in red once I get some filament.
Demo Video
Whats Next ?
The device works, but a weekend is a weekend. A few things I'd like to improve:
- Better accuracy. The current model is trained on a fairly limited dataset, and it shows on harder images. A larger, cleaner dataset plus more careful fine-tuning should push the accuracy up meaningfully.
- A proper case. Right now it looks good in blue. but I want to 3D print a Pokedex-style enclosure in red filament so it actually looks like OG.
- Audio feedback. The board has speaker support so wiring up a small speaker — a confirmation sound on a successful scan may be a good touch up.