Add bolts on rotor

This commit is contained in:
Leni Aniva 2025-05-12 12:24:33 -07:00
parent 878d532890
commit 74145f88d2
Signed by: aniva
GPG Key ID: D5F96287843E8DFB
1 changed files with 56 additions and 7 deletions

View File

@ -25,13 +25,17 @@ class Onbashira(Model):
# Size of ball bearings # Size of ball bearings
bearing_ball_diam: float = 25.4 * 1/2 bearing_ball_diam: float = 25.4 * 1/2
bearing_ball_gap: float = .5 bearing_ball_gap: float = .5
bearing_height: float = 40.0 # Thickness of bearing disks
bearing_thickness: float = 20.0 bearing_thickness: float = 20.0
bearing_track_radius: float = 120.0 bearing_track_radius: float = 120.0
# Gap between the inner and outer bearing disks # Gap between the inner and outer bearing disks
bearing_gap: float = 10.0 bearing_gap: float = 10.0
bearing_disk_thickness: float = 25.4 / 8 bearing_disk_thickness: float = 25.4 / 8
rotor_bind_bolt_diam: float = 10.0
rotor_bind_radius: float = 50.0
stator_bind_radius: float = 150.0
material_side: Material = Material.WOOD_BIRCH material_side: Material = Material.WOOD_BIRCH
material_bearing: Material = Material.PLASTIC_PLA material_bearing: Material = Material.PLASTIC_PLA
material_bearing_ball: Material = Material.ACRYLIC_TRANSPARENT material_bearing_ball: Material = Material.ACRYLIC_TRANSPARENT
@ -41,8 +45,9 @@ class Onbashira(Model):
assert self.n_side >= 3 assert self.n_side >= 3
# Bulk must be large enough for the barrel + bearing to rotate # Bulk must be large enough for the barrel + bearing to rotate
assert self.bulk_radius - self.side_thickness - self.bearing_thickness - self.bearing_diam > self.rotation_radius + self.barrel_diam / 2 assert self.bulk_radius - self.side_thickness - self.bearing_thickness - self.bearing_diam > self.rotation_radius + self.barrel_diam / 2
assert self.bearing_height > self.bearing_diam
assert self.bearing_gap < 0.95 * self.bearing_ball_diam assert self.bearing_gap < 0.95 * self.bearing_ball_diam
assert self.rotor_bind_bolt_diam < self.rotor_bind_radius < self.bearing_track_radius
assert self.bearing_track_radius < self.stator_bind_radius
@property @property
def angle_side(self) -> float: def angle_side(self) -> float:
@ -62,6 +67,9 @@ class Onbashira(Model):
@property @property
def bearing_disk_gap(self) -> float: def bearing_disk_gap(self) -> float:
"""
Gap between two bearing disks to touch the bearing balls
"""
diag = self.bearing_ball_diam diag = self.bearing_ball_diam
dx = self.bearing_gap dx = self.bearing_gap
return math.sqrt(diag ** 2 - dx ** 2) return math.sqrt(diag ** 2 - dx ** 2)
@ -72,6 +80,12 @@ class Onbashira(Model):
Cq.Sketch() Cq.Sketch()
.regularPolygon(self.side_width, self.n_side) .regularPolygon(self.side_width, self.n_side)
.circle(self.bearing_track_radius + self.bearing_gap/2, mode="s") .circle(self.bearing_track_radius + self.bearing_gap/2, mode="s")
.reset()
.regularPolygon(
self.stator_bind_radius, self.n_side,
mode="c", tag="bolt")
.vertices(tag="bolt")
.circle(self.rotor_bind_bolt_diam/2, mode="s")
) )
def bearing_stator(self) -> Cq.Workplane: def bearing_stator(self) -> Cq.Workplane:
return ( return (
@ -81,12 +95,22 @@ class Onbashira(Model):
) )
@target(name="bearing-rotor", kind=TargetKind.DXF) @target(name="bearing-rotor", kind=TargetKind.DXF)
def profile_bearing_rotor(self) -> Cq.Sketch: def profile_bearing_rotor(self) -> Cq.Sketch:
bolt_angle = 180 / self.n_side
return ( return (
Cq.Sketch() Cq.Sketch()
.circle(self.bearing_track_radius - self.bearing_gap/2) .circle(self.bearing_track_radius - self.bearing_gap/2)
.regularPolygon(self.rotation_radius, self.n_side) .reset()
.vertices() .regularPolygon(
self.rotation_radius, self.n_side,
mode="c", tag="corners")
.vertices(tag="corners")
.circle(self.barrel_diam/2, mode="s") .circle(self.barrel_diam/2, mode="s")
.reset()
.regularPolygon(
self.rotor_bind_radius, self.n_side,
mode="c", tag="bolt", angle=bolt_angle)
.vertices(tag="bolt")
.circle(self.rotor_bind_bolt_diam/2, mode="s")
) )
def bearing_rotor(self) -> Cq.Workplane: def bearing_rotor(self) -> Cq.Workplane:
return ( return (
@ -96,7 +120,25 @@ class Onbashira(Model):
) )
@target(name="bearing-gasket", kind=TargetKind.DXF) @target(name="bearing-gasket", kind=TargetKind.DXF)
def profile_bearing_gasket(self) -> Cq.Sketch: def profile_bearing_gasket(self) -> Cq.Sketch:
pass dr = self.bearing_ball_diam
eps = 0.05
return (
Cq.Sketch()
.circle(self.bearing_track_radius + dr)
.circle(self.bearing_track_radius - dr, mode="s")
.reset()
.regularPolygon(
self.bearing_track_radius, self.n_bearing_balls,
mode="c", tag="corners")
.vertices(tag="corners")
.circle(self.bearing_ball_diam/2 * (1+eps), mode="s")
)
def bearing_gasket(self) -> Cq.Workplane:
return (
Cq.Workplane()
.placeSketch(self.profile_bearing_gasket())
.extrude(self.bearing_disk_thickness)
)
@target(name="pipe", kind=TargetKind.DXF) @target(name="pipe", kind=TargetKind.DXF)
@ -138,7 +180,7 @@ class Onbashira(Model):
return Cq.Solid.makeSphere(radius=self.bearing_ball_diam/2, angleDegrees1=-90) return Cq.Solid.makeSphere(radius=self.bearing_ball_diam/2, angleDegrees1=-90)
def assembly_rotor(self) -> Cq.Assembly: def assembly_rotor(self) -> Cq.Assembly:
z_lower = -self.bearing_disk_gap - self.bearing_disk_thickness z_lower = -self.bearing_disk_gap/2 - self.bearing_disk_thickness
a = ( a = (
Cq.Assembly() Cq.Assembly()
.addS( .addS(
@ -169,6 +211,13 @@ class Onbashira(Model):
role=Role.ROTOR, role=Role.ROTOR,
loc=Cq.Location(0, 0, z_lower) loc=Cq.Location(0, 0, z_lower)
) )
.addS(
self.bearing_gasket(),
name="gasket",
material=self.material_bearing,
role=Role.ROTOR,
loc=Cq.Location(0, 0, -self.bearing_disk_thickness/2)
)
) )
for i in range(self.n_bearing_balls): for i in range(self.n_bearing_balls):
ball = self.bearing_ball() ball = self.bearing_ball()
@ -186,7 +235,7 @@ class Onbashira(Model):
a = Cq.Assembly() a = Cq.Assembly()
side = self.side_panel() side = self.side_panel()
r = self.bulk_radius r = self.bulk_radius
a = a.add(self.assembly_bearing(), name="bearing") a = a.add(self.assembly_rotor(), name="rotor")
for i in range(self.n_side): for i in range(self.n_side):
a = a.addS( a = a.addS(
side, side,