Ball-on-Beam: Part A Status

ME440 / AER440 Project 1, Fall 2026

Michael Raba

Part A due Oct 20

Created: 2026-10-13 Tue 08:37

Why we’re here

The goal today

  • Get all four of us on the same page for Part A
  • Part A is a PDF, due Oct 20
  • 15 minutes, then we split the work

Part A deliverables (from the spec)

# Deliverable Status
1 Derivation of the nominal dynamics math done, text not written
2 Rough design + reasoning + nominal vs. actual discussion design done, text not written
3 Detailed design drawing / schematic CAD + wiring done
4 Parts list with links needs servo decision

What I’ve done so far

  • Wiring schematic (Python, schemdraw)
  • Full 3D assembly (Rhino script plus OBJ), built around the pivot files
  • Checked clearances over the full tilt range
  • Ordered most of the parts
  • Not done yet: the actual written PDF. That’s the group work.

The system

What we’re building

  • Ball on a 300 mm beam, balanced by tilting the beam about a center pivot
  • Sensor: VL53L1X time-of-flight (TOF400C board), measures ball position
  • Actuator: hobby servo plus a linkage
  • Controller: Arduino Mega 2560, driven from Simulink
  • Goal: hold the ball at a setpoint and reject disturbances

Why a center pivot

  • Beam is balanced about its middle, so the servo only fights friction and ball torque, not beam weight
  • Symmetric: same dynamics either direction
  • Simple, linear-ish small-angle model
  • Tradeoff: the linkage has to reach out to a point on the beam (130 mm from pivot)

Assembly (CAD)

ball_on_beam_assembly_preview.png

Level and +10° tilt, oblique and side views.

Assembly (interactive 3D)

Drag to rotate, scroll to zoom. Level (0°) pose.

Layout at a glance

Part Value
Beam 300 mm, two 4 mm rails, 16 mm apart
Ball 25.4 mm (1") steel ball, R = 12.7 mm
Tilt range ±10° (my assumption, not in the spec)
Servo horn 32 mm
Rod about 33 mm, joint 130 mm from pivot
Servo to beam ratio about 4:1 (horn angle : beam angle)

Part A.1: Nominal dynamics

The model in one slide

For a solid sphere rolling without slipping:

\[ \ddot{x} = \frac{5}{7}\, g \sin\theta \]

Small angle, \( \sin\theta \approx \theta \):

\[ \frac{X(s)}{\Theta(s)} \approx \frac{(5/7)\,g}{s^{2}} \]

  • A double integrator: no damping, no restoring force
  • Open loop it is unstable, so we need feedback (PID)
  • Servo treated as instantaneous: \( \theta = K \cdot \text{PWM} \)

Where 5/7 comes from

  • Energy: \( \tfrac12 m v^2 + \tfrac12 I \omega^2 \) with \( I = \tfrac25 m R^2 \), \( v = \omega R \)
  • Gives \( \ddot{x} = \dfrac{g \sin\theta}{1 + I/(mR^2)} = \dfrac{g\sin\theta}{1.4} \)
  • \( 1/1.4 = 5/7 \approx 0.714 \)

Assumptions to state in the report

  • Ball is a solid, uniform sphere
  • Rolls without slipping
  • Small angles
  • Servo is zero-order (no dynamics)
  • Beam inertia ignored (center pivot, servo holds the angle)
  • No friction or drag

Part A.2: Reality vs. nominal

Where the real system differs

Effect Nominal Real
Ball on two rails 0.714 g sinθ 0.638 g sinθ (about 11% lower)
Servo gain ideal unknown K, small deadband
Linkage linear about 10% non-linear over ±10°
Slop / backlash none joints and pivot
Friction none bearings, rolling resistance
Sensor exact noise, cone clips the stop

Rails reduce the acceleration

  • Ball sits on two rails, so it rolls on a smaller effective radius
  • \( r_{eff} = R\sqrt{1 - \left(\frac{s/2}{R + r}\right)^2} = 10.65\ \text{mm} \)
  • With R = 12.7 mm, rail radius 2 mm, spacing 16 mm

\[ \ddot{x} = \frac{g\sin\theta}{1 + 0.4\,(R/r_{eff})^2} = 0.638\, g\sin\theta \]

  • The plant gain is about 11% lower than nominal
  • We can measure this and compare in Part B

Linkage non-linearity

  • Horn 32 mm, rod 33 mm, rod joint 130 mm out
  • ±10° beam gives horn angles of roughly -42.9° to +46.7°
  • About 10% asymmetry, so beam angle is not exactly linear in command
  • Fix: calibrate with a lookup or a fitted polynomial

Backlash and slop

  • Slop at the beam is the joint slop divided by the lever ratio
  • Long beam lever (130 mm) vs. short horn (32 mm) helps us
  • A preload spring keeps the joints loaded one way, so there’s no rattle
  • Plain bearings at the pivot instead of a printed hole

The sensor has issues

  • VL53L1X minimum range about 40 mm; our closest ball surface is 47 mm. OK
  • Field of view is a 27° cone. It clips the end stop and rails
    • Plan: narrow the ROI in the sensor config
  • Chrome ball may reflect poorly
    • Plan: matte tape, or test first
  • Check the TOF400C is 5 V tolerant before wiring to 5 V

Part A.3: Design

Wiring

ball_on_beam_schematic.svg

(Generated by ball_on_beam_schematic.py with schemdraw; put the SVG next to this file.)

Pinout

Signal From To (Arduino Mega)
ToF VIN sensor 5V
ToF GND sensor GND
ToF SDA sensor pin 20
ToF SCL sensor pin 21
Servo signal servo pin 9 (PWM)
Servo power bench supply 5 V servo, not Arduino 5V
Common ground supply (-) Arduino GND

Rule: servo power from the bench supply, grounds tied together.

Center pivot assembly

  • M5 shoulder bolt, two MR106ZZ bearings (6x10x3), spacer sleeve, M5 nylon-lock nut
  • Bearing choice: ordered plain MR106ZZ, so I redrew the hub for plain bearings
  • They sit 0.8 mm proud of the hub faces
  • Nylon-lock nut: tight enough to remove play, not tight enough to bind

pivot_flanged_vs_plain.png

Clearance check (full ±10° sweep)

Pair Min gap
Horn to servo body 1.00 mm
Spine to uprights 1.30 mm
Rails to uprights 1.32 mm
Ball to uprights 3.7 mm

All positive, so nothing collides. The tight ones are the first to check on the real build.

Parts and money

Already ordered

  • MR106ZZ bearings
  • KY-040 rotary encoder with knob
  • Arduino Mega and VL53L1X (TOF400C): confirm ordered or on hand
  • Anything else from the order screenshots

Still missing

Item Status
Servo not chosen
Spacer sleeve (7 / 6.1 mm, 15.6 long) to buy or make
M3 hardware for the servo/linkage to buy
Servo power leads / connector to buy
Small consumables (tape, wire, shims) to buy

Servo decision

Option Price Notes
Hitec HS-5645MG $59.96 strongest of the three
Savox micro $38.13 middle
Hitec HS-5055MG $29.99 cheapest, enough for the load
  • The load is tiny: a ball and a light beam
  • Or ask the instructor whether one can be checked out
  • Need a decision from the group today

Do we need the LCD and encoder?

  • Original thought: tune P, I, D on a knob and show it on an LCD
  • But we control from Simulink, where gains are tuned on screen
  • Probably not needed; the encoder is cheap, the LCD is returnable
  • Suggest: skip the LCD, keep the encoder as a nice-to-have

Open items and next steps

Things I’m unsure of

  • ±10° tilt is my choice. Spec doesn’t give a range
  • Rhino script untested inside Rhino (the OBJ export works)
  • Tube length and OD, shoulder-bolt size and shim thickness: verify against what arrives
  • ToF cone clips the stop: needs a test
  • Design sheet BOM predates the new assembly. I’ll update it

Who does what

Task Owner
Dynamics derivation write-up  
Nominal vs. actual discussion  
Parts list with links, final servo pick  
Figures: CAD, schematic, clearance table Michael
Proofread, assemble PDF  

Fill the Owner column in the meeting.

Timeline

Date Milestone
Oct 13 This meeting: assign owners, pick servo
Oct 15 Drafts of each section
Oct 17 Merge and review
Oct 19 Final PDF
Oct 20 Part A due

Decisions needed before we leave

  1. Which servo? (my vote: the $30 Hitec 5055MG)
  2. Drop the LCD?
  3. Who writes which section?
  4. Confirm ±10° tilt range

Thanks

Questions?

  • Everything (scripts, CAD, schematic) is in the shared folder
  • Dynamics sections: start from the “Part A.1” slides