Archive for October 12th, 2011

KG-UV3D GPS+Voice: Radio Base Interface

The Wouxun KG-UV3D has three holes along the base that capture three tabs in the battery case, with tapered edges to align the case with the contacts. After a few passes to get the dimensions right, the plate matching those features came out like this:

Base plate with tabs

Base plate with tabs

The solid model shows the edge tapering down to a single layer:

Case Tab Base - Solid Model

Case Tab Base - Solid Model

The compound taper on the corners must match both the base and the sides of the radio. The bottom plate and shell have corresponding tapers that extend across the glued joints:

Radio interface tapers

Radio interface tapers

That worked out surprisingly well, given the small dimensions and odd angles. The tabs, in particular, bumped right up against the 0.66 mm extrusion width; they’re 2.0 mm thick, so there’s barely one thread width inside the perimeter for fill. A bit of filing & slicing removed the usual enlargement at the end / start of each perimeter thread on the tabs, which is entirely acceptable for something this finicky.

The OpenSCAD source code with dimensions is all part of that post, but here’s the radio base shape that gets subtracted from the plate to make those tabs:

Radio Base Polygon - solid model

Radio Base Polygon - solid model

This seemed easier than adding a bunch of tiny pegs & triangles, but it’s certainly tedious working around a polygon:

module RadioBase() {

linear_extrude(height=(BaseOpeningDepth + Protrusion),center=false,convexity=5)
polygon(points=[
[-BaseOpeningMax/2,-Protrusion],

[-BaseOpeningMin/2,BaseOpeningY],
[-(BaseToothOC/2 + BaseToothBase/2),BaseOpeningY],

[-(BaseToothOC/2 + BaseToothTip/2),(BaseOpeningY - BaseToothThick)],
[-(BaseToothOC/2 - BaseToothTip/2),(BaseOpeningY - BaseToothThick)],
[-(BaseToothOC/2 - BaseToothBase/2),BaseOpeningY],

[ (BaseToothOC/2 - BaseToothBase/2),BaseOpeningY],
[ (BaseToothOC/2 - BaseToothTip/2),(BaseOpeningY - BaseToothThick)],
[ (BaseToothOC/2 + BaseToothTip/2),(BaseOpeningY - BaseToothThick)],
[ (BaseToothOC/2 + BaseToothBase/2),BaseOpeningY],
[ BaseOpeningMin/2,BaseOpeningY],

[ BaseOpeningMax/2,-Protrusion],

[ (BaseTabOC + BaseTabWidth/2),-Protrusion],
[ (BaseTabOC + BaseTabWidth/2),BaseTabThick],
[ (BaseTabOC - BaseTabWidth/2),BaseTabThick],
[ (BaseTabOC - BaseTabWidth/2),-Protrusion],

[ BaseTabWidth/2,-Protrusion],
[ BaseTabWidth/2,BaseTabThick],
[-BaseTabWidth/2,BaseTabThick],
[-BaseTabWidth/2,-Protrusion],

[-(BaseTabOC + BaseTabWidth/2),-Protrusion],
[-(BaseTabOC + BaseTabWidth/2),BaseTabThick],
[-(BaseTabOC - BaseTabWidth/2),BaseTabThick],
[-(BaseTabOC - BaseTabWidth/2),-Protrusion],
],
convexity=5
);
}

Then subtracting that shape and some inclines…

Radio Base Interface - solid model - thrown together

Radio Base Interface - solid model - thrown together

… lets the base plate pop out of this code:

module Base() {

  difference() {

	translate([0,0,(BaseThick + BaseOpeningDepth)/2])
	  rotate([-90,0,0])
		CaseEnvelope(BaseThick + BaseOpeningDepth);

	translate([0,0,BaseThick])
	  RadioBase();

	translate([(BaseToothOC + BaseTabWidth/2),
			  -(BaseThick + BaseEndLip)/tan(BaseEndAngle),
			  0])
	  rotate([BaseEndAngle,0,0])
		cube([BaseEndWidth,3*BaseOpeningY,BaseOpeningDepth],center=false);

	translate([-(BaseToothOC + BaseTabWidth/2 + BaseEndWidth),
			  -(BaseThick + BaseEndLip)/tan(BaseEndAngle),
			  0])
	  rotate([BaseEndAngle,0,0])
		cube([BaseEndWidth,3*BaseOpeningY,BaseOpeningDepth],center=false);
  }
}

I’m still doodling the electronics, alas…

,

3 Comments