A need for pix of the current waveforms in a stepper motor produced a need to synchronize to the shaft rotation. Rather than cobble something up using random spare parts, I printed a wheel with a tab:

The model looks about like you’d expect:

Those stretched pentagonal holes give it a vaguely religious aspect, don’t they?
The tab is 2/50 of the circumference, so that the resulting pulse neatly brackets two consecutive groups of four full-step pulses. There’s no way to align the tab with the rotor position, so producing a good scope sync pulse becomes a simple matter of software.
The tab’s length and radial position corresponds to this carefully engineered bit of mayhem:

The shaft hole will be just slightly too small for the motor shaft, which is perfectly fine. Drill the hole to 5 mm using a #9 drill, working your way up from about #12 to keep the hole concentric.
Actually, that was the second version. The first was a quick-and-dirty disk with a tab, but it came out too floppy at only 1 mm thick and utterly boring:

But it served as the prototype to settle the tab dimensions and location:

The OpenSCAD source:
// Optical Interrupter
// Suited for low speed demonstrations!
// Ed Nisley KE4ZNU June 2011
//- Extrusion parameters - must match reality!
// Print with +2 shells and 3 solid layers
ThreadThick = 0.33;
ThreadWidth = 2.0 * ThreadThick;
//- Plate dimensions
MotorShaftDia = 5.0;
MotorShaftDiaSides = 8;
MotorShaftPolyRadius = (MotorShaftDia/2)/cos(180/MotorShaftDiaSides);
HubDia = MotorShaftDia + 16*ThreadWidth;
HubThick = ceil(10.0/ThreadThick)*ThreadThick; // total, not added to plate
HubSides = 8;
BladeRadius = 31.5; // to center of optical switch gap
BladeThick = 2*ThreadWidth; // measured radially
BladeAngle = (2/50)*360; // 50 repeats of 4 full step sequences per rev
BladeHeight = 7.0; // beyond ribs
PlateRadius = BladeRadius + 5.0;
PlateThick = ceil(3.0/ThreadThick) * ThreadThick;
HoleCenterRad = (BladeRadius + HubDia/2)/2;
HoleDia = 0.75 * (3.14159 * 2 * HoleCenterRad)/HubSides;
HoleSides = 5;
//- Convenience items
Protrusion = 0.1;
$fn = 128; // make large circles very smooth
//- Build it!
difference() {
union() {
cylinder(r=PlateRadius,h=PlateThick); // base plate
cylinder(r=HubDia/2,h=HubThick,$fn=HubSides); // hub
translate([0,0,PlateThick]) // blade
difference() {
cylinder(r=BladeRadius+BladeThick/2,h=BladeHeight);
cylinder(r=BladeRadius-BladeThick/2,h=BladeHeight + Protrusion);
rotate([0,0,(180 - BladeAngle/2)])
translate([PlateRadius,0,(BladeHeight + Protrusion)/2])
cube([PlateRadius*2,PlateRadius*2,BladeHeight+Protrusion],center=true);
rotate([0,0,(BladeAngle/2)])
translate([PlateRadius,0,(BladeHeight + Protrusion)/2])
cube([PlateRadius*2,PlateRadius*2,BladeHeight+Protrusion],center=true);
}
}
translate([0,0,-Protrusion]) // shaft hole
cylinder(r=MotorShaftPolyRadius,
h=HubThick+2*Protrusion,
$fn=MotorShaftDiaSides);
for (Angle = [0:(HubSides-1)]) // beautification holes
rotate([0,0,Angle*(360/HubSides)])
translate([HoleCenterRad,0,-Protrusion])
rotate([0,0,180])
scale([1.33,1.0,1.0])
cylinder(r=HoleDia/2,
h=(PlateThick + 2*Protrusion),
$fn=HoleSides);
}
Yeah, that optical switch really is older than you are…