Introduction: AutoFrost CNC Cake Decorator
Inspired by a misconception of a "Cupcake CNC", this 1-semester mechatronics project takes input from a Paint-like GUI, sends commands through Arduino, and runs via stepper motors on threaded rods.
The software is all in Python, using TKinter. It allows for the selection of size (up to 11x13" rectangular), shape (rectangle or circle), and cake color, then opens an appropriate canvas with a pallette of tips and colors. The Python records points in a path and, at the press of a button, sends the design over serial to two Arduinos.
One of the two Arduinos controls the stepper motors (controlling threaded rods in X and Y) to move at a constant speed between points in the path. The other Arduino runs a servo in the Z axis, which uses a rack-and-pin plunger system to dispense frosting. The servo stops to pick up between points or pauses for color/nozzle change.
The acrylic plate which holds the cake is affixed to a nut which rides on the x-axis threaded rod; the dispensing mechanism moves in the y axis. These two axes are also controlled with limit switches, which comprise the zeroing mechanism. There is also a manual z axis which moves the dispensing mechanism to adjust for the height of the cake.
This product is all the original work of five students in a class at Franklin W. Olin College of Engineering. It was featured in Wired magazine, Gizmodo, and elsewhere. We were all just learning Python, had been introduced to microcontrollers a few weeks earlier, and had only a little experience in the machine shop. We made it from SolidWorks design and whiteboard sketches to finished project!
You can also view our website, though as of 8/2012, most of the content has been migrated here!
Users design cakes on a Paint-style graphical user interface (GUI), and AutoFrost turns them into reality. We have written our GUI using Python and Tkinter. Aspiring cake decorators can control frosting colors and nozzle shapes while drafting their dream cake. As users draw, we collect points at evenly spaced intervals and store their location, color, and shape. We then parse by color and nozzle shape (prompting the user each time a change is required) and send x-distance, y-distance, and frosting-or-not commands to our three motors.
Python code is downloadable here.