Resim Çizen 2 Eksen Lazer Makinesi Yapımı
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:
- Arduino Uno
- 2 Adet step motor ve sürücü
- .5-2W Lazer Diyot lazer modül
- LM317T Voltaj Regülatörü TO220-3
- Doğrultucu Diyot (FFP08S60S NTU)
- NPN Transistör (TIP102)
- TO220 Isı alıcıları (MC33284)
- 5Ohm 15W potansiyometre
Mekanik Malzemeler:
- 16mm çap, 5 mm hatve, 400mm uzunluğunda bilyalı (Tayvan)
- 16mm BK12 Ballscrew Desteği (Driven sonu)
- 16mm BF12 Ballscrew Desteği (Non-güdümlü sonu)
- 16mm 500mm uzun şaft
- 16mm şaft desteği (SK16)
- 16mm lineer rulman (SC16LUU)
- 6.35mm / 8mm motorlu kavrama
- 12mm şaft desteği (SK12)
- A4 boyutlu 4.5mm şeffaf akrilik levha
- Alüminyum Yassı çubuk 100mm x 300mm x 3mm
- 50mm x 50mm 2.1m Alüminyum Çit Mesaj
- Alüminyum Yassı çubuk 50mm x 1m x 3mm
- Alüminyum Açı 30mm x 30mm x 1m x 3mm
- Alüminyum Açı 25mm x 25mm x 1m x 1.4mm
- M5 soket başlı vida (çeşitli uzunluklarda)
- 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.
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.
lazer makinasını nasıl laser GRBL uygulamasını kullanarak kontrol edebiliriz bunun için hangi arduino kodu gerekir şimdiden teşekkür ederim
LAZERİ NEREDEN ALDINIZ, FİYATI NE KADARDIR ? VE SİZE MAALİYETİ NE KADAR OLDU?
Iyi Aksamlar Sezgin Bey,
Bu urun ile ilgili sitenizden size mail atmistim.
Detaylar ortada yaziyor. Konu ile ilgili geri donusunuzu Rica ederim.
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?
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?
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
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
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
ardunio mega ve uno var elimde rapramps 1.4 var laser çıkış pini hangisi verdiğiniz yazılımda
Projeyi yapmayı düşünüyorum ama mekanik parçaların CAD çizimi var mı?
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.?
iyi günler fiber markalama lazeri nasıl yapabiliriz.
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:)
arkdaşalar ben bu cihazın programını nereden bulabilirim
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.
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.
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
İnstegramda size yazdım sorunumuzu adım hamdi irtibat numaram 0536.391.68.15
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.
Burda kullandıkları diyot 100mw gücünde. Bana 3-5 watt lık bir diyot lazım
Ahmet bey grupelektronik sitesini bi inceleyin.
Lazer diyotu nerden temin edebiliriz?
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
Merhaba Güven bey, String[] lines = loadStrings(“cncinstructions.txt”); kısmındaki cncinstructions.txt dosya isminin sizdeki dosya ismiyle değiştirin.