Mbed Drink Mixer

Reid Clyburn and Muneer Abdella (Section B) ECE 4180 Design Project Fall 2018

Overview

Everybody’s seen those “DIY Robot Bartenders” and mixing machines on hackaday, and those are all well and good, but they seem to share two major flaws that would prevent them from being actually used in a social setting:

  1. They don’t provide options for different drink strengths
  2. They take way too much time to fill a glass

That’s why we made our machine. It combines a simple windows user interface with powerful DC air pumps to quickly get you a drink of any strength you desire. It also allows users to manually get their drink using pushbuttons. Permitting drinks of any volume to be made.

Demo

Parts

MBED LPC1768 (x1)

12V Micro Air Pump .11CFM (x2): https://amzn.to/2DQPqH1

12V Large Air Pump 21.2CFM (x2): https://amzn.to/2TXbN3x

1 Gallon Plastic Jars (x4): https://amzn.to/2PZB7HM

12V 10A Power Supply (x1): https://amzn.to/2raGqFu

1/4in Food Safe Tubing (10 feet): https://amzn.to/2E11I0B

7/16in Food Safe Tubing (10 feet): https://amzn.to/2RjVv2J

Relay Module (x2): https://amzn.to/2RmFfOw

Arcade Pushbuttons (x2): https://amzn.to/2P4qH4h

Enclosure (x2): https://amzn.to/2DMXTv4

Hot Glue

Scissors

Wiring

/media/uploads/ReidClyburn/wiring.png

MbedRelay Module ARelay Module B
GNDGNDGND
VUVCCVCC
p19IN1N/A
p15IN2N/A
p29N/AIN1
p28N/AIN2
Mixer MotorLiquor MotorRelay ModulePower supply
+N/ANO1+N/A
-N/AN/A-
N/A+NO2+N/A
N/A-N/A-
N/AN/ANO1-+
N/AN/ANO2-+

NO: Normally Open

Code

Mbed

Import programMbedDrinkMixer

Code to run drink mixer using Windows GUI.

#include "mbed.h"
#include "PinDetect.h"

DigitalOut sprite(p17);
DigitalOut vodka(p15);
DigitalOut rum(p28);
DigitalOut coke(p29);
PinDetect VSbutton(p7);
PinDetect RCbutton(p5);

Serial pc(USBTX,USBRX);

int alcTime = 2.5;

void VSbutton_hit_callback (void)
{ 
    if (VSbutton == 0 && alcTime!= 0)
        {vodka = 0;
         wait(alcTime);
         vodka = 1;}
        while(VSbutton == 0)
        {
            sprite = 0;
        }
        sprite = 1;
}

void RCbutton_hit_callback (void)
{ 
    if (RCbutton == 0 && alcTime!= 0)
        {rum = 0;
         wait(alcTime);
         rum = 1;}
        while(RCbutton == 0)
        {
            coke = 0;
        }
        coke = 1;
}

int main() {
  sprite = 1;
  vodka = 1;
  rum = 1;
  coke = 1;
  VSbutton.mode(PullUp);
  RCbutton.mode(PullUp);
  wait(0.1);
  VSbutton.attach_deasserted(&VSbutton_hit_callback);
  RCbutton.attach_deasserted(&RCbutton_hit_callback);
  VSbutton.setSampleFrequency();
  RCbutton.setSampleFrequency();
  
 while(1)
 {
      int choice = pc.getc();
      if(choice == 49)
      alcTime = 0;
      if(choice == 50)
      alcTime = 1.5;
      if(choice == 51)
      alcTime = 2.5;
      if (choice == 52)
      alcTime = 3.5;
      
      };
} 

GUI Code

/media/uploads/ReidClyburn/gui_selected.png

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace newDesignGUI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                checkBox2.Enabled = false;
                checkBox3.Enabled = false;
                checkBox4.Enabled = false;
                serialPort1.Open();
                serialPort1.Write("1");
                serialPort1.Close();
            }
            else
            {
                checkBox2.Enabled = true;
                checkBox3.Enabled = true;
                checkBox4.Enabled = true;
            }
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
            {
                serialPort1.Open();
                serialPort1.Write("2");
                serialPort1.Close();
                checkBox1.Enabled = false;
                checkBox3.Enabled = false;
                checkBox4.Enabled = false;
            }
            else
            {
                checkBox4.Enabled = true;
                checkBox3.Enabled = true;
                checkBox1.Enabled = true;
            }
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox3.Checked)
            {
                serialPort1.Open();
                serialPort1.Write("3");
                serialPort1.Close();
                checkBox2.Enabled = false;
                checkBox1.Enabled = false;
                checkBox4.Enabled = false;
            }
            else
            {
                checkBox2.Enabled = true;
                checkBox4.Enabled = true;
                checkBox1.Enabled = true;
            }
        }

        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox4.Checked)
            {
                serialPort1.Open();
                serialPort1.Write("4");
                serialPort1.Close();
                checkBox2.Enabled = false;
                checkBox3.Enabled = false;
                checkBox1.Enabled = false;
            }
            else
            {
                checkBox2.Enabled = true;
                checkBox3.Enabled = true;
                checkBox1.Enabled = true;
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

Tubing

All connections made with the tubing should be air tight, as leaks will reduce or prevent the flow of liquid out of the containers.

Motors

  • Connect about 1.5 feet of tubing to the output of each of the DC air pumps. The larger diameter tubing should be connected to the larger pumps and the smaller tubing to the smaller pumps.
    • The tubing should fit snugly around each of the pump outputs, so no additional sealing should be necessary

/media/uploads/ReidClyburn/screen_shot_2018-12-10_at_11.51.47_am.png

Container Inputs

  • Use a soldering iron or hot glue gun to melt a small hole in the top, but not the lid, of each of the liquid containers.
  • Gently rotate a sharp object, such as one of the blades on a pair of scissors, around the holes until they are slightly smaller than the outer diameter of the tubing.
  • Insert each motor tubing into the containers. Then, using hot glue or epoxy, seal the area around the hole to create an airtight connection between the motor and the container.

/media/uploads/ReidClyburn/screen_shot_2018-12-10_at_11.54.16_am.png

Container Outputs

  • For the liquor containers, connect another tube that goes from the top of the container to the eventual output of the system.
  • For the soda containers, make the connecting hole in the container slightly higher than half way up the container. This will decrease the total pressure needed to push liquid through the tubing. Connect this hole with about 1.5 feet of tubing to the overall output of the system.

Double check that all connections are airtight, and that all tubes are connected properly before using actual liquid.


Please log in to post comments.