// Wobble Ring Stepping Motor V2 SV //solenoid side length solenoidLength = 12.5; //solenoid side width solenoidWidth = 11.5; //solenoid height solenoidHeight = 20.5; //shaft diameter shaftDiameter = 1.666667; //Use commented lines toward the end for file output control// ////////////////////////////////////////////////////////////// use function hypo_cyclo(r1,r2,phi) = [(r1-r2)*cos(phi)+r2*cos(r1/r2*phi-phi),(r1-r2)*sin(phi)+r2*sin(-(r1/r2*phi-phi))]; function epi_cyclo(r1,r2,phi) = [(r1+r2)*cos(phi)-r2*cos(r1/r2*phi+phi),(r1+r2)*sin(phi)-r2*sin(r1/r2*phi+phi)]; // alternating hypo- and epicycloids function epihypo(r1,r2,phi) = pow(-1, 1+floor( (phi/360*(r1/r2)) )) <0 ? epi_cyclo(r1,r2,phi) : hypo_cyclo(r1,r2,phi); //shortened name wrapper for epihypo fuction function f(n,lr,sr) = epihypo(lr,sr,360/600*n); // Module for making 2d hypoepicycloids module Hypoepicycloid(l,s){ polygon(points = [f(1,l,s),f(2,l,s),f(3,l,s),f(4,l,s),f(5,l,s),f(6,l,s),f(7,l,s),f(8,l,s),f(9,l,s),f(10,l,s),f(11,l,s),f(12,l,s),f(13,l,s),f(14,l,s),f(15,l,s),f(16,l,s),f(17,l,s),f(18,l,s),f(19,l,s),f(20,l,s),f(21,l,s),f(22,l,s),f(23,l,s),f(24,l,s),f(25,l,s),f(26,l,s),f(27,l,s),f(28,l,s),f(29,l,s),f(30,l,s),f(31,l,s),f(32,l,s),f(33,l,s),f(34,l,s),f(35,l,s),f(36,l,s),f(37,l,s),f(38,l,s),f(39,l,s),f(40,l,s),f(41,l,s),f(42,l,s),f(43,l,s),f(44,l,s),f(45,l,s),f(46,l,s),f(47,l,s),f(48,l,s),f(49,l,s),f(50,l,s),f(51,l,s),f(52,l,s),f(53,l,s),f(54,l,s),f(55,l,s),f(56,l,s),f(57,l,s),f(58,l,s),f(59,l,s),f(60,l,s),f(61,l,s),f(62,l,s),f(63,l,s),f(64,l,s),f(65,l,s),f(66,l,s),f(67,l,s),f(68,l,s),f(69,l,s),f(70,l,s),f(71,l,s),f(72,l,s),f(73,l,s),f(74,l,s),f(75,l,s),f(76,l,s),f(77,l,s),f(78,l,s),f(79,l,s),f(80,l,s),f(81,l,s),f(82,l,s),f(83,l,s),f(84,l,s),f(85,l,s),f(86,l,s),f(87,l,s),f(88,l,s),f(89,l,s),f(90,l,s),f(91,l,s),f(92,l,s),f(93,l,s),f(94,l,s),f(95,l,s),f(96,l,s),f(97,l,s),f(98,l,s),f(99,l,s),f(100,l,s),f(101,l,s),f(102,l,s),f(103,l,s),f(104,l,s),f(105,l,s),f(106,l,s),f(107,l,s),f(108,l,s),f(109,l,s),f(110,l,s),f(111,l,s),f(112,l,s),f(113,l,s),f(114,l,s),f(115,l,s),f(116,l,s),f(117,l,s),f(118,l,s),f(119,l,s),f(120,l,s),f(121,l,s),f(122,l,s),f(123,l,s),f(124,l,s),f(125,l,s),f(126,l,s),f(127,l,s),f(128,l,s),f(129,l,s),f(130,l,s),f(131,l,s),f(132,l,s),f(133,l,s),f(134,l,s),f(135,l,s),f(136,l,s),f(137,l,s),f(138,l,s),f(139,l,s),f(140,l,s),f(141,l,s),f(142,l,s),f(143,l,s),f(144,l,s),f(145,l,s),f(146,l,s),f(147,l,s),f(148,l,s),f(149,l,s),f(150,l,s),f(151,l,s),f(152,l,s),f(153,l,s),f(154,l,s),f(155,l,s),f(156,l,s),f(157,l,s),f(158,l,s),f(159,l,s),f(160,l,s),f(161,l,s),f(162,l,s),f(163,l,s),f(164,l,s),f(165,l,s),f(166,l,s),f(167,l,s),f(168,l,s),f(169,l,s),f(170,l,s),f(171,l,s),f(172,l,s),f(173,l,s),f(174,l,s),f(175,l,s),f(176,l,s),f(177,l,s),f(178,l,s),f(179,l,s),f(180,l,s),f(181,l,s),f(182,l,s),f(183,l,s),f(184,l,s),f(185,l,s),f(186,l,s),f(187,l,s),f(188,l,s),f(189,l,s),f(190,l,s),f(191,l,s),f(192,l,s),f(193,l,s),f(194,l,s),f(195,l,s),f(196,l,s),f(197,l,s),f(198,l,s),f(199,l,s),f(200,l,s),f(201,l,s),f(202,l,s),f(203,l,s),f(204,l,s),f(205,l,s),f(206,l,s),f(207,l,s),f(208,l,s),f(209,l,s),f(210,l,s),f(211,l,s),f(212,l,s),f(213,l,s),f(214,l,s),f(215,l,s),f(216,l,s),f(217,l,s),f(218,l,s),f(219,l,s),f(220,l,s),f(221,l,s),f(222,l,s),f(223,l,s),f(224,l,s),f(225,l,s),f(226,l,s),f(227,l,s),f(228,l,s),f(229,l,s),f(230,l,s),f(231,l,s),f(232,l,s),f(233,l,s),f(234,l,s),f(235,l,s),f(236,l,s),f(237,l,s),f(238,l,s),f(239,l,s),f(240,l,s),f(241,l,s),f(242,l,s),f(243,l,s),f(244,l,s),f(245,l,s),f(246,l,s),f(247,l,s),f(248,l,s),f(249,l,s),f(250,l,s),f(251,l,s),f(252,l,s),f(253,l,s),f(254,l,s),f(255,l,s),f(256,l,s),f(257,l,s),f(258,l,s),f(259,l,s),f(260,l,s),f(261,l,s),f(262,l,s),f(263,l,s),f(264,l,s),f(265,l,s),f(266,l,s),f(267,l,s),f(268,l,s),f(269,l,s),f(270,l,s),f(271,l,s),f(272,l,s),f(273,l,s),f(274,l,s),f(275,l,s),f(276,l,s),f(277,l,s),f(278,l,s),f(279,l,s),f(280,l,s),f(281,l,s),f(282,l,s),f(283,l,s),f(284,l,s),f(285,l,s),f(286,l,s),f(287,l,s),f(288,l,s),f(289,l,s),f(290,l,s),f(291,l,s),f(292,l,s),f(293,l,s),f(294,l,s),f(295,l,s),f(296,l,s),f(297,l,s),f(298,l,s),f(299,l,s),f(300,l,s),f(301,l,s),f(302,l,s),f(303,l,s),f(304,l,s),f(305,l,s),f(306,l,s),f(307,l,s),f(308,l,s),f(309,l,s),f(310,l,s),f(311,l,s),f(312,l,s),f(313,l,s),f(314,l,s),f(315,l,s),f(316,l,s),f(317,l,s),f(318,l,s),f(319,l,s),f(320,l,s),f(321,l,s),f(322,l,s),f(323,l,s),f(324,l,s),f(325,l,s),f(326,l,s),f(327,l,s),f(328,l,s),f(329,l,s),f(330,l,s),f(331,l,s),f(332,l,s),f(333,l,s),f(334,l,s),f(335,l,s),f(336,l,s),f(337,l,s),f(338,l,s),f(339,l,s),f(340,l,s),f(341,l,s),f(342,l,s),f(343,l,s),f(344,l,s),f(345,l,s),f(346,l,s),f(347,l,s),f(348,l,s),f(349,l,s),f(350,l,s),f(351,l,s),f(352,l,s),f(353,l,s),f(354,l,s),f(355,l,s),f(356,l,s),f(357,l,s),f(358,l,s),f(359,l,s),f(360,l,s),f(361,l,s),f(362,l,s),f(363,l,s),f(364,l,s),f(365,l,s),f(366,l,s),f(367,l,s),f(368,l,s),f(369,l,s),f(370,l,s),f(371,l,s),f(372,l,s),f(373,l,s),f(374,l,s),f(375,l,s),f(376,l,s),f(377,l,s),f(378,l,s),f(379,l,s),f(380,l,s),f(381,l,s),f(382,l,s),f(383,l,s),f(384,l,s),f(385,l,s),f(386,l,s),f(387,l,s),f(388,l,s),f(389,l,s),f(390,l,s),f(391,l,s),f(392,l,s),f(393,l,s),f(394,l,s),f(395,l,s),f(396,l,s),f(397,l,s),f(398,l,s),f(399,l,s),f(400,l,s),f(401,l,s),f(402,l,s),f(403,l,s),f(404,l,s),f(405,l,s),f(406,l,s),f(407,l,s),f(408,l,s),f(409,l,s),f(410,l,s),f(411,l,s),f(412,l,s),f(413,l,s),f(414,l,s),f(415,l,s),f(416,l,s),f(417,l,s),f(418,l,s),f(419,l,s),f(420,l,s),f(421,l,s),f(422,l,s),f(423,l,s),f(424,l,s),f(425,l,s),f(426,l,s),f(427,l,s),f(428,l,s),f(429,l,s),f(430,l,s),f(431,l,s),f(432,l,s),f(433,l,s),f(434,l,s),f(435,l,s),f(436,l,s),f(437,l,s),f(438,l,s),f(439,l,s),f(440,l,s),f(441,l,s),f(442,l,s),f(443,l,s),f(444,l,s),f(445,l,s),f(446,l,s),f(447,l,s),f(448,l,s),f(449,l,s),f(450,l,s),f(451,l,s),f(452,l,s),f(453,l,s),f(454,l,s),f(455,l,s),f(456,l,s),f(457,l,s),f(458,l,s),f(459,l,s),f(460,l,s),f(461,l,s),f(462,l,s),f(463,l,s),f(464,l,s),f(465,l,s),f(466,l,s),f(467,l,s),f(468,l,s),f(469,l,s),f(470,l,s),f(471,l,s),f(472,l,s),f(473,l,s),f(474,l,s),f(475,l,s),f(476,l,s),f(477,l,s),f(478,l,s),f(479,l,s),f(480,l,s),f(481,l,s),f(482,l,s),f(483,l,s),f(484,l,s),f(485,l,s),f(486,l,s),f(487,l,s),f(488,l,s),f(489,l,s),f(490,l,s),f(491,l,s),f(492,l,s),f(493,l,s),f(494,l,s),f(495,l,s),f(496,l,s),f(497,l,s),f(498,l,s),f(499,l,s),f(500,l,s),f(501,l,s),f(502,l,s),f(503,l,s),f(504,l,s),f(505,l,s),f(506,l,s),f(507,l,s),f(508,l,s),f(509,l,s),f(510,l,s),f(511,l,s),f(512,l,s),f(513,l,s),f(514,l,s),f(515,l,s),f(516,l,s),f(517,l,s),f(518,l,s),f(519,l,s),f(520,l,s),f(521,l,s),f(522,l,s),f(523,l,s),f(524,l,s),f(525,l,s),f(526,l,s),f(527,l,s),f(528,l,s),f(529,l,s),f(530,l,s),f(531,l,s),f(532,l,s),f(533,l,s),f(534,l,s),f(535,l,s),f(536,l,s),f(537,l,s),f(538,l,s),f(539,l,s),f(540,l,s),f(541,l,s),f(542,l,s),f(543,l,s),f(544,l,s),f(545,l,s),f(546,l,s),f(547,l,s),f(548,l,s),f(549,l,s),f(550,l,s),f(551,l,s),f(552,l,s),f(553,l,s),f(554,l,s),f(555,l,s),f(556,l,s),f(557,l,s),f(558,l,s),f(559,l,s),f(560,l,s),f(561,l,s),f(562,l,s),f(563,l,s),f(564,l,s),f(565,l,s),f(566,l,s),f(567,l,s),f(568,l,s),f(569,l,s),f(570,l,s),f(571,l,s),f(572,l,s),f(573,l,s),f(574,l,s),f(575,l,s),f(576,l,s),f(577,l,s),f(578,l,s),f(579,l,s),f(580,l,s),f(581,l,s),f(582,l,s),f(583,l,s),f(584,l,s),f(585,l,s),f(586,l,s),f(587,l,s),f(588,l,s),f(589,l,s),f(590,l,s),f(591,l,s),f(592,l,s),f(593,l,s),f(594,l,s),f(595,l,s),f(596,l,s),f(597,l,s),f(598,l,s),f(599,l,s),f(600,l,s)], paths = [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600]],convexity = 10); } module pin() { fastener_male (flange_radius = 5.00, flange_thickness = 2.00, shaft_length = 4.00, shaft_radius = 2.85, hole_radius = 2.35, opening_width = 2.35, $fs = 0.25); } module pinhole() { fastener_female (outer_radius = 5.00, inner_radius = 3.50, thickness = 3.6, $fs = 0.25); } module wobbleRing(teeth) { union() { difference() { difference() { hull() { cylinder(5,teeth+5,teeth+5, $fn=64); translate([teeth+7,0,0]) cylinder(2,6,6); rotate([0,0,120]) {translate([teeth+7,0,0]) cylinder(2,6,6);} rotate([0,0,240]) {translate([teeth+7,0,0]) cylinder(2,6,6);} } union() { translate([0,0,2]) linear_extrude(height = 50) Hypoepicycloid(teeth,.5); translate([teeth+9,0,2]) cylinder(5,7,7); rotate([0,0,120]) {translate([teeth+9,0,2]) cylinder(5,7,7);} rotate([0,0,240]) {translate([teeth+9,0,2]) cylinder(5,7,7);} } } cylinder(50,teeth/2,teeth/2,true); } translate([teeth+9,0,0]) pin(); rotate([0,0,120]) {translate([teeth+9,0,0]) pin();} rotate([0,0,240]) {translate([teeth+9,0,0]) pin();} //translate([teeth+9,0,2.25]) pinhole(); } } module drivenGear(teeth, width) { difference() { union() { linear_extrude(height = width) Hypoepicycloid(teeth, .5); translate([0,0,2]) pin(); } cylinder(.5,.5,.5); } } module basePlate() { difference() { hull() { translate([55,0,0]) cylinder(4,6,6); rotate([0,0,120]) {translate([55,0,0]) cylinder(4,6,6);} rotate([0,0,240]) {translate([55,0,0]) cylinder(4,6,6);} } union() { cylinder(10,3.5,3.5, center = true,$fs=0.25); translate([55,0,0]) cylinder(10,3.5,3.5, center = true,$fs=0.25); rotate([0,0,120]) {translate([55,0,0]) cylinder(10,3.5,3.5, center = true,$fs=0.25);} rotate([0,0,240]) {translate([55,0,0]) cylinder(10,3.5,3.5, center = true,$fs=0.25);} } } } module bellowPiston(stemsize) { difference() { union() { translate([-6,-6,0]) cube(size=[12,12,20]); translate([0,0,20]) rotate([-45,0,0]){cube(size=[12,8.5,8.5],center=true);} translate([4,0,2.5]) rotate([90,0,90]){pin();} translate([0,0,24]) cylinder(10,stemsize,stemsize,$fs=0.25); } difference() { translate([-5,-5,0]) cube(size=[10,10,20]); union() { for ( i = [0 : 10] ){ translate([0,11,i*2]) rotate([-45,0,0]) {cube(size=[10,10,10],center=true);} } for ( i = [0 : 10] ){ translate([0,-11,i*2]) rotate([-45,0,0]) {cube(size=[10,10,10],center=true);} } for ( i = [0 : 10] ){ translate([11,0,i*2+1]) rotate([0,-45,0]) {cube(size=[10,10,10],center=true);} } for ( i = [0 : 10] ){ translate([-11,0,i*2+1]) rotate([0,-45,0]) {cube(size=[10,10,10],center=true);} } } } translate([0,0,-5]) cube(size=[20,20,10],center=true); } translate([-3,-3,0]) cube(size=[6,6,20]); } module bellowLink() { difference() { union() { cylinder(3,5,5,$fs=0.25); hull() { translate([6.5,0,1.5]) cube(size=[6,6,3], center=true); translate([11,0,3]) cube(size=[1,6,6], center=true); } } cylinder(12,3.5,3.5,center=true,$fs=0.25); } } module solenoidLink(sw, sd) { difference() { union() { cylinder(3,5,5,$fs=0.25); hull() { translate([7.5,0,1.5]) cube(size=[8,6,3], center=true); translate([7.5,0,sw/2-1]) rotate([0,90,0]) cylinder(4,3,3,$fs=0.5); } } cylinder(12,3.5,3.5,center=true,$fs=0.25); translate([3.5,0,sw/2-1]) rotate([0,90,0]) cylinder(15,sd/2,sd/2,$fs=0.5); } } module solenoid(length, width, height) { difference() { union() { translate([0,0,height/2]) cube([length+2,width+2, height+1],center=true); translate([length/2-1,0,2.5]) rotate([90,0,90]){pin();} } translate([0,width/2,height-7]) rotate([-30,0,0]) rotate([90,-90,0]) {cylinder(width/2,5,5,$fn=3,center=true);} translate([0,-width/2,height-7]) rotate([30,0,0]) rotate([90,-90,0]) {cylinder(width/2,5,5,$fn=3,center=true);} translate([0,0,height/2 + 1]) cube([length,width, height],center=true); translate([0,0,height/2 - 1]) cube([length/2,width/2, height],center=true); translate([0,0,-10]) cube([2*length,2*width, 20],center=true); translate([0,0,height]) cube([1,width+4, 12],center=true); } } module solenoidTop(sl, sw){ difference() { difference() { translate([0,0,7]) cube([sl+2,sw+4, 14],center=true); translate([0,0,8]) cube([sl+4,sw+2, 14],center=true); translate([0,0,0]) cube([sl/2,sw/2, 12],center=true); } translate([0,0,7]) cube([sl+4,sw, 12],center=true); } difference() { union() { translate([0,sw/2,9]) rotate([30,0,0]) rotate([90,90,0]) {cylinder(6,4.8,4.8,$fn=3,center=true);} translate([0,-sw/2,9]) rotate([-30,0,0]) rotate([90,90,0]) {cylinder(6,4.8,4.8,$fn=3,center=true);} translate([0,0,4]) cube([.6,sw+2, 6],center=true); } translate([0,0,7]) cube([sl+4,sw, 12],center=true); translate([0,sw/2+4,7]) cube([sl+4,4, 12],center=true); translate([0,-sw/2-4,7]) cube([sl+4,4, 12],center=true); } } //To export parts for printing// //////////////////////////////// //bellowPiston(); //bellowLink(); //drivenGear(30,2); //wobbleRing(31); //basePlate(); //solenoid(solenoidLength,solenoidWidth,solenoidHeight); //solenoidLink(solenoidLength, shaftDiameter); //solenoidTop(solenoidLength, solenoidWidth);// //This is the motor once it has been snapped together, minus the glueing// ////////////////////////////////////////////////////////////////////////// basePlate(); translate([0,0,8.5]) rotate([180,0,0]) drivenGear(30, 2); translate([1,0,4.25]) wobbleRing(31); translate([52.5,0,6.1+ solenoidLength/2]) rotate([0,90,0]) solenoid(solenoidLength,solenoidWidth,solenoidHeight); rotate([0,0,120]) {translate([52.5,0,6.1+ solenoidLength/2]) rotate([0,90,0]) solenoid(solenoidLength,solenoidWidth,solenoidHeight);} rotate([0,0,240]) {translate([52.5,0,6.1+ solenoidLength/2]) rotate([0,90,0]) solenoid(solenoidLength,solenoidWidth,solenoidHeight);} translate([41,0,7]) solenoidLink(solenoidLength, shaftDiameter); rotate([0,0,120]) {translate([40,0,7]) solenoidLink(solenoidLength, shaftDiameter);} rotate([0,0,240]) {translate([40,0,7]) solenoidLink(solenoidLength, shaftDiameter);} translate([54 + solenoidHeight,0,6.1+ solenoidLength/2]) rotate([0,-90,0]) solenoidTop(solenoidLength, solenoidWidth); rotate([0,0,120]) {translate([54 + solenoidHeight,0,6.1+ solenoidLength/2]) rotate([0,-90,0]) solenoidTop(solenoidLength, solenoidWidth);} rotate([0,0,240]) {translate([54 + solenoidHeight,0,6.1+ solenoidLength/2]) rotate([0,-90,0]) solenoidTop(solenoidLength, solenoidWidth);}