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

Mesin Bending Kawat Arduino 3D

Dalam tutorial ini saya akan menunjukkan kepada Anda bagaimana saya membuat mesin bending kawat 3D berbasis Arduino. Ini sebenarnya adalah sistem mekatronik yang khas karena melibatkan teknik mesin, listrik, dan komputer. Oleh karena itu, saya yakin banyak mahasiswa teknik atau siapa pun yang baru mengenal mekatronik menganggap proyek ini menarik.

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

Ringkasan

Berikut prinsip kerja mesin bending kawat 3D ini. Jadi pertama-tama, kawat melewati rol seri, atau pelurus. Menggunakan motor stepper, kawat diumpankan secara tepat ke mekanisme pembengkokan kawat yang juga menggunakan motor stepper serta servo kecil untuk proses pembengkokan.

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

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

Mesin Tekuk Kawat 3D DIY Model 3D

Seperti biasa, saya memulai dengan membuat project menggunakan software 3D modeling. Anda dapat mengunduh dan model 3D di bawah ini.

Inspirasi desain:video YouTube

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

Anda dapat mengunduh model perakitan 3D di Thans.

File STL untuk Pencetakan 3D:

Untuk beberapa bagian, seperti roda gigi, bantalan blok bantal dan beberapa skrup poros, saya menggunakan printer 3D untuk membuatnya. File STL dari bagian ini, yang digunakan untuk pencetakan 3D, dapat diunduh dari file di atas.

Printer 3D baru saya, Creality CR-10, melakukan pekerjaan dengan baik dan mencetak bagian-bagiannya dengan kualitas yang hebat. Berikut tautan ke printer 3D ini jika Anda ingin memeriksanya.

Membuat Mesin Tekuk Kawat

Saya melanjutkan dengan menyiapkan bagian lain, yang saya gunakan MDF dan kayu lapis. Jadi, setelah saya mengambil semua dimensi dari model 3D, menggunakan gergaji bundar, saya memotongnya sesuai ukuran. Saya menggunakan MDF tick 8 mm dan kayu lapis tick 18 mm. Setelah saya menyiapkannya, saya mulai dengan perakitan. Pertama saya membuat alas dari dua pelat MDF dan 4 kolom kayu lapis. Untuk mengencangkannya, saya menggunakan lem kayu dan beberapa sekrup.

Selanjutnya di panel atas saya memasang blok bantal bantalan cetak 3D menggunakan baut dan mur 8 mm. Kita dapat melihat di sini bahwa saya menambahkan pelat MDF centang 3 mm antara bagian atas dan blok bantal sehingga saya mendapatkan ketinggian yang tepat. Sekarang di blok ini kita bisa memasang bantalan 6202.

Diameter luarnya 35 mm dan diameter dalamnya 15 mm. Jadi sekarang, melalui bantalan ini, kita perlu memasukkan poros berongga 15 mm agar kawat bisa melewatinya. Poros ini sebenarnya adalah sumbu Z, yang memungkinkan mekanisme lentur untuk berputar di sekitar kawat dan dengan cara itu membuat bentuk tiga dimensi. Saya menggunakan tabung tembaga untuk tujuan itu dan panjangnya harus sekitar 30 cm.

Di antara dua bantalan saya juga memasukkan roda gigi cetak 3D dengan modul 1,5 dan 30 gigi. Roda gigi memiliki slot desain khusus tempat kita dapat memasukkan mur M3 dan kemudian menggunakan baut M3 kita dapat mengencangkan roda gigi ke poros.

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

Kemudian menggunakan bor 6 mm saya membuat dua lubang di bagian atas di mana braket pemasangan akan diamankan. Kita dapat melihat bahwa braket bukannya lubang, memiliki slot yang memungkinkan kedua roda gigi dipasangkan dengan benar.

Saya melanjutkan dengan memasang motor stepper untuk mekanisme pengumpan. Motor ini akan langsung dipasang di pelat atas, jadi saya mengebor lubang yang sesuai di atasnya. Kemudian menggunakan empat baut, saya mengencangkan stepper ke pelat, dan jika Anda bertanya-tanya apa yang dilakukan mur tersebut di sini, mur tersebut sebenarnya berfungsi sebagai mur jarak karena baut yang saya miliki lebih panjang dan tidak dapat masuk ke dalam ulir motor.

Jadi sekarang pada poros stepper ini kita perlu memasukkan feeder. Untuk tujuan itu, saya mencetak 3D coupler poros khusus tempat saya memasukkan tabung tembaga yang sebenarnya akan menjadi permukaan kontak pengumpan.

Kemudian di sisi berlawanan dari motor saya memasukkan tuas, di mana saya memasang bantalan yang akan menekan pengumpan. Untuk mendapatkan pegangan yang cukup sehingga pengumpan bisa menggerakkan kawat, saya akan memasang sepotong kayu lapis dengan mur-T di atasnya, dan kemudian menggunakan baut kita akan bisa mengontrol pegangan pengumpan.

Langkah selanjutnya adalah membuat sistem pelurusan kawat. Dengan menggunakan tiga baut M8 saya mengamankan sepotong kayu lapis yang sebelumnya saya bor sesuai dengan model 3D. Sekarang di atasnya saya memasukkan rol. Saya membuat rol dari bantalan dan cincin luar beralur cetak 3D.

Tiga rol pergi di sisi ini, dan dua rol di sisi lain. Untuk sisi lainnya saya membuat slot pada potongan triplek agar baut-bautnya tetap rata dengan potongannya. Sekarang hanya dengan dua baut kita bisa memasangkan kedua sisinya, dan dengan menggunakan mur kita bisa mengencangkan pelurus dengan tepat.

Setelah selesai dengan langkah ini, saya menambahkan dua potong kayu lapis lagi di depan dan di belakang pelurus yang akan berfungsi sebagai pemandu kawat.

Ok, jadi sekarang kita bisa melanjutkan dengan membuat mekanisme pembengkokan kawat. Pertama pada sepotong MDF kita perlu memasang motor bender. Sebelum saya melakukannya, potongan MDF yang saya perlukan untuk dibentuk, jadi dengan menggunakan gergaji tangan, gergaji coping, dan parutan, saya dengan mudah mendapatkan bentuk yang diinginkan. Kemudian dengan menggunakan gergaji lubang 38 mm saya membuat bukaan untuk stepper yang lebih besar yang akan kita gunakan untuk pembengkokan motor stepper NEMA 23. Saya juga mengebor beberapa lubang kecil yang diperlukan untuk memasang bagian lain.

Saya mengamankan stepper NEMA 23 menggunakan baut dan mur M4 dan pada poros keluarannya saya memasang roda gigi dengan modul 2,5 dan 18 gigi. Roda gigi ini akan dipasangkan dengan gigi 30 gigi yang lebih besar yang merupakan roda gigi yang dirancang khusus dengan pelat terintegrasi untuk memasang servo MG996R. Servo ini akan menggerakkan mekanisme rack and pinion, yang sebenarnya merupakan pin yang akan keluar dari roda gigi dan berfungsi untuk menekuk kawat. Dengan menggunakan epoksi 5 menit, saya memasang bantalan ke roda gigi dan juga menambahkan sepotong tabung tembaga ke rak yang akan menjadi permukaan kontak saat membengkokkan kawat.

Setelah epoksi mengering, saya memasangkan kedua roda gigi dengan mengencangkan roda gigi yang lebih besar dengan baut dan mur M8. Kemudian saya memasukkan rak dan servo ke tempatnya, dan mengamankannya menggunakan sekrup yang disediakan dalam paket servos. Kemudian saya mengamankan gigi pinion ke tanduk bundar servo menggunakan dua baut dan mur M3.

Akhirnya saya memasang klakson ke servo dan dengan ini mekanisme pembengkokan selesai.

Yang tersisa untuk dilakukan sekarang adalah memasang bender ke sumbu Z. Saya melakukannya menggunakan dua klem poros cetak 3D. Pertama saya kencangkan ke pelat bender menggunakan baut dan mur M6, lalu masukkan ke sumbu Z. Saya memasukkan kedua mur di tempatnya, dan menggunakan baut saya mengencangkan klem ke poros. Jadi sekarang semua bagian yang bergerak berfungsi dengan baik.

Sebenarnya ada dua detail kecil lagi yang harus ditambahkan. Itu nozel 3 mm di poros tempat keluarnya kabel.

Dan di bagian bawah bender saya pasang micro limit switch yang akan digunakan untuk mengatur posisi awal bender.

Dan hanya itu, mesin bending kawat 3D kami hampir selesai. Saya katakan hampir, karena sekarang kita perlu menghidupkan mesin ini, atau menghubungkan komponen elektronik dan memprogramnya.

Diagram Sirkuit

Berikut diagram rangkaian proyek ini.

Jadi ketiga motor stepper tersebut dikendalikan menggunakan ketiga driver stepper DRV8825. Untuk memberi daya pada stepper dan seluruh proyek, kami akan menggunakan catu daya 12V dengan laju arus minimal 3A.

Untuk menyalakan servo, kita dapat menggunakan 5V yang berasal dari Arduino, tetapi servo MG996R dapat haus daya dan regulator tegangan 5V dari 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 limit switch untuk bender yang memiliki resistor pull up yang terhubung ke pin digital board Arduino.

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

  • Motor Stepper – NEMA 17……… 
  • Motor Stepper – NEMA 23 ……..
  • Driver Stepper DRV8825……..
  • Saklar Batas Mikro ………..……… 
  • Adaptor 12V 2A…………………..….
  • Power Jack…………….………….…… 
  • Dewan Arduino ……………………… 

Desain PCB

Selanjutnya, untuk menghilangkan kekacauan kabel dan menjaga komponen elektronik tetap teratur, saya merancang PCB khusus menggunakan perangkat lunak desain sirkuit online gratis EasyEDA. Sirkuit ini memiliki banyak koneksi, jadi saya menggunakan lapisan atas dan bawah untuk mengaturnya. Saya juga menambahkan pin untuk memilih resolusi stepper, menambahkan satu lagi koneksi limit switch dan menyediakan pin digital dan analog tambahan yang berasal dari Arduino jika kita membutuhkannya untuk sesuatu.

Berikut link ke file proyek desain PCB ini. Jadi, setelah selesai dengan desain ini, saya membuat file Gerber yang diperlukan untuk membuat PCB.

File Gerber:

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

Di sini kita cukup drag dan drop file Gerber dan setelah diunggah, kita dapat meninjau PCB kita di penampil Gerber. Jika semuanya baik-baik saja maka kita dapat melanjutkan, memilih properti yang kita inginkan untuk PCB kita, dan kemudian kita dapat memesan PCB dengan harga yang wajar. Perhatikan bahwa jika ini adalah pesanan pertama Anda dari JLCPCB, Anda bisa mendapatkan hingga 10 PCB hanya dengan $2.

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

Jadi sekarang kita bisa melanjutkan dan memasang komponen elektronik ke PCB. Saya mulai dengan menyolder pin header ke PCB. Ini memungkinkan penyambungan dan pemutusan komponen yang lebih mudah saat dibutuhkan. Untuk komponen yang lebih kecil, seperti kapasitor, resistor, pengatur tegangan, dan blok terminal, saya menyoldernya langsung ke PCB.

Setelah selesai dengan langkah ini, sekarang kita bisa memasukkan driver stepper dan Arduino pada tempatnya. Kemudian kita perlu menghubungkan steker listrik dan sakelar daya ke blok terminal, sambungkan kabel ke motor stepper di satu sisi dan sambungkan ke PCB di sisi lain. Servo terhubung ke pin digital nomor 2 dan ditenagai dengan 5V yang berasal dari regulator tegangan LM7805. Terakhir, kita dapat memilih resolusi stepper dengan menghubungkan pin resolusi di bawah driver.

Saya memutuskan untuk menggunakan resolusi langkah ke-16 jadi kita perlu menghubungkan pin yang tepat, bukan yang tengah seperti yang terlihat pada foto di atas. Jadi komponen elektronik sekarang sudah siap dan kita bisa melanjutkan dengan memprogram mesin pembengkok kawat.

Kode Arduino untuk Proyek Mesin Tekuk Kawat 3D

Karena kodenya sedikit lebih panjang, untuk pemahaman yang lebih baik, saya akan memposting kode sumber program di bagian dengan deskripsi untuk setiap bagian. Dan di akhir artikel ini saya akan memposting source code lengkapnya.

Untuk mengendalikan motor stepper saya akan menggunakan perpustakaan AccelStepper oleh Mike McCauley. Jadi kita perlu menyertakan perpustakaan ini, serta perpustakaan servo untuk mengendalikan motor servo. Kemudian kita perlu menentukan pin yang menghubungkan stepper 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;Code language: Arduino (arduino)

Pada bagian setup kita mengatur posisi awal dari servo atau pin bending, dan juga mengatur posisi awal dari bender gear. Ini dilakukan dengan bantuan sakelar batas. Stepper berputar ke arah sakelar dan setelah ditekan, motor mulai menghitung langkah dari nol dan memposisikan dirinya ke nol derajat, siap untuk ditekuk.

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);
}Code language: Arduino (arduino)

Sekarang di bagian loop, kita menunggu perintah yang datang dari serial monitor. Jika kita mengetik manual, kita akan masuk ke mode manual bending atau jika kita mengetik misalnya bintang, fungsi kustom start() akan dijalankan 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();
  }
}Code language: Arduino (arduino)

Mari kita lihat fungsi kustom 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++;
  }
}Code language: Arduino (arduino)

Jadi di sini kita memasuki loop while yang dieksekusi 5 kali, karena jelas bintang memiliki 5 poin. Kami mulai dengan menetapkan nilai umpan, atau berapa banyak kawat yang akan dimasukkan dalam milimeter. Nilai ini kemudian dikalikan dengan 48 yang menerjemahkan nilai umpan menjadi langkah-langkah yang sesuai untuk menggerakkan motor stepper. Kemudian menggunakan fungsi run(), kita memutar motor feeder dengan kecepatan yang diatur oleh fungsi setSpeed(). Kami berhenti ketika nilai feedDistance di atas tercapai, dan tepat setelah itu kami menetapkan nilai posisi stepper nol saat ini.

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 0Code language: Arduino (arduino)

Pada langkah selanjutnya kami menekuk 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 dicapai oleh motor, motor berhenti, mengatur ulang posisinya saat ini ke 0, dan kemudian menjalankan jumlah langkah yang sama dalam arah yang berlawanan yang benar-benar 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);Code language: Arduino (arduino)

Kemudian lagi kita mengumpankan kawat dengan panjang yang sama dan kita mengatur pin ke bawah sehingga penyok dapat pindah ke posisi awal baru yang digunakan untuk menekuk ke arah lain. Pin penyok kemudian dinaikkan, jadi kami menekuk kawat 105 derajat ke arah yang berlawanan. Perintah diulang 5 kali dan begitulah cara kita mendapatkan bentuk bintang.

Dengan cara yang sama seperti yang dijelaskan di atas, kita membuat bentuk kubus atau sebenarnya bentuk lain yang bisa kita buat. Sedangkan untuk mode manual, prinsip kerja perintahnya sama, hanya saja kita memiliki beberapa baris lagi untuk membaca perintah yang datang dari serial monitor. Misalnya untuk memberi makan kawat, kita perlu mengetikkan "f", ditambah jarak dalam milimeter, untuk menekuk kawat, kita perlu mengetikkan "b", ditambah sudut dalam derajat, dan untuk memutar sumbu Z, kita perlu untuk 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);
    }Code language: Arduino (arduino)

Jadi begitulah cara kerja program yang saya buat, tetapi tentu saja, ada banyak cara lain untuk mengkodekannya. Berikut kode Arduino lengkap untuk Mesin Bending Kawat 3D ini:

/*
  Arduino 3D Wire Bending Machine
  by Dejan Nedelkovski
  www.HowToMechatronics.com
  Library - AccelStepper by Mike McCauley:
  http://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;
  }
}
Code language: Arduino (arduino)

At the end I would like to point out that the wire straightening system of the wire bending machine is actually not working like it should work, because if I tighten it more, the feeder loses grip and the wire doesn’t move.

For solving this issue you could try to use different, stronger material than the copper tube or make a different feeder system.

So that’s it. Saya harap Anda menikmati video ini dan belajar sesuatu yang baru. Jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah dan periksa Koleksi Proyek Arduino saya.


Proses manufaktur

  1. Mesin Jahit
  2. Kawat Berduri
  3. Mesin Jaring Kawat Heksagonal
  4. Bagaimana mesin pemotong kawat dapat membantu?
  5. Apa itu Mesin Bending Lembaran?
  6. Wire EDM:Sekilas tentang Industri Logam Taiwan
  7. Mesin EDM Kawat Terbaik di Taiwan
  8. Mesin Bending Tabung CNC yang Luar Biasa
  9. Panduan Cepat untuk Mesin Bending Pipa Persegi
  10. Mesin Bending Tabung Hidrolik untuk Bengkel