A browser game on the Mac mini already pops balloons with a hand the webcam
sees. The next step is for the game to reach back into the room: a mole that rises, a wand
that buzzes, a strip that flashes red. This is the research that decided what to buy,
why the rig went wireless, and which mechanical pieces are worth considering before a
single part arrives.
$60
hub + 6 nodes
5.6 ms
radio hop
4×AA
per servo node
4
motion primitives
0
drivers to install
01 · The decision
One hub on the wall, everything else on batteries
The first draft of this guide was a wired rig: a servo board and six servos cabled to
a box under the TV, all on a 6 V wall supply. It was the cheapest thing that works.
It was also a cable run across a living room where two children play, and every prop
would have been tethered to the cabinet.
The version that survived is the opposite shape. One controller sits on the Mac
mini's USB port and is the only thing on mains. Everything that moves or buzzes or
glows is its own small wireless node with its own battery, and the hub talks to all of
them by radio. Fewer wires, more props, and each node is cheap enough to build several.
Mac mini ─USB─▶ HUB XIAO ESP32S3 (USB powered, the one wall part)
│ ESP-NOW broadcast · 5.6 ms · ~30 m indoors, no router
┌──────────────┤───────────────┬───────────────┐
SERVO NODE ×N WAND NODE ×2 LIGHT NODE
C3 + 1 or 2 MG90S XIAO + coin motor C3 + 1 m WS2812B
4×AA NiMH1S LiPo 1000 mAh2×18650 in a V8 shield
The hub bridges the browser's serial port to radio broadcasts. A node is a
two-dollar microcontroller, a battery, and whatever it moves.
The one rule that prevents most failures
A motor never shares the microcontroller's power rail. Separate supply,
common ground, one capacitor.
A servo draws its full stall current for the first tens of milliseconds of every move.
On a shared rail that spike drags the 3.3 V line down and the controller resets in
the middle of the game with a "brownout detector was triggered" message. A 470 to 1000 µF
capacitor next to the controller absorbs the dip; a separate battery for the motor removes
the cause.
02 · The link
Which radio, measured
Chrome can open a USB serial port directly and it can talk to Bluetooth devices, so
the browser game needs no native helper. What decides the design is how long each hop
takes. These are measured medians for a 12-byte control packet on the ESP32 family, from
Electric UI's benchmark, against a camera-to-screen budget of roughly 100 ms.
USB serial, native CDC
The hub. Web Serial's permission persists across reloads through navigator.serial.getPorts(), so the game's fist-to-reload gesture keeps the hardware connected.
Latency1 to 2 ms
ESP-NOW
Radio between ESP32 chips with no Wi-Fi router in the loop. The hub relays what the browser sends. This is what the nodes use.
Latency5.6 ms
Wi-Fi TCP / WebSocket
Fine for a device that also wants a web page of its own, such as an LED strip running WLED. Needs the mini and the device on the same network.
Latency6 / 13.6 ms
Bluetooth LE
Web Bluetooth from Chrome to one prop. Good enough for buzz-on-hit; too slow for anything a player steers with.
Latency15 to 22 ms
Both browser APIs need one real click the first time.
A hand game has no click, so the connect step becomes a "press any key to connect hardware" line on the menu screen, exactly as the game already does for sound, which browsers also refuse to start without a gesture. After that first grant the port reconnects on its own.
03 · Controllers
Native USB, or nothing
The ESP32-S3 and C3 chips have a USB controller built in. macOS sees them as a plain
serial device with no driver to install. The older ESP32 boards route USB through a
CP2102 or CH340 chip that needs a Silicon Labs or WCH driver on the mini, which is one
more thing to break after a macOS update. So: S3 or C3, native USB, and nothing else.
Seeed XIAO ESP32S3
Thumbnail-sized, USB-C, a LiPo charger on the board. The hub, and the right board for a hand-held prop. Eleven pins: enough for a motor, a button and a sensor. Buy from the Seeed Studio official store.
Price$7 to 9
ESP32-C3 SuperMini
The node board. Native USB, low power, single core, and cheap enough to put one in every prop. Its regulator tops out at 6.5 V, which is what rules out five-cell packs below.
Price$2 to 4
Espressif ESP32-S3-DevKitC-1
More pins, two USB-C ports. Only worth it from an authorised distributor: the clones are known to ship with the native USB port dead, which is the one feature this design depends on.
Price$10 to 14
Classic ESP32 DevKit
Works, needs a driver, is what most tutorials still show. Skip unless one is already in a drawer.
Price$4 to 6
Arduino Uno / Nano
Five-volt logic and no radio. The C3 does everything it does, plus Wi-Fi and Bluetooth, for the same money.
Price$5 to 25
04 · Servos and power
Budget on stall current, not on the running figure
A hobby servo is a motor, a gearbox and a position sensor in one plastic box, told
where to go by a pulse width. The MG90S is the one to buy: metal gears survive a child
hitting the mole with a hand, it moves 60 degrees in a tenth of a second, and it costs
three dollars. The number that matters is what it draws when it starts moving or is held
against something.
MG90Smetal gear, 9 g
1.8 kg·cm at 4.8 V. The default for anything a player can touch.
Stall650 to 700 mA
SG90 plastic gear, 9 g
Fine for things nobody touches: a scoreboard flag, a spotlight pan. Gears strip if forced by hand.
Stall360 to 650 mA
MG996R standard, 55 g
Ten kilogram-centimetres. Only for lifting a real object, and never on AA cells.
Stallabout 2.5 A
What a battery has to deliver
1 MG90S starting
0.7 A
6 MG90S at once
4.2 A
6 MG90S, staggered 30 ms
1.4 A
4×AA NiMH, comfortable
2.0 A
USB-C PD at 5 V, maximum
3.0 A
Six servos popping together want over four amps, which no AA pack will give. The fix
costs nothing: the firmware starts them thirty milliseconds apart. Nobody can see
thirty milliseconds, and the peak drops to what four NiMH cells deliver all day. A single
node can therefore run a whole mole board, and it only needs a sixteen-channel servo board
(PCA9685, three dollars) if it grows past four servos.
05 · Batteries
Which cell for which node
4×AA NiMH4.8 to 5.6 V
Every servo node. Feeds the servo directly and the controller's 5 V pin with no regulator in between; the MG90S is rated at 4.8 V. Kid-safe, no fire risk, charges in an ordinary AA charger. Eneloop or any 2000 mAh cell.
Runtime15 to 20 h of play
1S LiPo pouch3.7 V, 1000 mAh
The hand-held wand. The XIAO charges it over its own USB-C. Buy cells with a protection circuit and a JST-PH 2.0 plug. Too low a voltage for a servo; right for a motor that buzzes.
Runtimeabout 8 h
2×18650 in a V8 shield 5 V, 3 A out
The light node. LEDs draw one to three amps, more than AAs manage. The V8 shield is always-on by default, which is the point. Protected cells from a reputable seller; a real charger.
Runtime2 to 4 h at full white
USB power bank
Auto-shutoff. An idle controller draws too little, the bank decides nothing is plugged in and turns off mid-game. Only banks with an always-on mode work, and the listing never says.
Verdictavoid
2S LiPo, RC packs7.4 V
Over the servo's 6 V maximum and over the C3 regulator's 6.5 V limit. Needs a buck converter and a balance charger. Wrong tool.
Verdictavoid
5×AA NiMH6.0 V nominal
Tempting for snappier servos, but a fresh pack reads 7 V, past the C3's regulator. Four cells, always.
Verdictavoid
Every node gets a slide switch. Switched off between sessions, a set of AAs lasts
weeks, and the nodes light-sleep between packets and wake on radio while a game is on.
06 · Actuators by effect
Start from the effect, not the motor
Pop-up target
MG90S on a swing arm, 0 to 90 degrees. Fast, positional, three dollars. A stepper is slower and a plain DC motor has no idea where it is.
Driverthe controller's own PWM pin
Slow precise rotation
28BYJ-48 stepper for a wheel of fortune or a gauge. Quiet, exact, about fifteen turns a minute. Ships with its ULN2003 driver board for three dollars; needs four pins.
DriverULN2003, included
Wind, launcher, spinning wheel
A brushed DC motor or a 12 V PC fan. A four-pin PC fan takes the controller's PWM signal directly, which makes it the easiest large effect in the whole list. The fan stays on the wall.
DriverTB6612FNG, or none for a fan
A sharp physical hit
A 12 V push solenoid, pulsed for 50 to 100 ms only; held on, it overheats. Wants a logic-level MOSFET, a flyback diode and its own supply. Very satisfying, more wiring, wall powered.
DriverIRLZ44N + 1N5819
Buzz in the hand
A ten-millimetre coin vibration motor through a small transistor. A DRV2605 haptic driver adds distinct patterns, so a hit and a miss feel different.
Driver2N7000, or DRV2605L
Room colour
WS2812B strip on a controller running WLED, which needs no code and answers an HTTP JSON call. One metre on batteries, five metres on the wall with power injected every two to three metres.
DriverWLED, one fetch()
07 · Mechanics
The mechanical pieces worth considering
A motor is not a mechanism. Almost every game effect wants one of four motions, and
the interesting engineering is the cheap part that turns what a motor does into the
motion the effect needs. Choosing the motion first, then the mechanism, then the motor,
is what keeps the parts list short.
Four motion primitives
Swing0 to 180 degrees
What a servo does natively. A mole on an arm, a flag on a pole, a flap that opens. Servo horn plus a pushrod and clevis, the two-dollar RC aircraft parts, turn the swing into a push at a distance, so the servo can sit under the board and the mole can be anywhere on it.
Spincontinuous
A wheel of fortune, a fan, a launcher wheel. A gear motor gives torque at the speed the effect wants; an N20 gear motor comes in ratios from 10:1 to 1000:1 for two dollars. A worm gear version cannot be back-driven, so a raised platform holds its position with the power off, which on batteries is the difference between hours and days.
Push and pulllinear
A target that rises straight up, a drawer that opens. Rack and pinion from LEGO Technic or a printed part converts a servo's swing into a few centimetres of travel. A crank and slider or scotch yoke on a gear motor gives endless up-and-down from continuous rotation, which is how one motor can drive a whole row of bobbing targets.
Strikeimpulse
The one a servo cannot do well. Stored energy released by a latch is instant: a spring-loaded mole held by a servo catch pops in milliseconds, then the servo winds it back down at its leisure. Pinball flippers work this way with a solenoid. For a whack-a-mole this is the difference between "it came up" and "it jumped at me".
Parts that multiply what one motor can do
Cam and follower
A shaped disc on one continuous motor lifts several followers in a pattern cut into the disc. Six moles, one motor, no software timing. The pattern is fixed, which is the trade: less control, far less power and far fewer parts.
Cost$0, cut from plywood or printed
Springs and rubber bands
The cheapest energy storage there is. A band returns a mole, a compression spring launches one, a torsion spring holds a flap shut against a servo that only has to unlatch it.
Cost$3 for an assortment
608 bearings
The skateboard bearing. Twenty cents each, and the reason a spinning wheel or a launcher runs true and quiet instead of wobbling on a bare axle.
Cost$4 for 20
Neodymium magnets
Detachable targets that snap back into place, a magnetic latch a servo can break, and a way to hold a prop on the metal TV stand. Pair with a reed switch or hall sensor and the magnet also reports where it is.
Cost$5 for 50
String and pulleys
A servo winding a spool moves something far away for almost nothing: a flag up a pole, a curtain across a target, a ping-pong ball hoisted to a launcher. A counterweight brings it back with no second motor.
Cost$2
LEGO Technic
The prototyping kit that is already in the house. Axles, gears, beams and racks, all interchangeable, and a five-minute printed adapter mates a servo horn to a Technic axle. Build the mechanism in LEGO first; commit to plywood or print only what proves itself.
Costalready owned
Sensing closes the loop
The camera sees hands. It does not see whether the mole was actually hit, whether the
ball actually landed, or where a wheel actually stopped. A few cents of sensor on the node
turns "the game thinks something happened" into "something happened", and that is what
makes a physical prop feel honest.
Microswitch under the mole
The lever type, the one inside every mouse. A real hit closes it; the node reports the hit and drops the mole. Cheap, unambiguous, satisfying click included.
Cost$0.20
Piezo disc
A 27 mm brass disc glued under a surface reads the thump of an impact as a voltage spike. Drum pads use exactly this. One disc can cover a whole board and tell hard from soft.
Cost$0.30
IR break-beam pair
An emitter and a receiver across a gap. A ball passing through a hoop or landing in a bucket breaks the beam. Counts things the camera would only guess at.
Cost$2 a pair
Hall sensor plus magnet
Reports position without contact: the wheel stopped on this segment, the flap is really closed, the mole is fully down before the servo relaxes. Also the cheapest way to add a hidden "reset" the kids cannot find.
Cost$0.30
Force-sensitive resistor
A flat pad that reads how hard it is pressed. A stomp pad, a squeeze handle, a "push the button harder to charge the launcher" mechanic.
Cost$3 to 6
Structure and tools
Pool noodles, EVA foam mats and cardboard are the right materials for anything a
child hits. PVC pipe and fittings make a frame in an afternoon with no tools beyond a
saw. Hot glue holds a prototype together and comes apart when the design changes.
The one tool that changes what is possible is a small 3D printer.
Servo mounts, horn-to-LEGO adapters, cams, gears, pinions, enclosures for the nodes: every piece above that says "printed" is a twenty-minute print. A Bambu A1 mini is around $250 and needs no tuning; a local print service does the same job per part if a printer is one purchase too many. Without one, LEGO Technic plus hot glue covers most of the list, just less neatly.
08 · The order
Sixty dollars, two AliExpress orders
Everything from AliExpress, the boards from the brand's official store there. Two orders
so each stays under Israel's personal-import exemption ($75 by the long-standing rule,
reported raised to $150 in 2025; AliExpress adds VAT at checkout when an order is over, so
the number is visible before paying). Standard shipping, not economy: two to three weeks
rather than six.
Order one: boards and servos
Seeed Studio XIAO ESP32S3
Seeed Studio official store. Hub and two wands. Not the Sense variant. With headers, or add a strip of 2.54 mm pins.
3
$24
ESP32-C3 SuperMini
Servo nodes, mole board, light node.
4
$10
MG90S servo, metal gear, 180 degrees
Six-pack. Not the 360 version.
6
$15
USB-C data cable, 1.5 m, and a USB-C power meter
The cable must say "data". The meter shows what a servo really draws and replaces every number on this page with a measured one.
1 each
$6
Order one
$55
Order two: batteries and small parts
4×AA battery holder with switch and leads
With a cover.
4
$4
AA NiMH 2000 mAh cells
Eneloop, LiitoKala or Panasonic. Plus a four-slot charger if none is in the house ($8).
Mechanics starter: pushrods and clevises, spring assortment, 608 bearings, 10 mm neodymium magnets, lever microswitches, piezo discs
The section above, as one basket. Skip anything already in the LEGO box.
packs
$14
Optional light node: 18650 V8 shield, 1 m WS2812B 60/m, two protected 18650 cells
Cells from a reputable seller only.
1
$15
Order two
$52 to 67
09 · On arrival
Five checks before the first game
Plug the XIAO into the mini. It should appear as /dev/cu.usbmodem… with nothing installed. If macOS asks for a driver, the board is a clone: open a dispute.
Flash the echo firmware and grant the port once in the game. Reload with a fist and confirm it reconnects without asking.
Wire one servo on its own AA pack with the ground shared. Sweep it. The USB meter on the hub side should stay under 150 mA throughout.
Add servos one at a time and command them all together. A reset means the ground is wrong or the capacitor is missing, not that the battery is too small.
Measure the whole loop: the game logs the time from a pop on screen to the servo moving as the webcam sees it. That number joins frames-per-second and detection latency on the game's HUD, which is the point of the whole exercise.
Ynet, Israel's personal-import VAT exemption raised to $150: ynetnews.com
Prices are approximate AliExpress figures in US dollars on the day of research. Stall currents vary by batch, which is what the power meter in order one is for. Back to the topic tracker or all explorations.