WAFFLE LAB:
Whipped Cream and Syrup Station
Quick Summary:
27 students split into 5 subgroups, each owning a different part of the pipeline: pouring batter, dispensing toppings, slicing strawberries, driving the robot between stations, and keeping all the Raspberry Pis talking to each other
The class had full control over how we organized and set our own deadlines
I helped lead the whipped cream station, and designed a rack-and-pinion system to press the nozzle, and modeled the whole setup for prototyping
I also pitched to the professor and my peers adding maple syrup to the project, which wasn’t in the original scope because of mess concerns, and constructed a system with multiple redundant measures taken to ensure a clean, consistent syrup dosage
Skills used: 3D modeling, rapid prototyping, electronics, Raspberry Pi, cross-team collaboration, and breaking a big problem into smaller ones
Top Down view of Challange
Task at hand
Built a fully autonomous system to make waffles from scratch, with a Create 3 robot ferrying a plate between stations
The waffle station sprayed the iron with nonstick spray, poured in the batter, then flipped the entire maker over to drop the finished waffle onto the plate
The strawberry station lined up strawberries, used machine learning to identify the stem, cut it off with a rack-and-pinion knife, then sliced the berry
Parts I contributed to directly
Whipped cream station had to shake the canister and press the nozzle to spray evenly onto the waffle
Maple syrup station had to dispense a consistent stream of syrup with no dripping once the pour was done
Topping Station
Wooden stand
Fully modular design with interchangeable laser-cut birch platforms
Additional wooden pieces added to brace components and limit movement on the flexible platforms
Whipped cream
Worked in group of 5 designing a system to dispense whipped cream onto the waffle
A motor spins the can to aerate it before dispensing
A rack and pinion drives a Y-shaped rack into the nozzle, pushing it sideways to trigger the spray
Maple syrup
Worked independently to design and fabricate system
A syringe filled with syrup gives precise control over how much is dispensed
A rack and pinion pushes the plunger down for a set duration, then pulls back slightly to create a vacuum and stop dripping
A motor-driven drip catcher swings out of the way during the pour, then swings back to catch any residual drops
Prototyping and Understanding Components
Prototype Design Process:
Whipped cream:
Motor casing with integrated rack-slide sleeve and Y-channel to intercept the nozzle, with physical stops to keep the rack captive
Collar around can, near-exact fit, screw-tightening clamp, captive nuts at high-load points to allow for repeated use
Syrup:
Motor casing with integrated rack-slide sleeve, snap-fit syringe holder, and removable dovetailed stops to prevent lift on plunger pullback
Designed with frequent syringe swaps in mind
L-shaped rack reinforced with acrylic plates screwed at the bend to prevent shearing along layer lines, and designed to securely snap onto the syringe plunger
Drip catcher with removable cup for easy cleaning, mounted to the servo horn via captive nuts
Servo shares M6 screws with the syrup casing, and built-in stops constrain travel to 90°
Other
Full interactive CAD assembly to simulate motion and catch collisions pre-fabrication
Slotted wooden stand for modular platform swaps during testing (wooden blocks added later to limit flex)
Understanding the Electrical Components Used:
Two Raspberry Pi 4s (one per station) integrated with Airtable to receive and trigger commands within the larger waffle-making pipeline
Airtable is used as a shared cloud state table, with each Raspberry Pi polling and updating its station status to coordinate the order
Whipped cream: 100 RPM DC motor drives the Y-rack, and a stepper motor rotates the can for precise nozzle positioning at the end of the shaking cycle
Syrup: 50 RPM DC motor (higher torque for pushing viscous syrup through a 1.5mm nozzle) drives the plunger, and a small servo handles the drip catcher, where repeatability and position tracking mattered more than power
Code and Programming
How the code works:
Whipped cream:
Waits for Airtable to say "ready" before doing anything
Runs the stepper motor to shake the can back and forth 3 times to aerate the whipped cream
Runs the DC motor backward then forward to push the Y-rack into the nozzle and spray
Reports "success" back to Airtable and waits for the next cycle
Syrup:
Waits for Airtable to say "ready" before doing anything
Moves the servo to swing the drip catcher out of the way
Runs the DC motor forward to push the syringe plunger down and dispense syrup
Pulls the plunger back slightly to reduce the velocity of the syrup so that it stops dripping
Moves the servo to swing the drip catcher back into position
Reports "success" back to Airtable and waits for the next cycle
Click to see code
Both stations ran successfully by the 4-week deadline and performed well in the final fully integrated demonstration
Integration testing began two weeks out, with buffer time built in, anticipating issues, making for a smooth integration process
Whipped cream shaking mechanism left room for improvement, a gear train trading torque for speed, a scotch yoke for smoother continuous linear motion, or both, could have aerated the can more effectively
Syrup ran smoothly, but one possible improvement with more time would have been to add a camera paired with a rack-and-pinion traversal system, which could have detected the waffle's position and adjusted the dispenser to reliably hit the center of the waffle every time
Working across multiple subteams toward a shared goal gave real insight into how different mechanisms interact and the importance of designing with integration in mind, and gave an example of the real-world subteam interactions in various robotic and engineering companies
Final Design and Demonstration
Video of full topping station
Reflection and Takeaways
I learned a lot more about ROS2 and how to code and design around existing products, taking advantage of built-in features and affordances
The main takeaway was resilience in troubleshooting and sticking with the integration process
We made a conscious effort to continuously test parts together in context, which let us integrate faster than if we had built and tested each part individually
This approach also helped us problem-solve quickly when issues inevitably arose
Integrating code with a complex, moving system was challenging, but with time and effort, we were able to get the robot arm to perform reliably
This was by far the most satisfying robot I’ve built. Even though the arm was very difficult to construct, I’m really proud of how it turned out and how well it works