Project tutorial
Voice Activated Drink Mixer

Voice Activated Drink Mixer © GPL3+

This sleek machine can mix juice cocktails or real ones (age permitting) on command and looks great on your counter.

  • 30 respects

Components and supplies

Psoc 20analog 20coprocessor 20pioneer 20kit 20web
Cypress PSoC Analog Coprocessor Pioneer Kit
Nema%2017 2
OpenBuilds NEMA 17 Stepper Motor
I actually bought these in a cheap 5pk on Amazon for $8 a piece. You can use as many or as few as you like but the device is pointless if you use one motor and two severely limits functionality.
Amazon Alexa Amazon Echo
Anything with Alexa enabled will work
Abx00004 iso both
Arduino MKR1000
Stepper Driver L298N
Any compatible driver works but these ones had fast shipping and were black. Use one per mototr.
Momentary Pushbutton
The ones I used are metal and light up but are rather pricy (~$10). Any old momentary pushbutton should work just fine and you can find colors other than blue online.
Two State Pushbutton
The ones I used are metal and light up but are rather pricy (~$10). Any two state pushbutton should work just fine and you can find colors other than blue online.
1 1/4" x 7" Wall Tube (Bootlegged Faucet)
Get one that is finished so that it doesn't look ugly. You can also get a faucet but that will cost much more.
Appliance Power Supply (Generic)
This should have an input of 110v and output 12v rails. The wattage depends on how many motors you plan to use.
20 AWG Wire (Generic)
Do not use this for higher amerperage connections. It is not safe. This stuff is dirt cheap so just buy a red spool and a black spool to make life easier.
14 AWG Wire
Use this thick wire for power supply inputs.
Switch Outlet Combo
This adapts a standard power cord to solderable terminals and allows you to switch a lot of power safely. Choose one that fits your aesthetic.
5M EL Wire w/ Alternator
DO NOT BUY ON ADAFRUIT. You can get five meters on amazon for about $11 while Adafruit sells half as much for $20. I suggest matching the color to you button LEDs. EL wire will give off more of a glow than the beam of light from LEDs. This makes it more subtle and generally more suitable for anything other than a really expensive PC. If you want color changing capabilities you can get an acrylic panel to diffuse some RGB LEDs and/or use them on low brightness.
These are unnecessary but I found them lying around and the floating effect looks great with some nice under glow.
Square Infinity Drain
6mm M3 Screw (Generic)
You will need four per motor.
1 1/4" Slip Joint Washer
I got mine from the crafts store because I didn't have time to make or order one. Either of these methods will get you sturdier, more durable wood when compared to the Michael's crafts approach. Get one that will fit your drain and buttons with enough room to make sure nothing is squished together. Mine isn't quite even a full 8" x 9". Metal would also work but is harder to work with. If you have the tools however, it would look pretty sleek. If you don't like the rustic look achieved by using the lowest possible quality parts, some cabinet material from IKEA could look quite nice with a laminate white of colored finish. Optional: Get a larger box and use a real faucet instead of a pipe. Mount the faucet behind the drain and bring the tubing in with your cables.
Panel (Optional)
The craft store strikes again! All I could find was a tacky slated panel that really doesn't look all that great. When choosing a panel make sure you get one about the size of the back of your box and tall enough to mount the spout with a tall glass underneath.
Bin (Optional)
You'll need somewhere for the meat and potatoes of this appliance and I found a 3/4 cubic foot bin to be just fine. This isn't the most elegant approach. If you were determined, you could put everything in a drawer below the counter and find some sneaky way to route the tubing up to the device.
I used mason jars with plastic lids but any type of bottle should work. You will need one reservoir per drink plus an optional mixing reservoir.
AMP Spade Terminals (Optional)
You can solder to these instead of wrapping the wire around PSU screws.
5/16" ID 7/16" OD Silicon Tube
This is food safe and compresses easilly for good pump performance.
Rope Caulk
For attaching the drain to the box
~75g/pump is used
Medium Zip Ties
Use these to attach the EL wire to the legs
120mm PC fan
Used only if you build the cooling apparatus
Peltrier Thermo-Electric Cooler
Electric Tape
It's always good to cover up joints, especially when they are carrying 300 watts
Te connectivity 4 103741 0 image 75px
Male Header 40 Position 1 Row (0.1")
266 04
Female/Female Jumper Wires

Necessary tools and machines

3D Printer (generic)
Hy gluegun
Hot glue gun (generic)
09507 01
Soldering iron (generic)
Jig Saw (Generic)
Drill (Generic)
Drill Bits (Generic)
You will need a 5/8" bit and a 1/2" bit. Many small bit sets will not come with these so you may need to make a trip to the hardware store. A small bit can help as pilot holes ensure accuracy when using large, unwieldy bits.
1 1/4" Hole Saw (Generic)
Wood Glue (Generic)
General Woodworking Supplies
This includes a hammer, nails and/or screws, scrap wood, and clamps.
M3 Hex Wrench
Used to smooth out gears and prints with major issues.
Wire Strippers
Desoldering Tool
Helpful, but not required, for modifying the EL Wire transformer

Apps and online services

Autodesk fusion 360 logo 4szx21llea
Autodesk Fusion 360
Creator bannerimage 2
Cypress PSoC Creator
I used Cura because it was the only free slicer I had a profile for, but after poor results (where the top of a model was missing) on the Mac version and inconsistent paths on the Windows version I would definitely suggest trying something out (our sending me a simplify license)
Dp image kit 02
Amazon Alexa Alexa Skills Kit
Screen%20shot%202015 07 20%20at%206.10.26%20pm
Amazon Web Services AWS Lambda
Aws api gateway icon
Amazon Web Services AWS API Gateway
Screen%20shot%202015 07 20%20at%206.11.48%20pm
Amazon Web Services AWS DynamoDB

About this project

Volumetric vs Ratio Mixing

Ratio Mixing

Use: For juice mixes

Liquids are simultaneously pumped at different rates. For example, when asked to make "Tropical", orange juice would be pumped at full speed while pineapple and mango are pumped at 10% speed creating a 10:1:1 mixture of juices. This allows you to fill you glass as long as the pour button is depressed and is ideal for juice drinks.

Volumetric Mixing

Use: For alcoholic beverages

Liquids are combined in specific quantities. This only works for drinks of predetermined size, but is more practical for alcohol as it can be quite expensive to waste and (to a limited extent) unhealthy to over consume.


The first step is to chose whether you will configure your machine in a direct or reservoir configuration.

Mixing Reservoir

This is ideal for if you are going to be using a higher number of beverages (more than 3) as it will reduce the length of tubing and thickness of tubing bundles. The mixing reservoir configuration adds an intermediate reservoir where drinks are mixed before being delivered to the glass. Reservoir mixing requires an additional pump and can create waste when mixing in ratios as some mixed solution will remain in the reservoir. This can be solved by running pumps for a small duration after the button ceases to be depressed. Reservoirs are more accurate for volumetric mixing as there is less excess tubing and can be self cleaned from a water supply. This method also allows multiple drinks (of the same composition) to be mixed ahead of time and then poured on command. Adding a mixing element to the reservoir is not necessary in most situation, but can be useful for more viscous solutions.

Direct Mixing

Direct mixing involves pouring any number of solutions into a glass simultaneously. it is Ideal for small systems as it does not require as many pumps or have the added heft of the mixing reservoir. Direct mixing is not effective for volumetric mixing as there is a long length of tubing from the pump tat must be primed. This makes volumetric impossible without manual priming (which can be done by pressing the pour button until a tiny bit of solution is dispensed) and is generally inconvenient for volumetric mixing. Ratio mixing however, it best suited for the direct configuration although you will not see any benefits in performance when compared to resovoir ratio mixing.


Reservoir mixing is a more effective and elegant solution for setups with many pumps, but to keep it simple, direct mixing is more cost effective and should work just fine when manually primed.

Number of Pumps

How many pumps are connected to your machine will greatly influence the functionality you get from it. The number will change what configuration is best for you, and some of the parts you need.

Ten is the magic number

I chose to design my system for 10 pumps when complete for two reasons. First, you can get the bulk discount on motors, which will save a few bucks. More importantly, it splits up nicely. Using a mixing reservoir it allows eight pumps for distinct beverages, one pump water to flush the system in between beverages, and one pump to take the mix from the reservoir to the glass. I have not completed printing the pumps, so I do not have it set up this way yet.

Housing (Nonessential Components)


Arrange the buttons, drain, and faucet however you like. Cut holes that start small as you can always widen them. For these large holes I would highly recommend that you use wedge bits if you have them as I found it to be a much better experience than using hole saws. Make sure to drill a pilot for the jig saw, you cant just push it through the top like a mightier saw. I found that to get right angles I had to drill pilots at all corners of the drain hole. This wasn't an issue as the drain has a 1/4" lip that covers up my sloppiness.


This step is quick, just use rope caulk (for non-permanent seal) or any permanent adhesive of your choice to install the drain and EL wire. The legs were attached with hot glue in my case but are completely extraneous. I however, think the under glow was worth it.


Peristaltic Pumps

As Wikipedia puts it, "A peristaltic pump is a type of positive displacement pump used for pumping a variety of fluids. The fluid is contained within a flexible tube fitted inside a circular pump casing (though linear peristaltic pumps have been made). A rotor with a number of "rollers", "shoes", "wipers", or "lobes" attached to the external circumference of the rotor compresses the flexible tube. As the rotor turns, the part of the tube under compression is pinched closed (or "occludes") thus forcing the fluid to be pumped to move through the tube. Additionally, as the tube opens to its natural state after the passing of the cam ("restitution" or "resilience") fluid flow is induced to the pump. This process is called peristalsis and is used in many biological systems such as the gastrointestinal tract. Typically, there will be two or more rollers, or wipers, occluding the tube, trapping between them a body of fluid. The body of fluid is then transported, at ambient pressure, toward the pump outlet. Peristaltic pumps may run continuously, or they may be indexed through partial revolutions to deliver smaller amounts of fluid." What this really means is that it is like an infinite motorized push pop.

DIY Solution

On Ebay you can find peristaltic pumps for about $10. The only issue is that you will only get about 100mL/minute in flow, which leaves you waiting for over 3 minutes to fill a 12oz glass. This kind of performance would not be usable, so it was necessary to look into other options. Larger sized pumps are available, but have high lead times and are made by industrial sources, so there is a

quote process and minimum order. The only remaining option was custom fabrication. I just had finished building my 3D printer and decided to try putting it to use.

To drive the pump I settled on NEMA-17 steppers with the proper controllers. This was the best choice because they provide very simple and accurate speed control and can provide the torque necessary to pump fluid.

After looking I found a great model to start with. The pump is parametric (so you can scale it to fit your application) and there were hundreds of people who had successfully printed it before. The parameters I used can be found in the attachments section.

This model was not quite ready to be used in the project yet, so I put it into Fusion 360 and made some edits. To start I modified the hex in the center gear to fit the NEMA-17 steppers I bought. The new hole supports a 15mm long shaft with a 5mm radius and a flat cut down to 4mm. I also created a second part, so that the motor cannot only connected to the shaft but also be held onto the motor. It has a 102mm diameter to match that of the pump, is circular in shape, has a central 23mm cutout, and four 5mm in diameter holes for mounting with m3 6mm or 8mm screws.


This took much longer than it should have, as Fusions's workflow does not play nicely with STL files, but it was the only free option I had for parametric modeling. All said and done, I had two STL files ready to print after a few hours.

The first attempt at printing a pump was a mixed experience, I mis-entered the parameters in the thing customizer, and the resulting pump would not turn past a certain point. In addition to this, the print was messed up due to a jump midway through, seemingly from the table being knocked. I went back to Fusion with the right parameters and set out to printing the next morning.

After a few hours of adjustments I was able to get the printer working to my satisfaction again, difficulties in the process ranged from a loose extruder gear, dropping a set screw, and an awful time locking in PID settings.

The first print I was able to get off was a mount printed at 200 microns and 100mm/s with no retraction and a brim. Sadly, the PID tuning was wasted as the radiator 10ft from the printer kicked on midway through and gave it some trouble, leading to +/- 20C accuracy on the nozzle temperature. As a result the print walls were blotchy as is typical with low temperature or under extrusion. I adjusted to this issue by increasing the flow rate in the slicer slightly and retuning the PID settings.

I continued and was able to print one pump at 80mm/s (I did not want to overdue it and mess up overhangs on the gears, just one instance if how Simplify3D would have helped) with retraction (to avoid stringing on the gears) and still a 200 micron height for speed. Despite another auto tune the temperature did still occasionally vary more than the desired range of +/- 10C, but remained above 200C, which is only slightly on the low side for the filament. This barely succeeded (due to what I can only speculate is slicing problems as I ran benchmark prints first that did not experience the same issue) and had a shift over a few millimeters up that caused the gears to not mesh without post processing the print using sandpaper.

With a total print time of about 1.5 hours for the mount and 3.75 hours for the pump itself and the combined factor that I only got the printer working at noon today (Sunday 2/26), I have been unable to print the full set of pumps and mounts, and plan to print 1 or 2 a day (depending on my schedule) until I have a full set.


First, check that your m3 screws fit in the mount. Either due to an error in the model, or the fact that the heads of the screws were bigger than I had designed for, they would not fir. To remedy this I countersunk the holes using a bit slightly smaller than the head and then punched them threw using a hex wrench.

Once they fit through use 4 of them to attach the mount to the motor. It is essential that they no not protrude, as this will interfere with the operation of the pump.

Proceed to use hot glue to attach the pump to the mount taking care to only apply glue to the perimeter gear. Before applying the glue, ensure that the pump fits onto the motor and it is a tight fit.

Repeat this for each pump.


The wiring for the pumps is very easy and should be done for every motor. By referencing the coil diagram that shipped with the motors and the documentation for the controllers I determined the correct mapping.

The pairs are red with blue and black with green. Each wire should go to an out on the same side as the other in the pair.

Then, connect the four "in"s on the controller board to the PSoC. After you have connected enough motors you will have to add on another board to control them, I don't have a GPIO multiplexer on hand so I went with the approach of running it on an Arduino running as an I2C slave device. As soon as I have more pumps to test with I will get the code for this completed.

To drive the motors I took advantage of a timer and wrote a solution that mimics the behavior of the Arduino library to move the stepper through the four steps, by adjusting the delay in between transitions the speed of the motor can be changed.

Also, the light sensor is used so that the EL wire and button backlights are only turned on at night, in case of a midnight snack.

Making it an Appliance

To give this the feel of a real appliance (and provide power for the large amount of peripherals) it is best to use a simple power supply that will also convert from AC 110V (or AC 250V for other regions) down to DC 12V which is used by motors, fans, and coolers.

Before the power supply can be used it needs to be able to connect to the wall and be turned on and off. This is done with a switch and adapter combo. Sadly, the combo comes with no connections made, so you need to connect the power switch to the wall adapter and then the switch to the power supply.

Yes, you can have Alexa with that

To make it voice activated, I used Alexa. More specifically I wrote a short skill to take a drink order and send it to the machine.

Given that the purpose of this project isn't to learn to make skills, I won't go into much detail. What the skill does is determine what drink was ordered. Then it breaks this down into a ratio of different liquids. This is sent to the machine (which is using the MKR1000 for Wi-Fi). The machine "prepares" this by getting ready to dispense in the desired ratio. Finally, the skill returns a confirmation response telling the user that the beverage is ready.

You will need to set up an API and database as well (instructions on the way) so that the MKR1000 and Alexa can communicate.


The API is very basic, when there is a GET to the send method it updates the current beverage entry in the database with the color passed to the API. When there is a GET to the read method it retrieves the current beverage from the database and returns it. The MKR1000 polls this API once every 5 seconds when the machine has been turned on. All of this usage should fall under the AWS free tier.


I know for a fact there are some mistakes that I missed. If anything caches your eye feel free to mention it. The pump model doesn't seem to be the best and I would recommend finding a different one. I found that the current pump model over compresses the tubing and has trouble pumping, I am planning to try some different values and adjust the model, but doing so takes time.

Also, there are plenty of steps that I would like to go into more detail on. With the deadline coming up I will not have everything explained, but hope to add more eventually and put some finishing touches on the other aspects of the project. 

Custom parts and enclosures

Motor Mount
This needs slightly wider holes to fit the head of an M3, but otherwise works as desired.
Settings used in thing customizer to get base model:
number_of_teeth_on_planets = 7
allowed_overhang = 0.75
tol = 0.17
nTwist = 1
number_of_planets = 3
tubing_od = 11.1125
approximate_number_of_teeth_on_sun = 9
tubing_wall_thickness = 1.5875
w = 10
P = 45
T = 25
D = 100
tubing_squish_ratio = 0.5
I think the tolerance could go down a bit, but didn't want to waste 4 hours printing for it to come out stuck together.
Cura slices it a bit weird, so if you are able to remove the issue with the hexagon in the center I would love a copy.


Motor Schematic
If yours does not match, you will have to adjust accordingly.
Img 0195 7zeb4nrjm5


Add projectSign up / Login