← SHEET 02 · ASSEMBLIES HW-006
Pull-Down Wardrobe Rail, Pantograph Arm
| PART NO | HW-006 |
|---|---|
| MATL / SYSTEM | STEEL ARMS · ALUMINIUM RAIL |
| TOOLS | Hand calc · Node glTF export |
Splitting the bedroom into three levels solved the floor-space problem but created a new one: the wall storage that used to be at arm’s reach is now stacked up above the level-2 sleeping platform, out of comfortable reach from level 1. This is a design for a pull-down rail that brings the hanging clothes down to chest height on demand and tucks itself back up out of the way — the same parallelogram trick behind HW-002, the folding staircase I already built for this room, applied to a wardrobe rail instead of a set of stair treads.
OVERVIEW & MOTIVATION
The room split (see HW-002) put a −1 office below the original floor and a level-2 sleeping platform above it, still under construction. That vertical split pushed the remaining wardrobe carcase and its shelf up against the level-2 structure, so the hanging rail that used to sit at a normal reach height now has to live near the top of the carcase — comfortably out of reach for grabbing a shirt. The brief: pull a handle, and the rail comes down and forward, clear of the shelf lip, to a normal dressing height; let go (or push back up) and it returns and tucks itself back under the shelf. This is a design study only — not yet built — worked through by hand calc and a parametric box model, the same way HW-002 started before it went to FreeCAD and steel.
Design inputs, stated up front (none of these are measurements — they are the choices this design is built around):
| PARAMETER | VALUE | UNIT |
|---|---|---|
| RAIL_LEN (hanging rail, garment span) | 900 | mm |
| STOWED_RAIL_HEIGHT (target) | ~2050 | mm |
| DEPLOYED_RAIL_HEIGHT (target) | ~1400 | mm |
| GARMENT_LOAD (rated, design input) | 12 | kg |
| RAIL + CARRIER HARDWARE (design input) | 3 | kg |
| GARMENT CG | on rail axis (vertical load only) | — |
MECHANISM & KINEMATICS
The pantograph is a parallelogram four-bar, the same identity that keeps HW-002’s treads level: fixed pivot A (upper) and ground pivot B, offset by a fixed vertical link GLINK on the wall-mounted bracket; two arms of equal length ARM_LEN, one running from A to point P and one from B to point Q, rotating together through the same swing angle theta. Because the coupler (rail carrier) P→Q is fixed at the same length and direction as the ground link A→B, the identity
P - Q == A - B (both = (0, GLINK), for every theta)
holds for every theta — the carrier translates along an arc but never rotates, so a rail bolted rigidly to it stays horizontal through the entire pull-down stroke. This was checked numerically at five angles across the swing (theta = 5°, 32.5°, 60°, 87.5°, 115°): P−Q evaluated to exactly (0.0000, 210.0000) mm at all five, confirming the carrier orientation never changes.
Local frame: origin at pivot A, +x forward (out of the carcase), +y up.
P(theta) = ( ARM_LEN·sin(theta), ARM_LEN·cos(theta) )
Q(theta) = P(theta) − (0, GLINK)
Parameters: ARM_LEN = 460 mm, GLINK = 210 mm, pivot A mounted at H_A = 1800 mm above the floor, X_A = 90 mm forward of the back wall. theta sweeps from THETA_STOW = 5° (arm near vertical, rail tucked under the 2050 mm shelf) to THETA_DEP = 115° (arm swung forward and down past horizontal).
Rail position across the swing (height = H_A + Q.y, forward offset = Q.x):
| ARM ANGLE θ | RAIL HEIGHT | FORWARD OFFSET |
|---|---|---|
| 5° (stowed) | 2048 | 40 |
| 32.5° | 1978 | 247 |
| 60° | 1820 | 398 |
| 87.5° | 1610 | 460 |
| 115° (deployed) | 1396 | 417 |
Stowed height 2048 mm sits just under the 2050 mm shelf; deployed height 1396 mm meets the ~1400 mm chest-height target with a 417 mm forward reach — both design targets are met. Forward offset peaks near 87.5° (arm swinging past horizontal) and eases back slightly by 115° as the arm continues down; that’s the arc doing what an arc does, not a design error, and it settles the rail forward and low enough to load garments from the front rather than reaching under a shelf.
ASSIST SIZING
Total rated load = 12 kg garments + 3 kg rail/carrier hardware = 15 kg, split across two arm assemblies (left and right ends of the rail), so each side’s moment calc uses a 7.5 kg per-arm load: W = 7.5 × 9.81 ≈ 73.6 N, acting straight down through the rail axis (garments hang from hooks on the rail, so the load’s horizontal lever arm about pivot A is just the rail’s forward offset, Q.x).
M_load(theta) = W × Q.x(theta)
| ARM ANGLE θ | LOAD MOMENT | ASSIST MOMENT | RESIDUAL | HAND FORCE |
|---|---|---|---|---|
| 5° | 2.95 N·m | 2.18 N·m | 0.77 N·m | 1.7 N |
| 32.5° | 18.19 N·m | 13.97 N·m | 4.22 N·m | 9.2 N |
| 60° | 29.32 N·m | 24.67 N·m | 4.65 N·m | 10.1 N |
| 87.5° | 33.82 N·m | 33.26 N·m | 0.56 N·m | 1.2 N |
| 115° | 30.68 N·m | 38.11 N·m | −7.43 N·m | −16.2 N |
Assist: a 240 N gas strut, fixed anchor S on the bracket 160 mm below pivot A (S local = (0, −160)), attached to the arm at T, 300 mm out from A along its length. The strut’s moment arm about A is |Tx·Sy − Ty·Sx| / |S−T|, which comes out to 9.1 mm at stow rising to 158.8 mm at full deployment — chosen (via S and T’s placement) to stay single-signed across the whole sweep, so there’s no dead-centre point where the strut loses effect. Assist moment = 240 N × arm(theta). The strut was sized so assist ≈ load moment at 87.5°, the peak-moment angle — that’s the point most likely to feel heavy or crash, and it comes out balanced to within 0.56 N·m. Residual hand force stays under about 10 N through most of the stroke; at full deployment the strut slightly over-assists (−16.2 N, i.e. a 16 N hold-back force is needed to keep the rail extended for loading, since the strut now wants to pull it back toward stow). That’s an intentional trade — it means the rail doesn’t hang open under its own weight — but it does mean loading clothes at full reach takes a light hold, worth a positive latch or detent in a build iteration.
Overloading the rail past the 12 kg rated garment load shifts every number in this table: more moment, less residual margin, and eventually a hand force outside the comfortable band or a strut that can’t hold the deployed position at all. And in every pose the two pivots see the whole cantilevered load — the wall/carcase fixing at the mounting plate, not the arms themselves, is what actually limits how much this can carry.
PARAMETRIC MODEL
wardrobe-rail/build-glb.mjs rebuilds the whole assembly in its deployed pose from
the same parameter block used above (RAIL_LEN, GLINK, ARM_LEN, THETA_STOW,
THETA_DEP, H_A, X_A, plus the carcase and strut-anchor dimensions). Every arm
endpoint (P, Q, and the strut anchors S, T) is solved with sin/cos/atan2 — no
coordinate in the script is eyeballed. The script logs its own joint coordinates
and a P−Q parallelogram check on every run, then calls the shared writeGLB /
validateGLB helpers (../_glb.mjs) to emit and self-check the GLB. Changing
RISE-equivalent inputs like ARM_LEN or GLINK re-solves every joint, arm angle, and
strut length automatically.
Current build: 31 parts (carcase sides, back and shelf, two mounting plates, four arms, two carriers, eight pivot markers, two assist struts and their anchors, the rail, a handle, and five hangers) — 372 triangles at 12 per box.
STATUS & NEXT STEPS
This is a design study: calculated and modelled (hand-calc + parametric GLB), not built. Next steps before cutting any steel: mock the arm pair in flat bar to feel the real pull-force curve against the hand-calc above, hang an actual 12 kg load of clothes on a prototype rail to check the moment numbers against reality, and confirm the carcase/stud fixing at the mounting plate can actually take the cantilevered load through the full swing — that fixing, not the linkage, is the real limiting factor.
USE CASES & APPLICATIONS
Pull-down rails like this show up anywhere storage needs to move to the user instead of the other way round: accessible wardrobe rails for wheelchair users or shorter reaches, pull-down kitchen shelves over a counter, overhead tool storage in a garage or workshop, and aircraft-cabin overhead lockers. More generally, the parallelogram-keeps-it-level principle behind the carrier is the same one behind parallel drafting machines, level-luffing tower cranes, and anglepoise lamps — anywhere a working surface has to stay level while its support swings through an arc.
FILES
hw-wardrobe-rail.md— this page.pantographrail.js— live animated side-elevation drawing (src/scripts/mechs/).wardrobe-rail/build-glb.mjs— parametric deployed-pose GLB export (run withnode build-glb.mjsfrom its own folder; writes topublic/models/wardrobe-rail.glband self-validates withvalidateGLB).