#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <Servo.h>
LiquidCrystal lcd(27, 26, 25, 24, 23, 22);
Servo servo1, servo2, servo3, servo4;
#define dirPinVertical 0
#define stepPinVertical 1
#define dirPinHorizontal 2
#define stepPinHorizontal 3
#define coinDetector 9
#define button1 13
#define button2 12
#define button3 11
#define button4 10
#define microSwitchV 15
#define microSwitchH 14
int buttonPressed;
void setup() {
lcd.begin(16, 2);
servo1.attach(4);
servo2.attach(5);
servo3.attach(6);
servo4.attach(7);
pinMode(dirPinVertical, OUTPUT);
pinMode(stepPinVertical, OUTPUT);
pinMode(dirPinHorizontal, OUTPUT);
pinMode(stepPinHorizontal, OUTPUT);
pinMode(coinDetector, INPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(button3, INPUT_PULLUP);
pinMode(button4, INPUT_PULLUP);
pinMode(microSwitchV, INPUT_PULLUP);
pinMode(microSwitchH, INPUT_PULLUP);
digitalWrite(dirPinVertical, HIGH);
while (true) {
if (digitalRead(microSwitchV) == LOW) {
moveUp(70);
break;
}
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) {
moveLeft(350);
break;
}
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Insert a coin!");
while (true) {
if (digitalRead(coinDetector) == LOW) {
break;
}
}
delay(10);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Select your item");
lcd.setCursor(0, 1);
lcd.print(" 1, 2, 3 or 4?");
while (true) {
if (digitalRead(button1) == LOW) {
buttonPressed = 1;
break;
}
if (digitalRead(button2) == LOW) {
buttonPressed = 2;
break;
}
if (digitalRead(button3) == LOW) {
buttonPressed = 3;
break;
}
if (digitalRead(button4) == LOW) {
buttonPressed = 4;
break;
}
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Delivering...");
switch (buttonPressed) {
case 1:
moveUp(4900);
delay(200);
moveLeft(1700);
delay(300);
servo1.writeMicroseconds(2000);
delay(950);
servo1.writeMicroseconds(1500);
delay(500);
moveRight(1700);
delay(200);
moveDown(4900);
break;
case 2:
moveUp(4900);
delay(200);
servo2.writeMicroseconds(2000);
delay(950);
servo2.writeMicroseconds(1500);
delay(500);
moveDown(4900);
break;
case 3:
moveUp(2200);
delay(200);
moveLeft(1700);
delay(300);
servo3.writeMicroseconds(2000);
delay(950);
servo3.writeMicroseconds(1500);
delay(500);
moveRight(1700);
delay(200);
moveDown(2200);
break;
case 4:
moveUp(2200);
delay(200);
servo4.writeMicroseconds(2000);
delay(950);
servo4.writeMicroseconds(1500);
delay(500);
moveDown(2200);
break;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Item delivered!");
delay(2000);
}
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);
}
}
Bahasa kode: Arduino ( arduino )
Penjelasan kode sumber
Pertama-tama kita perlu menyertakan pustaka Servo dan LiquidCrystal, menentukan pin LCD, empat motor servo, pin motor stepper, detektor koin, serta empat tombol dan dua sakelar mikro.
Di bagian pengaturan, kami mengatur mode pin untuk setiap pin yang disebutkan di atas. Kami dapat mencatat bahwa untuk tombol dan pin sakelar mikro, kami mengaktifkan resistor pull up internal. Ini berarti bahwa level logika pada pin ini akan selalu TINGGI, dan setelah kami menekannya, level logika akan turun ke RENDAH.
Sebelum kita memasuki loop utama, kita juga mengatur pembawa ke posisi awalnya yang ditentukan oleh dua sakelar mikro. Jadi dengan loop while kita terus menggerakkan pembawa ke posisi awalnya dan begitu dua sakelar mikro ditekan, motor akan berhenti dan bergerak ke posisi awal yang diinginkan.
digitalWrite(dirPinVertical, HIGH);
while (true) {
if (digitalRead(microSwitchV) == LOW) {
moveUp(70);
break;
}
digitalWrite(stepPinVertical, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinVertical, LOW);
delayMicroseconds(300);
}
digitalWrite(dirPinHorizontal, LOW);
while (true) {
if (digitalRead(microSwitchH) == LOW) {
moveLeft(350);
break;
}
digitalWrite(stepPinHorizontal, HIGH);
delayMicroseconds(300);
digitalWrite(stepPinHorizontal, LOW);
delayMicroseconds(300);
}
Berikut adalah estimasi biaya komponen yang diperlukan untuk membuat mesin penyimpanan HP dengan fungsi vending machine menggunakan Arduino Uno. Harga-harga ini adalah perkiraan dan bisa bervariasi tergantung pada tempat dan penyedia yang Anda gunakan.
### 1. **Arduino Uno** 97
- **Harga:** $10 - $25
### 2. **Layar Sentuh TFT** 195
- **Harga:** $15 - $40
### 3. **Barcode Scanner**
- **Harga:** $30 - $60
### 4. **Printer Barcode**
- **Harga:** $50 - $100
### 5. **Solenoid Lock** 54
- **Harga:** $10 - $20 per unit (kali jumlah laci)
### 6. **Motor Servo**
- **Harga:** $5 - $20 per unit (tergantung kebutuhan mekanisme vending)
### 7. **Sistem Pembayaran**
- **Modul RFID atau Pembayaran Berbasis Kartu:** $15 - $50
### 8. **Komponen Lain**
- **Breadboard:** $5 - $10
- **Kabel Jumper:** $5 - $10
- **Resistor dan Kapasitor:** $5 - $10
- **Modul Relay:** $5 - $15
- **Power Supply:** $10 - $30
### 9. **Struktur dan Bahan Tambahan**
- **Lemari/Boks Penyimpanan:** $100 - $300 (tergantung bahan dan ukuran)
- **Bahan untuk Laci:** $50 - $100
- **Mekanisme Vending (rak, motor, dll.):** $50 - $100
### Total Estimasi Biaya
- **Arduino Uno:** $20
- **Layar Sentuh TFT:** $30
- **Barcode Scanner:** $45
- **Printer Barcode:** $75
- **Solenoid Lock (misalnya 10 laci):** $150
- **Motor Servo (misalnya 2 unit):** $30
- **Sistem Pembayaran:** $30
- **Komponen Lain:** $30
- **Struktur dan Bahan Tambahan:** $250
**Total:** $660
### Catatan
1. **Variasi Harga:** Harga dapat bervariasi tergantung pada pemasok, wilayah, dan kualitas komponen.
2. **Komponen Bekas:** Menggunakan komponen bekas atau daur ulang bisa mengurangi biaya.
3. **Pengiriman dan Pajak:** Jangan lupa untuk mempertimbangkan biaya pengiriman dan pajak yang mungkin berlaku.
4. **Tambahan Fitur:** Menambahkan fitur tambahan seperti konektivitas internet, lebih banyak laci, atau sistem keamanan yang lebih canggih akan menambah biaya.
Estimasi biaya ini adalah perkiraan dasar dan dapat disesuaikan sesuai dengan spesifikasi dan kebutuhan proyek Anda.
------------------------------------------------------------------------------------------------------------------
Berikut adalah skema dasar untuk menggabungkan mesin penyimpanan HP dengan vending machine menggunakan Arduino Uno. Skema ini mencakup komponen utama seperti sensor barcode, solenoid locks, motor servo untuk mekanisme vending, dan layar sentuh.
### Komponen yang Dibutuhkan
1. **Arduino Uno**
2. **Layar Sentuh TFT**
3. **Barcode Scanner (misalnya, scanner USB yang dapat dihubungkan dengan Arduino melalui konverter USB ke serial)**
4. **Printer Barcode (misalnya, printer thermal yang dapat dihubungkan dengan Arduino)**
5. **Solenoid Lock (untuk laci penyimpanan HP)**
6. **Motor Servo (untuk mekanisme vending)**
7. **Sistem Pembayaran (misalnya, modul RFID atau sistem pembayaran berbasis kartu)**
8. **Komponen Lain:**
- Breadboard
- Kabel jumper
- Resistor dan kapasitor sesuai kebutuhan
- Modul Relay (untuk mengendalikan solenoid lock dan motor servo)
### Skema Dasar
#### 1. **Sistem Penyimpanan HP**
1. **Layar Sentuh TFT:**
- VCC ke 5V Arduino
- GND ke GND Arduino
- CS ke Pin 10 Arduino
- RESET ke Pin 8 Arduino
- DC/RS ke Pin 9 Arduino
- MOSI ke Pin 11 Arduino
- SCK ke Pin 13 Arduino
- LED ke 3.3V Arduino
- MISO ke Pin 12 Arduino
2. **Barcode Scanner:**
- VCC ke 5V Arduino
- GND ke GND Arduino
- RX ke TX Arduino (melalui konverter USB ke serial)
- TX ke RX Arduino (melalui konverter USB ke serial)
3. **Printer Barcode:**
- VCC ke 5V Arduino
- GND ke GND Arduino
- TX ke RX Arduino
- RX ke TX Arduino
4. **Solenoid Lock:**
- VCC ke 12V (melalui relay)
- GND ke GND Arduino
- Kontrol ke Pin 7 Arduino (melalui relay)
#### 2. **Sistem Vending**
1. **Motor Servo:**
- VCC ke 5V Arduino
- GND ke GND Arduino
- Kontrol ke Pin 6 Arduino
2. **Sistem Pembayaran (misalnya, modul RFID):**
- VCC ke 3.3V Arduino
- GND ke GND Arduino
- RST ke Pin 9 Arduino
- SDA ke Pin 10 Arduino
- MOSI ke Pin 11 Arduino
- MISO ke Pin 12 Arduino
- SCK ke Pin 13 Arduino
### Kode Arduino
Berikut adalah contoh kode sederhana untuk mengontrol sistem penyimpanan HP dan vending machine:
```cpp
#include <SPI.h>
#include <TFT.h>
#include <Servo.h>
#define CS 10
#define DC 9
#define RESET 8
TFT tft = TFT(CS, DC, RESET);
Servo servo;
int solenoidPin = 7;
int servoPin = 6;
void setup() {
// Inisialisasi layar sentuh
tft.begin();
tft.background(255, 255, 255);
tft.stroke(0, 0, 0);
tft.setTextSize(2);
// Inisialisasi barcode scanner dan printer barcode
Serial.begin(9600);
// Inisialisasi solenoid lock
pinMode(solenoidPin, OUTPUT);
digitalWrite(solenoidPin, LOW);
// Inisialisasi motor servo
servo.attach(servoPin);
servo.write(0); // posisi awal
// Tampilkan menu utama di layar sentuh
tft.text("Simpan HP", 10, 10);
tft.text("Ambil HP", 10, 40);
tft.text("Beli Barang", 10, 70);
}
void loop() {
// Penerimaan HP
if (touchScreenPressed() && touchScreenX() < 100 && touchScreenY() < 30) {
tft.text("Scan Barcode", 10, 100);
// Kode untuk memindai barcode dan menyimpan HP
// Misalnya, menggerakkan solenoid lock untuk membuka laci
digitalWrite(solenoidPin, HIGH); // Buka laci
delay(5000); // Tunggu 5 detik untuk penyimpanan HP
digitalWrite(solenoidPin, LOW); // Kunci laci
tft.text("HP Disimpan", 10, 130);
}
// Pengambilan HP
if (touchScreenPressed() && touchScreenX() < 100 && touchScreenY() > 30 && touchScreenY() < 60) {
tft.text("Scan Barcode", 10, 100);
// Kode untuk memindai barcode dan mengambil HP
// Misalnya, menggerakkan solenoid lock untuk membuka laci
digitalWrite(solenoidPin, HIGH); // Buka laci
delay(5000); // Tunggu 5 detik untuk pengambilan HP
digitalWrite(solenoidPin, LOW); // Kunci laci
tft.text("HP Diambil", 10, 130);
}
// Pembelian Barang
if (touchScreenPressed() && touchScreenX() < 100 && touchScreenY() > 60) {
tft.text("Pilih Barang", 10, 100);
// Kode untuk memilih barang dan menggerakkan motor servo untuk mengeluarkan barang
servo.write(90); // Pindahkan ke posisi mengeluarkan barang
delay(5000); // Tunggu 5 detik untuk pengeluaran barang
servo.write(0); // Kembali ke posisi awal
tft.text("Barang Dibeli", 10, 130);
}
}
boolean touchScreenPressed() {
// Kode untuk mendeteksi apakah layar sentuh ditekan
return true; // Placeholder
}
int touchScreenX() {
// Kode untuk mendapatkan koordinat X dari layar sentuh
return 0; // Placeholder
}
int touchScreenY() {
// Kode untuk mendapatkan koordinat Y dari layar sentuh
return 0; // Placeholder
}
```
### Penjelasan Kode
- **Inisialisasi Layar Sentuh:**
Layar sentuh diinisialisasi dan menampilkan menu utama dengan tiga opsi: "Simpan HP", "Ambil HP", dan "Beli Barang".
- **Penerimaan HP:**
Jika pengguna memilih opsi "Simpan HP", sistem akan memindai barcode dan menggerakkan solenoid lock untuk membuka laci penyimpanan HP.
- **Pengambilan HP:**
Jika pengguna memilih opsi "Ambil HP", sistem akan memindai barcode dan menggerakkan solenoid lock untuk membuka laci sehingga pengguna bisa mengambil HP.
- **Pembelian Barang:**
Jika pengguna memilih opsi "Beli Barang", sistem akan menggerakkan motor servo untuk mengeluarkan barang dari vending machine.
### Catatan
1. **Komunikasi Serial:** Pastikan barcode scanner dan printer barcode mendukung komunikasi serial dengan Arduino. Anda mungkin perlu menggunakan konverter USB ke serial jika diperlukan.
2. **Solenoid Lock dan Motor Servo:** Pastikan solenoid lock dan motor servo yang digunakan sesuai dengan tegangan dan arus yang dapat ditangani oleh Arduino dan modul relay.
3. **Layar Sentuh:** Sesuaikan dengan jenis layar sentuh yang digunakan. Library dan pin yang digunakan bisa berbeda tergantung pada model layar sentuh.
4. **Pemrograman Lanjutan:** Kode di atas adalah contoh sederhana. Untuk implementasi sebenarnya, Anda perlu menambahkan lebih banyak logika seperti validasi barcode, penanganan kesalahan, dan integrasi dengan sistem pembayaran.
Dengan skema dan kode ini, Anda dapat membuat mesin penyimpanan HP yang juga berfungsi sebagai vending machine menggunakan Arduino Uno.
----------------------------------------------------------------------------------------------------------------------------
Mengombinasikan mesin penyimpanan HP dengan vending machine dapat memberikan solusi yang lebih praktis dan multifungsi. Berikut adalah rancangan dasar untuk mesin penyimpanan HP yang juga berfungsi sebagai vending machine.
### 1. **Komponen Utama**
- **Lemari Penyimpanan:**
- Bahan kokoh seperti besi atau aluminium.
- Beberapa laci/kotak untuk penyimpanan HP yang bisa dikunci.
- **Sistem Barcode:**
- Barcode scanner.
- Printer barcode untuk mencetak barcode unik untuk setiap laci/kotak.
- **Sistem Elektronik:**
- Mikrokomputer (misalnya Raspberry Pi atau Arduino).
- Layar sentuh untuk antarmuka pengguna.
- Modul komunikasi (Wi-Fi atau Bluetooth) untuk konektivitas.
- **Sistem Mekanisme Kunci:**
- Solenoid locks atau elektromagnetik untuk mengunci dan membuka laci/kotak.
- **Sistem Vending:**
- Rak barang yang berputar atau bergerak.
- Mekanisme pengeluaran barang.
- Sistem pembayaran (kartu kredit, uang tunai, atau e-wallet).
### 2. **Cara Kerja**
#### a. **Proses Penerimaan HP:**
1. Pengguna mendekati mesin penyimpanan.
2. Pada layar sentuh, pengguna memilih opsi "Simpan HP".
3. Mesin akan mencetak barcode unik yang berisi informasi laci/kotak yang kosong.
4. Pengguna menempelkan barcode ini pada HP mereka.
5. Pengguna menempatkan HP dalam laci/kotak yang ditunjuk oleh sistem.
6. Sistem mengunci laci/kotak tersebut dan menyimpan informasi barcode dalam basis data.
#### b. **Proses Pengambilan HP:**
1. Pengguna mendekati mesin dan memilih opsi "Ambil HP" pada layar sentuh.
2. Pengguna memindai barcode pada HP mereka menggunakan scanner barcode.
3. Sistem memverifikasi barcode dan membuka laci/kotak yang sesuai.
4. Pengguna mengambil HP mereka dan menutup laci/kotak.
5. Sistem menghapus informasi barcode dari basis data dan menandai laci/kotak sebagai kosong.
#### c. **Proses Pembelian Barang:**
1. Pengguna mendekati mesin vending.
2. Pada layar sentuh, pengguna memilih barang yang ingin dibeli.
3. Pengguna melakukan pembayaran melalui sistem pembayaran yang tersedia.
4. Sistem mengeluarkan barang yang dipilih melalui mekanisme pengeluaran barang.
5. Pengguna mengambil barang dari slot pengeluaran.
### 3. **Diagram Blok**
#### a. Sistem Keseluruhan
```
[Pengguna] --> [Layar Sentuh] --> [Mikrokomputer]
| | |
v v v
[Sistem Mekanisme Kunci] [Basis Data] [Sistem Vending]
| |
v v
[Laci/Kotak Penyimpanan HP] [Rak Barang & Mekanisme Pengeluaran]
```
#### b. Alur Proses
```
[Pengguna] --> [Layar Sentuh] --> [Sistem Penerimaan]
|
v
[Cetak Barcode]
|
v
[Simpan HP]
|
v
[Kunci Laci/Kotak]
[Pengguna] --> [Layar Sentuh] --> [Sistem Pengambilan]
|
v
[Pindai Barcode]
|
v
[Buka Laci/Kotak]
|
v
[Ambil HP]
|
v
[Tandai Laci/Kotak Kosong]
[Pengguna] --> [Layar Sentuh] --> [Sistem Vending]
|
v
[Pilih Barang]
|
v
[Pembayaran]
|
v
[Pengeluaran Barang]
```
### 4. **Desain Fisik**
- **Ukuran Lemari:** Disesuaikan dengan jumlah laci/kotak penyimpanan HP dan ruang untuk vending machine.
- **Laci/Kotak:** Cukup besar untuk menyimpan berbagai ukuran HP.
- **Rak Barang Vending:** Terorganisir dengan baik dan dapat menampung berbagai produk.
- **Posisi Layar Sentuh dan Scanner Barcode:** Dipasang di bagian depan lemari untuk memudahkan akses.
### 5. **Keamanan dan Pemeliharaan**
- **Keamanan:**
- Hanya pengguna yang memiliki barcode yang bisa membuka laci/kotak.
- Log aktivitas untuk melacak semua tindakan penyimpanan, pengambilan, dan pembelian.
- **Pemeliharaan:**
- Pemeriksaan rutin terhadap sistem mekanisme kunci dan mekanisme pengeluaran barang.
- Pembaruan perangkat lunak untuk meningkatkan fungsionalitas dan keamanan.
### 6. **Pengembangan Lebih Lanjut**
- **Integrasi dengan Aplikasi Mobile:** Menggunakan aplikasi mobile untuk mengelola penyimpanan, pengambilan HP, dan pembelian barang.
- **Pemberitahuan Otomatis:** Mengirim notifikasi ke pengguna ketika HP mereka disimpan, diambil, atau barang dibeli.
- **Monitoring Real-Time:** Memantau stok barang dan status laci/kotak secara real-time melalui internet.
Rancangan ini memberikan solusi yang multifungsi, menggabungkan penyimpanan HP dengan vending machine, yang dapat diimplementasikan di berbagai lokasi seperti sekolah, pusat perbelanjaan, atau tempat umum lainnya.