This tutorial explains how to build and program a 3 bin dispenser that could be used in a variety of applications including vending products. This design is more of a prototyped component rather than a finalized machine. Feel free to take the design and expand from it; apply it to any application you are interested in. Maybe you have a high shelf that you need things off of. Simply load up this dispenser, set it up on the shelf, and voilà!- it'll come shooting off the shelf and into your hands. No more reaching up to those pesky high shelves. Maybe you'll come up with an application far more interesting than that.
Another one of the uses of this design is its ability to potentially vend products. With the support of Sparkfun Electronics, WMSI (White Mountain Science Inc.) is exploring the idea of creating an open source vending machine. With an open source vending machine design, makers who wish to sell products at a conference, maker faire, farmers market, or other informal market places, can sell them via their own vending machine. With an online payment system, these types of vending machines will free the maker from handling money transactions and focus on sharing their core ideas and building enthusiasm for their products. Now you may look at this 3 Bin Dispenser and exclaim "that's not a vending machine" and you'll be right; at the same time you will miss the point that this design is simply a step forward for the open source vending community.
Step 1: Material List
This material list is specific for our design. There are many deviations from this list that will result in the same functioning end product. It is quite possible that some deviations will actually produce a better end product then the one that this tutorial produces.
Red Board, Arduino, or any micro-controller you have lying around*
Darlington Driver 8 Channel ULN2803A DIP (controls the motors)
16*2 LCD display
3 10k resistors
A laser cutter or a steady cutting hand for making the container***
*the program written for this tutorial is in arduino
**this design used lego motors to move the product. Any motor will do with a stall current of less than half an amp
***The container can be made by using box cutter to cut the cardboard
Step 2: Building the Base
The base of the 3 bin dispenser was built from Lego. The dispensing mechanism consists of 3 independent wheels spin to dispense product from the 3 bins and one main axle that pulls the product completely out of the dispenser. Lego was used in this iteration of the design for fast prototyping and easy building. Lego motors were also used for the same reason.You'll find out more about the base in the next slide. Basically the dimensions of the box determine the size of the base and placement of the motors. If you choose to produce a dispenser with "actual" motors and not Lego hacks than build the base to hold the box and not the other way around.
Step 3: Making the Container
Grab yourself a gnarly knife or a dazzling laser cutter. The .svg files are here for those with access to a laser cutter. Also the entire Sketchup design is included for those roughing it with a stone aged blade. Sketchup is a free to download program from our friends at Google.
**Caution lasers and knives can be harmful
Step 4: The Mighty Circuit--part 1
Part 1: The LCD and Buttons
The circuit used for controlling the LCD screen was the exact circuit presented in the Sparkfun Inventor’s Kit Guide book for controlling and LCD. This guide can be found here
The circuit used for the three input buttons is also from the Sparkfun Inventor’s Kit Guide book. This schematic can be found here.
By following these steps in both of these tutorial you should end up with an LCD exactly as the one in the pictures of this tutorial. That is the instructions match the pin assignment for our program. As far as the three buttons are concerned the pin assignment for the DIO are as follows
Button A ----> pin 7
Button B ----> pin 8
Button C ----> pin 1
Our deepest apologies for our seemingly random pin assignments. We tend to just plug things into open pins when prototyping. Go ahead and edit the code in the program, if you change pin assignments, to a more rational order (say you want the buttons to use 7, 8, and 9). All the code is open source... clearly.
Step 5: The Mighty Circuit--part 2
Part 2: Motor Controller
The four motors present in this prototype are controlled by a Darlington ULN 2803A DIP motor controller. Here's a fanciful data sheet telling everything you need to know about this little guy. An important fact is that it can only handle .5 amps for each channel. If you exceed this you will most likely spend a long time looking at the rest of your circuit before switching it out for another.
The Darlington is essentially 8 transistors combined into one DIP. We are using these transistors as a basic control for the motors we were using. We used a DIO pin from the Redboard to control the four transistors for controlling the motors. If we were using larger motors we would have likely used a dedicated H-Bridge circuit.
Here are the pin assignments for the program
Main Roller ----> pin 9
Motor A ----> pin 10
Motor B ----> pin 6
Motor C ----> pin 13
If after reading all this babble your still like "this guy told me nothing about how to set up this darn motor controller" click the next button. If you build motor controllers in your free time from spare lint in your pocket skip the next few steps.
Step 6: How to Wire the Motor Controller Step 1
Start by placing the ULN 2803A straddling the middle of the breadboard.
Then connect your battery for your motors to the positive and negative rails of the breadboard.
Step 7: How to Wire the Motor Controller Step 2
Connect the Arduino ground to pin 9 on the Darlington.
Step 8: How to Wire the Motor Controller Step 3
1) Connect whatever digital output pin you are using on the Arduino to pin 1. This is the first channel in the array. Subsequent motor pins (not leads from the motor) will be connected to pin 2, 3, etc on the Darlington.
2) Connect the positive rail to pin 10
Step 9: How to Wire the Motor Controller Step 4
1) Connect the negative ground to pin 9
2) Connect the motor from pin 18 on the Darlingtion to the positive rail
Yippie!! Now to test use the example LED blink code in the Arduino IDE to see if the wiring works. If it does than simply replicate step 3 part 1 and step 4 part 2 but move down a channel. Again our test code is specific for the pin arrangement found on The Mighty Circuit--part 2 step of this Instructable.
Step 10: Code
Uhhh... here is the code. Not much else to say. We wrote the 3 bin dispenser code and the Circuit_15 was written by fellows of Sparkfun.
Step 11: You Are Done!
Congrats. If for some reason after following all the instructions you wield a device that doesn't function collect yourself and your emotions and politely respond back with criticism towards how we can improve this Instructable. If you modify this design to make something wicked cool go ahead and link it in the comments.