Advertisements

Kenmore 158: Hall Effect Pedal Connector

Built back in 2004, the Dell GX270 PC had PS/2 keyboard and mouse ports on its back panel, so I put a PS/2 plug on the cable from the Hall effect sensor in the foot pedal. Although the original sockets mounted on a complex system board structure that I can’t repurpose, it’s easy enough to conjure up a mount for a single socket on the back panel:

PS2 Socket Mount

PS2 Socket Mount

A quick fit check verified the dimensions:

PS2 Connector mount - trial fit on platform

PS2 Connector mount – trial fit on platform

Astonishingly, the socket slid firmly into its slot. I love it when that happens on the first try!

The flat plate in front of the mount snaps into the chassis cutout to locate the 2-56 screw hole positions:

PS2 Mount - drill guide

PS2 Mount – drill guide

The screws thread directly into the mount, with the holes tapped for 2-56. PLA isn’t all that strong, but there’s enough meat to hold the mount firmly enough for my simple purposes.

And it looks pretty good, in a post-apocalyptic missing-windows sort of way:

PS2 Connector mount - in place

PS2 Connector mount – in place

That was easy…

The OpenSCAD source code:

// PS/2 Socket Mount
// Ed Nisley - KE4ZNU - October 2014

Layout = "Build";			// Build Socket Guide

//- Extrusion parameters must match reality!

ThreadThick = 0.20;
ThreadWidth = 0.40;

HoleWindage = 0.2;			// extra clearance

Protrusion = 0.1;			// make holes end cleanly

AlignPinOD = 1.70;			// assembly alignment pins: filament dia

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

//----------------------
// Dimensions

Socket = [14.1,13.3,13.0];	// PS/2 socket outline, minus tabs & wires on bottom

Flange = 6.0;

WallThick = IntegerMultiple(2.0,ThreadWidth);

Mount = Socket + [2*Flange,WallThick,WallThick];

ScrewTap = 1.90;			// 2-56 tap for machine screws

ScrewOC = 19.0;

echo(str("Screw OC: ",ScrewOC));

ChassisHole = [13.0,13.0,1.0];
GuideLayers = IntegerMultiple(0.5,ThreadThick);

//----------------------
// Useful routines

module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes

  Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);

  FixDia = Dia / cos(180/Sides);

  cylinder(r=(FixDia + HoleWindage)/2,
           h=Height,
           $fn=Sides);
}

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  RangeX = floor(100 / Space);
  RangeY = floor(125 / Space);

	for (x=[-RangeX:RangeX])
	  for (y=[-RangeY:RangeY])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//-- Build the mount

module SocketMount() {
	
	difference() {
		translate([0,Mount[1]/2,Mount[2]/2])
			cube(Mount,center=true);
		
		translate([0,Socket[1]/2,Socket[2]/2])
			cube(Socket + [0,Protrusion,Protrusion],center=true);
			
		for (i=[-1,1])							// holes centered on socket, not mount
			translate([i*ScrewOC/2,-Protrusion,Socket[2]/2])
				rotate([-90,0,0])
					rotate(180/6)
						PolyCyl(ScrewTap,Mount[1] + 2*Protrusion,6);
	}
}

//-- Totally ad-hoc drill guide to center holes on PS/2 cutout

module DrillGuide() {
	
	union() {
		intersection() {
			translate([0,0,GuideLayers])
				cube([2*Mount[0],2*Mount[1],2*GuideLayers],center=true);
			translate([0,-Socket[2]/2,Mount[1]])
				rotate([-90,0,0])
					SocketMount();
		}

		translate([0,0,Protrusion])
			linear_extrude(height=(3*GuideLayers - Protrusion)) {
				circle(d=ChassisHole[0],$fn=8*4);
				translate([-ChassisHole[0]/2,0])
					square([ChassisHole[0],(ChassisHole[1] - ChassisHole[0]/2)],center=false);
			}

	}
}


//----------------------
// Build it

ShowPegGrid();

if (Layout == "Socket")
	SocketMount();

if (Layout == "Guide")
	DrillGuide();

if (Layout == "Build") {
	translate([0,-Mount[2],0])
		DrillGuide();
	translate([0,0,Mount[1]])
		rotate([-90,0,0])
			SocketMount();
}
Advertisements

,