← Back to portfolio
Arduino · PCA9685 · Servo Firmware · Wiring · 3D-Printed Mechanics · Belt Drive · MuJoCoin progress

MERL Robot Arm Teaching Platform

Rose-Hulman · Student Researcher, Multidisciplinary Educational Robotics Lab · Jan 2026 – Present

The lab apparatus for a senior-level Image Processing course at Rose-Hulman. Students write MATLAB vision code that decides which colored block goes where, and a 5-DOF servo arm carries out the sort. The arm started from an open-source 3D-printable design that was never meant for a semester of student use, and my work was turning it into something a class can depend on: the mechanics, the electronics, the firmware, and a simulator to practise on.

The hard part was the drivetrain, which had to satisfy three things at once: cheap enough to print and assemble a whole class set, reliable under students who have never touched a robot, and tight enough in tolerance that a pick lands where the code says it will. The printed gear train failed the second and third, with backlash and tooth stress behind a roughly 70% hardware failure rate. Replacing it with a belt drive brought failures under 5% without adding cost. I did the mechanical assembly, wiring, and soldering for the platform, which 10+ students have now used hands-on.

An Arduino UNO drives five servos through a PCA9685 16-channel PWM driver on I2C, with an ArduCam Mini on SPI. Printed arms and hobby servos vary unit to unit, so the firmware keeps a pulse-width calibration table per arm across the lab fleet and selects it at build time. Motion is interpolated at the 50 Hz servo rate with a speed limit, the arm homes and self-tests on power-up, and a serial interface accepts either raw joint angles or a sort order such as "3 1 2" from the student code.

The last piece is a MuJoCo model built from the arm's CAD assembly, with the five actuators in the firmware's joint order and the same 0–180° command range, plus the block jig with convex-decomposed collision geometry. A bridge renders the simulated table, hands the image to the student's MATLAB code, and plays the returned sort in simulation. Because the command format matches the hardware, a sequence that works in the simulator runs unchanged on the real arm.

The course's block-sorting vision code is provided by the instructor; I kept a modified test version of it for bringing the hardware up.

Highlights

  • Reworked an open-source 3D-printed 5-DOF arm into lab apparatus for a senior-level Image Processing course. Replaced the printed gear train with belts to hold tolerance at low cost, cutting the hardware failure rate from ~70% to under 5%
  • Developed the Arduino firmware and wiring: PCA9685 servo control over I2C, per-arm pulse calibration across the lab fleet, speed-limited motion, and a serial command interface for student code
  • Built a MuJoCo model of the arm from its CAD assembly and bridged it to MATLAB, so students can test a sort in simulation before running it on hardware