VENDING MACHINE
Vending Machine merupakan alat yang dirancang sebagai alternatif penjualan secara otomatis.
Introduction
Untuk dapat mengoperasikan vending machine ini pengguna harus memasukan koin ke lubang yang sudah disediakan terlebih dahulu. Ketika koin sudah dimasukkan maka koin tersebut akan melewati jalur yang sudah terpasang sensor IR FC-51 (Infrared Obstacle Detaction Sensor Module). Kegunaan dari sensor IR FC-51 adalah mendeteksi ada atau tidaknya koin yang dimasukkan. Setelah koin dimasukkan kemudian pengguna dapat memilih 1 dari 4 makanan ringan yang dipajang dengan cara memasukkan pilihannya lewat tombol yang sudah disediakan. Tombol menandakan posisi makanan ringan yang paling kiri, tombol 2 menandakan makanan ringan yang berada di posisi kanan. Bila pengguna sudah memilih makanan ringan yang dikehendaki, maka motor servo dan sistem mekanik akan mendorong makanan ringan tersebut hingga makanan masuk kedalam box delivery dan akan mengantarkan ke box pengambilan.
HARDWARE
- 1x Arduino Mega2560,
- 2xDriver Motor Stepper A4988,
- 1x IR FC-51 (Infrared Obstacle Detaction Sensor Module),
- 2x Motor Stepper
- 4x Motor Servo Continue,
- 4x Button,
- 2x Limit Swit
- LED (Light emiting Diode),
- LCD (Liquid Crystal Display).
SOFTWARE
1. IDE Arduino (Integrated Developtment Enviroenment), Software processing yang digunakan untuk menulis program kedalam perangkat keras yaitu Arduino. Prosessing sendiri merupakan penggabungan antara bahasa C++ dan Java.
2. EAGLE (Easily Applicable Graphical Layout Editor), merupakan sebuah aplikasi gratis untuk mendesain skematik elektronika maupun PCB (Printed Circuit Board).
DIAGRAM BLOK
Sebelum melakukan perancangan sistem terlebih dahulu dibuat diagram blok sebagai langkah awal pembuatan sistem. Diagram blok menggambarkan secara umum bagaimana cara kerja rangkaian secara keseluruhan, blok diagram dapat dilihat pada gambar dibawah ini :
Diagram Blok Sistem |
PERANCANGAN BOX
Dalam perancangan mekanis diperlukan pengukuran yang tepat, terutama dalam menggabungkan beberapa komponen tambahan yang diperlukan untuk membangun alat sesuai dengan sistem yang di inginkan. Berikut adalah desain prototipe fisik box:Box |
DESAIN SKEMATIK DENGAN FRITZING
Fritzing adalah salah satu dari perangkat lunak gratis yang dapat dipergunakan dengan baik untuk belajar elektronika. Perangkat lunak ini bisa bekerja baik di lingkungan sistem operasi GNU/Linux maupun Microsoft Windows.
Tampilan Awal Software Fritzing Beta |
Rangkaian ini berfungsi untuk menjalankan mikrokontroller agar dapat bekerja/berfungsi sesuai dengan kebutuhan user, dimana perancangannya bertujuan untuk mempermudah penggunaan mikrokontroler serta meminimalisasikan rangkaian kabel.
Schematic Vending Machine |
PROGRAM
VENDING_MACINE.INO (Download)
#include
#include
#include
LiquidCrystal_I2C lcd(0x3f, 16, 2);
Servo servo1, servo2, servo3, servo4;
// Stepper motors pins
#define dirPinVertical 5
#define stepPinVertical 4
#define dirPinHorizontal 7
#define stepPinHorizontal 6
#define coinDetector 9
#define button1 13
#define button2 12
#define button3 11
#define button4 10
#define microSwitchV 15
#define microSwitchH 14
int buttonPressed;
const int ledPin = 53;
const int buzzerPin = 51;
////////////////////////////////////////////////////////////////////////////
// == Fungsi kustom ==
void moveUp (int steps) {
digitalWrite(dirPinVertical, LOW);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
}
void moveDown (int steps) {
digitalWrite(dirPinVertical, HIGH);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
}
void moveLeft (int steps) {
digitalWrite(dirPinHorizontal, HIGH);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
void moveRight (int steps) {
digitalWrite(dirPinHorizontal, LOW);
for (int x = 0; x < steps; x++) {
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
//////////////////////////////////////////////////////////////////////////
void setup() {
lcd.begin(); // Menginisialisasi antarmuka ke layar LCD, dan menentukan dimensi (lebar dan tinggi) dari tampilan
lcd.print(" SELAMAT DATANG ");
delay (2000);
lcd.clear();
lcd.print("DI MESIN PENJUAL");
lcd.setCursor(0, 1);
lcd.print(" OTOMATIS ");
delay (2000);
lcd.clear();
lcd.print("DIRANCANG OLEH:");
lcd.setCursor(0, 1);
lcd.print(" Robe Arta S. ");
delay (2500);
lcd.clear();
lcd.print("AMIK MITRA GAMA ");
lcd.setCursor(0, 1);
lcd.print(" 2018 ");
delay (1000);
lcd.clear();
lcd.print(" MOHON ");
lcd.setCursor(0, 1);
lcd.print("Tunggu.........!");
delay (2000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai.........");
delay (1000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai.");
delay (1500);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai.. ");
delay (1000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai... ");
delay (1000);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai....");
delay (500);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai.....");
delay (500);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai......");
delay (400);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai.......");
delay (300);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai........");
delay (200);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Memulai..........");
delay (100);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Selesai..........");
servo1.attach(0);
servo2.attach(1);
servo3.attach(2);
servo4.attach(3);
pinMode(dirPinVertical, OUTPUT);
pinMode(stepPinVertical, OUTPUT);
pinMode(dirPinHorizontal, OUTPUT);
pinMode(stepPinHorizontal, OUTPUT);
pinMode(coinDetector, INPUT);
// Mengaktifkan pin digital PULLUP
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
pinMode(microSwitchV, INPUT_PULLUP);
pinMode(microSwitchH, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Posisi awal vertikal
digitalWrite(dirPinVertical, HIGH); // Atur stepper untuk bergerak ke arah tertentu
while (true) {
if (digitalRead(microSwitchV) == LOW) { // Jika saklar mikro ditekan, pindahkan platform sedikit ke atas dan keluar dari loop sementara
moveUp(70);
break;
}
// Pindahkan pengantar ke atas hingga saklar mikro ditekan
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
//Posisi awal Horizontal
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) {
moveLeft(350);
break;
}
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
void loop() {
// Print "Masukkan Coin!" on the LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Masukkan Koin..!");
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
// Tunggu hingga koin terdeteksi
while (true) {
if (digitalRead(coinDetector) == LOW) { // Jika koin terdeteksi, keluar dari loop sementara
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
break;
}
}
delay(300);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Silahkan Pilih ");
lcd.setCursor(0, 1);
lcd.print(" 1, 2, 3 atau 4?");
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
// Tunggu hingga tombol ditekan
while (true) {
if (digitalRead(button1) == LOW) {
buttonPressed = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Item 1 dipilih");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
break;
}
if (digitalRead(button2) == LOW) {
buttonPressed = 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Item 2 dipilih");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
break;
}
if (digitalRead(button3) == LOW) {
buttonPressed = 3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Item 3 dipilih");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
break;
}
if (digitalRead(button4) == LOW) {
buttonPressed = 4;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Item 4 dipilih");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
break;
}
}
// Print "Mengambil..."
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mengambil.......");
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
// Tergantung pada tombol yang ditekan, gerakkan wadah ke posisi itu dan mendorong item yang dipilih
switch (buttonPressed) {
case 1:
// Pindahkan penampung ke rak 1
moveUp(12450); // Memindahkan 12450 putaran (Catatan: motor stepper diatur dalam resolusi setel Kuartal)
delay(200);
moveLeft(17); // Pindah ke kiri 17 putaran
delay(300);
// mendorong item yang dipilih
servo1.writeMicroseconds(3000); // berputar
delay(950);
servo1.writeMicroseconds(2000); // berhenti
delay(500);
// Pindahkan wadah kembali ke posisi awal
moveRight(17);
delay(200);
moveDown(12350);
break;
case 2:
// Pindahkan penampung ke rak 2
moveUp(12350);
delay(200);
// mendorong item yang dipilih
servo2.writeMicroseconds(2500); // berputar
delay(950);
servo2.writeMicroseconds(2000); // berhenti
delay(500);
moveDown(12350);
break;
case 3:
// Pindahkan penampung ke rak 3
moveUp(6250);
delay(200);
moveLeft(17);
delay(300);
// mendorong item yang dipilih
servo3.writeMicroseconds(2500); // berputar
delay(950);
servo3.writeMicroseconds(2000); // berhenti
delay(500);
// Pindahkan wadah kembali ke posisi awal
moveRight(17);
delay(200);
moveDown(6250);
break;
case 4:
// mendorong item yang dipilih 4
moveUp(6250); // Pindahkan secara vertikal 6250 putaran
delay(200);
// mendorong item yang dipilih
servo4.writeMicroseconds(2500); // berputar
delay(950);
servo4.writeMicroseconds(2000); // berhenti
delay(500);
moveDown(6250);
break;
}
lcd.clear(); // Hapus tampilan
lcd.setCursor(0, 0);
lcd.print("Item Sampai....!"); // tampilkan data pada LCD
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
//lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Silahkan Ambil.!");
delay(1500);
lcd.clear(); // Hapus tampilan
lcd.setCursor(0, 0);
lcd.print("TERIMAKASIH....!"); // tampilkan data pada LCD
delay(2000);
}
Silahkan Share dan tinggalkan komentar, Semoga bermanfaat.
HASIL test button bisa dilihat di link Youtube:
comment 0 komentar
more_vert