Ender Refab:
Accessible
Pen Plotter
An Ender 3 3D printer converted into a gesture-controlled pen plotter — enabling people with limited hand or arm mobility to draw and create using only a webcam and their hand.
The Problem
[Miles — describe the problem here. What barrier do people with limited hand or arm mobility face when it comes to drawing, writing, or creative expression?]
[Continue here — why does this barrier matter socially, emotionally, academically?]
[Miles — fill in with a real number or finding.]
[Miles — fill in with a relevant finding.]
[Miles — existing AT tools for drawing, their price point, and limitations.]
Who Experiences This Problem?
[Miles — describe the target users. Specific conditions: cerebral palsy, muscular dystrophy, spinal cord injuries, ALS. How does motor impairment affect the ability to draw, write, or create?]
[Did you research or speak with anyone? What did you learn about what creative access means to them?]
How It Helps.
[Miles — explain how gesture-controlled drawing removes the barrier you described. What does this device actually give someone with limited motor control?]
[Connect back specifically to the conditions and people you described in the previous section.]
Contact
Response
on Paper
Webcam
Hardware Design & Build
Design Process
[Troy — overview of design decisions and iterations. What were you trying to solve mechanically? What didn't work? What's the final approach?]
Electronics & Wiring
[Troy — Ender 3 mainboard, servo, Arduino Leonardo for solenoid / E-stop, relay, power. How does it all connect?]
Assembly
[Troy — step-by-step assembly. Order of operations, anything tricky to get right.]
Y-Axis Extension
The stock Ender 3 has a 220 × 220 mm build area — just short of letter paper (216 × 279 mm). For a plotter used with real paper, that gap matters. The Y-axis was extended to close it.
Custom extension mount
3D-printed Y-axis bed extension mount repositions the carriage attachment for extra travel.
Longer guide rods
Replaced stock Y rods with longer ones to support the full range of motion.
Firmware
Updated Y_MAX_POS in Marlin's Configuration.h from 220 → 279.
Software bed dimensions
Control software updated to match — drawings now scale correctly to full letter paper.
Firmware change
#define Y_MAX_POS 220 // stock
#define Y_MAX_POS 279 // extended
The Control Software
A custom Python desktop app built around one goal: let someone with limited hand or arm mobility create drawings without ever touching a mouse or keyboard.
Input Modes
- Hand gesture drawing — the primary accessible input. Pinch to draw, open hand to lift. No physical contact required.
- Freehand canvas — mouse or touchscreen drawing converted to G-code paths.
- Geometric patterns — spirographs, fractals, Lissajous curves. Complex drawings with zero motor input.
- Handwriting generation — type any text; the app converts it to realistic pen strokes.
- SVG import — load any vector file; the plotter draws it scaled to the paper.
- AI drawing — upload an image to Gemini API; it generates plottable paths from the image.
Hand Tracking.
MediaPipe detects 21 key points on the hand each frame. The software measures thumb-to-index distance — close = pen down, open = pen up. A 200 ms debounce prevents false triggers.
Camera → MediaPipe
Webcam frames fed to the landmark model at up to 30 FPS on a background thread.
Coordinates remapped
Normalized webcam XY (0–1) mapped to plotter bed dimensions (0–216 × 0–279 mm).
G-code generated
Each position becomes a G1 draw or G0 travel move with feed rate and Z height.
Streamed over serial
G-code sent to Marlin over USB serial in real time as the user moves their hand.
Safety System.
An Arduino Leonardo acts as a dedicated hardware safety controller. It enforces a 20-second solenoid cutoff in hardware regardless of software state — even if the app crashes or loses serial connection.
Safety limits that matter must live in hardware, not software.
Arduino enforces solenoid release — software state irrelevant.
Python app warns and can release the solenoid early via software command.
Hardware button on Arduino pin 2. Marlin soft limits prevent out-of-bounds motion.
Making It All Work Together.
Getting hardware, firmware, and software to behave as one system took longer than building any individual part. These are the problems that only appeared when everything was connected at once.
Challenge 1 — [Title]
[Describe the first major integration problem — serial timing, coordinate mapping, latency, firmware edge cases, solenoid/servo conflicts, etc. What was the symptom? What caused it? How did you fix it?]
Challenge 2 — [Title]
[Second major problem and solution.]
Challenge 3 — [Title]
[Third challenge.]
Challenge 4 — [Title]
[Add as many as needed.]
Conclusion & Reflection.
[Miles — reflect on the outcome. Did the Ender Refab actually address the problem you described? What did you learn about accessibility design that surprised you?]
[Troy — reflect on the hardware build. What was hardest? What would you redesign? What are you most proud of?]
The software side ended up being more about latency management than I expected. Getting hand tracking, serial buffering, and Marlin motion to feel like one connected system — rather than three separate things with delays between them — required minimizing processing time at every step: running MediaPipe on a background thread, using a lightweight serial buffer, and tuning feed rates to match the pace of gesture input.
The Y-axis extension taught something useful: a firmware change that looks trivial on paper — one integer in Configuration.h — requires recalibrating every assumption the software makes about the machine's geometry.
What I'm most glad we built in: hardware safety that doesn't depend on the software staying alive. The Arduino solenoid cutoff means a crash can never leave the pen stuck down. That was worth the extra wiring.
Additional Projects.
Pen Plotter Control Software
Background & Need
Drawing requires fine motor control — holding a pen, operating a mouse. For people with limited hand or arm mobility, these are real barriers. The control software removes them: if you can move your hand in front of a camera, you can draw.
How It Works
Python app captures webcam frames, runs MediaPipe hand landmark detection on a background thread, maps the pinch gesture to pen-down/up, and streams G-code to the Ender 3's Marlin firmware over USB serial in real time.
[Miles and Troy — add your lab projects below this line, following the same two-column pattern above. Each needs: Background & Need, How It Works, images, demo video, and code/files.]