The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Photo Backdrop: Crossbar Improvement

The instructions for the Photo Backdrop frame (upon which we hang Mary’s quilts for photos) suggest the crossbar fits on like this:

Photo Backdrop - OEM crossbar installation
Photo Backdrop – OEM crossbar installation

The slot in the bottom is wider than the M10 stud, so the crossbar tends to flop around while assembling it overhead. I immediately replaced the wingnut with a chunky knob for better griptitude, but was never happy with how poorly the whole thing fit together.

This is dramatically better:

Photo Backdrop - fitting installed
Photo Backdrop – fitting installed

The crossbar is upside-down from the OEM instructions, but the bottom of the gray plug holds the tube firmly to the tripod while the nut seats firmly on the plug’s flat top:

Photo Backdrop - fitting top view
Photo Backdrop – fitting top view

A snippet of 3M 300LSE adhesive sheet holds the plug in place, so that’s one less thing to fiddle with on each end.

The solid model holds no surprises:

Photo Backdrop Fittings - solid model
Photo Backdrop Fittings – solid model

Of course, it builds with the flat end downward.

The OpenSCAD source code as a GitHub Gist:

// Photo backdrop fitting
// Ed Nisley – KE4ZNU
// 2026-07-01
include <BOSL2/std.scad>
Layout = "Show"; // [Build,Show]
/* [Hidden] */
ID = 0;
OD = 1;
LENGTH = 2;
HoleWindage = 0.2;
Protrusion = 0.01;
NumSides = 3*2*4;
Clearance = 0.3;
$fn=NumSides;
Tube = [23.0 – HoleWindage,1*INCH,100.0]; // arbitrary length
Aperture = [24.0,15.0,100.0]; // oblong nut hole, arbitrary Z
Washer = [10.5,20.0,1.5]; // M10
//—–
// Define things
module Fitting() {
difference() {
union() {
intersection() {
xcyl(Tube[LENGTH],d=Tube[ID]);
cuboid(Aperture,rounding=Aperture.y/2,edges="Z");
}
cuboid([Aperture.x,Aperture.y,Tube[OD]/2],rounding=Aperture.y/2,edges="Z",anchor=BOTTOM);
}
cyl(Aperture.z,d=Washer[ID]);
}
}
//—–
// Build things
if (Layout == "Show") {
Fitting();
}
if (Layout == "Build") {
up(Tube[OD]/2)
xrot(180)
Fitting();
}

Comments

Spam comments get trashed, so don’t bother. Comment moderation may cause a delay.