Automated Bartender

I rarely drink alcohol, but I do enjoy creating fun engineering projects that entertain others.

When my family and I moved into our home, we found out that the neighborhood holds a large block party every year. To contribute to the festivities, I decided to create an automated bartender to serve drinks. I created a wood and aluminum extrusion case, to which up to nineteen 1-liter glass bottles could be attached. I created a user interface using Python and ran it on a Raspberry Pi with a touchscreen. The RPi would then send the ordered drink information over serial to a Teensy microcontroller, which was connected to twenty-one stepper motor drivers which I wired to a single breadboard. I tested pre-existing peristaltic pump designs made for Nema 17 stepper motors and assembled all of the components for nineteen pumps. Over 3.6 gallons of mixed cocktails were served that year by the automated bartender, including a comically steep increase in Long Island orders at the end of the night.

COVID restrictions prevented us from holding the block party for a while, but when it returned, I wanted entertainment retribution. I started with the overall look and decided to make a giant upside-down flask. I made the case out of a single sheet of plywood, using kerf-bending techniques and custom jigs to make the sides. The top and bottom were also made from plywood but sprayed with metallic paint instead of the dark wood stain used on the sides. The neck was designed in Solidworks, and 3D printed; it included a functional screw-on cap as well, but its existence was for pure entertainment value.

To handle ordering from the second iteration of the automated bartender, I tried to move towards an experience that was more bar-like. I integrated a camera into the top of the case, which constantly searched for faces within view. After detecting a face, I programmed it to use text-to-speech (TTS) to ask what the customer wants to drink. The program records the response, performs a speech-to-text (STT) translation, compares the obtained text using fuzzy logic to the list of possible drink combinations, and confirms the order with the customer using TTS and STT again. Once confirmed, the customer is prompted to place a cup under the neck of the flask and say that they are ready.

Once the ordering process is complete, a list of ingredients and amounts is sent over serial to a Teensy microcontroller. I replaced the breadboard full of stepper drivers with repaired and modified 3D printer controllers to simplify wiring and make it easier for testing and expansion. The move to separate controller boards also meant much higher electrical current was possible. This allowed me to run as many steppers as needed at the same time instead of running one stepper motor at a time as in version 1, thus significantly cutting down on time for dispensing each drink.

The peristaltic pump from version 1 made for a horrible assembly, and eventual disassembly, process. When working on version 2 I started with a base design written for OpenSCAD and transformed it into a design that can be press-fit onto a stepper motor using only your hands. The only other parts needed are two M3 bolts to prevent the pump from rotating and the tubing that is fed through the pump, which can be done by just feeding the tube into the pump and pulling it out the other side when it gets there.

The second iteration of the bartender has made it through multiple parties and served hundreds of drinks. The ordering process can also be orchestrated using an LLM, which is what version 3 is based on, but LLMs were not a feasible option during the development phase for version 2.

Software used: Solidworks, OpenSCAD, PrusaSlicer, LightBurn
Languages used: C++, Python

Bartender V1

Bartender V2

I realized I didn’t have any videos of the Bartender in action, so this video was shot during the cold Wisconsin winter in my garage.

Previous
Previous

Laser Cut Model Maker

Next
Next

Mechaiddqd