Spring washer​Sándor KabaiWaving washer is compressed by a nut ensures that no loosening can occur because of the increased friction caused by the spring action of the washer.
In[]:=
Manipulate[​​(*springwasher*)​​t=0.2;​​wave1={Specularity[0.6],RGBColor[1,0.1,0.4],ParametricPlot3D[{(1-m)rSin[x],(1-m)rCos[x],mSin[nx]+m+t},{x,0,2Pi},{r,1.3,2.4},MeshNone,BoundaryStyleBlack][[1]]};​​wave2=ParametricPlot3D[{(1-m)rSin[x],(1-m)rCos[x],mSin[nx]+m},{x,0,2Pi},{r,1.3,2.4},MeshNone,BoundaryStyleBlack][[1]];​​​​wave3=ParametricPlot3D[{(1-m)2.4Sin[x],(1-m)2.4Cos[x],mSin[nx]+h+m},{x,0,2Pi},{h,0,t},MeshNone][[1]];​​​​nut=Rotate[Translate[head,{0,0,1.8+2m-turn+0.3}],8m-8turn,{0,0,1}];​​​​Graphics3D[{nut,head,screw,plate1,plate2,wave1,wave2,wave3},BoxedFalse,SphericalRegionTrue,ImageSize360,ViewPoint{1,-4,1}],​​{{n,3,"number of waves"},2,5,1,RadioButton},​​{{turn,0,"turn nut"},0,0.3},​​{{m,0.2,"move washer"},0.2,0.04},​​TrackedSymbolsTrue,​​Initialization(​​(*screw*)​​length=38;​​core=0.85;​​β=0.8;​​pitch=(1-core)Tan[β]/(Pi);​​t1=ParametricPlot3D[{-rSin[x],rCos[x],rTan[β]+pitchx-Tan[β]},{x,0,length},{r,core,1},PlotPoints30,MeshNone,BoundaryStyleBlack][[1]];​​t2=ParametricPlot3D[{-rSin[x],rCos[x],-rTan[β]+pitchx+Tan[β]},{x,0,length},{r,core,1},PlotPoints30,MeshNone,BoundaryStyleBlack][[1]];​​bolt=Cylinder[{{0,0,0},{0,0,pitchlength+2Pipitch/2}},core0.96];​​screw={Yellow,{t1,t2,bolt}};​​(*head*)​​nw=6;​​v1=Table[{2Sin[i2Pi/nw],2Cos[i2Pi/nw],-0.6},{i,nw+1}];​​v2=Table[{2Sin[i2Pi/nw],2Cos[i2Pi/nw],-1.6},{i,nw+1}];​​hex1=Polygon[v1];​​hex2=Polygon[v2];​​f[{a_,b_,c_,d_}]:={a,b,d,c};​​hex3={Specularity[0.6],RGBColor[0.3,0.6,0.7],Polygon[f/@Partition[Flatten[Transpose[{v1,v2}],1],4,2]]};​​head={hex1,hex2,hex3};​​​​plate1={RGBColor[0.5,0.6,0.8],Cuboid[{-2.5,-2.7,-0.3},{2.5,2.7,0}]};​​plate2={RGBColor[0.5,1,0.8],Cuboid[{-2.5,-2.7,-0.6},{2.5,2.7,-0.3}]};​​)]
Out[]=
​
number of waves
2
3
4
5
turn nut
move washer
​​n=3;​​m=0.3;​​wave1=ParametricPlot3D[{​​(1-m)rSin[x],​​(1-m)rCos[x],​​mSin[nx]},​​{x,0,2Pi},{r,1,1.4},​​MeshNone,BoundaryStyleBlack][[1]];​​Graphics3D[{wave1},BoxedFalse,SphericalRegionTrue,ImageSize360]​​​​
Out[]=