An octet of Eneloop AAA cells arrived, I wanted to measure their as-delivered charge (the package says “Factory Charged With SOLAR ENERGY”, so you know it’s good), and discovered I’d given away my AAA cell holders. You can actually get inter-series adapters on eBay, but what’s the fun in that? Plus, I didn’t want to delay gratification for a month; you know how it is.
Soooo:

It’s basically an AA-size sleeve that fits over the AAA cell, with a lathe-turned brass post conducting juice from the + terminal of the inner cell outward:

Not much to look at when it’s assembled:

The AAA cell fits deliberately loose, because this goes into a metal clip holding everything firmly in place for the battery tester:

The source code tabulates the sizes of several cylindrical cells, exactly zero other pairs of which have been tested; I expect most won’t work correctly. In particular, the table entries should include the contact button OD and thickness for each cell, so that I can turn out the proper terminal for each pair of cells. If I ever need a different adapter, I’ll beat some cooperation out of that, too.
Discovered I needed an adapter after breakfast, started testing cells after lunch. Life is good!
The OpenSCAD source code as a GitHub Gist:
// Cylindrical cell adapters | |
// Ed Nisley KE4ZNU April 2017 | |
//- Extrusion parameters must match reality! | |
ThreadThick = 0.25; | |
ThreadWidth = 0.40; | |
HoleWindage = 0.2; | |
Protrusion = 0.1; // make holes end cleanly | |
inch = 25.4; | |
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); | |
//---------------------- | |
// Dimensions | |
OutCell = "AA"; // cell sizes | |
InCell = "AAA"; | |
BottomClear = 3*ThreadThick; // shorten outer shell to allow base protrusion | |
Terminal = [3.0,4.0,2.0]; // terminal: OD = nub dia, length = nub thickness | |
NAME = 0; | |
ID = 0; // for non-cell cylinders | |
OD = 1; | |
LENGTH = 2; | |
Cells = [ | |
["AAAA",8.3,42.5], | |
["AAA",10.5,44.5], | |
["AA",14.5,50.5], | |
["C",26.2,50], | |
["D",34.2,61.5], | |
["A23",10.3,28.5], | |
["CR123",17.0,34.5], | |
["18650",18.6,65.2] | |
]; | |
Outer = search([OutCell],Cells,1,0)[0]; | |
Inner = search([InCell],Cells,1,0)[0]; | |
echo(str("Outer cell: ",Cells[Outer][NAME])); | |
echo(str("Inner cell: ",Cells[Inner][NAME])); | |
echo(str("Wall: ",Cells[Outer][OD] - (Cells[Inner][OD]/cos(180/NumSides) + 2*ThreadWidth))); | |
Delta = Cells[Outer][LENGTH] - Cells[Inner][LENGTH]; | |
echo(str("Terminal OAL: ",Delta)); | |
echo(str(" ... head: ",Terminal[LENGTH])); | |
echo(str(" ... shaft: ",Delta - Terminal[LENGTH])); | |
NumSides = 3*4; | |
//---------------------- | |
// 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); | |
} | |
//---------------------- | |
// Construct adapter | |
module Adapter() { | |
difference() { | |
cylinder(d=Cells[Outer][OD], | |
h=Cells[Outer][LENGTH] - BottomClear - Terminal[LENGTH], | |
$fn=NumSides); | |
translate([0,0,Delta - Terminal[LENGTH]]) | |
PolyCyl(Cells[Inner][OD] + 2*ThreadWidth, | |
Cells[Inner][LENGTH] + Protrusion, | |
NumSides); | |
translate([0,0,-Protrusion]) | |
PolyCyl(Terminal[ID], | |
2*Cells[Outer][LENGTH], | |
6); | |
} | |
} | |
//---------------------- | |
// Build it | |
Adapter(); |
The original doodle:
