Membuat Mesin Jual Otomatis Pribadi Beroperasi Koin: Panduan Komponen & Rangkaian
Komponen dan Perlengkapan
Plywood FriendlyARM 1/4
Potong plywood sesuai dimensi yang ditentukan dalam diagram
×
4
Blokir plywood 3/4"
Potong plywood menjadi strebar lebar 3/4" dan sepanjang bagian yang dihubungkan, lihat diagram
×
1
LAFVIN 5 Set 28BYJ-48 ULN2003 5V Stepper Motor + Papan Driver ULN2003 untuk Arduino
Motor ini akan dapat mendorong setiap camilan yang Anda masukkan ke dalam mesin
×
1
Aksesori PC - Konektor Kabel Ribbon Flat Warna Pelangi IDC 1.27mm Pitch untuk Konektor 2.54mm (50P-10FT)
Diperlukan untuk membuat mesin rapi dan profesional
×
1
Glarks 635Pcs Rumah Konektor Dupont Pin Konektor Laki/Perempuan 40 Pin
Diperlukan untuk membuat mesin rapi dan profesional
×
1
Microswitch Pengganti Terang Gamelec
Harus ada tombol
×
1
Breadboard (generik)
Papan las juga bekerja baik
×
1
Kit Papan PCB Ganda Sisi 30 Pcs Prototipe
Hanya satu atau dua yang diperlukan tetapi ukurannya sempurna untuk proyek di masa depan
×
1
Arduino Mega 2560
Kontroler yang digunakan adalah Mega 2560
×
1
Modul Relai 5v Tolako untuk Arduino ARM
Diperlukan untuk mencegah motor terlalu panas
×
1
Modul Layar LCD Serial 1602 2pcs HiLetgo
Tanpa ini Anda tidak akan tahu tombol mana yang ditekan
×
1
Stander Lampu LED
Opsional
×
2
Kabel Grounding Tembaga Padat 8-Gauge 50 kaki
Ini adalah apa yang akan Anda gunakan untuk membuat gulungan
×
1
Pemisah Rak Logam Datar
×
1
Alat dan Mesin yang Diperlukan
Gergaji meja atau listrik
Jika Anda tidak memiliki tempat untuk memotong kayu
Paku las (generik)
Pistol lem panas (generik)
Jangan lupa stik lem juga
Aplikasi dan Layanan Online
Arduino IDE
Tentang Proyek Ini
MESIN JUAL OTOMATIS PRIBADI
Proyek ini adalah panduan langkah demi langkah untuk membuat mesin jual otomatis pribadi. Mesin jual dapat diisi dengan camilan favorit Anda atau bisa dibawa ke kantor sehingga Anda dapat berbagi camilan dengan tim Anda. Lihat dan berikan pendapat Anda.
Membangun Mesin:
Saya akan merujuk pada diagram mesin sepanjang teks ini jadi silakan merujuk pada diagram untuk klarifikasi/pemahaman.
Dimensi mesin adalah 21"W x 18"D x 24 1/4"H (Dimensi Kotak)
2 panel 18"D x 23 3/4"H (Sisi)
2 panel 21"W x 18"D (Atas & Bawah)
2 panel 21"W x 24 1/4"H (Depan & Belakang)
Dinding pembagi adalah 18"D x 23 3/4"H
Rak dalam adalah 13"W x 12"D (kali 2, rak atas dan bawah)
Rak berjarak 8" 13" lebar 12" dalam
Setiap blok biru pada diagram panel adalah titik pemasangan ¾"W x ¾"H yang dalam sebesar panel
Susun kotak seperti yang ditunjukkan dalam diagram dan di sini menggunakan blokir 3/4" di setiap titik pertemuan. Perhatikan bahwa dinding samping berada di atas plate bawah dan di bawah plate atas. Dinding perimeter harus mengukur 21"W x 24 1/4"H.
Dinding pembagi perlu disiapkan sebelum dipasang. Ukur dari atas 16 1/4" dan pasang blokir di sana untuk rak bawah. Ukur 8 1/4" dari atas dan pasang blokir untuk rak atas. Selesaikan langkah-langkah ini pada dinding kiri (melihat dari depan mesin) sehingga Anda dapat memasang blokir untuk rak atas dan bawah.
**** Catatan rak bawah perlu dipasang terlebih dahulu jika tidak mengamankannya ke blokir akan sangat sulit.
Setelah blokir dipasang untuk rak gunakan panel 13" x 12" dan pasang satu pada setiap set blokir. Ini akan secara otomatis menyiapkan dinding pembagi di tempat yang tepat. Kemudian amankan blokir di atas dan bawah sisi kanan dinding pembagi. Kemudian amankan ke panel atas dan bawah Ini akan sepenuhnya mengamankan struktur Anda.
Pasang panel belakang dan siapkan untuk pemasangan motor. Pastikan Anda telah mencetak roda gulungan sehingga Anda dapat mengukurnya dan menyiapkan lubang bor. Ukur roda dan tambahkan 1/4" pada tingginya sehingga akan memberi ruang untuk gulungan berputar. Anda mungkin ingin menyesuaikan ini sesuai kebutuhan tergantung pada material Anda. Ukur 6 1/2" di rak untuk menandai titik tengahnya. Ukur 3 1/4" untuk menemukan pusat setiap bagian rak. Gunakan ukuran tinggi yang Anda catat tadi untuk menemukan titik bor. Bor lubang yang akan memungkinkan Anda menghubungkan roda ke motor tanpa poros roda menggosok papan. Selesaikan pemasangan motor dan memasang pengait.
Menyiapkan relai motor:
Hubungkan pin sebagai berikut. Gunakan chip L293D (kerucut ke kiri) (Di diagram rangkaian) sehingga Anda dapat mengontrol relai. Ini akan memungkinkan Anda menghubungkan motor ke daya.
(Dimulai dari Kiri ke Kanan)
Pin 1 hubungkan ke soket pin 10 pada kontroler (Di diagram rangkaian)
Pin2 hubungkan ke soket pin 9 pada kontroler (Di diagram rangkaian)
Pin 3 hubungkan ke sisi positif relai (dengan 3 pin menghadap Anda, pin di kiri) (Di diagram rangkaian)
Pin 4 hubungkan ke ground 12V pada breadboard (Di diagram rangkaian)
Pin 5 Tidak digunakan (Di diagram rangkaian)
Pin 6 hubungkan ke sisi ground pada relai (dengan 3 pin menghadap Anda, pin di kanan) (Di diagram rangkaian)
Pin 7 hubungkan ke soket pin 8 pada kontroler (Di diagram rangkaian)
Pin 8 hubungkan ke +12V pada breadboard (Di diagram rangkaian)
Hubungkan pin tengah pada relai ke +12V pada breadboard (Di diagram rangkaian)
Hubungkan pin kanan belakang pada relai (dengan 3 pin menghadap Anda, pin di belakang di kanan) ke kabel positif yang pergi ke driver motor (Di diagram rangkaian)
Pemasangan layar dan tombol: Layar - Pilih tempat di sisi kanan mesin (melihat mesin dari depan) dan tandai lubang yang perlu dibuat untuk bagian tampilan layar (2.53937" x 0.5708661) Tombol - Pilih tempat di sisi kanan mesin (melihat mesin dari depan) dan tandai lubang yang perlu dibuat untuk 4 tombol. Lubang perlu berukuran 1.10236" jika menggunakan tombol yang sama persis dengan daftar bagian. Saya suka menggunakan bor lebih kecil dari yang dibutuhkan dan kertas pasir untuk menghaluskan ke ukuran yang dibutuhkan.
Ingatlah bahwa Anda perlu memastikan bahwa semua koneksi berada pada tempat yang sama persis seperti dalam diagram di atas. LED yang ditunjukkan dalam diagram adalah LED yang terpasang di dalam tombol tekan. Diagram menunjukkan mereka terpisah tetapi itu hanya untuk tampilan dan untuk memudahkan membaca skema.
Hubungkan setiap motor ke driver yang diberikan dengan mereka. Kemudian hubungkan setiap driver ke kontroler menggunakan langkah-langkah ini:
Pengaturan Motor:
Daya harus terhubung ke sisi 12V pada breadboard. Daya ini berasal dari suplai daya ATX yang akan kita siapkan di akhir. Kemudian hubungkan 4 pin "masuk" pada driver ke kontroler. Pin-pin ini adalah sebagai berikut
********* JANGAN MENGHUBUNGKAN KE 2 PIN PERTAMA DI BLOK INI MEREKA ADA PIN 5V - TIDAK DIGUNAKAN DALAM PROYEK INI *********
Motor 4: Pin Merah 31, 33, 35, 37 (Di diagram rangkaian)
Koneksi Tombol:
Hubungkan satu sisi Tombol Tekan 1 ke daya 5v, sisi lain ke resistor grounded 220 bersama dengan Pin Analog A0 (Di diagram rangkaian)
Hubungkan satu sisi Tombol Tekan 2 ke daya 5v, sisi lain ke resistor grounded 220 bersama dengan Pin Analog A1 (Di diagram rangkaian)
Hubungkan satu sisi Tombol Tekan 3 ke daya 5v, sisi lain ke resistor grounded 220 bersama dengan Pin Analog A2 (Di diagram rangkaian)
Hubungkan satu sisi Tombol Tekan 4 ke daya 5v, sisi lain ke resistor grounded 220 bersama dengan Pin Analog A3 (Di diagram rangkaian)
LAYAR LCD:
Hubungkan layar ke sisi 5v pada breadboard untuk daya dan ground
Pin adalah sebagai berikut:
Pin 1: Hubungkan ke Ground(Di diagram rangkaian)
Pin 2: Hubungkan ke daya 5v (Di diagram rangkaian)
Pin 3: Hubungkan ke potentiometer yang dapat disesuaikan (Ditampilkan di bawah) Pin kiri bawah ke ground, pin kanan bawah ke daya, dan pin atas ke pin 3 pada LCD (Di diagram rangkaian, Ini adalah cara Anda mengatur kontras pada LCD sehingga teks tajam dan bersih)
Pin 4: Pin sinyal pertama ke soket pin kontroler 2 (Di diagram rangkaian)
Pin 5: Hubungkan ke ground (Di diagram rangkaian)
Pin 6: Pin sinyal kedua ke soket pin kontroler 3 (Di diagram rangkaian)
Pin 7: TIDAK DIGUNAKAN
Pin 8: TIDAK DIGUNAKAN
Pin 9: TIDAK DIGUNAKAN
Pin 10: TIDAK DIGUNAKAN
Pin 11: Pin sinyal ketiga ke soket pin kontroler 4 (Di diagram rangkaian)
Pin 12: Pin sinyal keempat ke soket pin kontroler 5 (Di diagram rangkaian)
Pin 13: Pin sinyal kelima ke soket pin kontroler 6 (Di diagram rangkaian)
Pin 14: Pin sinyal keenam ke soket pin kontroler 7 (Di diagram rangkaian)
Pin 15: Hubungkan ke daya 5v (Di diagram rangkaian)
Pin 16: Hubungkan ke Ground (Di diagram rangkaian)
SUPAI DAYA ATX:
Hanya potong kabel yang diperlukan untuk memasang daya pada perangkat. Kabel lainnya lebih aman di konektor plastik dan akan memungkinkan Anda menggunakannya untuk proyek lain jika diperlukan.
Pin ATX:
Potong dan kupas (Ground) kabel hitam pin 3 dan (Sinyal) kabel hijau pin 16. Sambungkan kabel ini ke saklar sehingga Anda dapat menyalakan dan mematikan mesin (Di diagram rangkaian)
Potong dan kupas (Ground) kabel hitam pin 7 dan (+12V) kabel kuning pin 10. Sambungkan kabel ini ke sisi 12v pada breadboard yang ditetapkan dalam koneksi hitam dan kuning. (Di diagram rangkaian)
Potong dan kupas (Ground) kabel hitam pin 24 dan (+12V) kabel kuning pin 11. Sambungkan kabel ini ke konektor yang kompatibel untuk memasang daya pada papan Arduino (Di diagram rangkaian)
Potong dan kupas (Ground) kabel hitam pin 19 dan (+5V) kabel merah pin 21. Sambungkan kabel ini ke sisi 5V pada breadboard (Di diagram rangkaian)
Pemisah Rak dan Gulungan:
Ini cara menyiapkan rak dan ekstruder Anda.
Rak - Di titik tengah 6 1/2" dari dinding samping kiri (melihat mesin dari depan) atau dinding pembagi harus ada tanda dari langkah-langkah di atas. Gunakan logam datar dan lipat menjadi segitiga di atas. Tampak seperti ini "^" Ini akan menjadi pemisah tengah Anda. Letakkan segitiga di atas tanda tengah pada rak. Ulangi untuk rak kedua. Gunakan lem panas untuk menempelkan di tempat. Saya juga melemarkan sisi tetapi itu opsional.
Gulungan - Untuk membuat gulungan cari tabung 1 1/2" terlebih dahulu. Pipa, tabung kit, kalung spray, atau objek serupa akan cukup. Salah satu trik adalah ambil karet getah dan lipat dari atas ke bawah di sekitar panjang tabung. Garis lurus di setiap sisi getah di kedua sisi tabung. Setelah Anda memiliki garis paralel di kedua sisi gunakan penggaris untuk menandai titik berikutnya. Pilih satu sisi dan ukur 1" dan tandai, kemudian ukur 2" dari sana tandai dan terus buat jarak 2" hingga ujung tabung. Sekarang, di sisi lain tabung tandai hanya interval 2". Mulai membuat gulungan di sisi 1" tabung dan terus membuat gulungan Anda sehingga menyentuh setiap tanda di kedua sisi tabung. Ini akan memberi jarak 2" antara tangga. Harus cukup besar untuk sebagian besar barang. Jika Anda berencana menggunakannya untuk coklat batang sederhanakan gulungan menjadi 1" cukup kurangi rumus di atas setengahnya.
Menghubungkan gulungan ke roda yang dicetak 3D. Ingatlah bahwa ada beberapa roda yang diproduksi yang akan bekerja. Lihat di Amazon.
Di sisi 1" gulungan lipat gulungan ini sehingga membuat lingkaran. Kemudian sederhanakan diameternya sedikit lebih kecil dari roda. Setelah gulungan siap pasang di sekitar tepi roda. Ini harus menyebabkan gulungan mengompres di sekitar tepi roda dan mencegahnya tergelincir. Setelah Anda puas dengan pasangan ambil sedikit lem panas dan taruh pada roda di ujung gulungan untuk menahannya di tempat.
Stander Lampu LED:
Hubungkan kabel positif ke pin +12V di sisi 12V pada breadboard. Hubungkan kabel ground ke pin ground di sisi 12V pada breadboard (Tidak ada dalam diagram)
TANYA SEMUA PERTANYAAN YANG ANDA PUNYA AGAR SAYA DAPAT MEMBANTU DENGAN PEMBARUAN UNTUK MEMBUAT PROYEK INI YANG PALING MUDAH.
Kode
Mesin Jual - TANPA MENGUBAH LAMPU LED
Mesin Jual - DENGAN MENGUBAH LAMPU LED
Penerima Koin dan kode lengkap
Mesin Jual - TANPA MENGUBAH LAMPU LEDArduino
Semua yang Anda butuhkan untuk menyelesaikan dan memahami proyek
// Display #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Stepper Library #include <Stepper.h> //including stepper motor library //Relay Setup #define ENABLE 10 #define DIRA 8 #define DIRB 9 //Define "i" int i; //defining pins section //Stepper Connect 1 int stepIN1Pin = 22; int stepIN2Pin = 24; int stepIN3Pin = 26; int stepIN4Pin = 28; //Stepper Connect 2 int stepIN1Pin1 = 23; int stepIN2Pin1 = 25; int stepIN3Pin1 = 27; int stepIN4Pin1 = 29; //Stepper Connect 3 int stepIN1Pin2 = 30; int stepIN2Pin2 = 32; int stepIN3Pin2 = 34; int stepIN4Pin2 = 36; //Stepper Connect 4 int stepIN1Pin3 = 31; int stepIN2Pin3 = 33; int stepIN3Pin3 = 35; int stepIN4Pin3 = 37; //define steps int stepsPerRevolution = 2048; // amount of steps per revolution //define buttons pin ports const int button1Pin = A0; // Push Button 1 Analog Pin A0 const int button2Pin = A1; // Push Button 2 Analog Pin A1 const int button3Pin = A2; // Push Button 3 Analog Pin A2 const int button4Pin = A3; // Push Button 4 Analog Pin A3 //define each stepper // 1 Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin); //2 Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1); //3 Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2); //4 Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3); void setup() { // Assign Push Button Pin input: pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT); // Assign pin output pinMode(ENABLE, OUTPUT); pinMode(DIRA, OUTPUT); pinMode(DIRB,OUTPUT); // Assign Stepper Speed myStepper0.setSpeed(15); myStepper1.setSpeed(15); myStepper2.setSpeed(15); myStepper3.setSpeed(15); //Initialize LCD Display lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Select your item"); lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4"); } void loop() { // read button assignment int button1State, button2State, button3State, button4State; button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); button3State = digitalRead(button3Pin); button4State = digitalRead(button4Pin); digitalWrite(ENABLE, HIGH);// Set state for (i=0;i<5;i++); // define action when button 1 is pressed if (((button1State == LOW) && !(button2State == LOW)))// if we're pushing button 1 OR button 2 {digitalWrite(DIRA,HIGH); //engage relay digitalWrite(DIRB,LOW); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper0.step(stepsPerRevolution); //run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 1"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(DIRA,LOW); //disengage relay digitalWrite(DIRB,LOW); } // define action when button 2 is pressed if (((button2State == LOW) && !(button1State == LOW))) // if we're pushing button 1 OR button 2 {digitalWrite(DIRA,HIGH); //engage relay digitalWrite(DIRB,LOW); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper1.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 2"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(DIRA,LOW); //disengage relay digitalWrite(DIRB,LOW); } // define action when button 3 is pressed if (((button3State == LOW) && !(button4State == LOW))) // if we're pushing button 1 OR button 2 {digitalWrite(DIRA,HIGH); //engage relay digitalWrite(DIRB,LOW); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper2.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 3"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(DIRA,LOW); //disengage relay digitalWrite(DIRB,LOW); } // define action when button 4 is pressed if (((button4State == LOW) && !(button3State == LOW))) // if we're pushing button 1 OR button 2 {digitalWrite(DIRA,HIGH); //engage relay digitalWrite(DIRB,LOW); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper3.step(-stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 4"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(DIRA,LOW); //disengage relay digitalWrite(DIRB,LOW); } }
Mesin Jual - DENGAN MENGUBAH LAMPU LEDC#
Lihat video!
// Display #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Stepper Library #include <Stepper.h> //including stepper motor library //Relay Setup #define ENABLE 10 #define PinA 8 #define PinB 9 #define REDPIN 38 #define GREENPIN 39 #define BLUEPIN 40 //Define "i" int i; //Define "RGB" int r, g, b; //defining pins section //Stepper Connect 1 int stepIN1Pin = 22; int stepIN2Pin = 24; int stepIN3Pin = 26; int stepIN4Pin = 28; //Stepper Connect 2 int stepIN1Pin1 = 23; int stepIN2Pin1 = 25; int stepIN3Pin1 = 27; int stepIN4Pin1 = 29; //Stepper Connect 3 int stepIN1Pin2 = 30; int stepIN2Pin2 = 32; int stepIN3Pin2 = 34; int stepIN4Pin2 = 36; //Stepper Connect 4 int stepIN1Pin3 = 31; int stepIN2Pin3 = 33; int stepIN3Pin3 = 35; int stepIN4Pin3 = 37; //define steps int stepsPerRevolution = 2048; // amount of steps per revolution //define buttons pin ports const int button1Pin = A0; // Push Button 1 Analog Pin A0 const int button2Pin = A1; // Push Button 2 Analog Pin A1 const int button3Pin = A2; // Push Button 3 Analog Pin A2 const int button4Pin = A3; // Push Button 4 Analog Pin A3 //define each stepper // 1 Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin); //2 Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1); //3 Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2); //4 Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3); void setup() { // Assign Push Button Pin input: pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT); // Assign pin output pinMode(ENABLE, OUTPUT); pinMode(PinA, OUTPUT); pinMode(PinB, OUTPUT); //LED Strips pin setup pinMode(REDPIN, OUTPUT); pinMode(GREENPIN, OUTPUT); pinMode(BLUEPIN, OUTPUT); // Assign Stepper Speed myStepper0.setSpeed(15); myStepper1.setSpeed(15); myStepper2.setSpeed(15); myStepper3.setSpeed(15); //Initialize LCD Display lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Select your item"); lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4"); analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); analogWrite(BLUEPIN, 256); } void loop() { // read button assignment int button1State, button2State, button3State, button4State; button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); button3State = digitalRead(button3Pin); button4State = digitalRead(button4Pin); digitalWrite(ENABLE, HIGH);// Set state for (i = 0; i < 5; i++); // define action when button 1 is pressed if (((button1State == LOW) && !(button2State == LOW)))// if we're pushing button 1 OR button 2 { digitalWrite(PinA, HIGH); //engage relay digitalWrite(PinB, LOW); analogWrite(REDPIN, 256); for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b); for (g = 256; g > 0; g--); analogWrite(GREENPIN, g); for (g = 256; g > 0; g--); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper0.step(stepsPerRevolution); //run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 1"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b); for (g = 0; g < 256; g++); analogWrite(GREENPIN, g); digitalWrite(PinA, LOW); //disengage relay digitalWrite(PinB, LOW); } // define action when button 2 is pressed if (((button2State == LOW) && !(button1State == LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(PinA, HIGH); //engage relay digitalWrite(PinB, LOW); analogWrite(GREENPIN, 256); for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b); for (r = 256; r > 0; r--); analogWrite(REDPIN, r); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper1.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 2"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(PinA, LOW); //disengage relay digitalWrite(PinB, LOW); for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b); for (r = 0; r < 256; r++); analogWrite(REDPIN, r); } // define action when button 3 is pressed if (((button3State == LOW) && !(button4State == LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(PinA, HIGH); //engage relay digitalWrite(PinB, LOW); analogWrite(BLUEPIN, 256); for (r = 256; r > 0; r--); analogWrite(REDPIN, r); for (g = 256; g > 0; g--); analogWrite(GREENPIN, g); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper2.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 3"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(PinA, LOW); //disengage relay digitalWrite(PinB, LOW); for (g = 0; g < 256; g++); analogWrite(GREENPIN, g); for (r = 0; r < 256; r++); analogWrite(REDPIN, r); } // define action when button 4 is pressed if (((button4State == LOW) && !(button3State == LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(PinA, HIGH); //engage relay digitalWrite(PinB, LOW); analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper3.step(-stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); lcd.setCursor(0, 0); lcd.print("Button State 4"); lcd.setCursor(2, 1); lcd.print("1 2 3 or 4"); digitalWrite(PinA, LOW); //disengage relay digitalWrite(PinB, LOW); for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b); } }
Penerima Koin dan kode lengkapC#
Kode lengkap
// Display #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Stepper Library #include <Stepper.h> //including stepper motor library //Relay Setup #define ENABLE 10 //#define PinA 8 //#define PinB 9 //Transitor pins for LEDs #define REDPIN 38 #define GREENPIN 39 #define BLUEPIN 40 //Define "i" //int i; //Define "RGB" int r, g, b; // Constants const int coinpin = 21; const int ledpin = 13; const int targetcents = 100; // Variables volatile int cents = 0; int credits = 0; //defining pins section //Stepper Connect 1 int stepIN1Pin = 22; int stepIN2Pin = 24; int stepIN3Pin = 26; int stepIN4Pin = 28; //Stepper Connect 2 int stepIN1Pin1 = 23; int stepIN2Pin1 = 25; int stepIN3Pin1 = 27; int stepIN4Pin1 = 29; //Stepper Connect 3 int stepIN1Pin2 = 30; int stepIN2Pin2 = 32; int stepIN3Pin2 = 34; int stepIN4Pin2 = 36; //Stepper Connect 4 int stepIN1Pin3 = 31; int stepIN2Pin3 = 33; int stepIN3Pin3 = 35; int stepIN4Pin3 = 37; //define steps int stepsPerRevolution = 2048; // amount of steps per revolution //define buttons pin ports const int button1Pin = A0; // Push Button 1 Analog Pin A0 const int button2Pin = A1; // Push Button 2 Analog Pin A1 const int button3Pin = A2; // Push Button 3 Analog Pin A2 const int button4Pin = A3; // Push Button 4 Analog Pin A3 //define each stepper // 1 Stepper myStepper0(stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin); //2 Stepper myStepper1(stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pin1, stepIN4Pin1); //3 Stepper myStepper2(stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2); //4 Stepper myStepper3(stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3); // Setup void setup() { // Assign interupt to Pin and condition attachInterrupt(digitalPinToInterrupt(coinpin), coinInterrupt, RISING); // Assign Push Button Pin input: pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(button3Pin, INPUT); pinMode(button4Pin, INPUT); // Assign relay pin output pinMode(ENABLE, OUTPUT); // pinMode(PinA, OUTPUT); // pinMode(PinB, OUTPUT); //LED Strips pin setup pinMode(REDPIN, OUTPUT); pinMode(GREENPIN, OUTPUT); pinMode(BLUEPIN, OUTPUT); // Assign Stepper Speed myStepper0.setSpeed(15); myStepper1.setSpeed(15); myStepper2.setSpeed(15); myStepper3.setSpeed(15); //Initialize LCD Display lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Select your item"); lcd.setCursor(0, 1); lcd.print(" #1 #2 #3 #4"); analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); analogWrite(BLUEPIN, 256); } // Main loop void loop() { // If we've hit our target amount of coins, increment our credits and reset the cents counter if (cents >= targetcents) { credits = credits + 1; cents = cents - targetcents; } // If we haven't reached our target, keep waiting... else { } // Debugging zone lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print(cents); lcd.setCursor(3, 0); lcd.print("Coin Count"); lcd.setCursor(0, 1); lcd.print(credits); lcd.setCursor(3, 1); lcd.print("credit earned"); delay(1000); // Now, write your own code here that triggers an event when the player has credits! if (credits > 0) { // read button assignment int button1State, button2State, button3State, button4State; button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); button3State = digitalRead(button3Pin); button4State = digitalRead(button4Pin); // digitalWrite(ENABLE, HIGH);// Set state // for (i = 0; i < 5; i++); // define action when button 1 is pressed if (((button1State == LOW) && !(button2State == LOW)))// if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //engage relay // digitalWrite(PinB, LOW); analogWrite(REDPIN, 256); for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b); for (g = 256; g > 0; g--); analogWrite(GREENPIN, g); for (g = 256; g > 0; g--); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper0.step(stepsPerRevolution); //run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b); for (g = 0; g < 256; g++); analogWrite(GREENPIN, g); digitalWrite(ENABLE, LOW); //disengage relay // digitalWrite(PinB, LOW); credits = credits - 1; cents = cents - cents; } // define action when button 2 is pressed if (((button2State == LOW) && !(button1State == LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //engage relay // digitalWrite(PinB, LOW); analogWrite(GREENPIN, 256); for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b); for (r = 256; r > 0; r--); analogWrite(REDPIN, r); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper1.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); digitalWrite(ENABLE, LOW); //disengage relay // digitalWrite(PinB, LOW); for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b); for (r = 0; r < 256; r++); analogWrite(REDPIN, r); credits = credits - 1; cents = cents - cents; } // define action when button 3 is pressed if (((button3State == LOW) && !(button4State == LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //engage relay // digitalWrite(PinB, LOW); analogWrite(BLUEPIN, 256); for (r = 256; r > 0; r--); analogWrite(REDPIN, r); for (g = 256; g > 0; g--); analogWrite(GREENPIN, g); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper2.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); digitalWrite(ENABLE, LOW); //disengage relay // digitalWrite(PinB, LOW); for (g = 0; g < 256; g++); analogWrite(GREENPIN, g); for (r = 0; r < 256; r++); analogWrite(REDPIN, r); credits = credits - 1; cents = cents - cents; } // define action when button 4 is pressed if (((button4State == LOW) && !(button3State == LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //! engage relay // digitalWrite(PinB, LOW); analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); for (b = 256; b > 0; b--); analogWrite(BLUEPIN, b); lcd.clear(); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper3.step(-stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); digitalWrite(ENABLE, LOW); //disengage relay // digitalWrite(PinB, LOW); for (b = 0; b < 256; b++); analogWrite(BLUEPIN, b); credits = credits - 1; cents = cents - cents; } } } // Coin Increase loop void coinInterrupt() { // Each time a pulse is sent from the coin acceptor, interrupt main loop to add 5 cent and flip on the LED cents = cents + 5; digitalWrite(ledpin, HIGH); }
Skema Rangkaian
Ini adalah diagram lengkap sistem. Ini mencakup, ATX power supply, motors,LCD,LEDs, lights and controller