Archive for November 12th, 2011

Canon SX230HS Lens Cap

The SX230HS camera lives in my pants pocket, where it gets pressed between my leg and anything I lean against. Turns out that the lens turret end cap isn’t quite thick enough to not bend inward against the leaves that cover the lens, which causes them to hang up. The solution boils down to a hideous external lens cap:

Canon SX230HS with lens cap

Canon SX230HS with lens cap

It’s built from forget-me-not yellow filament for an obvious reason…

The sheet-metal plate bears against the non-moving rim around the turret. I marked the plate’s diameter with a compass, extracted it from the sheet with left-cutting tin snips, filed off the slivers, rounded the edge, and it snapped right into the recess where a touch of acrylic caulk holds it firmly in place.

A thin plastic cover would be too flexible and a thicker plastic cover would be too thick; this must fit into an already-snug cloth pouch where a few additional millimeters of girth actually matter. My previous camera taught me that pocket fuzz gets into everything, so a pouch isn’t optional.

The interior isn’t too inspiring, but you can see what two layers of plastic look like across the bottom:

SX230HS lens cap - interior

SX230HS lens cap - interior

The front has the shallow recess that captures the metal plate. Because the front builds against the aluminum build platform, I added a support structure inside the recess:

SX230HS lens cap - support in place

SX230HS lens cap - support in place

The solid model gives a better view:

Lens cap - solid model - bottom view

Lens cap - solid model - bottom view

It’s basically a ring with tabs under the recess. The ring OD matches the lens caps’s ID, with a height equal to the recess depth, so only the tabs contact the cap. I removed them by twisting each tab with a needle-nose pliers until the whole thing popped loose:

SX230HS lens cap - support structure

SX230HS lens cap - support structure

A bit of scraper and scalpel cleanup and it’s all good. The detail pix show the first trial of the lens cap, which lacks the nice bevel around the front rim.

The camera is smart enough to notice when something blocks the lens: it immediately shuts down and displays a lens failure error message. That’s probably not a Good Thing on a regular basis, but it doesn’t seem to do any harm.

FWIW, my previous pocket camera, a Casio EX-Z850 , sported a recessed and somewhat thicker turret end cap that didn’t have this problem. Mary says she’ll make a case for this camera, too, but until then I’m using a pouch from a dinky VOIP phone that just barely holds the camera.

The OpenSCAD source code:

// Lens cap for Canon SX230HS
// Ed Nisley KE4ZNU - Nov 2011

//- Extrusion parameters must match reality!
//  Print with +1 shells, 3 solid layers, 0.2 infill

ThreadThick = 0.33;
ThreadWidth = 2.0 * ThreadThick;

HoleFinagle = 0.20;
HoleFudge = 1.00;

function HoleAdjust(Diameter) = HoleFudge*Diameter + HoleFinagle;

Protrusion = 0.1;			// make holes end cleanly

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

// Dimensions

LensDia = 53.0;
LensRad = LensDia/2;
LensLength = 8.0;

PlateThick = IntegerMultiple(0.75,ThreadThick);
PlateDia = 48.0;

Shell = 2*ThreadWidth;
Spacer = 2*ThreadThick;

CapOD = LensDia + 2*Shell;
CapLength = LensLength + Spacer + PlateThick;
CapSides = 48;

CenterHoleDia = 44.0;

BevelWidth = PlateThick;

NumStruts = 16;
SupportStrutLen = (PlateDia - ThreadWidth)/2;		// small gap to cap


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

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

  FixDia = Dia / cos(180/Sides);


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

  Range = floor(50 / Space);

	for (x=[-Range:Range])
	  for (y=[-Range:Range])




difference() {

  translate([0,0,(Spacer + PlateThick)])					// lens shell
	PolyCyl(LensDia,(LensLength + Protrusion),CapSides);

  translate([0,0,-Protrusion])								// center hole
	PolyCyl(CenterHoleDia,(CapLength + Protrusion));

  translate([0,0,-Protrusion])								// bevel
	difference() {
	  cylinder(r=(CapOD/2 + 2*(BevelWidth + Protrusion)),
			   h=(2*BevelWidth + Protrusion),
	  cylinder(r1=(CapOD/2 - BevelWidth - Protrusion),
			   r2=(CapOD/2 + BevelWidth),
			   h=(2*BevelWidth + Protrusion),

  difference() {
	translate([0,0,-Protrusion])							// cover plate recess
	  PolyCyl(PlateDia,(PlateThick + Protrusion));
	for (Index=[0:(NumStruts - 1)])							// support struts

difference() {									// support ring
	PolyCyl((CenterHoleDia - 4*ThreadWidth),(PlateThick + 2*Protrusion));