We’ve seen a lot of drinkbots here on MAKE in nearly every configuration. However, I don’t think I’ve ever seen one as polished and elegant as Dave Zucker’s project, called Sir Mix-a-Bot. It’s a PUMA arm, the sort used for manufacturing, mounted on an elegantly veneered table with liquor and mixer bottles arranged around it. The person wanting a drink selects one of ten cocktails on a touch screen and places his or her glass on the brass disk on the table, and the robot makes the drink.
Dave wrote a fascinatingly thorough writeup of what turned out to be a very long-term project. He got the arm for free ten years before, and immediately wanted to turn it into a robotic bartender.
It wouldn’t happen overnight — the robot arm’s controller was nonfunctional and gigantic, and Dave ultimately trashed most of it. The project would have to wait until a new control system could be created. Dave hauled the arm from house to house ever since, occasionally working on the project as the inclination struck him. Finally, he told everyone that this year would see the robot in action no matter what, forcing him to make that a reality.
The robot made its debut at Dave’s birthday party on March 14th where it served up drinks for the guests.
The Mechanical Arm
Dave managed to score a free PUMA arm (PUMA stands for Programmable Universal Machine for Assembly) when a coworker told him they were giving them away for free at a nearby school.
Back in the garage, I sifted through the newly-acquired treasure and was a little sad to discover: it didn’t really work. At all. The controller didn’t seem to turn on, and even if it had, there was woefully little in the way of documentation of the PDP-11-based computer that was housed in an aluminum box the size of a dorm-room fridge. I kept the control panel cover, the I/O module, the arm of course, and not much else. With a robot arm in an unknown mechanical state and no working controller, I had a tall task in front of me: get the arm repaired, find (or build) electronics to control it, write software to make it pour drinks, and build some sort of home for it.
Eventually Dave discovered that the arm, mechanically, was solid. Its six motors seemed fine, other than needing a controller. It was, however, missing its hand — there was no gripper for the robot. Dave ended up going with a a very simple solution, a fork and metal slider with no motors or solenoids at all — it simply scooped up the bottle. He started with a wooden hand but ended up 3D printing the part for added durability.
The Control System
Dave’s main challenge was that there was no motor controller. The arm has six brushed DC motors — two for each joint — so it needed six motor control boards. The arm also had three electromechanical brakes, solenoids that kept the arm from going limp when it wasn’t powered up.
He ended up going with a PSoC microcontroller connected to six Motion Mind 3 controllers. To control the solenoids he bought three relay boards, each packing a solid state relay that triggered the solenoids’ 24V when triggered by the microcontroller.
The mind of the system was an old Mac laptop that he used to communicate with the motor controllers:
The motor controllers live (effectively) in joint space — that is, they are directly controlling the angles of each of the joints. But sometimes it’s helpful to talk about Cartesian space, in terms of (X, Y, Z) coordinates and rotations — for example, you want the end-effector to move up by 15 cm. That requires moving more than one joint, just like in your own arm, moving your hand straight up from waist level to shoulder height requires that you adjust your shoulder, elbow and wrist.
Now Dave needed to create custom software to manage the paths the arm will take.
In addition to the control code, I also created a scripting language I could use to create and store paths for the robot arm to traverse. So later on, once I’d built the table, I created a script to grab each bottle, and another set of scripts to return them to the holders. The encoders in the arm are quite accurate, and so each position along each path is fairly repeatable, down to about a millimeter. I spent quite a bit of time tuning the paths to make sure each bottle was captured and then replaced by the gripper, and still have a little bit of that tuning left to do.
It didn’t hurt that his brother Matt is in a PhD program in robotics. Matt had homework to write the inverse kinematics code for a robot arm, so he adapted the code for Dave’s project, saving him a lot of trouble in determining the arm’s angles and motions — the code translates between cartesian coordinates and the robot’s motor turns.
Building the Table
How often do makers — myself included — wait for the last minute to whip up some sort of enclosure? One of the parts that I really like about this project was the care that Dave took in putting the finishing touches on the bot even after he had basically perfected the mechanics.
The arm is positioned on a demilune table mae out of MDF with veneer glued on, along with inset carvings, inlay, and brass hardware. It’s massively heavy, but necessarily so because it keeps the arm from moving around excessively.
Not many of us have the patience to work on a project for ten years, but Dave’s effort shows pretty clearly in all aspects of the project. So, what’s next?
There are still some things I’d like to tune up with the bartender — it occasionally misses when replacing a bottle, the pouring path could be smoother, the LEDs on the menu could be brighter, and so on. If I wanted to bite off a bigger chunk, I might think again about using my own PCB / motor control circuitry, rebuild the touch screen menu with a separate microprocessor, or possibly rebuild the table top (to add decorations and eliminate the bubbling in the veneer).
Be sure to read the project writeup for tons of additional details on how he made the robot. And here’s a video of the bartender in action!