# No. 162 (Brown 1868): water-wheel governor. Generator: opencode-runs/batch11/gen162.py (built on gen161.py, No. 161's governor).
number: 162
slug: water-wheel-governor
name: Water-wheel governor
brown: Water-wheel governor ... The two bevel-gears on the lower part of the center spindle, which are furnished with studs, are fitted loosely to the said spindle ... the balls, flying further out, draw up the pin ... causes that gear to rotate with the spindle ...
units: cm
sim: {timestep: 0.0002, integrator: implicitfast, iterations: 100, solver: PGS, multiccd: true, duration_s: 10.0, floor: false}
bodies:
- id: shaft
  shape: part
  pos: [0, 0, 0]
  mass: 0.4
  color: '#e4d9bf'
  pieces:
  - {kind: rod, from: [0, 0, 1.4], to: [0, 0, 38.0], radius: 0.8, collide: 0}
  - {kind: rod, from: [0, 0, 33.0], to: [0, 0, 35.4], radius: 1.6, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [-1.5, 0, 34.0], to: [1.5, 0, 34.0], radius: 0.5, collide: 0, color: '#8f8a80'}
- id: sleeve
  shape: part
  pos: [0, 0, 18.4926]
  mount: shaft
  mass: 0.2
  color: '#b8ad97'
  pieces:
  - {kind: rod, from: [0, 0, 17.2926], to: [0, 0, 19.6926], radius: 1.4, collide: 0}
  - {kind: rod, from: [-1.0, 0, 18.4926], to: [1.0, 0, 18.4926], radius: 0.5, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [0, 0, 7.0], to: [0, 0, 17.2926], radius: 1.0, collide: 0}
  - {kind: rod, from: [1.0, 0, 7.6], to: [3.0, 0, 7.6], radius: 0.3, collide: 2, capsule: true, color: '#6f6a60'}
- id: arm_r
  shape: part
  pos: [1.2, 0, 34.0]
  mount: shaft
  mass: 0.4
  color: '#a89a7e'
  pieces:
  - {kind: rod, from: [1.2, 0.0, 34.0], to: [7.1167, 0.0, 21.3117], radius: 0.35, collide: 0, color: '#a89a7e'}
  - {kind: rod, from: [7.1167, -1.3, 21.3117], to: [7.1167, 1.3, 21.3117], radius: 2.0, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [1.2, -1.0, 34.0], to: [1.2, 1.0, 34.0], radius: 0.7, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [4.5809, -0.9, 26.7495], to: [4.5809, -0.5, 26.7495], radius: 0.5, collide: 0, color: '#8f8a80'}
- id: arm_l
  shape: part
  pos: [-1.2, 0, 34.0]
  mount: shaft
  mass: 0.4
  color: '#a89a7e'
  pieces:
  - {kind: rod, from: [-1.2, 0.0, 34.0], to: [-7.1167, 0.0, 21.3117], radius: 0.35, collide: 0, color: '#a89a7e'}
  - {kind: rod, from: [-7.1167, -1.3, 21.3117], to: [-7.1167, 1.3, 21.3117], radius: 2.0, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [-1.2, -1.0, 34.0], to: [-1.2, 1.0, 34.0], radius: 0.7, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [-4.5809, -0.9, 26.7495], to: [-4.5809, -0.5, 26.7495], radius: 0.5, collide: 0, color: '#8f8a80'}
- id: link_r
  shape: part
  pos: [1.0, 0, 18.4926]
  mount: sleeve
  mass: 0.03
  color: '#b8ad97'
  pieces:
  - {kind: rod, from: [1.0, -0.9, 18.4926], to: [4.5809, -0.9, 26.7495], radius: 0.3, collide: 0, color: '#b8ad97'}
  - {kind: rod, from: [1.0, -1.2, 18.4926], to: [1.0, -0.6, 18.4926], radius: 0.5, collide: 0, color: '#8f8a80'}
- id: link_l
  shape: part
  pos: [-1.0, 0, 18.4926]
  mount: sleeve
  mass: 0.03
  color: '#b8ad97'
  pieces:
  - {kind: rod, from: [-1.0, -0.9, 18.4926], to: [-4.5809, -0.9, 26.7495], radius: 0.3, collide: 0, color: '#b8ad97'}
  - {kind: rod, from: [-1.0, -1.2, 18.4926], to: [-1.0, -0.6, 18.4926], radius: 0.5, collide: 0, color: '#8f8a80'}
- id: gearU
  shape: part
  pos: [0, 0, 9.0]
  density: 2700.0
  friction: 0.15
  color: '#e8dec6'
  pieces:
  - {kind: rod, from: [0, 0, 13.0], to: [0, 0, 13.8], radius: 3.8, collide: 0}
  - {kind: rod, from: [0, 0, 13.8], to: [0, 0, 16.4], radius: 1.5, collide: 0}
  - {kind: rod, from: [1.7591, 1.4817, 10.6], to: [1.7591, 1.4817, 13.0], radius: 0.3, collide: 1, capsule: true, color: '#6f6a60'}
- id: gearL
  shape: part
  pos: [0, 0, 9.0]
  density: 2700.0
  friction: 0.15
  color: '#e2d8bf'
  pieces:
  - {kind: rod, from: [0, 0, 4.2], to: [0, 0, 5.0], radius: 3.8, collide: 0}
  - {kind: rod, from: [0, 0, 1.6], to: [0, 0, 4.2], radius: 1.5, collide: 0}
  - {kind: rod, from: [1.7591, 1.4817, 6.3], to: [1.7591, 1.4817, 5.0], radius: 0.3, collide: 1, capsule: true, color: '#6f6a60'}
- id: gearH
  shape: part
  pos: [0, 0, 9.0]
  density: 2700.0
  color: '#d9cfb6'
  pieces:
  - {kind: rod, from: [4.0, 0, 9.0], to: [7.4, 0, 9.0], radius: 1.5, collide: 0}
  - {kind: rod, from: [7.4, 0, 9.0], to: [24.0, 0, 9.0], radius: 0.6, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [20.0, -0.6, 9.0], to: [20.0, -0.6, 4.0], radius: 0.5, collide: 0, color: '#a89a7e'}
- id: frame
  shape: part
  pos: [0, 0, 0]
  fixed: true
  color: '#cfc6b4'
  pieces:
  - kind: poly
    points:
    - [-9.0, -4.6]
    - [26.0, -4.6]
    - [26.0, -3.2]
    - [-9.0, -3.2]
    y: [-4, 4]
    collide: 0
    color: '#b9b09c'
  - {kind: rod, from: [0, 0, -3.2], to: [0, 0, 1.4], radius: 1.6, collide: 0, color: '#8f8a80'}
  - {kind: rod, from: [0, 2.4, -3.2], to: [0, 2.4, 40.0], radius: 0.7, collide: 0}
  - {kind: rod, from: [12.0, 0, -3.2], to: [12.0, 0, 9.0], radius: 0.7, collide: 0}
  - {kind: rod, from: [12.0, -0.8, 9.0], to: [12.0, 0.8, 9.0], radius: 1.0, collide: 0, color: '#8f8a80'}
joints:
- {id: j_s, type: hinge, body: shaft, axis: [0, 0, 1], damping: 0.002}
- {id: j_r, type: hinge, body: arm_r, axis: [0, -1, 0], damping: 0.02}
- {id: j_l, type: hinge, body: arm_l, axis: [0, 1, 0], damping: 0.02}
- {id: j_z, type: slide, body: sleeve, axis: [0, 0, 1], range: [-3, 4.2], stiffness: 0.0, springref: 0, damping: 3.0}
- {id: j_lr, type: hinge, body: link_r, axis: [0, 1, 0], damping: 0.0005}
- {id: j_ll, type: hinge, body: link_l, axis: [0, 1, 0], damping: 0.0005}
- {id: j_U, type: hinge, body: gearU, axis: [0, 0, 1], damping: 0.0005}
- {id: j_L, type: hinge, body: gearL, axis: [0, 0, 1], damping: 0.0005}
- {id: j_H, type: hinge, body: gearH, axis: [1, 0, 0], damping: 0.0006, frictionloss: 0.03}
pins:
- {id: pin_r, a: link_r, b: arm_r, at: [4.5809, 0, 26.7495]}
- {id: pin_l, a: link_l, b: arm_l, at: [-4.5809, 0, 26.7495]}
contact: {solref: [0.002, 1.0], solimp: [0.95, 0.99, 0.0005], margin: 0}
driver: {joint: j_s, kind: velocity, rpm: 120.0, kv: 1.0, max_torque: 0.08}
checks:
- {type: ratio, out: j_L, in: j_s, expect: 1.0, tol: 0.03, settle_s: 0.3, window_s: 0.9}
- {type: ratio, out: j_H, in: j_s, expect: 1.0, tol: 0.03, settle_s: 0.3, window_s: 0.9}
- {type: position, joint: j_z, min: 1.0, max: 3.6, settle_s: 2.2, window_s: 0.8}
- {type: position, joint: j_H, min: 11.1, max: 11.35, settle_s: 2.2, window_s: 0.8}
- {type: position, joint: j_z, min: 3.0, max: 4.25, settle_s: 5.0, window_s: 4.8}
- {type: ratio, out: j_U, in: j_s, expect: 1.0, tol: 0.03, settle_s: 5.0, window_s: 4.8}
- {type: ratio, out: j_H, in: j_s, expect: -1.0, tol: 0.03, settle_s: 5.0, window_s: 4.8}
- {type: penetration, max: 0.0015, settle_s: 0.5}
camera: {target: [7.0, 0, 16.0], position: [7.0, -125.0, 16.0], fov: 34}
display:
  output: j_H
  labels: {j_s: Spindle (driver), j_z: Sleeve and pin, j_U: Upper bevel (loose), j_L: Lower bevel (loose), j_H: Lower horizontal shaft (to the gate)}
  proof: {label: Pin out of contact, sub: the balls fly out but neither bevel is taken up}
bevels:
- {id: gU, body: gearU, phase: 0.0, quat: [0.5, 0.5, 0.5, 0.5], teeth: 20, pitch_radius: 6, cone_angle: 0.7853982, face_width: 2.4, backlash: 0.05, density: 2700.0}
- {id: gL, body: gearL, phase: 0.0, quat: [-0.5, 0.5, -0.5, 0.5], teeth: 20, pitch_radius: 6, cone_angle: 0.7853982, face_width: 2.4, backlash: 0.05, density: 2700.0}
- {id: gH, body: gearH, phase: 0.1570796, quat: [0.0, 0.7071068, 0.7071068, 0.0], teeth: 20, pitch_radius: 6, cone_angle: 0.7853982, face_width: 2.4, backlash: 0.05, density: 2700.0}

