Başa dön
Arduino ile Basit Tel Bükme Makinası Yapımı

Arduino ile Basit Tel Bükme Makinası Yapımı

Merhaba arkadaşlar, ilginç arduino projeleri yazı dizimizin yeni makalesi olan arduino ile basit tel bükme makinası yapımı ile karşınızdayız. Şimdi gelin hep birlikte nasıl yapılır öğrenelim. Aşağıdaki videoyu izleyerek projenizi çok daha hızlı gerçekleştirebilirsiniz.

 

Basit Tel Bükme Makinası Yapımı – Genel Bakış

3B basit tel bükme makinası çalışma prensibi; İlk önce, tel bir seri merdane veya düzleştiriciden geçer. Tel, step motor vasıtası ile bükülme işlemi için servo motor ile çalışan tel bükme mekanizmasına doğru itilir.

 

Ayrıca makinenin üç boyutlu formlar oluşturmasını sağlayan Z ekseni üzerinde başka bir step motoru da vardır. Makinenin beyni, diğer elektronik bileşenlerle birlikte özel olarak tasarlanmış bir pcb kart türü olan Arduino Nano’dur.

Programda, bir yıldız, küp ve basit bir stand gibi çeşitli şekiller yapmak için birkaç özel işlev ve ayrıca 16×2 lcd ekran üzerinden komut girerek tel formları oluşturabileceğimiz manuel bir mod mevcuttur.

Basit Tel Bükme Makinesi 3D Parçaları

Her zaman olduğu gibi, projeyi bir 3D modelleme yazılımı kullanarak yapmaya başlayalım. Aşağıda 3D model dosyalarını indirebilirsiniz.

 

Solidworks:

 

STEP Dosyası:

 

3D Baskı için STL Dosyaları:

 

Dişliler, yatak, geçiş blokları ve bazı şaft kuplörleri gibi parçaları yapmak için 3D yazıcı kullanacağız. 3D baskı için kullanılan bu parçaların STL dosyalarını, üstteki linkten indirebilirsiniz.

 

Tel Bükme Makinesi Yapımı

MDF ve kontrplak’dan oluşan diğer parçaları hazırlayalım. 3 boyutlu parçaların tüm ölçülerini alarak, elektrikli testere yardımıyla parçaları boyutlandıralım. 8 mm MDF ve 18 mm kontrplak kullanabiliriz. Parçaları hazırladıktan sonra birleştirmeye başlayabiliriz. İlk önce kaideyi iki MDF plakasından ve 4 kontrplak kolonundan oluşturalım. Sabitlemek için tahta tutkalı ve vida kullanabilirsiniz.

Üst panelde bulunan 3D parçaları 8 mm civata ve somun kullanarak tutturalım. Burada, demir veya bakır boru geçirdiğimiz 3d parçaların altına yükselti için 3 mm kalınlığında MDF plakaları ekleyelim ki; böylece uygun yüksekliği elde edebiliriz. Borunun geçtiği noktalara 6202 Rulman takmalıyız.

Rulmanın dış çapı 35 mm ve iç çapı 15 mm’dir. Şimdi, bu rulmanların içinden, telin içinden geçebilmesi için 15 mm’lik boş bir mil(boru) takmamız gerekiyor. Bu kısım aslında Z-ekseni ile alakalıdır. Bükme mekanizmasının tel etrafında dönmesini ve bu şekilde üç boyutlu formlar oluşturmasını sağlar. Bu amaçla biz bakır bir boru kullandık. Uzunluğu 30 cm civarında olmalıdır.

 

İki yatak arasına 1.5 ve 30 dişli çark yerleştirelim. Çarklar, M3 somunlarını yerleştirebileceğimiz özel tasarım yuvalarına sahiptir. Daha sonra M3 cıvatalarını kullanarak dişliyi mile sıkıştırabiliriz.

Sonra Z ekseni için step motoru kurmamız gerekiyor. Bunun için 3D özel bir montaj braketimiz mevcut. M3 cıvataları kullanarak braketimizi motorumuza sabitleyelim ve ardından 18 dişli çarkı motor şaftına yerleştirelim.

Sonra 6 mm’lik bir uca sahip matkap kullanarak montaj braketinin üzerine sabitleneceği tabana iki delik açalım.

Besleme mekanizması için step motor takılarak devam edelim. Bu motor doğrudan üst plakaya alttan monte edilecektir, bu yüzden üzerinde uygun delikleri açacağız. Sonra dört cıvatayı kullanarak motoru plakaya tutturalım.

Şimdi bu adım da şaft üzerine besleyiciyi yani tel düzelticiyi yerleştirmemiz gerekiyor. Bu amaçla üzerine geniş bir bakır boru yerleştirdiğimiz özel bir şaft kuplörü yazdırdık.

Bakır düzleştiricinin karşı tarafına, teli ezecek bir kol yerleştirelim. Besleyicinin teli düzleştirerek hareket ettirebilmesi için yeterli tutuş elde edebileceği destek, üzerinde bir T-somun bulunan bir kontrplak parçasıdır.

Bir sonraki adım tel düzleştirme sistemini yapmaktır. Üç adet M8 cıvata kullanarak daha önce 3D parçalara göre deldiğimiz bir kontrplak parçasını sabitleyelim. Şimdi bunun üzerine silindirleri yerleştireceğiz. Hareket edebilmesi için yuvarlak 3d parçaların içerisine rulman yerleştirmeliyiz.

Bir tarafa üç silindir, diğer tarafa iki silindir yerleştireceğiz. Kontrplak parçaları arasında karşılıklı delikler açalım ki cıvatalar parçayla aynı hizada kalsın. Şimdi sadece iki cıvata kullanarak iki tarafı eşleştireceğiz ve somunları kullanarak düzleştiricileri uygun şekilde hizalayıp sıkalım.

Bu adımı da bitirdikten sonra, düzleştiricilerin önüne iki kontrplak parçası daha ekleyeceğiz. Öncelikle bir MDF parçasına bükme motorunu takmamız gerekiyor. Bunu yapmadan önce, biraz şekillendirmeye ihtiyaç duyduğumuz için MDF parçasını, matkap ve sabitleyici kullanarak kolayca istenen şekle sokabiliriz. Daha sonra 38 mm’lik bir metkap kullanarak, bükme için kullanacağımız büyük STEP motor NEMA 23 ayarladık. Ayrıca diğer parçaları bağlamak için gereken daha küçük delikler de açtık.

NEMA 23 kademesini M4 cıvatalar ve somunlar kullanarak sabitledik ve çıkış milinde 2.5 ve 18 dişlilerden oluşan bir çark seti taktık. Bu dişli MG996R servoyu monte etmek için entegre plakalı özel tasarlanmış bir dişli olan daha büyük 30 dişli çark ile eşleştirilecektir. Bu servo, gerçekte dişliden çıkacak ve teli bükmeye yarayacak bir pim olan bir kremayer ve pinyon mekanizmasını hareket ettirecektir. Hızlı bir şekilde bir yapıştırıcı kullanarak, dişliyi bir yatağa sabitledik ve ayrıca teli bükerken temas yüzeyi olacak parçaya bakır boru ekledik.

Yapıştırıcı kuruduktan sonra, büyük dişliyi bir M8 cıvatası ve bir somunla sabitleyerek iki dişliyi eşleştirelim. Sonra rafı ve servoyu yerleştirip, servo paketinden çıkan vidaları kullanarak sabitleyelim. Daha sonra, pinyon dişlisini iki M3 cıvata ve somun kullanarak servonun yuvarlak başlığına sabitleyelim.

Servo tutturulduktan sonra bükme mekanizması tamamlanmış olacaktır.

Şimdi yapılması gereken, bükücüyü Z eksenine bağlamaktır. Bunu iki adet 3D çıktısı mil kıskacını kullanarak yapacağız. Önce M6 cıvataları ve somunları kullanarak onları bükme plakasına sabitleyelim ve sonra onları Z eksenine yerleştirelim. İki somunu yerine taktık ve cıvataları kullanarak kelepçeleri mile sıkıştırdık. Şimdi tüm hareketli parçalar düzgün çalışıyor.

Aslında eklenecek iki küçük detay daha var. Telin çıktığı şafttaki 3 mm’lik nozul.

Bükücünün altına, bükücünün başlangıç ​​konumunu ayarlamak için kullanılacak olan bir mikro limit anahtarı yerleştirelim.

Ve tamam… 3D tel bükme makinemiz neredeyse bitti. Neredeyse dedim, çünkü şimdi bu makineye elektrik vermek ve elektronik bileşenleri bağlayıp programlamamız gerekiyor.

Devre şeması

İşte ilginç arduino projemiz basit tel bükme makinası devre şeması.

3 step motor, 3 DRV8825 step sürücü kullanılarak kontrol edilir. Step motorlara ve tüm projeye güç sağlamak için en az 3 A akım oranına sahip 12V güç kaynağı kullanacağız.

Servoyu çalıştırmak için, Arduino’dan gelen 5V enerjiyi kullanabiliriz, ancak MG996R servo için yeterli olmayabilir. Bu nedenle, bu proje de servoyu çalıştırmak için LM7805 5V voltaj regülatörü kullanmaya karar verdik.

Bu proje için ihtiyaç duyduğunuz bileşenleri aşağıdaki bağlantılardan satın alabilirsiniz:

PCB Kart Tasarımı

Kablo karmaşasından kurtulmak ve elektronik bileşenlerin düzenli kalmasını sağlamak için, EasyEDA ücretsiz çevrimiçi devre tasarım yazılımını kullanarak özel bir PCB tasarladık. Devre birçok bağlantıya sahip, bu yüzden onları düzenlemek için hem üst hem de alt katmanları kullandık. Ayrıca step motorlar için pinler ekledik, bir tane sınır anahtarı bağlantısı ekledik ve Arduino’dan gelen veriler için ihtiyaç duymamız durumunda ilave dijital ve analog pinler ekledik.

Bağlantıya tıklayarak projeye ulaşabilirsiniz. PCB Kart Tasarımı PCB kart üretimi için gereken Gerber dosyasını aşağıdan indirebilirsiniz.

Gerber dosyası:

 

Kartı bastırmak için JLCPCB‘den sipariş verebilirsiniz.

Burada Gerber dosyasını yükledikten sonra, PCB’imizi Gerber görüntüleyicide inceleyebiliriz. Her şey yolunda giderse devam edebiliriz, PCB için istediğimiz özellikleri seçip PCB’lerimizi makul bir fiyatla sipariş edebiliriz. JLCPCB’den ilk siparişiniz ise, sadece $ 2 karşılığında 10’a kadar PCB alabileceğinizi bilmenizi isteriz.

PCB’ler geldi. PCB’lerin kalitesi mükemmel ve her şey tasarımdakiyle tamamen aynı.

Artık elektronik bileşenleri PCB’ye takabiliriz. PCB üzerine pin başlıklarını lehimleme ile başlayalım. Kondansatörler, dirençler, voltaj regülatörü ve terminal blokları gibi daha küçük bileşenlere gelince, bunları doğrudan PCB’ye lehimledik.

Bu adımı tamamladıktan sonra, şimdi step sürücülerini ve Arduino’yu yerine yerleştirebiliriz. Güç kablosunu ve güç anahtarını terminal bloklarına bağlamalı, kabloları bir taraftaki step motorlara ve diğer taraftaki PCB’ye bağlamalıyız. Servo, 2 numaralı dijital pine bağlı ve LM7805 voltaj regülatörü üzerinden gelen 5V ile çalışmaktadır. Son olarak, sürücülerin altındaki pinleri bağlayarak kademeli çözünürlüğü seçebiliriz.

Biz çözünürlüğü kullanmaya karar verdik, bu yüzden yukarıdaki fotoğrafta görüldüğü gibi ortadakiler yerine doğru pinleri bağlamamız gerekiyor. Böylece elektronik bileşenler hazır olacaktır ve tel bükme makinesini programlamaya devam edebiliriz.

3D Tel Bükme Makinesi Projesi için Arduino Kodu

Kod biraz uzun olduğu ve daha iyi anlaşılması için programın kaynak kodunu bölümlere açıklamalarıyla birlikte ayırdık. Ve bu yazının sonunda kaynak kodun tamamını bulabilirsiniz.

Step motorları kontrol etmek için AccelStepper kütüphanesini Mike McCauley kullanacağız. Bu yüzden bu kütüphaneyi ve aynı zamanda servo motoru kontrol etmek için servo kütüphanesini dahil etmemiz gerekiyor. Ardından, stepperlerin bağlı olduğu pinleri ve aşağıdaki program için bazı değişkenleri tanımlamamız gerekir.


#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;

Kurulum bölümünde servonun veya bükme piminin başlangıç ​​pozisyonunu ve ayrıca bükme tertibatının başlangıç ​​pozisyonunu ayarladık. Bu ayar sınır anahtarı ile yapılır. Step, anahtara doğru döner ve bir kez basıldığında motor, basamakları sıfırdan saymaya başlar ve teli eğmeye hazır hale gelir.

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);
}

Şimdi döngü bölümünde ekran üzerine gelen komutları bekliyoruz. Eğer manuel yazarsak, manuel bükme moduna gireriz ya da örneğin yıldız için star yazarsak, start() özel fonksiyonu çalıştırılır ve makine bizim için otomatik olarak bir yıldız formu oluşturur.

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();
  }
}

Bu özel fonksiyona bir göz atalım.

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++;
  }
}

Burada 5 kez yürütülen bir süre döngüsüne giriyoruz, çünkü yıldızın 5 kolu vardır. Besleme değerini ayarlayarak milimetre cinsinden ne kadar tel ilerlemesi gerektiğini belirleriz. Bu değer daha sonra step motorun hareket etmesi için besleme değerini uygun adımlara dönüştüren 48 ile çarpılır. Daha sonra run() işlevini kullanarak, besleyici motorunu setSpeed​​() işlevi tarafından ayarlanan bir hızda döndürürüz. Motor yukarıdaki feedDistance değerine ulaştığında durur ve hemen ardından adımın sıfıra ait geçerli konum değerini belirleriz.

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

Bir sonraki adımda teli 52 derece bükeriz. Bu yukarıda açıklandığı gibi yapılır. Burada da istenen açıyla çarpılan bir açı sabitine sahibiz. Bu değere motor tarafından ulaşıldığında motor durur, mevcut konumunu 0'a sıfırlar ve ardından aynı sayıda adımı ters yönde, motoru ilk konumuna geri döndürür.

// 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);

Sonra yine aynı uzunlukta teli ilerletiriz ve pimi aşağı indiririz, böylece bükücü diğer yönde bükme için kullanılan yeni bir başlangıç ​​konumuna geçebilir. Bükme pimi daha sonra kaldırılır ve böylece teli ters yönde 105 derece bükeriz. Komutlar 5 kez tekrarlanır ve yıldız biçimini böylece elde etmiş oluruz.

Yukarıda açıklandığı gibi, küp şeklini veya aslında bulabileceğimiz diğer şekilleri de yapıyoruz. Manuel modda, komutların çalışma prensibi aynıdır, ancak ekrandan gelen komutları okumak için birkaç satır daha vardır. Örneğin tel beslemesi için, “f”, artı milimetre cinsinden uzaklık, teli bükmek için “b”, artı derece cinsinden açı ve Z eksenini döndürmek için ihtiyacımız var. “z”, artı derece cinsinden yazın.


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);
    }

Yaptığım program bu şekilde çalışıyor, ama elbette, kodlanmanın başka yolları da var. İşte şimdi sizlerle Arduino ile çalışan Basit Tel Bükme Makinesi için gerekli eksiksiz tam Arduino kodunu paylaşıyoruz:

/*
  Arduino ile Basit Tel Bükme Makinası
  
  www.HayaletVeYap.com
  Arduino Kütüphanesi:
  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;
  }
}

Sonunda, tel bükme makinesinin tel doğrultma sisteminin aslında çalışması gerektiği gibi çalışmadığını belirtmek isterim, çünkü teli düzleştirme için kullandığımız bakır ezici yumuşak bir maden olduğu için tam düzgünlük elde edemedik. Bunun yerine demir kullanabilirsiniz.

Bu sorunu çözmek için, bakır borudan farklı, daha güçlü malzemeler kullanmaya çalışabilir veya farklı bir besleme sistemi oluşturabilirsiniz.

Hepsi bu kadar. Umarım bu arduino projemizden hoşlanmış ve yeni bir şeyler öğrenmişsinizdir.

Eğer bu makalemizden memnun kaldıysanız aşağıda bulunan “yukarı ok“a tıklayarak +1 puan verebilirsiniz.
Diğer Güncel Arduino Projeleri için BURAYA TIKLAYABİLİRSİNİZ.

Sizde Robotlara ve Maker’lığa Meraklıysanız Robotik Marketimiz ROBOCOMBO‘yu Ziyaret Edebilirsiniz.

Arduino ile Yapılmış 10 İlginç Örnek Proje

Okuduğunuz İçin Teşekkürler.

Kaynak: howtomechatronics.com/projects/arduino-3d-wire-bending-machine/