Inspiration

We wanted to build a system that demonstrates controls in a physical and intuitive way. The ball and platform problem is a classic unstable system that clearly shows how feedback controls can stabilize motion. Since it would be rather difficult for a person to accomplish the task, watching the ball respond in real time as a robot made control theory feel tangible rather than abstract.

What it does

Our project is a two axis ball balancing robot built. The system uses two NEMA 17 stepper motors connected to two, two-bar linkages to tilt a square platform in the X and Y directions. A touchpad mounted on the surface of the platform detects the ball’s position. An Arduino Uno with a CNC shield reads the sensor and runs two independent PID controllers to command the motors.

How we built it

Each axis uses a perpendicular linkage system. The motor crank is 27 mm long and connects to a 57 mm link attached to the platform. These two links are perpendicular, forming a compact four bar mechanism that converts rotary motion into platform tilt. This geometry allows small motor angles to produce smooth platform motion. Most of these components were 3D printed and custom made by the team. Electronics are off-the-shelf parts that were integrated throughout the hackathon. All software was programmed in the Arduino IDE to run the controls program.

Challenges we ran into

3D printed took a very long time for certain parts, especially when having an older 3D printer. The PID tuning also took a very long time since it is an iterative process. Those challenges were resolved by specifically planning how much time we would like to spend on each task.

Accomplishments that we're proud of

Completing the project and seeing the ball return to the center of the board when it is disrupted from it's correct location.

What we learned

Controls, programming, efficient design for manufacturabiltiy.

What's next for 2 Degree of Freedom Ball Balancer

Tune the PID control even more to allow for quicker adjustment.

Built With

  • c++
  • controls
  • mechatronics
  • prototyping
Share this project:

Updates