Introduction: Somabot - an Automated Bartender (Intel IOT)
Somabot is an automated bartender. Just select in the ingredients and and the drinks can be accessed from any mobile or desktop browser ready to make cocktails for you. I have attached an NFC chip on the top left, so the control interface automatically opens in the browser whoever has access to the machine. The source if you want to build this yourself can be found at https://github.com/eswarm/somabot
This is done as part of Intel IOT event and uses the libmraa library(pretty nice library, which acts as abstraction over multiple platforms, open sourced by Intel). What this means for you is that this can run on Intel edison/Galileo, beaglebone black or the Raspberry PI.
Step 1: Intial Setup
First lets get your board ready to use libmraa, if you Intel Edison/Galileo and use the official distribution you are good to go out of the box.
If not, follow the steps listed at https://github.com/eswarm/somabot if you are using a beaglebone or raspberry PI. Also, Edison has a wifi built it, it would make sense for your cocktail dispensing bot not to have wires dangling :)
Step 2: How It Works
Working on the board and putting it together at Intel IOT.
So how it actually works is quite simple. We connect the GPIO pins to a 8 channel relay. And the relay controls the peristaltic pumps. Since these are peristaltic pumps they have pretty much a constant flow rate. In the web interface we select the ingredients we keep and based on that my software would give out the list of recipes you can make with it. Select one and it would start making your cocktail :)
I have added a relay for the schematic here, you pretty much expand this to 5 pumps(or how many ever you have, and you are ready to go). The power source that goes into the relay should be sufficient to drive the peristaltic pumps atleast.
Also, it would be a good idea to test the relay to get a hang out of things. Relays are good for that, its easy to see whether they are working or not.
Step 3: Putting It Together.
Got the board precut for the peristaltic pumps to fit in
Step 4: Putting It Together
As I said The schematic is simple, each GPIO pin from the board controls the relay which either allows or disables the current to the pump, based on the input. Turn on a GPIO pin means we are pumping that particular liquid.
Step 5: Dry Run to Test
Enable the pumps manually, since I have the python bindings for libmraa, testing things like this is quite easy. Took about 10 lines of code.
Step 6: The Outer Structure
These are the first things I found when I am searching for a outer support. They work well for support, but they are heavy. Attach the board to the outer structure and we are good to go :)
Step 7: Final Product
So, what I didn't show here, is the software that runs on the board.
I am running a flask server, which directly modifies the GPIO pins based on the recipe selected. So you can even use this remotely if you want :). The front end is responsive so this can be used on any desktop or mobile browser.
Also, I have attached an NFC chip on the top left and wrote the web address to the tag. So anyone with access to bot can simply tap to order a drink.
I have used angular material for the UI to make it look pretty. You can see it in action in the images attached. As said the source is open and easy to extend, you can find it https://github.com/eswarm/somabot and PR's or even suggestions are more than welcome.
Future Improvements :
There are lots of improvements that can be done to make this better
On the software side
Drink Suggestions, based on past selections and type of drinks selected.
Recipe Sharing. currently recipes are stored on a text file in JSON format, this can be extended so that all the recipes are taken from a centralized place, so that anyone can add and share recipes with each other. Ofcourse assuming that multiple people use this. :)
Hardware side :
Carbonated drinks wont work well with peristaltic pumps, need to add solenoid valves and extend this.
When pumping is in progress add an indicator LED.
If you have any more suggestions or improvements please raise an issue on the github repo.