Berikut adalah contoh proyek **Mesin Penjual Otomatis Sederhana** menggunakan Arduino Uno. Dalam proyek ini, mesin akan mendeteksi pilihan pengguna dan menggunakan servo untuk mengeluarkan barang.
### Komponen yang Diperlukan:
1. **Arduino Uno**. 53
2. **3 x Servo Motor** (satu untuk setiap rak).15.000
3. **Push Button** atau **Keypad** (untuk input pilihan pengguna).14.000
4. **LCD 16x2** (opsional, untuk menampilkan informasi).26.500
5. **Resistor 10K ohm** (untuk tombol push button).1000
6. **Beberapa barang ringan** (misalnya permen, kapsul kecil, dll.).5000
7. **Buzzer** (opsional, untuk notifikasi suara).2000
total 116.000 : 10 = 12.000
### Deskripsi Kerja:
- Pengguna menekan tombol atau menggunakan keypad untuk memilih barang.
- Arduino membaca input pengguna dan menggerakkan servo terkait untuk mengeluarkan barang dari rak.
- LCD dapat digunakan untuk menampilkan pesan, misalnya, "Silakan Pilih Barang", "Mengeluarkan Barang", dll.
### Rangkaian:
- Hubungkan setiap **servo motor** ke pin digital Arduino.
- Hubungkan setiap **push button** ke pin digital Arduino melalui resistor pull-down (10K ohm).
- Hubungkan **LCD** (jika digunakan) dengan mengikuti konfigurasi standar 4-bit.
### Diagram Koneksi:
1. **Servo Motor**:
- Servo 1: Pin 9
- Servo 2: Pin 10
- Servo 3: Pin 11
2. **Push Button**:
- Tombol 1: Pin 2
- Tombol 2: Pin 3
- Tombol 3: Pin 4
3. **LCD** (opsional):
- Pin RS, E, D4, D5, D6, D7 sesuai pin Arduino (misalnya, RS ke pin 12, E ke pin 11, dan data D4-D7 ke pin 5, 4, 3, 2).
### Kode Arduino:
```cpp
#include <Servo.h>
#include <LiquidCrystal.h>
// Inisialisasi Servo
Servo servo1;
Servo servo2;
Servo servo3;
// Inisialisasi LCD (jika digunakan) - sesuaikan pin jika perlu
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Pin untuk tombol
const int tombol1 = 2;
const int tombol2 = 3;
const int tombol3 = 4;
void setup() {
// Inisialisasi pin tombol
pinMode(tombol1, INPUT);
pinMode(tombol2, INPUT);
pinMode(tombol3, INPUT);
// Inisialisasi Servo
servo1.attach(9);
servo2.attach(10);
servo3.attach(11);
// Atur servo ke posisi awal
servo1.write(0);
servo2.write(0);
servo3.write(0);
// Inisialisasi LCD (opsional)
lcd.begin(16, 2);
lcd.print("Mesin Penjual"); // Teks awal di LCD
delay(2000);
lcd.clear();
}
void loop() {
// Tampilkan pesan di LCD (opsional)
lcd.setCursor(0, 0);
lcd.print("Pilih Barang: ");
// Cek jika tombol pertama ditekan
if (digitalRead(tombol1) == HIGH) {
lcd.setCursor(0, 1);
lcd.print("Barang 1 Dipilih");
keluarkanBarang(servo1); // Menggerakkan servo 1
delay(2000);
lcd.clear();
}
// Cek jika tombol kedua ditekan
if (digitalRead(tombol2) == HIGH) {
lcd.setCursor(0, 1);
lcd.print("Barang 2 Dipilih");
keluarkanBarang(servo2); // Menggerakkan servo 2
delay(2000);
lcd.clear();
}
// Cek jika tombol ketiga ditekan
if (digitalRead(tombol3) == HIGH) {
lcd.setCursor(0, 1);
lcd.print("Barang 3 Dipilih");
keluarkanBarang(servo3); // Menggerakkan servo 3
delay(2000);
lcd.clear();
}
}
// Fungsi untuk menggerakkan servo dan mengeluarkan barang
void keluarkanBarang(Servo servo) {
// Putar servo untuk mengeluarkan barang
servo.write(90); // Atur sudut untuk membuka
delay(1000); // Tunggu barang keluar
servo.write(0); // Kembali ke posisi awal
}
```
### Penjelasan Kode:
1. **Servo**: Servo digunakan untuk menggerakkan mekanisme yang akan mendorong atau melepaskan barang dari rak.
2. **Push Button**: Tombol digunakan untuk memilih barang yang ingin dikeluarkan. Ketika tombol ditekan, Arduino akan mendeteksi input dan menjalankan fungsi untuk menggerakkan servo yang terkait.
3. **LCD** (opsional): LCD digunakan untuk menampilkan status seperti "Pilih Barang" dan "Barang Dipilih". Jika Anda tidak ingin menggunakan LCD, Anda dapat mengabaikan bagian kode yang berhubungan dengan `LiquidCrystal`.
4. **Fungsi `keluarkanBarang()`**: Fungsi ini bertugas untuk memutar servo, mengeluarkan barang, dan kemudian mengembalikan servo ke posisi semula.
### Proses Kerja:
1. Pengguna menekan salah satu tombol (Tombol 1, 2, atau 3).
2. Arduino mendeteksi input dari tombol.
3. Servo yang sesuai akan bergerak, mengeluarkan barang dari rak.
4. LCD akan menampilkan pesan mengenai barang yang dipilih (opsional).
5. Setelah barang keluar, servo kembali ke posisi awal untuk bersiap mengeluarkan barang berikutnya.
### Pengembangan Lebih Lanjut:
- **Keypad**: Anda bisa menggunakan keypad numerik untuk memperbanyak pilihan barang.
- **Sensor Berat**: Tambahkan sensor berat untuk mendeteksi apakah ada barang yang masih tersedia.
- **Sistem Pembayaran**: Sistem pembayaran sederhana bisa ditambahkan menggunakan modul RFID atau sensor koin.
Proyek ini merupakan dasar untuk mesin penjual otomatis, dan bisa diperluas sesuai dengan kebutuhan. Anda juga dapat menambahkan lebih banyak fitur, seperti lebih banyak servo untuk lebih banyak rak barang atau sensor untuk mendeteksi stok barang.