Resim Çizen 2 Eksen Lazer Makinesi Yapımı

35 17.626

Kendi Robotunu Yap projelerimizin bu bölümünde lazer kesim makinesi yapacağız.Lazer kesim makinaları 2 veya 3 eksen olabilir.Biz bu projemizde 2 eksenli yapacağız.Yani sadece levha düzlemlerde kesim yapmak için kullanılabilecek bir makinemiz olacak.

Elektronik Malzemeler:

  1. Arduino Uno
  2. 2 Adet step motor ve sürücü
  3. .5-2W Lazer Diyot lazer modül
  4. LM317T Voltaj Regülatörü TO220-3
  5. Doğrultucu Diyot (FFP08S60S NTU)
  6. NPN Transistör (TIP102)
  7. TO220 Isı alıcıları (MC33284)
  8. 5Ohm 15W potansiyometre

Mekanik Malzemeler:

  1. 16mm çap, 5 mm hatve, 400mm uzunluğunda bilyalı (Tayvan)
  2. 16mm BK12 Ballscrew Desteği (Driven sonu)
  3. 16mm BF12 Ballscrew Desteği (Non-güdümlü sonu)
  4. 16mm 500mm uzun şaft
  5. 16mm şaft desteği (SK16)
  6. 16mm lineer rulman (SC16LUU)
  7. 6.35mm / 8mm motorlu kavrama
  8. 12mm şaft desteği (SK12)
  9. A4 boyutlu 4.5mm şeffaf akrilik levha
  10. Alüminyum Yassı çubuk 100mm x 300mm x 3mm
  11. 50mm x 50mm 2.1m Alüminyum Çit Mesaj
  12. Alüminyum Yassı çubuk 50mm x 1m x 3mm
  13. Alüminyum Açı 30mm x 30mm x 1m x 3mm
  14. Alüminyum Açı 25mm x 25mm x 1m x 1.4mm
  15. M5 soket başlı vida (çeşitli uzunluklarda)
  16. M5 somun M5 pullar

Mekanik Kısım:

Makine X ve Y eksenleri konumunu ve hareketini kontrol etmek için bilyeli ve lineer rulmanlar kullanıyor.Makinenin vidalı mil ve aksesuar özellikleri şunlardır:

16mm 400 mm uzunluğunda vida (makine uçları da dahil olmak üzere 462mm)
5mm vida adımı
C7 doğruluk derecesi
BK12 / BF12 bilyalı destekler

Yüksek doğruluk (minimal boşluğu), sertlik ve verimlilik için vidalı mil kullanmayı seçtik. Bilyalı somun bilyalı rulmanlar bilyalı karşı bir parça haddelemede çok az sürtünme oluşturacağından, motorları durmadan yüksek hızlarda çalıştırabiliriz.X ekseni için bilyalı her iki tarafında, çelik bir mil üzerinde doğrusal bir yatak vardır. Bu yapılandırma cnc makineler için oldukça yaygındır ve taban plakası (Y ekseni) ve lazer düzeneği (X ekseni) için istikrarlı bir temel sağlar.
Burada kullanılan parçalar:
16mmx500mm uzunluğunda sertleştirilmiş krom şaft (Adet: 4)
16mm lineer rulman – SC16LUU (adet: 4)
16mm şaft destek – SK16 (adet: 8)

Top destekleri vida ve şaft destekleri 50mm x 50mm oyuk alüminyum levhanın üzerine monte edilir. Bu levha, makinenin tüm önemli yapısal parçalar için kullanılır. Alüminyum kalınlığı 2 mm dir.M5 soket başlı vida ve M5 fındık birlikte parçalarının çoğunu tutmak için kullanıldı.Y ekseni A4 boyutlu 4.5mm kalınlığında şeffaf akrilik levhadan yapılmıştır.

Elektronik Kısım:

Seçilen bileşenler ile ilgili bazı detayları aşağıdaki gibidir:

Step Motor (2 Adet)
1.8Nm  tork (255 oz-in)
200 devir / (1.8 ° adım açısı)
3.0A akım kadar
Ağırlık – 1.05kg

Step Sürücü (2 Adet)
Dijital adım sürücü
Mikrostep özelliği
5.6A çıkış akımı 0.5A
Çıkış akım sınırlayıcı (motorların aşırı ısınma riskini azaltır)
Kontrol Sinyalleri: Adım ve Yön girişi
Darbe Giriş 200kHz’e kadar
20V-50V DC besleme gerilimi

Her bir eksen için motorlar doğrudan vidalı sürücülere bağalnır. Motorlar, iki alüminyum açıları kullanarak çerçeve ve bir alüminyum plakaya monte edilir. Alüminyum açıları ve plaka kalınlığı 3mm, ve bükmeden 1kg motoru desteklemek için yeterli güçlüdür.
Not: Doğru motor milini ve vidaları hizalamak çok önemlidir.Kullanılan bağlantı elemanları küçük hataları telafi etmek için bazı esnemeler yapılabilir, ama uyum hatası çok büyükse, hata büyük olur.

Elektronik Devre Şeması:

Makinenin kontrolü arduino ile sağlanacak. Yapmamız gereken step sürücülere adım ve yön sinyalleri ile lazer sürücü sinyali göndereceğiz.. Bu tasarımda, sadece 5 adet çıkış pini makineyi kontrol etmek için gereklidir.Tüm elektrik bağlantılarını gösteren diyagram aşağıda gösterilmiştir.Sinyal hatları ve güç kabloları için katı çekirdek 22 AWG tel kullanılır.

Yazılım Kısmı:

Çizdireceğimiz resimler bitmap formatında olacak.Resimleri işleme kısmını iki aşamada yapacağız.Birincisi c# programında ikincisi de processing ile resimleri işleyeceğiz.C# de bitmap dosyasını koordinatlarını txt dosyası olarak dönüştüreceğiz.Txt dosyasını processing ile okutarak koordinatları step motorlara yazdırmasını sağlayacağız.

CNC Resim İşleme

Processing Arayüz:

import processing.serial.*;
// Serial only works with 32-bit Processing IDE
 
Serial myPort;
String [] output;
int counter = 0;
int senddata = 1;
//ASCII "5" is 53 in decimal
//char laserflag = char(53);
String[] lines = loadStrings("cncinstructions.txt");
 
//delays (ms)
 
int shortdelay = 8;
int longdelay = 18;
int totaldelay = 1;
int shortcounter = 0;
int longcounter = 0;
int a = 0;
int linelength = 0;
 
//println(lines);
//println(lines[1]);
 
output = splitTokens(lines[0],",");
//println(output[0]);
int totalsteps = output.length;
//println(i);
 
myPort = new Serial(this, "COM3", 9600);
//Delay is to wait for Arduino to reset
delay(5000);
 
while (senddata==1){
 //send string
 myPort.write(output[counter]);
 shortcounter = 0;
 longcounter = 0;
 println("counter= " + counter + " of " + (totalsteps-1) + " value= " + output[counter] );
 //check contents of string to determine delay before next string is sent
 linelength = output[counter].length();
 for (a = 0; a<linelength;) { if (output[counter].charAt(a)=='1') { shortcounter++; } if (output[counter].charAt(a)=='3') { shortcounter++; } if (output[counter].charAt(a)=='5') { shortcounter++; } if (output[counter].charAt(a)=='7') { shortcounter++; } if (output[counter].charAt(a)=='2') { longcounter++; } if (output[counter].charAt(a)=='4') { longcounter++; } if (output[counter].charAt(a)=='6') { longcounter++; } if (output[counter].charAt(a)=='8') { longcounter++; } a++; } totaldelay = shortcounter*shortdelay + longcounter*longdelay + 10; delay(totaldelay); //println(totaldelay); counter++; if (counter>totalsteps){
 senddata = 0;
 }
}

Arduino Yazılımı:

/* Stepper motor control program
 
*/
 
// constants won't change. Used here to set pin numbers:
const int ledPin = 13; // the number of the LED pin
 
const int OFF = 0;
const int ON = 1;
 
const int XmotorDIR = 5;
const int XmotorPULSE = 2;
 
const int YmotorDIR = 6;
const int YmotorPULSE = 3;
 
 
//half step delay for blank pixels - multiply by 8 (<8ms)
const unsigned int shortdelay = 936;
 
//half step delay for burnt pixels - multiply by 8 (<18ms)
const unsigned int longdelay = 2125; 
 
//Scale factor
//Motor driver uses 200 steps per revolution
//Ballscrew pitch is 5mm. 200 steps/5mm, 1 step = 0.025mm
//const int scalefactor = 4; //full step
const int scalefactor = 8; //half step
 
 
const int LASER = 51;
 
// Variables that will change:
int ledState = LOW; // ledState used to set the LED
int counter = 0;
int a = 0;
int initialmode = 0;
int lasermode = 0;
 
long xpositioncount = 0;
long ypositioncount = 0;
 
 
//***********************************************************************************************************
//Initialisation Function
//***********************************************************************************************************
 
void setup()
{
 // set the digital pin as output:
 pinMode(ledPin, OUTPUT);
 pinMode(LASER, OUTPUT);
 
 for (a = 2; a <8; a++){
 pinMode(a, OUTPUT);
 }
 
 a = 0;
 
 
 setinitialmode();
 digitalWrite (ledPin, ON);
 delay(2000);
 digitalWrite (ledPin, OFF);
 
 // Turn the Serial Protocol ON
 Serial.begin(9600);
}
 
 
 
 
//************************************************************************************************************
//Main loop
//************************************************************************************************************
 
void loop()
{
 byte byteRead;
 
 if (Serial.available()) {
 
 /* read the most recent byte */
 byteRead = Serial.read();
 //You have to subtract '0' from the read Byte to convert from text to a number.
 if (byteRead!='r'){
 byteRead=byteRead-'0';
 }
 
 //Move motors
 if(byteRead==1){
 //Move right FAST
 fastright(); 
 }
 if(byteRead==2){
 //Move right SLOW
 slowright();
 }
 if(byteRead==3){
 //Move left FAST
 fastleft(); 
 }
 if(byteRead==4){
 //Move left SLOW
 slowleft(); 
 }
 if(byteRead==5){
 //Move up FAST
 fastup();
 }
 if(byteRead==6){
 //Move up SLOW
 slowup();
 }
 if(byteRead==7){
 //Move down FAST
 fastdown();
 }
 if(byteRead==8){
 //Move down SLOW
 slowdown();
 }
 if(byteRead==9){
 digitalWrite (LASER, ON);
 }
 if(byteRead==0){
 digitalWrite (LASER, OFF);
 }
 if (byteRead=='r'){
 //reset position
 xresetposition();
 yresetposition();
 delay(1000);
 }
 }
 
}
 
 
//************************************************************************************************************
//Set initial mode
//************************************************************************************************************
void setinitialmode()
{
 if (initialmode == 0){
 digitalWrite (XmotorDIR, OFF);
 digitalWrite (XmotorPULSE, OFF);
 
 digitalWrite (YmotorDIR, OFF);
 digitalWrite (YmotorPULSE, OFF);
 
 digitalWrite (ledPin, OFF);
 initialmode = 1;
 }
}
 
 
 
//************************************************************************************************************
// Main Motor functions
//************************************************************************************************************
 
void fastright()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (XmotorDIR, ON);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, OFF);
 delayMicroseconds(shortdelay);
 digitalWrite (ledPin, OFF);
 }
 xpositioncount++;
}
 
void slowright()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (XmotorDIR, ON);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, OFF);
 delayMicroseconds(longdelay);
 digitalWrite (ledPin, OFF);
 }
 xpositioncount++;
}
 
void fastleft()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (XmotorDIR, OFF);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, OFF);
 delayMicroseconds(shortdelay);
 digitalWrite (ledPin, OFF);
 }
 xpositioncount--;
}
 
void slowleft()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (XmotorDIR, OFF);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15);
 digitalWrite (XmotorPULSE, OFF);
 delayMicroseconds(longdelay);
 digitalWrite (ledPin, OFF);
 }
 xpositioncount--;
}
 
void fastup()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (YmotorDIR, ON);
 delayMicroseconds(15);
 digitalWrite (YmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15); 
 digitalWrite (YmotorPULSE, OFF);
 delayMicroseconds (shortdelay);
 digitalWrite (ledPin, OFF);
 }
 ypositioncount++;
}
 
void slowup()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (YmotorDIR, ON);
 delayMicroseconds(15);
 digitalWrite (YmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15); 
 digitalWrite (YmotorPULSE, OFF);
 delayMicroseconds (longdelay);
 digitalWrite (ledPin, OFF);
 }
 ypositioncount++;
}
 
void fastdown()
{
 for (a=0; a<scalefactor; a++)
 {
 digitalWrite (YmotorDIR, OFF);
 delayMicroseconds(15);
 digitalWrite (YmotorPULSE, ON);
 digitalWrite (ledPin, ON);
 delayMicroseconds(15);
 digitalWrite (YmotorPULSE, OFF);
 delayMicroseconds (shortdelay);
 digitalWrite (ledPin, OFF);
 }
 ypositioncount--;
}
 
void slowdown()
{
 for (a=0; a<scalefactor; a++) { digitalWrite (YmotorDIR, OFF); delayMicroseconds(15); digitalWrite (YmotorPULSE, ON); digitalWrite (ledPin, ON); delayMicroseconds(15); digitalWrite (YmotorPULSE, OFF); delayMicroseconds (longdelay); digitalWrite (ledPin, OFF); } ypositioncount--; } void xresetposition() { while (xpositioncount!=0){ if (xpositioncount > 0){
 fastleft();
 }
 if (xpositioncount < 0){ fastright(); } } } void yresetposition() { while (ypositioncount!=0){ if (ypositioncount > 0){
 fastdown();
 }
 if (ypositioncount < 0){
 fastup();
 }
 }
}

Kendi robotunu yap projelerimizin bu projesinde de lazer cnc ile resim çizen robotumuzu tamamladık.Önceki projelerimize kendi robotunu yap bölümünden bakabilirsiniz.

Bunlar da İlgini Çekebilir

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

  1. ubeydullah

    lazer makinasını nasıl laser GRBL uygulamasını kullanarak kontrol edebiliriz bunun için hangi arduino kodu gerekir şimdiden teşekkür ederim

  2. İSMAİL EMRE

    LAZERİ NEREDEN ALDINIZ, FİYATI NE KADARDIR ? VE SİZE MAALİYETİ NE KADAR OLDU?

  3. Gökay TASCI

    Iyi Aksamlar Sezgin Bey,

    Bu urun ile ilgili sitenizden size mail atmistim.

    Detaylar ortada yaziyor. Konu ile ilgili geri donusunuzu Rica ederim.

  4. Abdullah Davut Yavi

    txt sosyasına nasıl dönüştürebilirim bmp ya da png dosyalarını? yukarıca C# ile dönüştüreceksiniz demişsiniz. ben de visual studio 2017 kurdum. Ama nasıl yapacağımı bir türlü çözemedim. C#.net’i de kurdum. Yardımcı olur musunuz?

  5. Abdullah Davut YAVİ

    Merhaba paylaşım için çok teşekkürler. Yazılımınızı direk bağlantılarını yaptığım 1 arduino mega 2560 ,1 cnc shield ramps v1.4, 2 stepper motor, 1 2 watt^lık lazer başlık, 1 fan ve 1 LCD ekranda kullanabilir miyim? LCD ekran için kodda bir şey yok sanırım ama LCD ekran hariç diğerlerine uyar mı kodunuz?

  6. Ertugrul

    KardesIm senden bir ricam var
    Cnc freze ufak makina
    Kodlarını paylaşımının
    Bekliyoruz
    Birde dijital Görseli li olsun
    Yani şey gizli eeeeeeeeeeeee usb controller gibi sana zahmet ustat

  7. fatih

    Merhaba abi bu proje on lisans bitirme projem mekanik kısmını nerdeyse tamamladık yazılım da arayüzü galiba siz olusturmussunuz ben arayuzu yazmayıp dısardan inkspace uygulamasını kullansam olurmu

  8. davut

    merrhaba bu ardunio karta bir çok yazılım yükledim ancak sizin yazılımı nasıl yükleyeceğimi anlamadım yardımcı olurmusunuz

    1. davut

      ardunio mega ve uno var elimde rapramps 1.4 var laser çıkış pini hangisi verdiğiniz yazılımda

  9. Kenan Can

    Projeyi yapmayı düşünüyorum ama mekanik parçaların CAD çizimi var mı?

  10. Okan

    Merhaba;
    – Elektronik kısmında dirençlerin değeri nedir..?
    – (5Ohm 15W potansiyometre ) 50 Ohm mu 5 ohm mu.Burada biraz karıştırdım.
    – npn transistörü tip102 yerine 2N2222A Metal Kılıflı kullansak sıkıntı yaratırmı.? yada tip102 alternatifi neler kullanabiliriz.?
    – Doğrultucu diyot olarak 1N4007 kullanabilirmiyiz.?

  11. Birol

    iyi günler fiber markalama lazeri nasıl yapabiliriz.

  12. Abdullah Davut Yavi

    ben de 2 ya da 3 eksende lazer cutter yapmak istiyorum.2 eksen için yazdığınız malzemlerin fiyatı nedir aşağı yukarı? 3 eksen için neler gerekir?aşağı yukarı ne kadar tutar.paylaşım için teşekkürler:)

  13. YASiN

    arkdaşalar ben bu cihazın programını nereden bulabilirim

  14. nazmi

    abi bende yapacam ama
    turkisi.programlar.ntv.com.tr/dvd-writer-ile-lazer-kesici-nasil-yapilir/

    bu projedekini yapmayı düşünüyorum fakat yazılım işi gcode ile yeterli mi onu yaptıktan sonra kendim code yazcammı arduinoya ve motor pinleri 4 çıkışlı nasıl ayırt etcem bilgi verirsen çok sevinirim.

    1. Sezgin GÜL

      projedeki arduino kodunu yükleyecen sen kod yazmayacaksın. sen sadece c# programıyla resmin bitmap koordinatını txt olarak dönüştürerek processing e txt dosyasını gönderip istenilen çizimi yaptıracaksın. Bütün program ve kodlar projede var.

      1. Nazmi

        ebay.com/itm/121755956358
        kod bölmünü hallettim dijital pin 12 den lazeri tetikleyecem türkişindeki projeyi yapıorumda
        laseri nasıl bağlayacağımı bulamadım aldığım laser adaptörle çalışıyor ama bunu arduinoya nasıl bağlayacağım

      2. Hamdi

        İnstegramda size yazdım sorunumuzu adım hamdi irtibat numaram 0536.391.68.15

  15. Raercan

    Yav arkadas ben yapmadim bilmiyorum desene : D bizde soruyoz. Arkadaslar orjinal i baska sitede video dan bulabilirsiniz

    1. Sezgin GÜL

      Sizin sorunuz programı bulamadım dediniz ben de programın setup ı var dedim projede. Proje sadece türkçeye çevrildi. Ama çevirilen projelerin yazılımları test edilmiştir. Yani bilginiz yok demeniz yanlış bir düşünce.Ayrıca sizin yapmak istediğiniz projenin bu projeyle ilgisi yok. Önceki yorumlarda açıklamıştım.

  16. Muhammed

    merhaba. 16mm mil çok kalın gibi geldi bana kadar mukavemet gerektiriyor mu 8mm ile yapsam sıkıntı olur mu?

    1. Sezgin GÜL

      Hayır sıkıntı olmaz projedeki aynı motorları kullanırsan sorun yaşamassın

  17. Raercan

    Merhabalar benimde buna benzer bi calismam var fakat yazilim tarafinda takildigim noktalar var. Yapmak istedigim sey etiket kesmek icin bicakli bir sistem . Sizin kullandiginiz laser yerine bicak kullanmaliyim ama bicagin agzinin gidis yonune hareketi icin bicaki bir eksenin yon vermesi gerekiyor. Bunu nasil saglayabilirim ? Bresenham algoritmasini inceliyorum. Henuz yolun basindayim yonlendirilmeye ihtiyacim var zaman ayirirsaniz memnun olurum

    1. Sezgin GÜL

      Etiket kesim makineleri bu sistemden farklıdır. Yani bıçağı kaldırıp indiren bir step motor ve bandı ileri süren bir diğer step motor kullanırsınız. Etiket uzunluğuna göre gecikme hesaplayarak yapabilirsiniz.

      1. Raercan

        Cnc resim isleme programini goremedim ( telefondan giriyorum ) siz yaptiysaniz acik kaynak kodlarini paylasir misiniz ?

        1. Sezgin GÜL

          c# da yazılmış programı yazılım kısmında uygulama var. Direk çalıştırıyosun. O program koordinatları txt olarak çıktı alıyor daha sonra projecessing ile koordinatlar işleniyor.

  18. Ahmet

    Burda kullandıkları diyot 100mw gücünde. Bana 3-5 watt lık bir diyot lazım

    1. Sezgin GÜL

      Gittigidiyor da var ama yüksek watt

    2. Güven

      Ahmet bey grupelektronik sitesini bi inceleyin.

  19. Ahmet

    Lazer diyotu nerden temin edebiliriz?

    1. Sezgin GÜL

      Gittigidiyor da bulabilirsin.İstersen kendin de yapabilirsin.

      1. Ahmet

        Gittigidiyor da bir kartonu ya da ince bir kontrplağı kesebilecek düzeyde bir diyot lazere rastlamadım, ebay de var fakat uzun sürelerde elime ulaşacak. Kendimiz yapabiliriz derken bir kaynak varmı gösterebileceğiniz?

        1. Sezgin GÜL

          Örnek videodan bakabilirsin. youtube.com/watch?v=1h5Vn5f81TI

  20. Güven

    Merhaba Sezgin bey ,cnc resim işleme programını indirdim fakat yol gösterdiğim halde bmp resmi çevirirken hata veriyor,işletim sistemim win8 64 bit

    1. Sezgin GÜL

      Merhaba Güven bey, String[] lines = loadStrings(“cncinstructions.txt”); kısmındaki cncinstructions.txt dosya isminin sizdeki dosya ismiyle değiştirin.