Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Dalam tutorial ini saya akan menunjukkan bagaimana saya membangun mesin pengali kawat 3D berbasis Arduino. Ini sebenarnya adalah sistem mekatronika tipikal karena melibatkan teknik mesin, teknik listrik dan teknik komputer. Oleh karena itu saya yakin banyak siswa teknik atau siapa pun yang baru memulai mekatronika menemukan proyek ini menarik.

Anda dapat menonton video berikut atau membaca tutorial tulisan di bawah ini.

Ringkasan

Ini adalah prinsip kerja mesin pengali kawat 3D ini. Jadi pertama, kawat melalui serangkaian rol, atau penyelar. Menggunakan motor stepper kawat diumpan secara tepat ke mekanisme pengali kawat yang juga menggunakan motor stepper serta servo kecil untuk proses pengalian.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Ada juga motor stepper lainnya, disebut sumbu Z, yang sebenarnya memungkinkan mesin untuk menciptakan bentuk tiga dimensi. Tentu saja otak mesin adalah papan Arduino yang bersama dengan komponen elektronik lainnya terpasang pada PCB yang dirancang khusus.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Adalah programnya, saya membuat beberapa fungsi khusus untuk membuat berbagai bentuk, seperti bintang, kubus dan sandaran sederhana, serta mode manual di mana kita dapat membuat bentuk kawat dengan memasukkan perintah melalui serial monitor.

Model 3D Mesin Pengali Kawat 3D DIY

Biasanya, saya memulai dengan membuat proyek menggunakan perangkat lunak pemodelan 3D. Anda dapat mengunduh model 3D di bawah ini.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Inspirasi desain: Video YouTube

Anda dapat menemukan dan mengunduh model 3D ini, serta menjelajahi di browser Anda di Thangs.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Anda dapat mengunduh model 3D rangkaian di Thangs.

Berkas STL untuk 3D Printing:

Untuk beberapa bagian, seperti gear, blok bantalan bearing dan beberapa peluncur poros saya menggunakan 3D printer untuk membuatnya. Berkas STL bagian ini, yang digunakan untuk 3D printing, dapat diunduh dari berkas di atas.

3D printer saya yang baru, Creality CR-10, bekerja dengan baik dan mencetak bagian dengan kualitas yang bagus. Berikut adalah tautan ke 3D printer ini jika Anda ingin memeriksa.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Membangun Mesin Pengali Kawat

Saya melanjutkan dengan mempersiapkan bagian lainnya, untuk itu saya menggunakan MDF dan plywood. Jadi setelah saya mengambil semua dimensi dari model 3D, menggunakan gergaji lingkaran, saya memotong potongan ke ukuran. Saya menggunakan MDF tebal 8 mm dan plywood tebal 18 mm. Setelah saya mendapatkannya siap saya memulai dengan rangkaian. Pertama saya membuat dasar dari dua piring MDF dan 4 kolom plywood. Untuk mengamankannya saya menggunakan lem kayu dan beberapa baut.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Selanjutnya di panel atas saya memasang blok bantalan bearing yang dicetak 3D menggunakan beberapa baut dan poros 8 mm dan poros. Kita dapat melihat di sini bahwa saya menambahkan piring MDF tebal 3 mm di antara panel atas dan blok bantalan sehingga saya mendapatkan ketinggian yang tepat. Sekarang di dalam blok ini kita dapat memasang bearing 6202.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Diameter luarnya adalah 35 mm dan diameter dalamnya adalah 15 mm. Jadi sekarang, melalui bearing ini, kita perlu memasukkan poros hollow 15 mm sehingga kawat dapat melewatinya. Poros ini sebenarnya adalah sumbu Z, yang memungkinkan mekanisme pengali untuk berputar di sekitar kawat dan dengan cara itu membuat bentuk tiga dimensi. Saya menggunakan tabung copper untuk tujuan itu dan panjangnya perlu sekitar 30 cm.

Di antara dua bearing saya juga memasukkan gear yang dicetak 3D dengan modul 1,5 dan 30 gigi. Gear memiliki slot desain khusus di mana kita dapat memasukkan poros M3 dan kemudian menggunakan baut M3 kita dapat mengencangkan gear ke poros.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Selanjutnya kita perlu memasang motor stepper sumbu Z. Untuk tujuan itu saya mencetak 3D braket pemasangan khusus. Jadi saya mengamankan stepper ke braket menggunakan baut M3, dan kemudian memasukkan gear 18 gigi pada poros motor. Saya menggunakan metode yang sama untuk mengamankan gear ke poros seperti yang ditunjukkan sebelumnya.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Kemudian menggunakan bor 6 mm saya membuat dua lubang di atas tempat braket pemasangan akan diamankan. Kita dapat melihat bahwa braket alih-alih lubang, memiliki slot yang memungkinkan dua gear untuk dipasangkan dengan tepat.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Saya melanjutkan dengan memasang motor stepper untuk mekanisme pengumpan. Motor ini akan langsung dipasang pada panel atas, jadi saya bor lubang yang sesuai di dalamnya. Kemudian menggunakan empat baut saya mengamankan stepper ke panel, dan jika Anda ingin tahu apa yang dilakukan poros di sini, mereka sebenarnya bertindak sebagai poros jarak karena baut yang saya miliki lebih panjang dan tidak dapat muat ke busur motor.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Jadi sekarang pada poros stepper ini kita perlu memasukkan pengumpan. Untuk tujuan itu saya mencetak 3D peluncur poros khusus di mana saya memasukkan tabung copper yang sebenarnya akan menjadi permukaan kontak pengumpan.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Kemudian di sisi berlawanan dari motor saya memasukkan tuas, di mana saya memasang bearing yang akan menekan pengumpan. Untuk mendapatkan grip yang cukup sehingga pengumpan dapat memindahkan kawat, saya akan memasang potongan plywood dengan poros T di atasnya, dan kemudian menggunakan baut kita dapat mengontrol grip pengumpan.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Langkah selanjutnya adalah membuat sistem penyelar kawat. Menggunakan tiga baut M8 saya mengamankan potongan plywood yang sebelumnya saya bor sesuai dengan model 3D. Sekarang di atasnya saya memasukkan rol. Saya membuat rol dari bearing dan cincin luar bergerigi yang dicetak 3D.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Tiga rol di sisi ini, dan dua rol di sisi lain. Untuk sisi lain saya membuat slot di potongan plywood sehingga baut tetap rata dengan potongan. Sekarang menggunakan hanya dua baut kita dapat memasangkan kedua sisi, dan menggunakan poros kita dapat mengencangkan penyelar dengan tepat.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Setelah selesai dengan langkah ini, saya menambahkan dua potongan plywood lebih lanjut di depan dan di belakang penyelar yang akan berfungsi sebagai panduan kawat.

Oke, jadi sekarang kita dapat melanjutkan dengan membuat mekanisme pengali kawat. Pertama pada potongan MDF kita perlu memasang motor pengali. Sebelum saya melakukan itu, potongan MDF yang saya miliki perlu dibentuk, jadi menggunakan gergaji tangan, gergaji copping dan garpu saya dengan mudah mendapatkan bentuk yang diinginkan. Kemudian menggunakan gergaji lubang 38 mm saya membuat pembukaan untuk stepper besar yang akan kita gunakan untuk pengalian, motor stepper NEMA 23. Juga saya bor beberapa lubang kecil yang diperlukan untuk memasang bagian lainnya.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Saya mengamankan stepper NEMA 23 menggunakan baut dan poros M4 dan pada poros keluaran saya memasang gear dengan modul 2,5 dan 18 gigi. Gear ini akan dipasangkan dengan gear 30 gigi yang lebih besar yang merupakan gear desain khusus dengan piring terintegrasi untuk memasang servo MG996R. Servo ini akan menggerakkan mekanisme rack dan pinion, yang sebenarnya adalah pin yang akan keluar dari gear dan akan berfungsi untuk mengali kawat. Menggunakan lem epoxy 5 menit saya mengamankan bearing ke gear dan juga menambahkan potongan tabung copper ke rack yang akan menjadi permukaan kontak saat mengali kawat.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Setelah lem epoxy kering, saya memasangkan dua gear dengan mengamankan gear yang lebih besar ke tempatnya menggunakan baut M8 dan poros. Kemudian saya memasukkan rack dan servo ke tempatnya, dan mengamankannya menggunakan baut yang disediakan dalam paket servo. Kemudian saya mengamankan gear pinion ke tanduk bundar servo menggunakan dua baut dan poros M3.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Terakhir saya memasang tanduk ke servo dan dengan itu mekanisme pengali selesai.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Yang tersisa untuk dilakukan sekarang adalah memasang pengali ke sumbu Z. Saya melakukannya menggunakan dua klem poros yang dicetak 3D. Pertama saya mengamankan mereka ke piring pengali menggunakan baut dan poros M6, dan kemudian memasukkannya ke dalam sumbu Z. Saya memasukkan dua poros ke tempatnya, dan menggunakan baut saya mengencangkan klem ke poros. Jadi sekarang semua bagian bergerak berfungsi dengan baik.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Sebenarnya masih ada dua detail kecil lagi yang perlu ditambahkan. Itu adalah nozzel 3 mm di poros tempat kawat keluar.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Dan di bawah pengali saya memasang saklar batas mikro yang akan digunakan untuk mengatur posisi awal pengali.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Dan itulah saja, mesin pengali kawat 3D kita hampir selesai. Saya bilang hampir, karena sekarang kita perlu memberikan kehidupan pada mesin ini, atau menghubungkan komponen elektronik dan memprogramnya.

Diagram Rangkaian

Berikut adalah diagram rangkaian proyek ini.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Jadi tiga motor stepper dikontrol menggunakan tiga driver stepper DRV8825. Untuk memberi daya pada steppers dan seluruh proyek kita akan menggunakan suplai daya 12V dengan setidaknya 3A arus.

Untuk memberi daya pada servo, kita dapat menggunakan 5V yang datang dari Arduino, tetapi servo MG996R bisa boros daya dan regulator tegangan 5V Arduino mungkin tidak dapat menanganinya. Oleh karena itu, saya memutuskan untuk menggunakan regulator tegangan 5V terpisah, LM7805, yang cukup baik untuk memberi daya pada servo untuk proyek ini. Ada juga saklar batas untuk pengali yang memiliki resistor pull-up dan terhubung ke pin digital papan Arduino.

Anda dapat mendapatkan komponen yang diperlukan untuk proyek ini dari tautan di bawah ini:

  • Motor Stepper – NEMA 17………
  • Motor Stepper – NEMA 23 ……..
  • Driver Stepper DRV8825…….….
  • Saklar Batas Mikro ………..………
  • Adapter 12V 2A…………………..….
  • Jack Daya…………….………….……
  • Papan Arduino ………………………

Desain PCB

Selanjutnya, untuk menghilangkan rantai kabel dan menjaga komponen elektronik tetap teratur, saya merancang PCB khusus menggunakan perangkat lunak desain rangkaian online gratis EasyEDA. Rangkaian memiliki banyak koneksi, jadi saya menggunakan kedua lapisan atas dan bawah untuk mengaturnya. Saya juga menambahkan pin untuk memilih resolusi stepper, menambahkan satu koneksi saklar batas lagi dan menyediakan pin digital dan analog tambahan dari Arduino jika kita membutuhkannya untuk sesuatu.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Berikut adalah tautan ke berkas proyek desain PCB ini. Jadi setelah selesai dengan desain ini saya menghasilkan berkas Gerber yang diperlukan untuk pembuatan PCB.

Berkas Gerber:

Kemudian saya memesan PCB dari JLCPCB, yang sebenarnya adalah sponsor proyek ini.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Di sini kita cukup seret dan lepas berkas Gerber dan setelah diunggah, kita dapat meninjau PCB kita dalam penampil Gerber. Jika semuanya baik, kita dapat melanjutkan, memilih properti yang kita inginkan untuk PCB kita, dan kemudian kita dapat memesan PCB kita dengan harga terjangkau. Perhatikan jika ini adalah pesanan pertama Anda dari JLCPCB, Anda dapat mendapatkan hingga 10 PCB hanya dengan $2.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Setelah beberapa hari PCB telah tiba. Kualitas PCB sangat bagus dan semuanya sama persis dengan desain.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Sekarang kita dapat melanjutkan dan memasang komponen elektronik ke PCB. Saya memulai dengan mencabut lepas pin header ke PCB. Ini memungkinkan pengambilan lepas dan pemasangan ulang komponen yang lebih mudah saat diperlukan. Adalah komponen yang lebih kecil, seperti kapasitor, resistor, regulator tegangan dan blok terminal saya mencabut lepas langsung ke PCB.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Setelah selesai dengan langkah ini, sekarang kita dapat memasukkan driver stepper dan Arduino ke tempatnya. Kemudian kita perlu menghubungkan stop kontak dan saklar daya ke blok terminal, menghubungkan kabel ke motor stepper di satu sisi dan menghubungkannya ke PCB di sisi lain. Servo terhubung ke pin digital nomor 2 dan diberi daya dengan 5V yang datang dari regulator tegangan LM7805. Terakhir kita dapat memilih resolusi stepper dengan menghubungkan pin resolusi di bawah driver.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Saya memutuskan untuk menggunakan resolusi 16 langkah jadi kita perlu menghubungkan pin yang benar bukan yang tengah seperti yang terlihat pada foto di atas. Jadi komponen elektronik sekarang siap dan kita dapat melanjutkan dengan memprogram mesin pengali kawat.

Kode Arduino untuk Proyek Mesin Pengali Kawat 3D

Karena kode cukup panjang, untuk pemahaman yang lebih baik, saya akan memposting kode sumber program dalam bagian-bagian dengan deskripsi untuk setiap bagian. Dan di akhir artikel ini saya akan memposting kode sumber lengkap.

Untuk mengontrol motor stepper saya akan menggunakan perpustakaan AccelStepper oleh Mike McCauley. Jadi kita perlu menyertakan perpustakaan ini, serta perpustakaan servo untuk mengontrol motor servo. Kemudian kita perlu mendefinisikan pin tempat steppers terhubung dan beberapa variabel yang diperlukan untuk program di bawah ini.

#include <AccelStepper.h> #include <Servo.h> #define limitSwitch 11 // Define the stepper motors and the pins the will use AccelStepper feederStepper(1, 5, 6); // (Type:driver, STEP, DIR) AccelStepper zAxisStepper(1, 7, 8); AccelStepper benderStepper(1, 9, 10); Servo servo01; String dataIn = ""; String manualStatus = ""; int count = 0; int dist;

Di bagian setup kita mengatur posisi awal servo atau pin pengali, dan juga mengatur posisi awal gear pengali. Ini dilakukan dengan bantuan saklar batas. Stepper berputar menuju saklar dan setelah ditekan motor mulai menghitung langkah dari nol dan menempatkan diri pada nol derajat, siap untuk mengali.

void setup() { Serial.begin(9600); pinMode(limitSwitch, INPUT_PULLUP); servo01.attach(2); servo01.write(40); // Initial position, bending pin up // Stepper motors max speed feederStepper.setMaxSpeed(2000); zAxisStepper.setMaxSpeed(2000); benderStepper.setMaxSpeed(2000); // Homing while (digitalRead(limitSwitch) != 0) { benderStepper.setSpeed(1200); benderStepper.runSpeed(); benderStepper.setCurrentPosition(0); // When limit switch pressed set position to 0 steps } delay(40); // Move 1400 steps from the limit switch to starting position while (benderStepper.currentPosition() != -1400) { benderStepper.setSpeed(-1200); // if negative rotates anti-clockwise benderStepper.run(); } benderStepper.setCurrentPosition(0); }

Sekarang di bagian loop, kita menunggu perintah yang datang dari serial monitor. Jika kita mengetik manual, kita akan memasuki mode pengalian manual atau jika kita mengetik misalnya bintang, fungsi khusus star() akan dieksekusi dan mesin akan otomatis membuat bentuk bintang untuk kita.

void loop() { String mode = Serial.readString(); if (mode.startsWith("manual")) { manual(); } if (mode.startsWith("star")) { star(); } if (mode.startsWith("cube")) { cube(); } if (mode.startsWith("stand")) { stand(); } }

Mari kita lihat fungsi khusus ini.

void star() { while (count != 5) { int feed = 38; // mm int feedDistance = feed * 48; // 48- constats that map the mm value to number of steps the stepper show move while (feederStepper.currentPosition() != feedDistance) { // run until it reaches the distance value feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); // reset the current position to 0 servo01.write(40); // Set the bender pin up delay(200); int angleConst = 18; // angle constant // Bend the wire 52 degrees while (benderStepper.currentPosition() != -52 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Go back 52 degrees to initial position while (benderStepper.currentPosition() != 52 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Feed the same distance again while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); servo01.write(130); // Set the bender pin down delay(200); // Set bender to new initial position, for bending in the other direction while (benderStepper.currentPosition() != -42 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(200); servo01.write(40); // Bender pin up delay(200); while (benderStepper.currentPosition() != 105 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(50); while (benderStepper.currentPosition() != -63 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } delay(100); servo01.write(130); benderStepper.setCurrentPosition(0); count++; } }

Di sini kita memasuki loop while yang dijalankan 5 kali, karena bintang jelas memiliki 5 sudut. Kita memulai dengan mengatur nilai feed, atau seberapa banyak kawat yang akan diumpan dalam milimeter. Nilai ini kemudian dikalikan dengan 48 yang menerjemahkan nilai feed menjadi langkah yang sesuai untuk motor stepper untuk bergerak. Kemudian menggunakan fungsi run(), kita memutar motor pengumpan dengan kecepatan yang diatur oleh fungsi setSpeed(). Kami berhenti saat nilai feedDistance di atas tercapai, dan segera setelah itu kita mengatur nilai posisi saat ini stepper menjadi nol.

int feed = 38; // mm int feedDistance = feed * 48; // 48- constats that map the mm value to number of steps the stepper show move while (feederStepper.currentPosition() != feedDistance) { // run until it reaches the distance value feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); // reset the current position to 0

Di langkah berikutnya kita mengali kawat 52 derajat. Ini dilakukan dengan cara yang sama seperti yang dijelaskan di atas. Di sini kita juga memiliki konstanta sudut yang dikalikan dengan sudut yang diinginkan. Setelah nilai tersebut tercapai oleh motor, motor berhenti, mengatur ulang posisi saat ini menjadi 0, dan kemudian berjalan sejumlah langkah yang sama ke arah berlawanan yang sebenarnya mengembalikan motor ke posisi awalnya.

// Bend the wire 52 degrees while (benderStepper.currentPosition() != -52 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Go back 52 degrees to initial position while (benderStepper.currentPosition() != 52 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100);

Kemudian lagi kita mengumpan panjang kawat yang sama dan kita menurunkan pin sehingga pengali dapat bergerak ke posisi awal baru yang digunakan untuk mengali ke arah berlawanan. Pin pengali kemudian diangkat, dan jadi kita mengali kawat 105 derajat ke arah berlawanan. Perintah diulang 5 kali dan itulah bagaimana kita mendapatkan bentuk bintang.

Dengan cara yang sama seperti yang dijelaskan di atas kita membuat bentuk kubus atau sebenarnya bentuk lain apa pun yang dapat kita pikirkan. Adalah mode manual, prinsip kerja perintah sama, kecuali bahwa kita memiliki beberapa baris lagi untuk membaca perintah yang datang dari serial monitor. Misalnya untuk mengumpan kawat, kita perlu mengetik “f”, ditambah jarak dalam milimeter, untuk mengali kawat, kita perlu mengetik “b”, ditambah sudut dalam derajat, dan untuk memutar sumbu Z, kita perlu mengetik “z”, ditambah sudut dalam derajat.

if (dataIn.startsWith("f")) { dataInS = dataIn.substring(1, dataIn.length()); // reads the feed value dist = dataInS.toInt(); Serial.print("Feed "); Serial.print(dist); Serial.println("mm wire."); dist = dist * 48; while (feederStepper.currentPosition() != dist) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); }

Itulah bagaimana program yang saya buat bekerja, tetapi tentu saja ada banyak cara lain untuk dikodekan. Berikut adalah kode Arduino lengkap untuk Mesin Pengali Kawat 3D ini:

/* Arduino 3D Wire Bending Machine by Dejan Nedelkovski www.HowToMechatronics.com Library - AccelStepper by Mike McCauley: https://www.airspayce.com/mikem/arduino/AccelStepper/index.html */ #include <AccelStepper.h> #include <Servo.h> #define limitSwitch 11 // Define the stepper motors and the pins the will use AccelStepper feederStepper(1, 5, 6); // (Type:driver, STEP, DIR) AccelStepper zAxisStepper(1, 7, 8); AccelStepper benderStepper(1, 9, 10); Servo servo01; String dataIn = ""; String manualStatus = ""; int count = 0; int dist; void setup() { Serial.begin(9600); pinMode(limitSwitch, INPUT_PULLUP); servo01.attach(2); servo01.write(40); // Initial position, bending pin up // Stepper motors max speed feederStepper.setMaxSpeed(2000); zAxisStepper.setMaxSpeed(2000); benderStepper.setMaxSpeed(2000); // Homing while (digitalRead(limitSwitch) != 0) { benderStepper.setSpeed(1200); benderStepper.runSpeed(); benderStepper.setCurrentPosition(0); // When limit switch pressed set position to 0 steps } delay(40); // Move 1400 steps from the limit switch to starting position while (benderStepper.currentPosition() != -1400) { benderStepper.setSpeed(-1200); // if negative rotates anti-clockwise benderStepper.run(); } benderStepper.setCurrentPosition(0); } void loop() { String mode = Serial.readString(); if (mode.startsWith("manual")) { manual(); } if (mode.startsWith("star")) { star(); } if (mode.startsWith("cube")) { cube(); } if (mode.startsWith("stand")) { stand(); } } void star() { while (count != 5) { int feed = 38; // mm int feedDistance = feed * 48; // 48- constats that map the mm value to number of steps the stepper show move while (feederStepper.currentPosition() != feedDistance) { // run until it reaches the distance value feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); // reset the current position to 0 servo01.write(40); // Set the bender pin up delay(200); int angleConst = 18; // angle constant // Bend the wire 52 degrees while (benderStepper.currentPosition() != -52 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Go back 52 degrees to initial position while (benderStepper.currentPosition() != 52 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Feed the same distance again while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); servo01.write(130); // Set the bender pin down delay(200); // Set bender to new initial position, for bending in the other direction while (benderStepper.currentPosition() != -42 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(200); servo01.write(40); // Bender pin up delay(200); while (benderStepper.currentPosition() != 105 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(50); while (benderStepper.currentPosition() != -63 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } delay(100); servo01.write(130); benderStepper.setCurrentPosition(0); count++; } } void cube() { int feed = 40; // mm int feedDistance = feed * 48; int angleConst = 16; // Step 1 while (count != 3) { while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 90 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); count++; } count = 0; // Step 2 while (zAxisStepper.currentPosition() != 88 * angleConst) { zAxisStepper.setSpeed(500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); //Step 3 while (count != 2) { while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 90 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); count++; } count = 0; // Step 4 while (zAxisStepper.currentPosition() != 85 * angleConst) { zAxisStepper.setSpeed(500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); // Step 5 servo01.write(130); delay(200); while (benderStepper.currentPosition() != -42 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); while (count != 3) { delay(100); servo01.write(40); delay(200); // Step 6 while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 90 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); count++; } count = 0; } void stand() { int feed = 20; // mm int feedDistance = feed * 48; int angleConst = 16; // Step 1 while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 90 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Step 2 while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -70 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 70 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Step 3 feed = 80; // mm feedDistance = feed * 48; while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); // Step 4 servo01.write(130); delay(200); while (benderStepper.currentPosition() != -42 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(40); delay(200); while (benderStepper.currentPosition() != 108 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -66 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); //Step 5 servo01.write(130); delay(200); // Step 6 feed = 80; // mm feedDistance = feed * 48; while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); servo01.write(40); delay(200); // Step 7 while (zAxisStepper.currentPosition() != -90 * angleConst) { zAxisStepper.setSpeed(-500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); // Step 8 while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 90 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Step 6 feed = 45; // mm feedDistance = feed * 48; while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); // Step 10 while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 48 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Step 11 while (zAxisStepper.currentPosition() != 90 * angleConst) { zAxisStepper.setSpeed(500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); feed = 80; // mm feedDistance = feed * 48; while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); // Step 12 while (benderStepper.currentPosition() != 110 * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != -68 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); //Step 13 servo01.write(130); delay(200); feed = 80; // mm feedDistance = feed * 48; while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); servo01.write(40); delay(200); // Step 14 while (benderStepper.currentPosition() != -70 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 70 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); //Step 15 feed = 25; // mm feedDistance = feed * 48; while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); // Step 16 while (benderStepper.currentPosition() != -90 * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != 90 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); // Step 17 while (feederStepper.currentPosition() != feedDistance) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); } void manual() { int sign; String dataInS; int angle; int angleConst; Serial.println(" // MANUAL MODE //"); while (!dataIn.startsWith("end")) { servo01.write(130); delay(200); dataIn = Serial.readString(); if (dataIn.startsWith("f")) { dataInS = dataIn.substring(1, dataIn.length()); // reads the feed value dist = dataInS.toInt(); Serial.print("Feed "); Serial.print(dist); Serial.println("mm wire."); dist = dist * 48; while (feederStepper.currentPosition() != dist) { feederStepper.setSpeed(1200); feederStepper.run(); } feederStepper.setCurrentPosition(0); delay(100); } if (dataIn.startsWith("b")) { if (dataIn.charAt(1) == '-') { dataInS = dataIn.substring(2, dataIn.length()); ///reads the angle value angle = dataInS.toInt(); Serial.print("Bend -"); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; // Set "negative" bending initial position while (benderStepper.currentPosition() != -43 * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(40); delay(200); // Bend the wire while (benderStepper.currentPosition() != angle * angleConst) { benderStepper.setSpeed(700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != (-1) * angle * angleConst) { benderStepper.setSpeed(-1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); servo01.write(130); delay(200); // Get back to original "positive" bending initial poistion while (benderStepper.currentPosition() != 43 * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } else { dataInS = dataIn.substring(1, dataIn.length()); angle = dataInS.toInt(); Serial.print("Bend "); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; servo01.write(40); delay(200); while (benderStepper.currentPosition() != (-1) *angle * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != angle * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } dataInS = dataIn.substring(2, dataIn.length()); angle = dataInS.toInt(); angleConst = 16; while (benderStepper.currentPosition() != sign * angle * angleConst) { benderStepper.setSpeed(-700); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); while (benderStepper.currentPosition() != sign * angle * angleConst) { benderStepper.setSpeed(1200); benderStepper.run(); } benderStepper.setCurrentPosition(0); delay(100); } // Z-Axis Control if (dataIn.startsWith("z")) { if (dataIn.charAt(1) == '-') { dataInS = dataIn.substring(2, dataIn.length()); angle = dataInS.toInt(); Serial.print("Move Z-Axis -"); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; while (zAxisStepper.currentPosition() != angle * angleConst) { zAxisStepper.setSpeed(500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); } else { dataInS = dataIn.substring(1, dataIn.length()); angle = dataInS.toInt(); Serial.print("Move Z-Axis "); Serial.print(angle); Serial.println(" degrees."); angleConst = 16; while (zAxisStepper.currentPosition() != (-1) *angle * angleConst) { zAxisStepper.setSpeed(-500); zAxisStepper.run(); } zAxisStepper.setCurrentPosition(0); delay(100); } } manualStatus = dataIn; } } 

Di akhir saya ingin menyampaikan bahwa sistem penyelar kawat dari mesin pengali kawat sebenarnya tidak bekerja seharusnya, karena jika saya mengencangkannya lebih erat, pengumpan kehilangan grip dan kawat tidak bergerak.

Membuat Mesin Pengali Kawat 3D Berbasis Arduino – Panduan Langkah demi Langkah

Untuk mengatasi masalah ini Anda dapat mencoba menggunakan bahan yang berbeda, lebih kuat dari tabung copper atau membuat sistem pengumpan yang berbeda.

Itulah saja. Saya harap Anda menikmati video ini dan mempelajari hal baru. Jangan ragu untuk bertanya di bagian komentar di bawah ini dan lihat Koleksi Proyek Arduino saya.

Proses manufaktur

  1. Evolusi dan Produksi Mesin Jahit: Dari Inovasi Abad 19 hingga Otomasi Modern
  2. Duri Kawat: Sejarah, Konstruksi, dan Penggunaan Modern
  3. Mesin Jaring Kawat Heksagonal Premium untuk Pertanian dan Peternakan
  4. Mengapa Mesin Pemotong Wire EDM Menghasilkan Presisi dan Penghematan Biaya
  5. Mesin Penglipat Lembar Logam Dijelaskan: Jenis, Proses, dan Aplikasi
  6. Wire EDM di Taiwan: Wawasan Presisi untuk Industri Logam
  7. Mesin Wire EDM Top-Tier: Solusi Potong Presisi dari Taiwan
  8. Mesin Pembengukan Tabung CNC Profesional: Presisi & Efisiensi
  9. Panduan Ahli Mesin Penglipat Pipa Persegi
  10. Penggiling Tabung Hidraulik Canggih untuk Presisi Bengkel