A Plastic Toy Drawing Robot Taught Me What GenAI Can Do

Watercolor illustration: a white cat-shaped drawing robot with two blue arms holds a pen over a sheet of paper with a sketch of a cat, while a fluffy Ragdoll cat sits next to it and reaches out with one paw
AI-generated title picture. Look closely at the arm linkage.

A plastic toy drawing robot taught me something about what GenAI can do.

My vacation project started with one of those cheap drawing robots for kids. It is basically a Spirograph with ambition: two motors drive two arms, the arms meet at the pen, and the thing draws surprisingly clean pictures. I wanted to build my own, 3D printed, with a little LLM on top so it draws whatever you ask for.

So I opened Claude and started talking mechanics. We went through the five-bar linkage and read a security blog that had taken the toy apart. Then Claude built an interactive simulator in plain HTML. You drag the pen around and a heatmap shows the drawing error across the whole field. That simulator delivered the first real insight. The arm geometry barely matters, because the play in the cheap stepper gearboxes swamps everything else. A rubber band that keeps the gears pressed to one side does more than any clever arm length.

Screenshot of the drawing robot simulator (German interface): a top view of the five-bar linkage with two driven upper arms, the reachable area and a 100 by 100 mm drawing field colored as a heatmap of the pen error per step, with geometry sliders on the left and error statistics on the right
The simulator Claude built in plain HTML: a heatmap of the drawing error across the field.

From there it got physical. Claude designed every part in OpenSCAD, fully parametric, and ran a collision check through the whole range of motion. That check caught two real bugs: the pen hit the head plate during homing, and a cam sat 90 degrees off in the model. When I grumbled about too many screws, the next version went from 24 down to 9 by using crush ribs instead. Claude wrote down every decision as it went. It also picked bearings and switches on Amazon, and I clicked "buy" myself.

OpenSCAD rendering of the robot assembly: a yellow base plate with two motor hubs, orange and yellow upper arms, two green forearms that meet at a red pen holder
The parametric OpenSCAD assembly.

Before printing nine hours of parts, Claude designed a small fit test with every critical bore and seat in three sizes. Then it watched the print through the two webcams on my printer, one snapshot every five minutes. When a part came loose, we looked at it together and agreed on a brim for the next run. I measured the results, reported "press fit" or "too loose", and the numbers went straight back into the model.

Photo of two white 3D printed fit-test sprues on a black surface, each holding bores, seats, a ring and a small bracket, one of them with stringy strands at the top
The fit test: every critical bore and seat, printed to find the right tolerances.
Webcam snapshot from inside a 3D printer: the print head moves over the build plate while the first layers of the small test parts are printed
One of the snapshots Claude watched during the print.

Next comes the firmware. Claude will write it and flash it onto the microcontroller, but that part stopped surprising me a while ago. My bet is that it will once again put a little web server on the chip as the control panel. :-D

I ran the printer and made the calls. Everything else happened in a conversation. A year ago I would have filed half of this under "not something a language model can do".

What surprises you most here? Or does nothing surprise you anymore?

PS: The image model got the arm linkage wrong in the title picture. Image generation still lags behind what the language model can do.

LinkedWild