Turn your 3D printer's spare parts into a silent, cloud-free smart blind motor.
BlindPuller is an open-source, 3D-printable retrofit device for the beaded-chain roller blinds found in most homes across Australia, North America and Europe. It mounts on the wall below your blind, the bead chain runs through it, and it opens your blinds at sunrise — so you wake up with natural light and still sleep in full darkness.
No cloud. No app account. No modification to the blind itself. Renter-friendly.
Render from assembly.scad: blue = printed bracket, orange = printed sprocket, teal = printed chain guard (translucent for illustration), grey = NEMA17 motor, white = your blind's bead chain. Side view.
Status: v0.1 — early development. The parametric CAD and firmware are here and documented, but the design has not yet been validated on a physical build. First test build is the current milestone. Issues and PRs very welcome.
Waking up to sunlight is the best-known fix for groggy mornings, but sleeping well requires a dark room. The only way to have both is something that opens the blinds before you wake up.
Commercial options exist (RYSE SmartShade ~US$150–200, SOMA Smart Shades ~US$150, AliExpress AM43 ~US$25) but they are either expensive, tied to a proprietary cloud app, or both. Meanwhile, if you own a 3D printer you very likely already have the two most expensive parts of such a device sitting in a drawer:
| Part | Why you already have it |
|---|---|
| NEMA17 stepper motor | Standard 3D printer motor — most people have spares |
| TMC2209 stepper driver | The standard silent driver for printer mainboards |
Add a ~US$2 ESP32-C3 board, a 12 V power brick and some printed parts, and the total cost of a BlindPuller is under US$15 if you have the motor and driver, or about US$25 if you buy everything new.
┌─────────────┐
│ roller blind │
└──────┬───────┘
│ bead chain (continuous loop)
▼
╔═════════════╗
║ BlindPuller ║ ← wall-mounted below the blind
║ ┌─────────┐ ║
║ │ sprocket │ ║ printed bead-chain sprocket on a NEMA17 shaft
║ └─────────┘ ║
║ ESP32 + TMC ║ ESPHome firmware, silent stepper driver
╚═════════════╝
- The bead chain loops through the device and engages a printed sprocket whose pockets match the chain's ball spacing.
- An ESP32-C3 running ESPHome drives the NEMA17 through a TMC2209 in near-silent StealthChop mode.
- The device shows up in Home Assistant as a standard
coverentity — automate it with the built-in sun integration ("open at sunrise"), scenes, voice assistants, whatever you like. - Manual control is never taken away from you. Two hardware buttons jog the blind up/down, and when the motor is idle it is de-energised, so you can still pull the chain by hand like you always did.
- Built from parts the target audience already owns. The bill of materials is optimised for 3D-printer people, not for a factory.
- Local-first, cloud-never. ESPHome + Home Assistant. Works on your LAN with the WiFi router unplugged from the internet.
- The user keeps manual control. Idle motor = free-spinning chain. Physical buttons always work, even with WiFi down.
- Parametric everything. Bead diameter, chain pitch, sprocket tooth count, shaft size — all variables in config.scad. Bead chains vary by country and manufacturer; yours will fit.
- Rental-friendly. Mounts with two screws or 3M VHB tape. Removal leaves no trace and the blind is untouched.
See hardware/BOM.md for the full list with links. Summary:
| Item | Qty | ~Cost (new) |
|---|---|---|
| NEMA17 stepper (≥40 N·cm) | 1 | US$9 (or free from your spares) |
| TMC2209 driver module | 1 | US$2 |
| ESP32-C3 SuperMini | 1 | US$2 |
| 12 V 2 A DC power supply + barrel jack | 1 | US$5 |
| Buttons, wires, M3 hardware | — | US$3 |
| Printed parts (~80 g PETG) | — | US$2 |
- Measure your chain: ball diameter and centre-to-centre pitch (typical "#10" chain: 4.5 mm balls, 6 mm pitch — the default). Measure across 10 gaps and divide by 10.
- Verify with the gauge: set your chain dimensions in
hardware/openscad/config.scad, printgauge.scad(a 5-minute strip) and lay your chain into it — every ball should drop into a pocket. This catches measurement errors before you print anything big. - Print the real parts: render
sprocket.scadandhousing.scadto STL, print in PETG (sprocket at 100% infill). Pre-rendered STLs for the default #10 chain are in releases/v0.1. - Flash: copy
firmware/esphome/secrets.yaml.exampletosecrets.yaml, fill in WiFi credentials, thenesphome run firmware/esphome/blindpuller.yaml. - Assemble & mount: see docs/assembly.md.
- Automate: in Home Assistant, add an automation — trigger: sun rises → action: open cover. Enjoy waking up like a plant.
Credit where due — this project stands on a well-trodden path:
- nidayand/motor-on-roller-blind-ws — the classic ESP8266 roller-blind motor (2017-era, replaces the blind's tube mechanism rather than pulling the chain).
- RYSE SmartShade / SOMA Smart Shades — commercial chain-pulling retrofits; polished, but cloud-dependent and US$150+.
- A-OK AM43 — cheap commercial chain motor; hardware is fine, the mandatory Tuya cloud app is not.
BlindPuller's niche: chain-through design (zero blind modification), fully parametric printable CAD, ESPHome-native, and a BOM made of 3D-printer spares.
- v0.1 — first physical test build; validate sprocket engagement and lifting torque
- v0.2 — endstop-free calibration via TMC2209 StallGuard (no limit switches, no over-travel)
- v0.3 — printed 3:1 planetary gearbox option for heavy blinds
- v0.4 — battery + solar option (18650 + TP4056 + solar panel)
- v1.0 — Matter-over-WiFi build profile for non-Home-Assistant users
- Cord-loop (fabric loop) variant of the sprocket
MIT for everything in this repository — firmware, CAD sources and documentation. Print it, sell it, remix it; attribution appreciated.
See CONTRIBUTING.md. The most valuable contribution right now is a test build report — even (especially) a failed one.
