top of page
DSC_6121.JPG

Automated Latte Machine

This was an entire class project for my robotics class. The objective was to make a hot latte with latte art and utilize a skill from each of the previous projects in the class. The greatest challenge was figuring out how to break down a class of 27 students into reasonable project groups with an evenly distributed work load. The machine had 5 different stations and was transported with a create 3 robot. Communications were largely controlled using an airtable. 

Step 1: Breakdown into groups
Our first step was to establish subteams for the project in a way that allowed for reasonable division of labor and a streamlined communication process. We chose to split into 4 subgroups show below. People were assigned to subgroups based on interest as well as perceived difficulty of the team. Coffee and transport seemed to have the most difficult deliverables and therefore had more people assigned to them. 

​

  • Coffee (10 people)​

    • open/close lid​

    • load coffee pod

    • start machine

  • Milk (6 people)

    • pump milk​

    • start milk frother

    • pour

​

  • Art (4 people)

    • select design​

    • tap cinnamon

    • cleaning cycle

  • Transport (7 people)

    • dispense cups​

    • cup transport

    • communication

Step 2: Establishing Transport Deliverables
I was a part of the transport team, and we identified 3 deliverables that transport was responsible for (shown left). We had 7 members and decided to break down into sub-sub teams with 2-3 people per team. We decided to use a create 3 robot as a turntable that would receive a cup and then rotate to the next station when the current task completed. I handled the roomba programming and communication with other teams. From the start of the project, I knew that I wanted to handle communications, and so I was very excited to work on this project.

Suzan Assembly.png

Cup Station   ↑

Coffee Station ↘

↙ Milk Station

Roomba Turntable

↖
Design Station

Airtable Inputs

Screenshot 2024-05-09 at 7.15.47 PM.png

What do the columns mean?
Other teams would read our arrival values posted in the "Arrived at station" column, and start their process. When they were complete, the team would post a 1 to their corresponding 'Done' column and we would spin to the next station. Once spinning was initiated, any 1's from the previous station would be overwritten to zero to prevent processes from running twice. When we arrived at our next station, we would post a 1 to the 'Arrived at station' column and the process would begin again. 

Communications with Airtable
To handle communications across teams, the class decided to use an airtable so that values could be easily accessed and updated.

What does the transport code control? 
The transport code controlled the rotation of the roomba and posting about the roombas location to airtable. It also dictated when a coffee would start being made based on user input. Internally, we would create a queue, and if this queue was nonzero with no current processes running, we would post a 1 to the start row, indicating that we have arrived and are ready for a cup. 

How does the process end?
When the roomba reached the final station, 'Customer,' it would wait until the customer takes their coffee. This was checked using a distance sensor placed under the cup. Once the coffee had been retrieved a 1 would be posted to the 'Done column and the queue would be checked. If the queue was empty, the robot would remain at the customer station until an order was placed. Otherwise, a cup would be placed as soon as the previous user retrieved their beverage. 

Writing Accessible Code
My main goal for this project was to write code that was accessible to other students. I wanted group mates to be able to run my code without needing me there to troubleshoot if an issue arose. To accomplish this I started the code early and thoroughly tested for any issues. I then used my extra time to write documentation on the shared website about how to post data to airtable. Additionally, I attempted to abstract my code by creating a separate file that called and sorted the airtable data. 

Documentation for Transport Code

Screenshot 2024-05-09 at 8.36.30 PM.png

Class photo at final demo

DSC_6124.JPG

Close up video of individual systems

Final Reflections
Ultimately I was super happy with our final result of this project. We were able to make a latte without interference and our systems integrated very seamlessly. The class did a great job of handling communication between groups and knowing what needed to be a full class discussion vs what could be handled by a few people. I received positive feedback about commenting the code well and the helpfulness of the documentation, which made me very happy. In particular, I was proud of my own time management because I was able to get things done early and have extra time to integrate and debug with other groups. 

bottom of page