number: 320
slug: endless-chain-maintaining-power
name: Endless Chain Maintaining Power
brown: "Endless chain, maintaining power on going-barrel, to keep a clock going while winding, during which operation the action of the weight or main-spring is taken off the barrel. The wheel to the right is the “going-wheel,” and that to the left the “striking-wheel.” P is a pulley fixed to the great wheel of the going part, and roughened, to prevent a rope or chain hung over it from slipping. A similar pulley rides on another arbor, p, which may be the arbor of the great wheel of the striking part, and attached by a ratchet and click to that wheel, or to clock-frame, if there is no striking part. The weights are hung, as may be seen, the small one being only large enough to keep the rope or chain on the pulleys. If the part, b, of the rope or chain is pulled down, the ratchet-pulley runs under the click, and the great weight is pulled up by c, without taking its pressure off the going-wheel at all."
units: cm
sim: {timestep: 0.0001, integrator: implicitfast, iterations: 30, duration_s: 6.0}
bodies:
  - id: frame
    shape: part
    pos: [0, 0, 0]
    fixed: true
    color: "#cfc6b4"
    pieces:
      - {kind: poly, points: [[-18, 11.4], [18, 11.4], [18, 12.6], [-18, 12.6]], y: [1.4, 3.0], color: "#b9b09c"}
      - {kind: poly, points: [[-10.6, 0], [-9.4, 0], [-9.4, 11.4], [-10.6, 11.4]], y: [1.4, 2.2]}
      - {kind: poly, points: [[9.4, 0], [10.6, 0], [10.6, 11.4], [9.4, 11.4]], y: [1.4, 2.2]}
      - {kind: rod, from: [-10.0, -2.4, 0], to: [-10.0, 2.2, 0], radius: 0.35, color: "#8f8a80"}
      - {kind: rod, from: [10.0, -1.4, 0], to: [10.0, 2.2, 0], radius: 0.35, color: "#8f8a80"}
      - {kind: rod, from: [-10.8384, -2.1, 9.4331], to: [-10.8384, 2.2, 9.4331], radius: 0.2, color: "#8f8a80"}
      - {kind: poly, points: [[-11.2384, 9.4331], [-10.4384, 9.4331], [-10.4384, 11.4], [-11.2384, 11.4]], y: [1.4, 2.2]}
  # p: the ratchet-pulley on its arbor (an assembly: the grooved pulley and the ratchet keyed together)
  - {id: parbor, shape: assembly, pos: [-10.0, 0, 0], color: "#e6dcc6"}
  - id: ratchet
    shape: part
    pos: [-10.0, 0, 0]
    mount: parbor
    fixed: true
    color: "#d9cfb6"
    pieces:
      - {kind: poly, points: [[-5.0000, 0.0000], [-5.6699, 2.5000], [-3.4000, 0.0000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-5.6699, 2.5000], [-7.5000, 4.3301], [-4.2842, 3.3000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-7.5000, 4.3301], [-10.0000, 5.0000], [-6.7000, 5.7158]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-10.0000, 5.0000], [-12.5000, 4.3301], [-10.0000, 6.6000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-12.5000, 4.3301], [-14.3301, 2.5000], [-13.3000, 5.7158]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-14.3301, 2.5000], [-15.0000, -0.0000], [-15.7158, 3.3000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-15.0000, 0.0000], [-14.3301, -2.5000], [-16.6000, 0.0000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-14.3301, -2.5000], [-12.5000, -4.3301], [-15.7158, -3.3000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-12.5000, -4.3301], [-10.0000, -5.0000], [-13.3000, -5.7158]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-10.0000, -5.0000], [-7.5000, -4.3301], [-10.0000, -6.6000]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-7.5000, -4.3301], [-5.6699, -2.5000], [-6.7000, -5.7158]], y: [-2.1, -1.3], collide: 1}
      - {kind: poly, points: [[-5.6699, -2.5000], [-5.0000, 0.0000], [-4.2842, -3.3000]], y: [-2.1, -1.3], collide: 1}
      - {kind: disc, center: [-10.0, 0], radius: 5.05, inner: 0.6, y: [-2.1, -1.3]}
  - id: click
    shape: part
    pos: [-10.8384, 0, 9.4331]
    friction: 0.1
    color: "#6b5a44"
    pieces:
      - {kind: poly, points: [[-11.1712, 9.5412], [-12.4667, 4.7048], [-12.3002, 4.6507], [-10.5055, 9.3249]], y: [-2.0, -1.4], collide: 2}
      - {kind: disc, center: [-10.8384, 9.4331], radius: 0.6, inner: 0.2, y: [-2.0, -1.4]}
  # P: the going pulley, fixed to the great wheel of the going part (roughened)
  - {id: P, shape: pulley, radius: 4.5, width: 2, pos: [10.0, 0, 0], mass: 0.6, spokes: 4, hub: 0.9, flange: 0.4, color: "#e6dcc6"}
  # the great weight's block on its plumb guide, its sheave and the weight
  - {id: Wblock, shape: part, pos: [0, 0, -14.0], mass: 0.3, color: "#b8ac92",
     pieces: [{kind: rod, from: [0, 0, -14.0], to: [0, 0, -19.9], radius: 0.45, collide: 0}]}
  - {id: Wsheave, shape: pulley, radius: 4.7, width: 1.8, pos: [0, 0, -14.0], mass: 0.3, spokes: 0, hub: 1.0, flange: 0.4, mount: Wblock, color: "#e6dcc6"}
  - {id: Wbag, shape: weight, pos: [0, 0, -21.9], mass: 4.0, size: [2.4, 2.4, 2.6], taper: 0.3, mount: Wblock, color: "#9c8462"}
  # the small weight, only enough to keep the chain on the pulleys
  - {id: sblock, shape: part, pos: [0, 0, -38.0], mass: 0.05, color: "#b8ac92",
     pieces: [{kind: rod, from: [0, 0, -38.0], to: [0, 0, -43.3], radius: 0.3, collide: 0}]}
  - {id: ssheave, shape: pulley, radius: 4.5, width: 1.6, pos: [0, 0, -38.0], mass: 0.1, spokes: 0, hub: 0.7, flange: 0.35, mount: sblock, color: "#e6dcc6"}
  - {id: sbag, shape: weight, pos: [0, 0, -44.5], mass: 0.5, size: [1.2, 1.2, 1.3], taper: 0.3, mount: sblock, color: "#b6a077"}
  # the hand pulling the part b of the chain down along its strand
  - id: hand
    shape: grip
    pos: [-12.6984, 0, -9.0000]
    mass: 0.3
    color: "#c9bda2"
    rods:
      - {from: [-12.9020, 0, -8.2263], to: [-12.4948, 0, -9.7737], radius: 1.1}
      - {from: [-12.4948, 0, -9.7737], to: [-17.1984, 0, -11.4000], radius: 0.8}
wheels:
  - {id: p, body: parbor, pos: [0, 0, 0], radius: 4.5, width: 2, mass: 0.6, spokes: 4, hub: 0.9, flange: 0.4, color: "#e6dcc6"}
joints:
  - {id: j_hand, type: slide, body: hand, axis: [0.2545, 0, -0.9671], range: [-2, 30]}
  - {id: j_p, type: hinge, body: parbor, axis: [0, -1, 0], damping: 0.002}   # +: counter-clockwise as seen
  - {id: j_click, type: hinge, body: click, axis: [0, -1, 0], damping: 0.0005, range: [-0.6, 0], stiffness: 0.3, springref: 0.3}
  - {id: j_P, type: hinge, body: P, axis: [0, -1, 0], damping: 8.0}   # the going train's load on the great wheel
  - {id: j_W, type: slide, body: Wblock, axis: [0, 0, 1], range: [-12, 9]}
  - {id: j_Ws, type: hinge, body: Wsheave, axis: [0, -1, 0], damping: 0.002}
  - {id: j_s, type: slide, body: sblock, axis: [0, 0, 1], range: [-14, 12]}
  - {id: j_ss, type: hinge, body: ssheave, axis: [0, -1, 0], damping: 0.002}
cords:
  - id: chain
    from: {body: hand, at: [-12.6984, 0, -9.0000]}
    to: {body: hand, at: [-12.6984, 0, -9.0000]}
    over: [p, Wsheave, P, ssheave]
    under: [Wsheave]
    links: 120
    thickness: 0.8
    density: 7800.0
    stiffness: 400000
    pretension: 25
    damping: 12
    friction: 0.8
contact: {solref: [0.0005, 1], solimp: [0.98, 0.999, 0.0001], margin: 0}
driver: {joint: j_hand, kind: velocity, speed: 2.0, kv: 60000, max_torque: 400}
checks:
  # The ratchet-pulley p turns with the part b of the chain the hand draws down over it: 1/r at the
  # chain's centre-line (4.9 cm), 20.4 rad per metre of hand, counter-clockwise, under the click.
  - {type: ratio, out: j_p, in: j_hand, expect: 20.41, tol: 0.9, settle_s: 1.0, window_s: 4.5}
  # The great weight is pulled up by c at half the speed of b, less half the going pulley's own
  # take-off: (2.0 - 0.54)/2 = 0.73 cm/s for each 2 cm/s of hand.
  - {type: ratio, out: j_W, in: j_hand, expect: 0.36, tol: 0.035, settle_s: 1.0, window_s: 4.5}
  - {type: position, joint: j_W, min: 1.5, max: 4.0, settle_s: 5.0, window_s: 0.9}
  # Brown's point: the weight's pressure is never taken off the going wheel, so P keeps turning
  # forward the whole time the hand winds.
  - {type: turning, joint: j_P, direction: 1, min_mean: 0.08, min_fraction: 0.9, settle_s: 0.5, window_s: 5.4}
  # the ratchet runs under the click: it is lifted by each tooth and falls back
  - {type: clicks, joint: j_click, lift: 0.15, min: 3, settle_s: 0.5, window_s: 5.4}
  - {type: monotonic, joint: j_p, direction: 1, max_back: 0.02, settle_s: 0.5, window_s: 5.4}
  - {type: penetration, max: 0.0008, settle_s: 0.2}
camera: {target: [0, 0, -31.6], position: [0, -184, -29.6], fov: 30}
display:
  output: j_W
  labels: {j_hand: Hand pulling b (driver), j_p: Ratchet-pulley p, j_click: Click, j_P: Going pulley P, j_W: Great weight, j_s: Small weight}

