From a3288ce98f901b6af67ac0510048a4c220c6e618 Mon Sep 17 00:00:00 2001 From: Leni Aniva Date: Thu, 29 May 2025 01:19:19 -0700 Subject: [PATCH] Spindle geometry --- nhf/touhou/yasaka_kanako/onbashira.py | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/nhf/touhou/yasaka_kanako/onbashira.py b/nhf/touhou/yasaka_kanako/onbashira.py index c2c631b..c7e23ce 100644 --- a/nhf/touhou/yasaka_kanako/onbashira.py +++ b/nhf/touhou/yasaka_kanako/onbashira.py @@ -32,8 +32,12 @@ BOLT_COMMON = FlatHeadBolt( pitch=1.0, ) -@dataclass + +@dataclass(frozen=True) class Motor(Model): + """ + Drive motor for the main barrel + """ mass: float = 589.7 voltage: float = 12.0 # V @@ -133,6 +137,8 @@ class Onbashira(Model): barrel_wall_thickness: float = 25.4 / 8 barrel_length: float = 25.4 * 12 + # Gap between the stator edge and the inner face of the barrel + stator_gap: float = 10.0 # Radius from barrel centre to axis rotation_radius: float = 66.0 n_bearing_balls: int = 12 @@ -144,11 +150,12 @@ class Onbashira(Model): bearing_track_radius: float = 100.0 # Gap between the inner and outer bearing disks bearing_gap: float = 10.0 + bearing_spindle_max_diam: float = 13.0 bearing_disk_thickness: float = 25.4 / 8 rotor_inner_radius: float = 40.0 rotor_bind_bolt_diam: float = BOLT_COMMON.diam_thread - rotor_bind_radius: float = 78.0 + rotor_bind_radius: float = 82.0 rotor_spacer_outer_diam: float = 15.0 stator_bind_radius: float = 135.0 @@ -157,6 +164,8 @@ class Onbashira(Model): handle_length: float = 80.0 handle_height: float = 40.0 + motor: Motor = Motor() + material_side: Material = Material.WOOD_BIRCH material_bearing: Material = Material.PLASTIC_PLA material_spacer: Material = Material.PLASTIC_PLA @@ -357,6 +366,28 @@ class Onbashira(Model): ) return outer - inner + @target(name="bearing-spindle") + def bearing_spindle(self) -> Cq.Solid: + r1 = self.bearing_gap / 2 + r2 = self.bearing_spindle_max_diam + h = self.bearing_disk_gap + cone1 = Cq.Solid.makeCone( + radius1=r2, + radius2=r1, + height=h/2 + ) + cone2 = Cq.Solid.makeCone( + radius1=r1, + radius2=r2, + height=h/2, + ) + hole = Cq.Solid.makeCylinder( + radius=(BOLT_COMMON.diam_thread + 1)/2, + height=h*2 + ).moved(0, 0, -h) + top = (cone1 + cone2.moved(0, 0, h/2)) - hole + return top + top.rotate((0,0,0),(1,0,0),180) + def assembly_barrel(self) -> Cq.Assembly: """ The assembly with gun barrels