Snacks Vending Machine Powered by Arduino




About: Mechanical Engineering, majoring Mechatronic, finished thesis about Snack Vending Machine's Build and Manufacturing, having exp as an Assistant for Researcher at LIPI Bandung, passionate for Computer (Hardwa...

Hello, greetings from Indonesia.
This snack vending machine is my final project. This project was actually finished in end of 2015.

Source code for this Snacks Vending Machine:

The aim of this project is to create a vending machine, powered by arduino microcontroller, using "any cheap and easy to get" components available in local store.

Goals: The vending machine has to accept certain amount of money (in coin), before let customer choosing their product, and of course delivering product.

So, this is what i did to achieve that goals:

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Sketch the Concept

First think first, the concept.

This sketch is my very first idea of what i might build. Its gonna be a snack vending machine, accepting coin as a payment, and using Acrylic case.

Pick and mature your concept, try to think about anything, any scenario, any condition.

Try to sketch everything, dont worry if your drawing is ugly, seriously look at my drawing. :D

The right time to think about the un-thinkable is before the project even started.

Step 2: Create 3D Model

Maybe this step is not necessary for every people, but for me, and for this project, its crucial.

I create solidworks model. And i mean really fully completed model. I need to determine the dimensions of the product, in this case, a snack packages. The size of accepted coins, the size of rejected coins, size of coin slot, size of coin ramp, size of push button, sizes of almost everything.

As you can see on 2nd pic, this step include compare, pick, and measure the size of Arduino Microcontroller used. What sensor used, or will possibly use in the future, where to placed, whats the dimension and sizes, where accepted coins goes to, i also think about where i should put a monochrome LCD (its not necessary but i insist).

And, dont forget to think about how we gonna restock the product (in this case: snack)?,in this project, i create a back door on the back of this vending machine, so when product running out, we can open the back door, disconnect few cable (yes i know its not very practical), pull and slide back the product rack, and refill the product.

And finally, still in solidworks model creation, dont forget to create holes for screw, for every parts.

The case (will) made from Acrylic material, and (will be) cutted using laser cutting method. Thats why i create 3d model as detailed and accurate as i can, because the more accurate my model, more preccission case i will get.

Step 3: Design Coin Slot

To filtering coins, i am using multiple step as below:

First filter:Using slot coins dimension, i can determine which coins size are able to enter the machine.

Then second filter: Using coins ramp width, i determine which coin size are allowed to rolling down to the coin holder.

Because by using gravity force, if coin sizes (diameter) are smaller than the width of coin ramp/track, then it will falling down and rejected.

  • On the pic above, coin on the left wont enter slot coin.
  • Coin on the middle will fall and rejected.
  • Coin on the right is accepted coin, goes down to coin holder.

This is video when i am doing some coin testing, it will show you how this method working:

Step 4: Prepare and Test Every Component

Get your arduino ready and prepare everything needed.

This is what i use:
1 Arduino Uno. (should be use Arduino Mega, more IO)

1 Sensor shield.

3 Infrared (reflective) or line follower sensor, used for product detection.

1 Proximity (electromagnetic) sensor, used for coin sensor number 1.

1 Distance interupter (infrared/optocoupler) sensor for coin sensor number 2.

1 Power Supply 6V for DC motor.

3 DC motors, 6V, complete with the wheels, relay for DC Motor, and stuff, namely LCD (nokia 5110 LCD), LED, Push button, speaker (silent is boring). Note: lots of them are not on the pic.

Test every component, LCD push button, relay, LED, just try to combine everything and learn different logic and coding. Make sure you know about what you do. Try to test to the limit, find the limit, but dont break it.

Why use resistor, what happen when this, or that, why sensor reading are not stable, what value are actually read by sensor, etc.

I did the test and found that proximity sensor reading are "not clean", need to add a resistor to calm it down.

Infrared sensor perform very bad and not normal under direct sun (i know about this before, but never actually feel the impact, until now). The solution is using some duct-tape to isolate around the receiver part of infrared sensor, as show on the pic.

Step 5: Build a Spiral Mechanism

This is one of the most important part on vending machine, delivering mechanism.

I am using spiral mechanism, with alluminium wire (2mm wire diameter), manually shaped into spiral with the help of 9cm diameter PVC Pipe.

Spiral wire are tied to a wheel using cable ties. When DC motor ON, wheel rotating, and spiral wire will rotate. Rotating spiral are actually converting rotational into linear movement of product.

Step 6: Build a Coin Identifying Mechanism

Of course identifying coin using "Coin acceptor module" would be more practical and simple solution, but since this is my final project, and i "only" need to identifying between 2 coins (with similar dimension), i decide to use "counting coins travel time" method.

First pic is coin sensor number 1, it using proximity sensor, or inductive electromagnet sensor.
When accepted coin pass this sensor, it will trigger arduino to start counting time (in millisecond).

if sensor1 triggered then start counting time in millisecond.

And when accepted coin pass coin sensor number 2, a distance interupter sensor, arduino will stop counting time, and get the time required for that particular coin, to travel from sensor number 1 to sensor number 2.

if sensor2 triggered then stop counting time in millisecond. "travel times" is xxx millisecond.

Using magnets, attached alongside coin ramp, i can identifying between coin that did not affected from magnetic field, and coin that being affected from magnetic field. Coins that affected by magnetic field will rolling down slower (just about 300 to 500 millisecond slower), but then again it depend on how many magnets attached along side coin ramp.

Dont use too many magnet as it will jam and make coin stop in the middle of coin ramp. We dont want that to happen, because we need to counting time for every coin, to get "travel times" between sensor number 1 and number 2. This "travel times" (in millisecond), are used for arduino to determine the value of accepted coin.

if "travel times" more than or equal to "yyy" millisecond, then its "aaa" coin, else it is "bbb".

This is a video when i testing this method, identifying coins using magnet.

Step 7: Build a Product Detection Mechanism

I am using 3 infared sensor for product detection when its fall from being pushed/moved by spiral mechanism.

When product fall, it will trigger infrared sensor, sending OFF signal to DC Motor (via relay).

So basically all we want is, when product falls, spiral mechanism simply stop rotating.

This video show how product detection working in this vending machine.

Step 8: Use LCD for Information

In this project, i make the LCD showing information (in Indonesian currency) about accepted coin value, everytime customer enter a coin. It also will show how much total balance from accepted coin, and other general instruction about step by step to operate this machine.

When machine turned ON

  • MAIN display = "Please enter coin"
  • IF coin entered = "Display coin value, and total balance"
  • IF coin did not entered = keep MAIN display

After coin successfully identifyed

  • IF total balance more or equal than product's price = "Please select product"
  • IF total balace less than product's price = "Please enter more coin"

After spiral mechanism turn ON (delivery occur)

  • IF Product detection mechanism triggered = "Thank you", Transaction done
  • Delay, and back to MAIN display.

Step 9: Finishing and Testing

Finally, finished Snack Vending Machine. ;)

After 3 months, or so, i am ready to do some final test to this machine, from payment/coin test, product selection, and product delivery.

This is Snack Vending Machine final test video:

I hope this project help some of you, maybe give you some inspiration or idea, about building and creating the next Arduino powered vending machine.

Step 10: Room for Improvement

Some ideas to improve this Snacks Vending Machine:

  • Add some coin changer mechanism.
  • Accept paper money.
  • Accept bitcoin and/or digital payment.
  • Show product stock on LCD.
  • IoT: Notify via internet every time transaction happen.
  • IoT: Notify when product stock empty or low and etc.

PS: This Snack Vending Machine is the 1st Winner of Dayang Sumbi Innovation Award.

Special thanks: ITENAS Bandung, Department of Mechanical Engineering.

Arduino Contest 2016

Participated in the
Arduino Contest 2016

First Time Authors Contest 2016

Participated in the
First Time Authors Contest 2016

Be the First to Share


    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    25 Discussions


    Question 7 months ago on Introduction

    Sir,i would like to have the code.but the code is not English version.i like your project.and im new with Arduino


    1 year ago

    good project, Thanks for posting....

    can u shared the schematic diagram for this vending machine project ...? @sevenmojoe


    1 year ago

    i would like to speak to the designer as i would like to commission them to complete a similar project .

    Thanks united kingdom london


    1 year ago

    hi..can u shared the schematic diagram for this vending machine project? tq


    2 years ago

    Oke terima kasih, bolehkah saya minta contact nya untuk mengetahui lebih lanjut. Sebelumnya terimakasih


    2 years ago

    could you share your solidworks file OP? thank you in advance

    1 reply

    Reply 2 years ago

    Apologize for this, because i lost my thumbdive, and still looking for it. So i could not share the files now.


    2 years ago

    Maaf gan izin bertanya tentang cara membuat sensor koin trsbt serta bagaimana cara counting coinnya?
    Sblmnya makasih gan

    1 reply

    Reply 2 years ago

    its on step 6.
    ada di step 6 bro, inti nya, memggunakan 2 sensor, sensor magnetic/induktansi, dan sensor optocoupler.
    coding nya juga ada di source code saya. prinsip nya kita hitung waktu tempuh antara 2 sensor itu. koin 1000 dan 500 pasti beda, koin 1000 pasti lebih lambat karena saya pasang magnet2 kecil untuk mengganggu/memperlambat laju luncur nya.
    untuk selanjutnya kalau ada yg perlu ditanyakan, bisa diskusi di video youtube saya ya.


    2 years ago

    Izin bertanya kami siswa smk ingin lebih mengetahui mengenai sensor coin tersebut, itu bagaimana teknisnya agar koin bisa cepat atau lambatnya meluncur? Terimakasih. Good project

    1 reply

    Reply 2 years ago

    Helo, i think i already explain the concept and how it works on step 3 and step 6.
    But i will shortly explain in bahasa indonesia for you;
    untuk konstruksi dan bentuk jalur koin, bisa dilihat pada step 3, saya memanfaatkan gravitasi agar koin meluncur ke bawah. sementara di sepanjang jalur koin saya tempel magnet kecil, agar "mengganggu" atau memperlambat meluncur nya koin. seperti saya jelaskan di step 6, kalau magnet terlalu banyak/kuat, maka koin bisa berhenti. jgn sampai koin brenti krn kita akan menghitung waktu tempuh koin. waktu tempuh yg berbeda itu yg dipakai untk bedakan koin 1000 dan 500. ingat koin 1000 dan 500 kebetulan dimensi nya hampir sama persis. hanya beda material. selnjutnya kalau ingin diskusi bisa di video youtube nya saja ya, video koin test/yg lain. saya usahakan bantu.


    2 years ago

    yay and good


    2 years ago

    Great Idea. Gonna built it one for home use. Just a quick check.

    Can this system return your balance?

    1 reply

    Reply 2 years ago

    No sir. We set the price, and when total value of inserted coins equal to or more than the price, it will allow user select product. No return.
    But with we can add a changer mechanism for return. It will require additional space of course.


    2 years ago

    Very Helpful and good project. Keep up the good work. Thanks for posting.

    1 reply

    2 years ago

    Great project. I will try on adding a coin changer like the RM5 from Comestero.

    Would you share the arduino code ? I am new to arduino, but I can only copy-paste and see what it does, i´m still learning. will you help me ?