Spring Calculator
This tool can be used to calculate an appropriate mandrel size for spring winding along with a few other bits of information about the spring.
All the fields that expect a number (diameters etc), will accept fractions (e.g. 1 1/4) and numbers followed by an explicit unit (" or mm). All calculations are performed in metric with conversion to/from imperial for display if required.
Units:  
Diameter Selection:  
Spring Diameter (mm) : 
mm


Wire Diameter (mm) : 
mm


Termination Type:  
Material:  
Spring Pitch (mm) : 
mm


Number of Active Coils:  
Total Length (mm) : 
mm


Spring Inner Diameter (mm) : 
mm


Spring Mean Diameter (mm) : 
mm


Spring Outer Diameter (mm) : 
mm


Spring Index:  
Winding Arbor Diameter (mm) : 
mm


Estimated Wire Length (mm) : 
mm


Compressed Spring Length (mm) : 
mm


Spring Rate: 
N/m

Background
This calculator uses the following equations  please let me know if you think they're wrong! Regardless of the selected unit, all entered data is converted into millimetres when calculating the results; if you've selected imperial units, the result is converted back into imperial units for display (although both inches and millimetres are displayed in the right hand column regardless of the selected unit).
All calculations use millimetres and produce millimetres except the spring rate calculation which uses metres to ensure all the units work out neatly.
Key
\(\qquad D_m\) is the mean spring diameter (in millimetres or metres).
\(\qquad D_o\) is the outer spring diameter (in millimetres or metres).
\(\qquad D_i\) is the inner spring diameter (in millimetres or metres).
\(\qquad D_a\) is the winding arbor diameter (in millimetres or metres).
\(\qquad d\) is the wire diameter (in millimetres or metres).
\(\qquad N_a\) is the number of active coils (no units).
\(\qquad N_t\) is the total number of coils (no units).
\(\qquad L_t\) is the total length of the spring (in millimetres or metres).
\(\qquad L_a\) is the active length of the spring (in millimetres or metres).
\(\qquad L_c\) is the length of the spring when fully compressed (in millimetres or metres).
\(\qquad L_w\) is the estimated length of the wire used to make the spring (in millimetres or metres).
\(\qquad p\) is the pitch (in millimetres or metres).
\(\qquad G\) is the shear modulus of the material (in Pascals: 80 GPa for music wire).
\(\qquad i\) is the spring index (no units).
\(\qquad R\) is the spring rate (in Newtons per metre).
Calculations
$$ D_o = D_m + d = D_i + 2 d $$ $$ i = D_m / d $$ $$ R = \frac{G d^4}{8 N_a D_m^3} $$ $$ L_w = \pi D_m N_t $$If the spring ends are open:
$$ N_t = N_a $$ $$ L_c = d N_t $$If the spring ends are closed:
$$ N_t = N_a + 4 $$ $$ L_c = d N_t $$If the spring ends are closed and ground square:
$$ N_t = N_a + 2 $$ $$ L_c = d \left( N_t + 1 \right) $$The arbor diameter calculation is slightly more complicated as I couldn't find a sensible definition of how this should be calculated. The only reliable data I could find on which to base this calculation was the data in Table 23 (on page 353) of the "Mechanics and Strength of Materials" section of my copy of the Machinery's Handbook (27th Edition). Interestingly, Table 23 isn't mentioned anywhere in the text of this edition. There are no explanatory equations and the data shows the usual Machinery's Handbook preference for nonSI units (one of several reasons I usually reach for the Mechanical and Metal Trades Handbook by preference).
However, assuming this data to be correct and lacking any alternative, I decided the best option was to convert it all to metric figures and try to fit a polynomial curve to the data. I did this using the excellent polyfit function in the numpy python library. If you're interested, the polynomial coefficients generated are here  note that I went a bit overthetop on number of coefficients, so this is overkill!
The coefficients are listed in reverse order, so let's name them:
$$ a_6 \qquad \mathrm{to} \qquad a_0 $$in the order they're in the script file. Then:
$$ D_a = \left( \left( a_0 + a_1 i + a_2 i^2 + a_3 i^3 + a_4 i^4 + a_5 i^5 + a_6 i^6 \right) D_m \right)  d $$