Marlin Kalibrasyonu

Marlin Kurulum

3 boyutlu yazıcıların işletim sistemi olan Marlin yazılımı bir çok kullanıcı tarafından yine aynı kulvarda olan Repetier yazılımına göre daha az tercih edilmekte ya da tereddüt ile yaklaşılmaktadır. Bunun en büyük sebebi de yazılımın ayarlarının kod seviyesinde yapılması ve kullanıcı ara biriminin olmaması. Oysa Repetier web tabanlı bir kurulum özelliği sunmakta.

Yukarıdaki paragraftan Repetier’in daha avantajlı ve tercih edilebilir olduğunu düşünebilirsiniz ancak durum aslında biraz farklı. Öncelikle Repetier çok sık güncellenen bir yazılım değil. Bunun yanında hala beta aşamasında. Hal böyle olunca web tabanlı bir kullanıcı ara birimi oluşturmak pek sorun teşkil etmiyor zira yazılımda fazla bir değişiklik olmuyor. Oysa Marlin neredeyse günlük olarak değişikliğe uğruyor ve çok fazla geliştirici üzerinde çalışıyor.

Bir diğer sorunda dökümantasyon dili. Marlin oldukça iyi bir dökümantasyona sahip olmasına rağmen Türkçe desteği çok az. Bu yüzden de kullanıcılar zaten karmaşık olan ayarları birde kendi dillerinde yapamayınca sorunlar başlıyor. Ancak herşey bir yana Marlin kesinlikle çok güçlü bir 3 boyutlu yazıcı işletim sistemidir ve giderek daha da iyi seviyeye gelmektedir. Yakın zamanda 32 bit desteğine de kavuşacak olması onu daha da tercih edilebilir kılacaktır.

Yazılarımı genelde sade ve anlaşılır bir dil ile mümkün olduğunca Türkçeye sadık kalarak yazmaya çalışıyorum. Marlin için hazırlayacağım bu yazı dizisi de yine öyle olacak. Ana kaynak Marlin dökümanları olacak ve aralarda daha anlaşılır olması açısından kendi yorumlarımı katacağım. Tabi ki bu yorumlar denenmemiş ya da doğrulanmamış bilgiler olmayacaktır. Şimdi başlangıç olarak Marlin yazılımını kısaca tanıyalım;

Marlin 2011 yılında geliştirilmeye başlanan GPLv3 lisansına sahip açık kaynaklı bir 3 boyutlu yazıcı işletim sistemidir. Temel olarak Atmel firmasının 2560 işlemcisi üzerine kurulmuştur ve Arduino Mega 2560 geliştirme kartı ve Arduino IDE uygulaması ile kullanılmaktadır. Resmi web sayfasına http://marlinfw.org/ adresinden ulaşabilirsiniz.

Temel özellikleri;

– Hemen hemen en fazla G-code desteğine sahip yazılımdır.
– Desteklediği kontrol kartı sayısı oldukça fazladır.
– Otomatik tabla seviyesi yapabilir.
– Birçok güvenlik önlemi ile donatılmıştır.
– En çok kullanılan 128×64 pixel grafik ekranın yanı sıra bir çok farklı ekrana destek vermektedir.
– Anlaşılır ve kolay kullanılır bir menü sistemine sahiptir. 20 den fazla dilde menü çevirisi vardır.
– PC üzerinden yazıcıya bağlanan Host olarak tabir edilen kontrol yazılımlarını destekler.
– Kartezyen, Delta, SCARA ve Core/H-Bot mekanik sistemlerini destekler.
– Geliştirilmiş ısı kontrolü sayesinde etkin bir çalışma sağlar.
– PC veya SD kart üzerinden baskı yapabilir.
– 5 adete kadar Extruder destekler.
– Filament akışını ve kesintisini tespit edebilir.

Yukarıdaki maddeler tabiki ilk göze çarpan lansman özellikleri. Bunların yanında arka planda çalışan bir çok özelliğe sahiptir ve bunların büyük bir çoğunluğuna kullanıcı tarafından müdehale edilebilmektedir. İşte yazımızın asıl konusu da bu tür özellik ve ayarlamaların detaylarına inerek Marlin’i satır satır incelemek ve soru işaretlerini ortadan kaldırmaktır. Daha önce de belirttiğim gibi Marlin çok sık güncellenen bir yazılım olduğundan bu yazı ilerledikçe değişiklikler olacaktır. Bunları ya yazının ilgili konusunda düzenleme yaparak ya da ayrı bir başlık altında dile getireceğim.

Bu başlıkta son olarak Marlin’in konfigürasyon yapısına değinip daha sonraki yazılarda detayları açıklamaya başlayacağım. Umuyorum ki yazı dizisi bittiğinde artık kullanıcılar “Marlin yükleyeceğim nereden başlamalıyım. ya da ne yapmalıyım?” gibi soruları daha az soracaklardır.

Marlin bir çok dosyadan oluşan ve C++ diliyle geliştirilen bir yazılımdır. Bunun yanında kullanıcıyı ilgilendiren iki temel dosya vardır. Bunlardan birisi Configuration.h diğeri ise Configuration_adv.h dosyasıdır.

Configuration.h temel ayarları içermektedir. Genelde sadece bu dosyada yapılacak ayarlar yazıcınızın çalışması için yeterli olacaktır.
Configuration_adv.h ise daha detaylı ayarları, deneysel özellikleri ve bazı eklentileri içermektedir.
Bilinmesi gereken ve kullanıcıların yaptığı hataları bildiren bir dosya olan SanityCheck.h ise yapılan ayarlamalara göre tüm sistemi kontrol edip olası hataları tespit ederek kullanıcıya bildirir. Bu sayede yazılımın hatalı bir konfigürasyon ile yazıcıya yüklenmesi daha bu aşamada engellenir. Eğer derleme esnasında bir hata alırsanız ve bu konfigürasyon ile ilgili ise size bu hatayı ve yerini söyleyen dosya SanityCheck.h dosyasıdır.

Bahsedilen iki konfigürasyon dosyasının içinde yapılacak ayarlar C++ dilinin derleme mantığına göre düzenlenmiştir. Genelde pasif bir özellik aktif edilmek için başındaki // işaretlerini kaldırmak yeterlidir. Aynı şekilde aktif olan bir özelliği pasif etmek içinde o satırın başına // koymak gerekir.

Bazı durumlarda aktif özelliklerin karşısında bir parametre olması gerekir. Örneğin max. nozzle ısısı gibi. Bu durumda sadece o değeri değiştirmek yeterli olacaktır. Şimdi bu ayarlamalara bazı örnekler verelim.

Aşağıdaki örnekte pasif olan bir özellik görülmektedir;

//#define PIDTEMP

yukarıdaki gibi bir satır varsa bu ayar ya da özellik yazılım tarafından dikkate alınmayacaktır. Ancak baş taraftaki // kaldırılırsa;

#define PIDTEMP

artık bu özellik aktif edilmiş olur ve yazılım derleme esnasında bunu dikkate alır. Yine aşağıdaki gibi bir tanımlama ile belli bir özelliğe değer ataması yapılabilir.

#define BAUDRATE 250000

Bu tür tanımlamalarda sadece rakamsal değer değişir değişkene dokunulmaz. Değişkenden sonra mutlaka en az bir boşluk verilir. Buradaki örnekte değişken BAUDRATE, rakamsal değer 250000 dir. Tüm ondalıklı değerlerde mutlaka nokta (.) kullanılmalıdır. Virgül (,) hataya sebep olacaktır.

Configuration.h dosyası Marlin yazılımının temel ayarlar dosyasıdır. Sadece bu dosyayı yazıcınıza göre düzenleyerek derlediğiniz de yazıcınız çalışır hale gelecektir. Yazının bundan sonraki kısımlarında her seçemeği tek tek ele alıp açıklamalarını yapacağım. Sıfırdan Marlin kurulumuna buradan itibaren başlıyoruz.

#define BAUDRATE 115200

Kullandığınız kontrol kartını USB üzerinden bilgisayara bağlayarak hem Marlin yüklemesi hemde yazıcı kontrolü yapabilirsiniz. Her ne kadar yazıcınız bilgisayara USB portundan bağlanıyor olsa da aslında bir çevirici ile seri port bağlantısı sağlamaktadır. İşte bu ayar ile yazıcı ve bilgisayar arası bağlantı hızını belirliyoruz. Burada yazan değer ne ise kontrol yazılımında da aynı değeri ayarlamanız gerekmektedir. Desteklenen hızlar; 2400, 9600, 19200, 38400, 57600, 115200, 250000

//#define BLUETOOTH

Eğer kontrol kartınızın Bluetooth özelliği varsa ya da sonradan bir Bluetoth modülü taktıysanız bu satırın aktif olması gerekir. Aksi halde devre dışı bırakınız. Varsayılan olarak devre dışıdır. JY-MCU, HC-05, HC-06 türü Bluetooth modüller için bu satırın aktif edilmesine gerek yoktur. Sadece bir önceki #define BAUDRATE 115200 satırındaki bağlantı hızının kullandığınız modül ile aynı olmasına dikkat ediniz. Bahsettiğim modüller genelde 115200 üstüne çıkamazlar.

#define MOTHERBOARD BOARD_RAMPS_14_EFB

bu satır yazıcınızın kalbi olan kontrol kartının tanımlandığı kısımdır ve hatalı tanımlanması durumunda bu kısımdan sonra herşeyi doğru yapsanız bile yazıcınızın çalışmamasına ya da garip davranışlar sergilemesine neden olacaktır. Burada yapılan tek satırlık bir tanımlama tüm yazılımın donanımsal olarak kendini uyarlamasını sağlamaktadır. Seçebileceğiniz kontrol kartlarının listesini boards.h dosyasında bulabilirsiniz. Oradaki listeden ister kartın ismini ister kartın numarasını bu satıra tanımlarsanız geri kalan tüm donanım ayarları kendiliğinden tanımlanacaktır. Tanımlamayı yukarıdaki örnekte gördüğünüz gibi kart ismi ile yapabileceğiniz gibi aşağıdaki şekilde aynı kartın numarası ile de yapabilirsiniz.

#define MOTHERBOARD 43

borads.h dosyasında tanımlanan her kartın kendine ait bir de pins_xxx.h dosyası vardır. Bu dosyada ilgili kartın donanım bağlantıları bulunur ve sizin seçtiğiniz karta göre ilgili pins_xxx.h dosyası otomatik olarak yazılıma dahil edilir.

//#define CUSTOM_MACHINE_NAME “3D Printer”

Varsayılan olarak devre dışı bırakılmış olan bu seçenek yazıcınıza bir isim vermenizi sağlar. Verdiğiniz bu isim LCD ekranın en altında ve bilgisayarınızdan yazıcı kontrol uygulaması ile M115 kodu verdiğinizde görüntülenir. Seçeneği aktif ettiğinizde tırnak işaretleri arasında yazıcıya vereceğiniz ismin sonuna İngilizce menüde “ready”, Türkçe menüde “hazır” ifadesi eklenir.

//#define MACHINE_UUID “00000000-0000-0000-0000-000000000000

Varsayılan olarak devre dışı olan ve MACHINE UUID olarak bilinen bu seçenek sayesinde her yazıcınıza farklı ve benzersiz tanıtım kodları tanımlayabilirsiniz. Böylece destekleyen yazıcı kontrol yazılımlarında her yazıcıyı ayrı ayrı kendilerine has özellikleri ile tanıtabilirsiniz. Otomatik olarak benzersiz UUID oluşturmak için https://www.uuidgenerator.net/ adresini ziyaret edebilirsiniz.

#define EXTRUDERS 1

Yazıcınızdaki toplam Extruder motoru sayısını belirleyeceğiniz kısımdır. 1 – 4 arası bir değer alabilir. Filament karıştırmalı (mixing) nozzle veya tek nozzle u paylaşan birden fazla extruder dahi olsa buraya toplam step motor sayısını girmeniz gerekmektedir.

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

Kullandığınız filamentin makara üzerinde yazan değerini bu satıra girmeniz gerekir. Makarasında 1.75mm yazdığı halde ölçtüğünüzde 1.70mm dahi çıksa buraya makaradaki değeri giriniz.

Bu değer Marlin hacimsel baskı özelliğiiçin gerfeklidir. Ayrıca UBL tabla seviyesi için G26 komutu ile test ızgarası basılırken de bu değer kullanılır.

//#define SINGLENOZZLE

Birden fazla extruder ile tek nozzle u paylaşan E3D Cyclops veya diğer benzeri sistemlerde bu satır aktif edilmelidir. Varsayılan olarak devre dışıdır.

//#define SWITCHING_EXTRUDER
#if ENABLED(SWITCHING_EXTRUDER)
#define SWITCHING_EXTRUDER_SERVO_NR 0
#define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
#endif

Switching Extruder, çift extruder ancak tek step motorun kullanıldığı bir sistemdir. Aynı anda sadece bir extruder çalışabilir. Motorun extruder’lar arası geçişi genellikle bir servo motor ile yapılır. Extruder değişimlerinde step motor ilgili filamenti sürebilmek için yön değiştirebilmektedir.

Varsayılan olarak devre dışı olan bu özellik aktif edildiğinde iki ayrı parametrenin belirlenmesi gerekir. Birincisi;

#define SWITCHING_EXTRUDER_SERVO_NR 0

Bu değer step motor değişimi için kullandığınız servo motorun kontrol kartı üzerindeki servo soketlerinden hangisine bağlandığını belirler. Servo soketleri sıfırdan başlamaktadır. Bu yüzden ilk servo soketi sıfır (0) dır. Diğer seçenek ise;

#define SWITCHING_EXTRUDER_SERVO_ANGLES { 0, 90 } // Angles for E0, E1

Servo motor için açıların belirlendiği ve step motorun her iki extruder için alacağı konumu belirleyen açı değerleridir. Örneğin step motorun birinci extruder a konumlanması için servo motorun sıfır derecede, ikinci motora konumlanması için 90 derecede olması gerekiyorsa tanımlama yukarıdaki gibi olacaktır.

//#define SWITCHING_NOZZLE
#if ENABLED(SWITCHING_NOZZLE)
#define SWITCHING_NOZZLE_SERVO_NR 0
#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1
//#define HOTEND_OFFSET_Z {0.0, 0.0}
#endif

Switching Nozzle, Tek XY taşıyıcı üzerinde iki nozzle un olduğu ve her bir nozzle un servo motor ile yukarı aşağı hareket ettirildiği sistemdir. Servo motor aktif nozzle u aşağı indirirken pasif olanı yukarı kaldırır. Bu sistem de varsayılan olarak devre dışıdır ve aktif edildiğinde tanımlanması gereken iki zorunlu bir isteğe bağlı parametresi vardır. Zorunlu parametrelerden ilki;

#define SWITCHING_NOZZLE_SERVO_NR 0

Bir önceki Switching Extruder sisteminde olduğu gibi kullanılan servo motorun bağlı olduğu servo soketinin numarasıdır. İkinci zorunlu parametre;

#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1

aynı şekilde nozzle seçimi için gereken servo motor açısıdır. İsteğe bağlı parametre ise;

//#define HOTEND_OFFSET_Z {0.0, 0.0}

Bu seçenek varsayılan olarak devre dışıdır. Eğer hareket eden nozzle’lar yerlerini aldıklarında Z eksende bir önceki ile aynı seviyede durmuyorsa buraya aralarındaki farkı girmeniz gerekiyor. İlk değer E0 nozzle için geçerli olup 0.0 olarak kalırken ikinci değer E1’in E0’a göre ne kadar yukarıda ya da aşağıda olduğunu belirler. Negatif değer girilebilir.

//#define MIXING_EXTRUDER
#if ENABLED(MIXING_EXTRUDER)
#define MIXING_STEPPERS 2 // Number of steppers in your mixing extruder
#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
#endif

Mixing Extruder, birden fazla filamentin tek bir nozzle ile sürülmesi için iki veya daha fazla step motor kullanır. Karıştırılan filamentler tek bir nozzle’dan çıkar. Yazıcıya M163, M164 ve M165 Gcode’unu ekler. Renk karışımları için önceden tanımlı oranlar belirlenip bunlar virtual tool denilen sanal extruder’lara kaydedilir. Örneğin iki extruder kullanan bir sistemde karışım belirleyip bunu daha sonra kullanmak üzere kaydetmek için;

M163 S0 P0.6 ; Birinci extruder %60 karışım
M163 S1 P0.4 ; İkinci extruder %40 karışım

komutları ile birinci extruder için %60, ikincisi için %40 bir karıştırma oranı belirlenebilir. Bu karışımı daha sonra kısa yoldan kullanmak için tanımlı virtual tool yani sanal extruder’lara kaydedebilirsiniz. Bunu yapmak içinde;

M164 S0 komutunu vermeniz yeterlidir. Yapılan karışım tanımlaması S0 olarak kaydedilecektir. Varsayılan olarak devre dışıdır ve aktif edildiğinde tanımlanması gereken iki parametresi vardır.

#define MIXING_STEPPERS 3

Yukarıdaki satırda yazıcımızda fiziksel olarak kaç adet extruder olduğunu tanımlıyoruz. Burada örnek olarak 3 extruder tanımlanmıştır.

#define MIXING_VIRTUAL_TOOLS 16

Yukarıdaki tanımlama ise bize renk kombinasyonları yapıp kaydedebileceğimiz sanal extruder sayısını belirlemek içindir. Mixing Extruder yani renk karıştırmalı extruder özelliği başlı başına bir yazı konusu olduğundan o konuyu çok yakında ayrı olarak ele alacağım. Şimdilik sadece tanımlamalara değiniyorum.

//#define HOTEND_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
//#define HOTEND_OFFSET_Y {0.0, 5.00} // (in mm) for each extruder, offset of the hotend on the Y axis

Eğer yazıcınızda birden fazla nozzle varsa bunların ilk nozzle’a göre olan konumları yukarıdaki tanımlamalar ile yapılmaktadır. Değerler milimetre cinsindendir ve tümü ilk nozzle referans alınarak girileceğinden ilk nozzle için değer daima 0.0 olmalıdır. Sonraki değerler ilgili nozzle’un ilk nozzle’a olan mesafesini X ve Y eksende belirler. { … } arasına gireceğiniz değerler virgül ile ayrılmak şartı ile extruder sayısı kadar olmalıdır. X ve Y yönlerinde mesafeler belirlenmesi gerektiğinden her iki satırda kullanılmalıdır. Aşağıdaki örnek tanımlamada 3 adet extruder olan bir sistemde diğer iki extruder için ilk extruder’a olan mesafeler girilmiştir.

#define HOTEND_OFFSET_X {0.0, 20.00, 20.00} // her extruder x eksende birbirinden 20mm uzaktadır.

#define HOTEND_OFFSET_Y {0.0, 5.00, 0.0} // ikinci extruder ilkinin 5mm önünde, üçüncü ise aynı hizadadır.

#define POWER_SUPPLY 0

Marlin 3 boyutlu yazıcılarda kullanılmak üzere üç çeşit güç kaynağına destek vermektedir. Bunlar; led trafosu olarak bilinen standart SMPS güç kaynakları, bilgisayarlarda kullanılan ATX güç kaynakları ve X-Box 360 güç kaynağı. İlk tür olan SMPS güç kaynakları için bu tanımlamanın değeri sıfır (0) dır ve Marlin bu güç kaynağını kendisi açıp kapatamaz. Ancak yazıcınızda ATX veya X-Box 360 güç kaynağı kullanırsanız uygun bağlantılar yapıldığında Kontrol kartına güç verildiğinde Marlin yazılımı bu güç kaynağının açılıp kapatılmasını kendisi yapabilir.

Yazıcınızda iki adet güç kaynağı varsa ve birisi sadece kontrol kartı ile motorları besleyen güç kaynağı diğeri ise ısıtıcıları besleyen yüksek güçlü güç kaynağı ise yazıcı ilk çalıştırıldığında ikinci güç kaynağının aktif olmasını istemeyebilirsiniz. Bunun için aşağıdaki satırı aktif etmeniz yeterlidir;

//#define PS_DEFAULT_OFF

3 boyutlu yazıcıların temeli plastiği ısıtıp eritmek olduğundan termal ayarlamalar çok önemli ve detaylıdır. Yazıcınızda en az bir adet ısıtma elemanı bulunmak zorunda. Hotend denilen ve filamentin eritilerek nozzle’dan çıkmasını sağlayan kısımda bulunan ısıtıcı olmazsa olmazlardandır. Bunun yanında eğer ısıtmalı tabla kullanıyorsanız birde onun ısıtıcısı eklenir. Son olarak birden fazla extruder içeren bir yazıcınız varsa onlarında birer ısıtıcısı eklendiğinde işte tüm bunları kontrol etmek için bir çok tanımlama ve ayarlama yapmak gerekmektedir. Şimdi bunları sırayla detayları ile inceleyelim;

Öncelikle yazıcılarımızda ısıyı ölçüp kontrol kartına ileten ve bu ısı değerlerini yazılımın kullanmasını sağlayan ısı sensörleri vardır. Termistör olarak adlandırılan bu sensörlerin bir çok marka, model ve teknik değerleri bulunmaktadır. Kullanabileceğiniz termistörlerin listesini Configuration.h dosyasında aşağıdaki tanımlamaların hemen üstünde göreceksiniz. Size uygun marka ve modeli bulup sol baştaki numarasını not alarak aşağıdaki tanımamaların açıklamalarına geçiniz.

#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_BED 1

Yukarıdaki tanımlamalar ile yazılıma mevcut ısıtıcılarınızın ne tür bir ısı sensörü kullandığını belirtiyoruz. İlk 5 satır hotend üzerindeki sensörleri son satır ise ısıtmalı tablanın üzerindeki sensörü belirler. Yazıcınızda hangileri mevcut ise onun karşısına az önce not aldığınız sensör numarasını giriniz. Mevcut olmayan ısıtıcıların değeri mutlaka sıfır (0) olmalıdır. Genel olarak piyasada kendin yap türünden yazıcılarda kullanılan termistör 1 numaralı termistördür. Eğer kendi kullandığınızın ne olduğunu bilmiyorsanız ilk olarak 1 değerini deneyin.

#define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_999_VALUE 100

Yazılım ya da donanım testleri sırasında ısıtıcıları her zaman aktif etmek mümkün olmayabilir. Bunun sebepleri zamandan kazanmak, enerji tasarrufu ya da henüz ısıtıcıların fiziksel olarak bağlanmamış olmasıdır. İşte bu gibi durumlarda Marlin iki adet sahte termistör tanımlamıştır. Bunlar 998 ve 999 numaralı termistörlerdir. Yukarıdaki tanımlamalar ile bu termistörlerin sisteme ısıyı kaç derece olarak bildirmesini istiyorsanız o değeri girmeniz gerekiyor. Herhangi bir ısıtıcı için 998 numaralı termistörü kullanıp yukarıdaki gibi bir tanımlama yaptıysanız yazıcınız o ısıtıcının ısısını sürekli 25 derece olarak algılayacaktır. Aynı şekilde 999 kullanırsanız 100 derece olarak algılanacaktır.

//#define TEMP_SENSOR_1_AS_REDUNDANT
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10

Yukarıdaki tanımlama varsayılan olarak devre dışıdır. Amacı ise mevcut TEMP_SENSOR_0 ile birlikte çalışıp ısı kontrolünde sağlama yapmaktır. Biraz detaylandıracak olursak; normalde hotend üzerinde bir adet termistör bulunur. Diyelim ki siz bu termistörün ölçümünden şüphe duyuyorsunuz ve daha güvenli bir ısı ölçümü yapmak istiyorsunuz. İşte bu durumda hotend üzerine farklı bir noktaya ikinci bir termistör daha takıp bunu kontrol kartınızdaki ikinci termistör soketi olan T1 e bağlıyorsunuz ve yukarıdaki ilk satırı aktif ediyorsunuz. Bu aşamadan itibaren Marlin her iki termistörün de rapor ettiği ısıyı değerlendirip aralarındaki farka bakıyor. Eğer bu fark ikinci satırda tanımlanan değerin (burada 10) üstüne çıkar ya da altına düşerse bir sorun olduğunu değerlendirip baskıyı iptal ederek tüm ısıtıcıları kapatacaktır.

#define TEMP_RESIDENCY_TIME 10
#define TEMP_HYSTERESIS 3
#define TEMP_WINDOW 1

Baskı işlemi başlamadan önce ısıların istenen değere ulaştığından ve dengelendiğinden emin olunması gerekmektedir. Baskı öncesi nozzle ısısı sürekli takip edilir ve hedef ısıya ulaşılınca yukarıdaki satırlarda belirlenen değerler doğrultusunda bir kontrol işlemi uygulanır. İlk satır saniye cinsinden süredir ve ısı bu süre boyunca kararlı bir değerde olmazsa baskı başlamayacaktır. İkinci satır ise artı/eksi olarak ısı toleransıdır. Üçüncü değer ise bu kontrol işleminin hedef ısıdan ne kadar önce başlanacağını belirler. Yukarıdaki değerler ışığında bir senaryo oluşturursak sanırım daha net anlaşılacaktır.

Örneğin yazıcınız bir baskıya başladı ve nozzle ısısı olarak 200 derece seçildi. Nozzle ısınmaya başlayacak ve ısı 199 derece olduğunda (üçüncü satırdaki değer kadar önce) bir zamanlayıcı çalışacak (ilk satırda belirlenen saniye cinsinden değer boyunca) ve ısının bu süre boyunca 197 ile 203 derece arasında (ikinci satırdaki değerin artı ve eksisi kadar) kalıp kalmadığını kontrol edecek. Eğer süre bitene kadar bu değerler korunursa baskı işlemi başlatılacaktır. Aksi taktirde baskı iptal edilip tüm ısıtıcılar kapatılacaktır.

Aşağıdaki satırlarda aynı işlemi ısıtmalı tabla için yapmaktadır.

#define TEMP_BED_RESIDENCY_TIME 10
#define TEMP_BED_HYSTERESIS 3
#define TEMP_BED_WINDOW 1

#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
#define HEATER_4_MINTEMP 5
#define BED_MINTEMP 5

Termistör arızalarında bazen yazıcı ısı değerini anormal düşük seviyelerde verir. Örneğin normalde 150 derece olan hotend ısısını açık devre olmuş bir termistör -14 derece olarak verebilir. Bu yüzden rapor edilen ısı belli bir değerin altına düştüğünde önlem alınması için yukarıdaki satırlar her bir termistör için belirlenmelidir. Bu değer belirlenirken normal ortam ısısı da dikkate alınmalıdır. Yukarıdaki değerler varsayılan değerlerdir ve değiştirilmesi pek gerekmemektedir ancak yazıcının bulunduğu ortam ısısı 5 derecenin altına düşüyorsa bu değeri sıfıra (0) kadar çekmekte fayda var. Isı bu değerin altına düştüğünde yazıcınız MINTEMP hatası vererek baskıyı iptal edecek ve tüm ısıtıcıları kapatacaktır.

İpucu: Eğer Err: MINTEMP hatası alırsanız bunun üç anlamı vardır; 1. Termistör soketi çıkmıştır. 2. Termistör açık devre olmuştur. 3. Ortam ısısı yukarıda belirlenen ısıların altına düşmüştür.

#define HEATER_0_MAXTEMP 285
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define BED_MAXTEMP 130

Yukarıdaki tanımlamalar ise ısıtıcıların çıkabileceği en yüksek değerleri belirler ve bu değerler aşıldığında yazıcınız MAXTEMP hatası vererek baskıyı iptal edecek ve tüm ısıtıcıları kapatacaktır.

İpucu: Eğer Err: MAXTEMP hatası alırsanız bunun anlamı ya termistör kısa devre olmuştur ya da ısıtıcıları kontrol eden MOSFET veya röle sürekli açık konumda takılı kalmıştır.

Yazının başında belirttiğim gibi termal konusu oldukça çok seçeneğe sahip. Temel termal ayarlarını yazının bu kısmında tamamladıktan sonra ikinci kısmında PID ve bir kaç güvenlik önlemi için gereken ayarlamalara değineceğim.

Marlin, ısıtmalı tabla ve nozzle için kısaca PID diye bilinen (Proportional, Integral, Derivative – Orantılı, İntegral, Türev) kontrol yöntemini kullanır. Bu sayede ısıtma elemanları hedef ısıya daha çabuk ulaşır, mevcut ısısını daha iyi korur.

Doğru yapılmış bir PID kalibrasyonu sayesinde ani ısı yükselmesi, aşırı ısınma veya aşırı ısı düşmesi gibi sorunların önüne geçilebilir. PID kalibrasyonu yaparken kullanmak istediğiniz en yüksek ısı değerini kullanmaya özen gösteriniz.

PID kalibrasyonunun detaylarına bu yazıda değinmeyeceğim. Konu hakkında daha önceden yayınlamış olduğum yazıya buradan ulaşabilirsiniz.

#define PIDTEMP
#define BANG_MAX 255
#define PID_MAX BANG_MAX

Hotend için PID kalibrasyonu varsayılan olarak aktiftir ve yine varsayılan olarak PID kalibrasyon tanımları belirlenmiştir. Tabi bu değerler kesinlikle sizin ısıtıcı sisteminize uymayacaktır çünkü her yazıcı sisteminin bağlı olduğu koşullara göre bu değerlerin yeniden hesaplanması gerekir. Bu yüzden eğer PID kalibrasyonu kullanacaksanız mutlaka kalibreyi kendiniz yapıp elde ettiğiniz PID değerlerini yazılıma giriniz. İlk satır aktif olduğunda hotend için PID kalibrasyonunu da aktiftir.

Marlin yazılımında daha agresif çalışan ikinci bir ısıtma yöntemi vardır. Bang-Bang modu. Bu yöntemde ısıtma işlemi sadece açık yada kapalı olarak kontrol edilir. Tıpkı termostatlı bir fırın gibi. Isı istenen değerin altına düştüğünde ısıtıcı açılır hedefe ulaştığında ise kapatılır. PID yönteminde olduğu gibi belirli aralıklar ile çalışma sinyallar (PWM) gönderilip sürekli kontrol altında tutulmaz. Bang-Bang modunu aktif etmek için ilk satır olan PID modunu devre dışı bırakmalısınız. İkinci satırdaki değer Bang-Bang modu için bir tür kalibrasyon değeridir ve en fazla 255 olabilir. Isıtıcıya uygulanacak akımın en üst değerini belirlemektedir. Eğer Bang-Bang modunda ısıtıcınız çok agresif çalışıyor ve termal hatalar alıyorsanız burayı hata almadığınız değere kadar yavaş yavaş düşürmeyi deneyiniz.

Son satır ise PID kalibresi için kullanılacak olan akım sınırını belirler. Bang-Bang ile aynı değere ayarlanması iki yöntem arası geçişte aynı akım değerlerinin kullanılması açısından faydalı olacağından varsayılan olarak BANG_MAX değerine eşitlenmiştir.

//#define PID_AUTOTUNE_MENU
//#define PID_DEBUG
//#define PID_OPENLOOP 1
//#define SLOW_PWM_HEATERS
//#define PID_PARAMS_PER_HOTEND
#define PID_FUNCTIONAL_RANGE 10

Yukarıdaki tanımlamalar PID aktif olduğu sürece geçerlidir. Aksi halde herhangi bir etkileri yoktur. İlk seçenek olan PID_AUTOTUNE_MENUaktif edildiğinde LCD menüye PID kalibrasyon seçeneği eklenir. Böylece yazıcıyı bilgisayara bağlayıp komut yoluyla PID kalibrasyonu yapmanıza gerek kalmaz. Yapılan PID kalibrasyonu otomatik olarak kaydedilip kullanılmaya başlanır.

İkinci seçenek olan PID_DEBUG ise bilgisayarda çalışan yazıcı kontrol uygulamalarına PID hakkında veri gönderilmesini sağlar.

//#define PID_OPENLOOP 1 satırı aktif edildiğinde PID kalibresi ile ısıtma yapılırken ısıtıcı akımı en üste değeri olarak PID_MAX kullanılır aksi halde gerektiğinde en üst değere kadar akım arttırılır.

Sonraki seçenek olan //#define SLOW_PWM_HEATERS ısıtma işleminde daha düşük frekanslar ve uzun zaman aralıkları kullanır. Bu işlem röle ile sürülen ısıtıcılar için daha uygundur.

Eğer birden fazla hotend kullanıyorsanız ve bunların ısıtıcı türleri birbirinden farklı ise //#define PID_PARAMS_PER_HOTEND satırının aktif edilmesi her hotend için ayrı PID değerleri belirlemenizi sağlar. PID kalibresinin hangi hotend için yapılacağını belirlemek için M303 komutunda E parametresinin yanına 0-2 arası ilgili ısıtıcının numarasını girmeniz gerekir. (M303 E0 S200 C8)

Eğer hedef ısı ile mevcut ısı değeri arasındaki fark PID_FUNCTIONAL_RANGE satırında belirlenen değerin üzerine çıkarsa PID devre dışı bırakılır ve ısıtıcı klasik yöntem olan aç/kapat yöntemi ile çalıştırılmaya başlanır.

#define DEFAULT_Kp 22.2
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114

Bu ana kadar anlatılan PID hakkındaki herşey işte bu yukarıdaki üç satırda toplanmaktadır. PID kalibrasyonunu yaptığınızda sonuç olarak size üç adet değer rapor edilecek. Bu değerler ısıtıcınız için en uygun PID kalibrasyon değerleridir ve bunların her birini yukarıdaki satırlara parametre olarak girmeniz gerekmektedir. Eğer Configuration.h içine kaydederseniz EPROM silinse dahi ya da fabrika ayarlarına dönseniz bile PID kalibreniz değişmeyecektir. Ancak PID kalibreyi LCD menüden yapıp EPROM’a kaydederseniz fabrika ayarlarına dönüldüğünde ya da yazılım yeniden yüklendiğinde PID kalibreniz de varsayılan değerlere dönecektir.

//#define PIDTEMPBED

Hotend için anlattığımız tüm PID işlemleri ısıtmalı tabla için de geçerlidir ancak onun PID özelliği varsayılan olarak devre dışı bırakılmıştır. Eğer ısıtmalı tabla için PID kullanmak istiyorsanız yukarıdaki satırı aktif etmeniz ve M303 komutuna ısıtıcı parametresi olarak E-1 girmeniz gerekmektedir. (M303 E-1 S60 C8)

#define DEFAULT_bedKp 10.00
#define DEFAULT_bedKi .023
#define DEFAULT_bedKd 305.4

Yukarıdaki satırlar da Tabla için PID değerlerini gireceğiniz satırlardır. Tabla PID özelliği aktif edilmediği sürece dikkate alınmazlar.

Termal ayarlar konusunun sonunda termal olarak alınan bazı güvenlik önlemlerine de değindikten sonra bu bölümünde sonuna gelmiş oluyoruz.

#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170

Hotend ısınıp belli bir ısıya ulaşmadığı sürece filamentin ilerletilerek erimiş halde nozzle dan çıkması mümkün değildir. Böyle bir durumda extruder motorunun çalışması bazı sorunlara neden olacağından nozzle ısınmadan extruder motorunun çalışması yukarıdaki ilk satır ile engellenmiştir. İkinci satır ise extruder motorunun çalışması için gereken en düşük sıcaklığı belirlemektedir.

#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 200

Bazı durumlarda kontrolünüz dışında extruder çok fazla filament ilerletebilir. Bunun en büyük sebebi de hatalı verilmiş bir G1 komutudur. Çok sık rastlanmasa da gerçekleştiğinde gereksiz filament sarfiyatına neden olacaktır. Bunu önlemek için yukarıdaki ilk satır varsayılan olarak aktiftir. İkinci satır ise tek bir komut ile ilerletilebilecek filament uzunluğu mm cinsinden belirler. Bowden extruder kullanılarının bu değere teflon tüp uzunluğunuda eklemeleri filament yükleme işlemlerinde sorun yaşamalarını önleyecektir.

#define THERMAL_PROTECTION_HOTENDS
#define THERMAL_PROTECTION_BED

Yazıcıların en önemli konularından biri olan ısıtma sistemi için bir çok ayar ve kalibre söz konusu iken bu sistemin tam olarak bir güvenlik korumasına da ihtiyacı vardır. Yapılan tüm ayarlara rağmen donanım arızası ya da kullanıcı hatası sonucu ısıtıcılar olması gerekenden çok yüksek değerlere çıkabilir ve yangın ile sonuçlanan olaylara sebep olabilirler. İşte bu yüzden Marlin tüm ayarlamaların üstünde çalışan ve hem hotend hem de tabla ısısını hassas olarak sürekli takip eden iki güvenlik tanımlamasına sahiptir. Bu güvenlik sistemi aktif olduğu sürece ayarlarınız ne olursa olsun güvenlik protokolüne uymayan bir durum gerçekleştiğinde derhal ısıtıcılar kapatılıp baskı durdurulur. İşte yukarıdaki bu iki satırdan ilki hotend için ikincisi ise tabla için güvenlik kontrollerini aktif eder ve kapatılmaması önerilir.

Marlin iki çeşit ısı güvenlik kontrolü yapar.

1. Isıtıcının belli bir hızda ısınıp ısınmadığı ve hedefe ulaşması kontrol edilir. Varsayılan olarak eğer bir ısıtıcı hedef ısıya ulaşana kadar her 20 saniyede 2 derece ısı artışı yapamıyorsa “Heating failed” hatası vererek ısıtıcıları kapatıp baskıyı durdurur.

2. Eğer ısı belli bir süre boyunca hedef ısının üzerinde ya da altında kalırsa “Thermal runaway” hatası vererek ısıtıcıları kapatıp baskıyı durdurur.

Termal ayarlamaların sonuna geldik sayılır. Sayılır diyorum çünkü daha detaylı ve ileri seviye bazı termal ayarları Configuration_adv.h dosyasında bulunmaktadır. O ayarlara Configuration_adv.h dosyasını incelerken değineceğim.

Marlin yazılımı hemen hemen bilinen tüm mekanik sistemlere (Kartezyen, Corexy, H-Bot, D-Bot, Delta, SCARA vb.) destek vermektedir. Her mekaniğin kendine göre özel ayarları bulunduğundan öncelikle yazılıma ne tür mekanik kullanıldığını bildirmemiz gerekiyor.

Kartezyen sistem için herhangi bir mekanik tanımlama yapmaya gerek yok çünkü Marlin varsayılan olarak kartezyen sisteme göre çalışmaktadır. Core sistemler için ise aşağıdan uygun olan sadece birini aktif ekmeniz gerekiyor. Genellikle kullanılan COREXY sistemdir. Herhangi bir .-Bot sistem kullanıyorsanız onun içinde yine uygun Core sistemi aktif etmelisiniz.

//#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
//#define COREZX
//#define COREZY

Delta yazıcıların diğer yazıcılara göre çok farklı mekanik ayarları olduğundan mevcut Configuration.h ve Configuration_adv.h dosyaları yerine Marlin paketi içinde “example_configurations/delta” klasöründe bulunan ve Delta için özel olarak hazırlanmış iki dosyayı kullanmanız gerekiyor.

Aynı durum SCARA yazıcılar için de geçerlidir. İlgili dosyalar “example_configurations/SCARA” klasöründe bulunmakta.

Sonraki mekanik ayarlar Endstop’lar yani limit anahtarları. Bu anahtarlardan tüm yazıcılarda mekanik veya optik olarak en az 3 adet bulunmak zorunda. Görevleri ise; Home olarak adlandırılan ve yazıcının tüm eksenlerini sıfırlayıp başlangıç konumuna alan işlem sırasında her eksenin sıfır noktasına geldiğini bildirmektir. Yazıcınıza Home komutu verdiğinizde sırasıyla X, Y ve Z eksenler bu anahtarlara doğru hareket ederler ve kendine ait anahtara dokunan eksen orada durarak kendini sıfırlamış olur. Endstop ayarları sırasıyla aşağıdaki gibidir.

#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
//#define USE_XMAX_PLUG
//#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

3 boyutlu yazıcılarda toplam 6 adet limit anahtarı kullanılabilir. Bunlardan biri sıfır noktası için diğeri ise eksenin en fazla gidebileceği mesafeye konan ikinci bir limit anahtarıdır. Genellikle sıfır noktası için anahtar koymak yeterlidir. En uzak mesafe için gerekli eksen durdurma işlemini Marlin yazılımsal olarak kendisi hesaplayabilir. Bu yüzden ilk üç seçenek olan X,Y ve Z için MIN anahtarları aktif edilmelidir. Eğer Max anahtarlarını da kullanıyorsanız diğer üç seçeneği de aktif etmelisiniz.

#define ENDSTOPPULLUPS

#if DISABLED(ENDSTOPPULLUPS)
//#define ENDSTOPPULLUP_XMAX
//#define ENDSTOPPULLUP_YMAX
//#define ENDSTOPPULLUP_ZMAX
//#define ENDSTOPPULLUP_XMIN
//#define ENDSTOPPULLUP_YMIN
//#define ENDSTOPPULLUP_ZMIN
//#define ENDSTOPPULLUP_ZMIN_PROBE
#endif

PullUp konusu tamamen elektronik teknik bilgilere dayandığı için çok fazla detaya girmeyeceğim bir konu. Mikro işlemcilerin dijital giriş ve çıkışlarının net olarak 1 ve 0 olmasını sağlayan bir direnç bağlantı sistemidir ve genellikle lojik durumu buton yoluyla değiştirilen girişlerde kullanılır. Bu direnç mikro işlemcilerin dijital giriş ve çıkışlarında dahili olarak vardır ve yazılım ile devreye alınıp devre dışı bırakılabilir. Normal şartlarda tüm limit anahtarları için PullUp dirençler aktiftir. Eğer sadece belli limit anahtarları için PullUp aktif edecekseniz ilk satırı devre dışı bırakıp if-endif arasındaki satırlardan istediğinizi aktif edebilirsiniz.

#define X_MIN_ENDSTOP_INVERTING false
#define Y_MIN_ENDSTOP_INVERTING false
#define Z_MIN_ENDSTOP_INVERTING false
#define X_MAX_ENDSTOP_INVERTING false
#define Y_MAX_ENDSTOP_INVERTING false
#define Z_MAX_ENDSTOP_INVERTING false
#define Z_MIN_PROBE_ENDSTOP_INVERTING false

Limit anahtarlarının üç adet bağlantı noktası vardır. NC – C – NO şeklinde etiketlenmişlerdir. Kullanım şekilleri de NC ve NO olarak iki türlüdür. NC; normal şartlarda anahtar basılı değilken NC ve C uçlarının kısa devre olduğu basıldığında açık devre olduğu durumdur. NO ise normal şartlarda NO ve C uçlarının açık devre olup anahtar basıldığında kısa devre olduğu durumdur. Kontrol kartlarında da üç adet bağlantı noktası mevcuttur. Artı (+), Eksi (-) ve Sinyal (S). Bu bağlantı şekillerine göre yazılıma anahtarların o anki durumlarını belirtmek gerekmektedir. Limit anahtarları hakkında daha detaylı bilgiye http://boyut3.com/…/2017/11/12/limit-anahtarlari-endstop-s…/adresinden ulaşabilirsiniz.

Yukarıdaki satırlar en çok kullanılan bağlantı şekli olan anahtarın C ucunun şaseye NC ucunun Sinyal soketine bağlandığı duruma göre tanımlanmıştır. Bu durumda anahtar basılı olmadığı sürece Sinyal ucu şaseye bağlıdır ve anahtar basıldığında +5v olacaktır. Yazıcı bu durumda ilgili eksenin sıfır konumuna geldiğini anlayacaktır. Tersi bir bağlantı durumunda Yani C ucu +5v’a ve NC ucu Sinyal soketine bağlanırsa bu satrlardaki değer true olmalıdır.

//#define ENDSTOP_INTERRUPTS_FEATURE

Yine micro işlemci ve elektronik temel bilgileri gerektiren bir konudur. Normal şartlarda Marlin yazılımının eksen hareketlerini yaparken bir yandan da diğer kontrolleri yapmaya devam etmesi gerekir. Bunlardan birisi de limit anahtarlarıdır. Belli zamanlarda yaptığı işe ara verip (ki bu saniyenin yüzde biri, binde biri gibi sürelerdir ve buna interrupt denir) diğer kontrolleri yapar. Tabi bu işlem kullanılan micro işlemcinin de kabiliyeti dahilinde olmalıdır. İşte bunlardan birisi de bazı lojik giriş-çıkışların kesme kabiliyetine sahip olmasıdır. Micro işlemci her kesme işleminde bu kabiliyeti kontrol etmek durumundadır. Eğer tüm limit anahtarlarının bağlı olduğu lojik girişler kesme kabiliyetine sahip ise bu satırı aktif ettiğinizde mikro işlemci limit anahtarlarını kontrol ederken zaman kazanacaktır. Ancak herhangi bir giriş bu kesme kabiliyetine sahip değilse sorunlara yol açacak bir tanımlamadır. Varsayılan olarak devre dışıdır ve yazıcınızda kullanılan micro işlemciye ve kontrol kartının bağlantı şemasına hakim iseniz kullanmayı düşünebilirsiniz.

//#define DISTINCT_E_FACTORS

Eğer birden fazla extruder kullanıyorsanız ve her extruder birbirinden farklı özelliklere sahipse bu tanımlamayı aktif ederek her biri için farklı tanımlamalar (steps-per-mm, max feedrate, max acceleration) yapabilirsiniz.

#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 }

Yazıcılarda kullanılan step motorlar, kasnaklar, vidalı miller ve kayışlardan oluşan hareket sistemine bağlı olarak yapılması gereken ve eksenlerin net olarak doğru mesafelerde ilerlemesini sağlayan tanımlama yukarıdaki satırdadır. Sırasıyla değerler; {X, Y, Z, E} şeklindedir. E değeri extruder içindir ve eğer birden fazla extruder kullanıyorsanız ve bir önceki DISTINCT_E_FACTORS satırını aktif ettiyseniz virgül ile ayırmak şartıyla {X, Y, Z, E1, E2, E3} gibi diğer step motor değerlerinide ekleyebilirsiniz. Bu tanımlamadaki her bir eksen için girilecek değerlerin hesaplanması konusunda bu yazıyı okumanız faydalı olacaktır.

#define DEFAULT_MAX_FEEDRATE { 500, 500, 2.25, 45 }

Tüm eksenler için saniyede mm cinsinden yapabilecekleri en yüksek hızlar bu satırda tanımlanır. Yine sırası ile {X, Y, Z, E} şeklindedir. Extruder için DISTINCT_E_FACTORS özelliği bu tanımlamada da geçerlidir.

#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }

Herhangi bir eksenin hızı değiştiğinde, hızlanma veya yavaşlama mevcut DEFAULT_MAX_ACCELERATION ayarı ile sınırlanır. Extruder için DISTINCT_E_FACTORS özelliği bu tanımlamada da geçerlidir.

Varsayılan 3000 değeri, bir eksenin 1 saniye içinde en fazla 0-3000 mm/mt. arasında (50 mm/sn.) hızlanabileceği anlamına gelir.

#define DEFAULT_ACCELERATION 3000
#define DEFAULT_RETRACT_ACCELERATION 3000
#define DEFAULT_TRAVEL_ACCELERATION 3000

Yukarıdaki satırlar eksenlerin harekete başlamak için kullandığı varsayılan ivmelerdir. Buradaki değerler ne olursa olsun hareketler DEFAULT_MAX_ACCELERATION değerini geçmeyecektir. O yüzden genelde DEFAULT_MAX_ACCELERATION ile aynı ya da düşük tutulur. Satırlar sırası ile baskı esnasındaki hareketler, geri çekme hareketi ve boşta ilerleme hareketi içindir.

#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.4
#define DEFAULT_EJERK 5.0

Jerk, ivme (Acceleration) ile birlikte çalışır ve ani durma veya kalkışlarda kullanılan mm/sn. cinsinden hız değişim değeridir.

Hem ivme (Acceleration), hem de Jerk baskı kalitenizi doğrudan etkiler. Eğer Jerk çok düşükse, baskı işlemi için hareketler küçük alt hareketlere bölünür. Yani 100mm lik düz bir çizgi için kesintisiz tek bir komut yerine Jerk değerine göre daha küçük ilerlemeler yapacak şekilde birden fazla komut gönderilir. Bunu yazıcı hareketindeki çok küçük belli belirsiz duraksamalardan anlayabilirsiniz. Bu durumda baskı esnasında nozzle köşelerde daha çok oyalanacak ve izler bırakacaktır. Yüksek Jerk değeri ise yön değişimlerinde fazla tork uygulayacak ve bu da adım kaçırmaya veya katmanların aynı hizada olmamasına sebep olacaktır. Acceleration ve Jerk hakkında daha önceden yazdığım bir yazıya Marlin başlığı altından ulaşabilirsiniz.

Z Sensörü, 3 boyutlu yazıcılarda Z ekseni için kullanılan limit anahtarıdır. Aynı zamanda tabla seviyesi için de kullanılır. Normal şartlarda Z Sensör Z-Min limit anahtarı soketine bağlanır.

//#define Z_MIN_PROBE_ENDSTOP

Eğer Z Sensör Z-Min soketinden farklı bir yere bağlı ise yukarıdaki satırı aktif etmeniz gerekir. Bu durumda varsayılan olarak Marlin Z Sensör bağlantısının Z-Max soketine yapıldığını kabul edecektir. Eğer Z-Max soketine de bağlamadıysanız kullandığınız pin numarasını #define Z_MIN_PROBE_PIN xx şeklinde “xx” yerine pin numarası yazarak tanımlayabilirsiniz.

//#define PROBE_MANUALLY

Tabla seviyesi için herhangi bir probe kullanmıyorsanız yine de dahili tabla seviye sistemlerinden birini kullanabilirsiniz. Bunun için yukarıdaki satırı aktif etmeniz gerekmektedir. Bu aşamadan sonra G29 otomatik tabla seviye komutu ile Nozzle seçtiğiniz tabla seviye sistemi ve kontrol noktası sayısına göre ilk kontrol noktasına giderek bekleyecektir. Bilgisayardan vereceğiniz Z eksen komutları ile uygun yüksekliği ayarladıktan sonra yine G29 komutu vererek Nozzle bir sonraki kontrol noktasına ilerletilebilir. Böylece tüm kontrol noktalarının seviyeleri elle yapılabilir. Tabla seviye sistemlerine ayrı yazıda detaylı olarak değineceğim için burada detaya girmiyorum.

//#define FIX_MOUNTED_PROBE

Yukarıdaki seçenek hareketli olmayan yani herhangi bir servo ile yukarı aşağı hareket etmeyen konumu sabit türden sensörlerden birini kullanıyorsanız aktif edilmelidir. Örneğin endüktif mesafe sensörleri bunlardan biridir. Ya da Nozzle’un kendisini sensör olarak kullanıyorsanız.

//#define BLTOUCH

Özel bir tasarıma ve çalışma mantığına sahip olan BLTouch adındaki sensörü kulanıyorsanız bu satırı aktif etmeniz gerekmektedir.

//#define Z_ENDSTOP_SERVO_NR 0
//#define Z_SERVO_ANGLES {70,0}

Servo motor kullanarak yukarı aşağı hareket eden limit anahtarlı sensör kullanıyorsanız yukarıdaki iki satırda aktif etmelisiniz. İlk satır servonun kontrol kartı üzerinde hangi servo çıkışına bağlandığını belirler. İkinci satır ise sırasıyla Servonun anahtarı ölçüm konumuna getirmesi için gereken hareketin açısını ve tekrar eski konumuna dönmek için gereken hareketin açısını belirler. Bu örnekte ilk bağlantı noktası olan sıfır konumuna bağlı bir servo bulunmakta ve tabla ölçümü amacıyla anahtarın konumlanması için servonun 70 derece açı yapması gerekmektedir. Eski konumuna yani baskı yapılırken olması gereken konumuna dönmesi için de sıfır derecelik bir açı yapması gerekmektedir.

//#define SOLENOID_PROBE

Yine başka bir sensör çeşidi olan ve elektromanyetik mıknatıs aracılığı ile ölçüm sensörünü yukarı aşağı hareket ettiren sistemi kullanıyorsanız yukarıdaki satır aktif edilmelidir.

//#define Z_PROBE_SLED
//#define SLED_DOCKING_OFFSET 5

Yukarıdaki sensör türü X eksenin en sonunda bulunan ve ölçüm yapılacağı zaman x eksenin o noktaya giderek sensörü aldığı sonrasında tekrar yerine bıraktığı bir sistemdir. İlk satır bu sensörü kullandığınızı belirlerken ikinci satır ise eğer probe normal max. X eksen mesafesinden daha uzakta ise yazıcının o konuma gitmesi için gereken mesafedir. Normalde sıfır olarak kalması ve sensörün max. hareket alanının dışında bırakılmaması en uygunudur.

Not: Yukarıdaki sensör türlerinden sadece bir tanesi aktif olabilir. Birden fazlasını aktif ederseniz yazılımın derlenmesi esnasında hata alırsınız.

#define X_PROBE_OFFSET_FROM_EXTRUDER -44
#define Y_PROBE_OFFSET_FROM_EXTRUDER -8
#define Z_PROBE_OFFSET_FROM_EXTRUDER -2.50

Hangi sensör türünü kullanıyor olursanız olun bu sensörün X, Y ve Z eksenlerde Nozzle’a olan mesafesini yazılıma tanımlamanız gerekir. Böylece yazılım ölçüm yaparken sensörün tabla dışına çıkmasına izin vermeyecektir. Yukarıdaki satırlar sırası ile X, Y ve Z eksenler için sensör konumlarını belirler. Değerler eksi veya artı olabilir ve X eksende eksi değer sensörün Nozzle’un solunda artı değer ise sağında olduğunu belirtirken Y eksende eksi değer sensörün Nozzle’un önünde artı değer ise arkasında olduğunu belirtir. Değerler mm cinsinden olup X ve Y için en yakın tam sayı girilmelidir. Z eksen için ise mümkün olan en doğru ondalık değer girilmelidir. Eksi değer sensörün Nozzle’a göre aşağıda artı değer ise yukarıda olduğunu belirtir.

#define XY_PROBE_SPEED 4000
#define Z_PROBE_SPEED_FAST HOMING_FEEDRATE_Z
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST / 2)

Tabla ölçüm işleminin mümkün olduğunca hızlı yapılması tercih edilir. Yukarıdaki satırlar X ve Y eksenler için ortak, Z eksen için ise kendine ait ölçüm hareket hızlarını belirler. Ancak bu hız ayarlaması yapılırken Z eksenin hassasiyeti önemli olduğundan Z eksende çok fazla hızlı hareket edilmemelidir. İlk satır dk/mm cinsinden X ve Y hareket hızını ikinci satır ise Z hareket hızını belirler. Genellikle Z eksende önce tablaya hızlı yaklaşarak sensör okuma mesafesi tespit edilip sonrasında geri çekilerek daha yavaş bir şekilde hassas ölçüm yapılır. Üçüncü satır bu yavaş ölçümün hızını belirler. Genelde hızlı ölçüm hızının yarısı kullanılır.

//#define PROBE_DOUBLE_TOUCH

Yukarıdaki satır aktif edildiğinde sensör önce Z_PROBE_SPEED_FAST tanımlamasında belirlenen hızda tablaya yaklaşır. Sensör okuma yaptığında belli bir miktar geri çekilerek Z_PROBE_SPEED_SLOW tanımlamasındaki hızda asıl ölçümü yapar. Böylece daha hassas bir ölçüm yapılmış olur.

#define Z_CLEARANCE_DEPLOY_PROBE 10
#define Z_CLEARANCE_BETWEEN_PROBES 5

Sensör ile yapılan ölçümler esnasında özellikle hareketli sensörlerde ölçüme başlamadan önce ve ölçüm noktaları arasındaki hareketler esnasında sensörün tablaya çarpmaması için Z eksenin belli bir miktar yukarı kalkması gerekebilir. Örneğin Servo kontrollü sensörlerde ölçüm için servo kolu sensörü aşağı indirdiğinde eğer Z eksen tablaya çok yakın olursa sensör ölçüm noktasına gelemeden tablaya çarpacaktır. İşte bunu önlemek yukarıdaki iki satırın görevidir. İlki ölçüm başlamadan önce sensörün açılmasına yetecek kadar Z ekseni kaldırır, ikincisi ise iki ölçüm noktası arasında yapılacak hareket öncesi Z ekseni kaldırır. Değerler mm cinsindendir.

//#define Z_MIN_PROBE_REPEATABILITY_TEST
Yukarıdaki satır aktif edildiğinde M48 kodu ile sensörün hassasiyeti test edilebilir. M48 komutu verildiğinde test başlatılır ve test sonunda sensör için bir standart sapma değeri verilir. 0.02mm otomatik tabla seviyesi yapılabilmesi için yeterlidir.

#define X_ENABLE_ON 0

#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0

Kontrol kartına bağlı bulunan step motor sürücülerinde step motoru aktif etmek için aktif (enable) sinyal girişi bulunmaktadır. Varsayılan olarak bu değer sıfır (0) dır yani motor aktif şase sinyalinde devrede olacaktır ancak kullandığınız step motor sürücüsü motoru aktif etmek için +5V sinyalini kullanıyorsa ilgili sürücü için bu tanımlamayı 1 yapınız. Birden fazla extruder kullanıyorsanız burada yapılan tanımlama tüm extruder sürücülerini etkiler.

#define DISABLE_X false
#define DISABLE_Y false
#define DISABLE_Z false

Yukarıdaki satırlar varsayılan olarak “false” olarak tanımlanmıştır ve herhangi bir motora güç verildiğinde belirli bir zaman aşımı süresi dolana kadar bu güç kesilmez. Bazı durumlarda yüksek tork almak için motorlar normalden yüksek akımlar ile çalıştırılabilir ve bu da motorların ısınmasına neden olur. Motorların enerjisini belli bir zaman aşımı sonrası değilde hareketsiz kaldığı yani bir işlem yapmadığı zamanlarda kesmek bu ısınma sorununa kısmen çözüm olabilmektedir zira güç kesilir kesilmez motor soğumaya başlayacaktır.

İşte bu satırlardan hangisi “true” yapılırsa o motorun her türlü işlem sonrası süreye bakılmaksızın gücü kesilir. Örneğin X eksen için bu değeri “true” yaptınız ve yazıcınız tablaya bir küp basıyor olsun. Bu durumda X yönünde küpün çizgisini çizip Y yönündeki çizgiye geçer geçmez X motorun gücü kesilir. Tekrar X ekseninde bir hareket olana kadar da güç kesili kalır. İşte bu zaman zarfında da motorun soğuması amaçlanır.

Mecbur kalınmadığı sürece ve özellikle CoreXY sistemlerde X ve Y eksenler için pek kullanılması tavsiye edilmemektedir. CoreXY sistemde X ve Y motorlar sürekli ortak çalıştığından çok fazla hareketsiz kaldıkları zaman yoktur o yüzden verimsiz bir çalışmaya sebep olabilir. Genel olarak tavsiye edilmemesinin sebebi ise gücü kesilen motor torkunuda kaybedeceği için tekrar güç verilene kadar olması gereken konumu koruyamayabilir ve eksen kaçmalarına sebep olabilir.

#define DISABLE_E false
#define DISABLE_INACTIVE_EXTRUDER true

Tıpkı eksen motorları gibi hareketsiz extruder motorları da devre dışı bırakılabilir. Yukarıdaki tanımlamalardan ilki varsayılan tanımlama olan zaman aşımı durumunda extruder motorlarını devre dışı bırakmaktadır. Eğer “true” değeri verilirse hareketi sona eren extruder motoru anında devre dışı bırakılır.

İkinci satırda ise çoklu extruder kullanan sistemlerde sadece aktif olan extruder devrede olur diğerleri devre dışı bırakılır. Her iki satır içinde ideal tanımlamalar yukarıdaki şekildedir.

#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false

3 boyutlu yazıcılarda kullanılan motorların hepsi iki yönlü çalışmak zorunda olduğundan dönüş yönlerinin tanımlanması gerekir. Motor bağlantı soketinin kontrol kartına bağlanma yönü motorunda dönüş yönünü etkilediğinden istenilenin aksi yönde dönen bir motorun soketi ters çevirilerek olması gereken yönde dönmesi sağlanabilir. Bununla birlikte bazı durumlarda soketlere ulaşmak mümkün olmayabilir ya da soketler ters çevirilmeye mümkün olmayan tek yönde takılan soketlerden olabilir. İşte böyle bir durumda her bir motor için yukarıdaki tanımlamalar “false” veya “true” yapılarak dönüş yönleri yazılımsal olarak değiştirilebilir. İlk üç satır X,Y ve Z eksenleri için olup sonraki beş adet Extruder motorları içindir.

//#define Z_HOMING_HEIGHT 4

Eksen sıfırlama veya otomatik tabla seviye işlemleri yapılırken X ve Y eksenin hareketi sırasında bazen Z eksen çok aşağıda olup tablaya sürtme ya da çarpma yapabilmektedir. İşte bunu önlemek için yukarıdaki tanımlama aktif edilip uygun bir Z yüksekliği verilirse eksen sıfırlama ve otomatik tabla seviye işlemlerinde X ve Y hareketleri öncesinde Z eksen verilen değer kadar yukarı kaldırılır. Burada verilen değer eksen sıfırlama için mevcut konumun üzerine eklenirken otomatik tabla seviye işleminde gerçek yükseklik olarak kullanılır. Bunun sebebide eksen sıfırlama esnasında yazıcı Z seviyesini bilmediği için X ve Y sıfırlama öncesi Z ekseni tanımlamada verilen değer kadar yukarı kaldırıldığından mevcut seviyeye eklenmiş olur ancak otomatik tabla seviyesinde Z eksenin o anki konumu bilindiği için eğer Z seviyesi belirlenen değerden düşükse tanımlanan değere yükseltlir aksi halde Z ekseni yerinde kalır.

#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

Eksen sıfırlama esnasında eksenlerin hangi yönde sıfırlanacağını yani limit anahtarlarının ne tarafta olduğunu belirleyen tanımlamalar yukarıdakilerdir. Eğer değer -1 ise eksen sıfır (min.) konumuna giderek kendini sıfırlar. Değer 1 ise en uzak mesafe (max.) konumunda sıfırlanır. Dolayısı ile limit anahtarları da bu değerlere göre konumlandırılmalıdır. Delta haricindeki yazıcılarda genellikle bu değerler -1 dir yani sıfır konumunda eksenler sıfırlanır ancak Delta yazıcılarda mutlaka 1 olmalıdır.

#define MIN_SOFTWARE_ENDSTOPS
#define MAX_SOFTWARE_ENDSTOPS

Yukarıdaki tanımlamalar birer güvenlik önlemidir ve eksenlerin belirlenen sınırlar dışına çıkmasını engeller. Yani hiçbir eksen bir sonraki tanımlamalarda belirlenen değerler dışına çıkamaz.

#define X_BED_SIZE 200
#define Y_BED_SIZE 200

Marlin 1.1.5 ve sonrasında getirilen bir özellik ile tablanızın ölçülerini doğrudan yazılıma girebilirsiniz. Böylece Marlin her türlü eksen hareketlerinde belirli bir mantık yürüterek hareketleri kontrol edebilmektedir. Ancak X ve Y taşıyıcıları tablanızın dışına çıkacak kadar hareket edebiliyorsa bu tanımlamayı aşağıdaki satırlara daha büyük bir değer girerek belirleyebilirsiniz. Böylece baskı işlemi için tabla sınırları dikkate alınırken örneğin extruder değişimi veya farklı bir işlem için X ve Y taşıyıcıları tabla dışına çıkarabilirsiniz.

#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 170

Bir önceki tanımlamalarda tabla ölçüsünü belirtmiştik. Yukarıdaki tanımlamalarda ise tüm eksenler için en az ve en çok gidilebilecek mesafeleri belirliyoruz. Eğer yazıcınızdaki tabla büyüklüğü ile tabla üzerindeki baskı alanı farklı ise buradaki tanımlamaları ona göre ayarlamalısınız. Bu konu için küçük bir örnek vermek daha uygun olacaktır. Diyelim ki tablanızın büyüklüğü 300x300mm ve tam ortasında 250x250mm büyüklüğünde baskı alanı var. Bu durumda X_BED_SIZE ve Y_BED_SIZE değerlerine 250 giriyoruz. Daha sonra yukarıdaki tanımlamalara X_MIN_POS ve Y_MIN_POS için -50 giriyoruz. X_MAX_POS ve Y_MAX_POS için ise 300 giriyoruz. Böylece hem baskı alanı hemde hareket alanı tanımlanmış olacak ve gerektiğinde X ve Y taşıyıcı baskı alanının dışına çıkabilecektir.

//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
#define FIL_RUNOUT_INVERTING false
#define ENDSTOPPULLUP_FIL_RUNOUT
#define FILAMENT_RUNOUT_SCRIPT “M600”
#endif

Yukarıdaki tanımlama ile ilgili tüm bilgileri Filament Runout Sensör yazısında detayları ile anlattığım için burada değinmiyorum.

Uzun zamandır yazıcı işletim sistemleri tam seviyelenmemiş yazıcı tablaları için olası eğiklikleri düzelten sistemler kullanmakta. Bu sistemlerin de kendi içinde birden fazla çeşidi bulunmaktadır. Sadece eğimli tablalar için, düzgün ama üzerinde çukur ve tümsekler bulunan tablalar için veya her ikisini de barındıran tablalar için kullanılan yöntemler bulunduğu gibi bunların birde ölçüm nokta sayısına göre çeşitleri bulunmaktadır.

Marlin yazılımı da oldukça gelişmiş ve çeşitli otomatik tabla seviye sistemlerine sahiptir. Yazımızın bu bölümünde işte bu konuyu ele alacağız ve otomatik tabla seviyesi için Marlin içinde yapılması gereken ne tür ayarlar ve tanımlamalar varsa hepsini inceleyeceğiz.

//#define DEBUG_LEVELING_FEATURE

Bu tanımlamayı aktif ettiğinizde herhangi bir eksen sıfırlama veya tabla seviye komutu verildiğinde yazıcınız seri bağlantı noktası üzerinden yazıcı kontrol yazılımına (Repetier Host gibi) detaylı bir rapor iletecektir. Böylece konu hakkında yaşadığınız sorunlar varsa daha derinlemesine bilgiye sahip olacaksınız.

//#define G26_MESH_VALIDATION // Enable G26 mesh validation
#if ENABLED(G26_MESH_VALIDATION)
#define MESH_TEST_NOZZLE_SIZE 0.4 // (mm) Diameter of primary nozzle.
#define MESH_TEST_LAYER_HEIGHT 0.2 // (mm) Default layer height for the G26 Mesh Validation Tool.
#define MESH_TEST_HOTEND_TEMP 205.0 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool.
#define MESH_TEST_BED_TEMP 60.0 // (°C) Default bed temperature for the G26 Mesh Validation Tool.
#endif

Yazının ilerleyen satırlarında inceleyecek olduğumuz Mesh seviye sistemini kullanıyorsanız yukarıdaki ilk satırda bulunan tanımlamayı aktif etmenizi öneririm. Böylece Mesh otomatik tabla seviyesinin ne derece verimli çalıştığını gösteren ve hataları görmenizi sağlayan bir test baskısı alabilirsiniz. if-endif arası satırlar sırasıyla; kullandığınız nozzle çapı, test baskısı için kullanılacak katman yüksekliği, nozzle ısısı ve tabla ısısını belirler. Bu aşamadan sonra LCD menüde Bed Leveling altında G26 Mesh validation seçeneği göreceksiniz. Bu seçeneği kullanarak mevcut Mesh seviye sisteminizin verimliliğini test edebilirsiniz.

//#define ENABLE_LEVELING_FADE_HEIGHT

Bu özellik Mesh, Bilinear ve UBL seviye sistemlerini etkiler ve aktif edildiğinde baskı esnasında tabla seviye sistemini kullanmanızı sağlayan M420 komutuna Z parametresini ekler. Bu sayede tabla seviye sisteminin baskının ne kadarlık bir kısmına uygulanacağını belirleyebilirsiniz. Belirlenen Z yüksekliği boyunca giderek azalan bir düzeltme algoritması kullanılacak ve belirlenen yüksekliğe ulaşıldığında artık düzgün bir yüzey elde edildiği için tabla seviyeleme sistemi kullanılmayacaktır. Bu sayede tabla seviyeleme için sürekli hareket eden Z ekseninden dolayı baskıda oluşan dalgalanmaların önüne geçilecektir. Tabi uygun yüksekliği bulmuş olmanız şartıyla. Tablanızın seviye bozukluğuna göre bu yükseklik değişkenlik gösterecektir.

//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

Marlin yazılımının kullandığı beş farklı otomatik tabla seviyeleme sistemi vardır. Bunlardan sadece bir tanesi aktif olabilir.

AUTO_BED_LEVELING_3POINT : Bir üçgen oluşturacak şekilde tablayı üç ayrı noktadan ölçer. Genellikle yüzeyi düzgün ancak montajında eğim olan tablalarda kullanılır.

AUTO_BED_LEVELING_LINEAR : Belirlenen nokta sayısı kadar bir ızgara alanını ölçer. Yine bu sistemde düz fakat montajdan kaynaklanan eğime sahip tablalarda işe yarar.

AUTO_BED_LEVELING_BILINEAR : Yine bir önceki yöntem gibi belirlenen nokta sayısı kadar bir ızgara alanını ölçer. Delta, büyük ve birçok yönden düzensiz olan tablalarda verimlidir.

AUTO_BED_LEVELING_UBL : Diğer dört yöntemin özelliklerini birleştiren ve ölçüm sonrası bir tabla haritası çıkarılarak EPROM’a kaydedilen gelişmiş bir tabla seviye sistemidir. LCD ekran gerektirir.

MESH_BED_LEVELING : G29 komutu ile kullanılan ve nozzle ile tabla arasına konulan bir parça kağıt ya da benzeri kalınlıkta bir referans kullanılarak birçok noktadan tabla seviyesini ölçüp oluşturuğu haritayı EPROM’a kaydeden ve tekrar tekrar ölçüm yapmaya gerek duymadan bu veriyi kullanabilen bir yöntemdir. Z Sensör olarak sadece PROBE_MANUALLY ile uyumludur.

Not:

Delta yazıcılar sadece AUTO_BED_LEVELING_BILINEAR ve AUTO_BED_LEVELING_UBL desteklemektedir.

Scara yazıcılar sadece AUTO_BED_LEVELING_BILINEAR desteklemektedir.

MESH_BED_LEVELING Delta ve Scara yazıcılar ile uyumlu değildir.

#define LEFT_PROBE_BED_POSITION 0
#define RIGHT_PROBE_BED_POSITION 185
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 150

Linear ve Bilinear yöntemleri kullanıyorsanız yukarıdaki tanımlamaları yapmanız gerekmektedir. Kullanılan sensörler genellikle Nozzle ile aynı noktada olamadığından ve bundan dolayı sensörler Nozzle ile aynı noktalara ulaşamadığından sensörün ulaşabileceği alanı bu tanımlamalar belirler. Dört kenar içinde sensörün tablanın dışına çıkmayacağı koordinatlar belirlemeniz gerekiyor. Örneğin sensörünüz Nozzle’un 15 mm sağında ise ve tablanız 200mm genişliğinde ise LEFT 0, RIGHT 185 olacaktır. Böylece nozzle bu konumlarda iken sensörün tabla içinde kalması garantilenecektir. Eğer sensör olarak Nozzle kullanıyorsanız bu değerlerin dördü de sıfır olmalıdır.

#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

Tablayı ölçmek için belirli bir ızgara alanını kullanan Linear ve Bilinear yöntemlerinin kaç noktadan oluşan bir ızagara kullanacağını yukarıdaki iki satır belirler. Toplam ölçüm nokta sayısı iki değerin çarpımı ile belirlenir. Örneğin her iki yönde de 3 değeri girildiğinde toplamda 3×3=9 noktadan ölçüm alınır.

//#define PROBE_Y_FIRST

Tabla ölçümü yapılırken ilk noktanın ölçümünden sonra Nozzle X eksende bir sonraki noktaya gider ve X eksenin sonuna kadar bu şekilde GRID_MAX_POINTS_X değeri kadar noktayı ölçer. Daha sonra Y eksende ikinci sıraya geçerek bu kez ters yönden X eksende GRID_MAX_POINTS_X değeri kadar noktayı ölçmeye devam eder. Eğer bu işlemin tam tersinin yapılmasını istiyorsanız yani ilk noktadan sonra ikinci ölçüm noktası olarak Y eksende ilerleme istiyorsanız yukarıdaki tanımlamayı aktif ediniz.

//#define EXTRAPOLATE_BEYOND_GRID

Genellikle taranan ızgara tablanın kenarlarına kadar uzanmaz. Bu nedenle, taranan ızgaranın sınırları dışında bir nokta için tabla seviye sistemi iki farklı yöntemden birini kullanır. Birincisi; en yakın ızgara alanının eğimi ile yükselmeye veya alçalmaya devam edebilir. İkincisi ise; en yakın kenarın eğimini takip edebilir. Eğer özellik aktif ise birinci seçenek gereçerlidir ve tablanın büyük çoğunluğunu tarayan bir ızagara kullanılıyorsa daha verimli çalışır.

//#define ABL_BILINEAR_SUBDIVISION
#if ENABLED(ABL_BILINEAR_SUBDIVISION)
// Number of subdivisions between probe points
#define BILINEAR_SUBDIVISIONS 3
#endif

Yukarıdaki tanımlama sadece Bilinear yöntemi için geçerlidir. Eğer ilk satır aktif edilirse her iki ölçüm noktası arasında BILINEAR_SUBDIVISIONS satırına girilen değer kadar ara ölçümler yapılır. Buradaki örnek 3 değerini ele alacak olursak; ilk noktayı ölçtükten sonra asıl ikinci noktaya geçmeden önce arada kalan mesafede 3 alt ölçüm daha yapar ve bu işlem tüm noktalarda tekrar eder. Yüksek miktarda bellek kullanan bir yöntem olduğundan kontrol kartınızda yeterli boş alan olduğuna emin olmadan aktif etmeyiniz.

#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20

3Point yöntemi için ölçümde kulanılacak 3 noktayı yukarıdaki satırlar belirler. Sırasıyla her iki satır bir ölçüm noktasının X ve Y koordinatıdır.

#define UBL_MESH_INSET 1 // Mesh inset margin on print area
#define GRID_MAX_POINTS_X 10 // Don’t use more than 15 points per axis, implementation limited.
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
#define UBL_PROBE_PT_1_X 39 // These set the probe locations for when UBL does a 3-Point leveling
#define UBL_PROBE_PT_1_Y 180 // of the mesh.
#define UBL_PROBE_PT_2_X 39
#define UBL_PROBE_PT_2_Y 20
#define UBL_PROBE_PT_3_X 180
#define UBL_PROBE_PT_3_Y 20

UBL ölçüm yöntemi için kullanılacak tanımlamalar yukarıdaki gibidir. İlk satır ölçüm işlemine kenarlardan ne kadar içeriden başlanacağını belirler. İkinci seçenek ızagara ölçüm noktalarının X eksendeki sayısı üçüncü satır ise Y eksendeki sayısıdır. UBL yöntemi tüm diğer yöntemlerin bir karışımını kullandığı için geri kalan altı satırın her iki tanesi tıpkı 3Point yönteminde olduğu gibi UBL yöntemin yapacağı 3Point ölçümünün noktalarını belirler.

#define MESH_INSET 10 // Mesh inset margin on print area
#define GRID_MAX_POINTS_X 3 // Don’t use more than 7 points per axis, implementation limited.
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

Mesh ölçüm yöntemi için gereken tanımlamalar yukarıdaki gibidir. İlk satır ölçüm için kullanılacak kenar sınırını belirler. Ölçüm işlemi buraya yazılan değer kadar içeriden başlar. İkinci satır X yönünde toplam ölçüm noktasını, üçüncü satır ise Y yönünde toplam ölçüm noktasını belirler. Ölçüm nokta sayısı X ve Y nokta sayısının çarpımıdır. Mesh yöntemi çok özel bir yöntemdir. Uygulaması zor ancak sonucu tatmin edicidir. Bu yöntem hakkında detaylı bilgiye buradan ulaşabilirsiniz.

//#define LCD_BED_LEVELING

Aktif edildiğinde LCD menüye “Level Bed” seçeneği ekler. Bu seçenek ile herhangi bir sensör kullanmadan adım adım tabla seviyesi yapılabilir. MESH_BED_LEVELING ve PROBE_MANUALLY özellikleri ile uyumludur.

//#define Z_PROBE_END_SCRIPT “G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10”

Eğer her otomatik tabla seviye işleminden sonra belli bir komut dizisi çalıştırmak istiyorsanız yukarıdaki satırı aktif edip tırnak içindeki kısım gibi bir komut dizisi tanımlayabilirsiniz. Birden fazla komut kullanmak için her komuttan önce \n karakterlerini kullanınız.

//#define BED_CENTER_AT_0_0

Eğer tablanızın orta noktasının 0,0 koordinatı olarak kabul edilmesini istiyorsanız bu seçeneği aktif ediniz. Delta yazıcılarda mutlaka aktif olmalıdır.

//#define MANUAL_X_HOME_POS 0
//#define MANUAL_Y_HOME_POS 0
//#define MANUAL_Z_HOME_POS 0 // Distance from nozzle to printbed after homing

Yukarıdaki üç satır varsayılan sıfırlama (Home) noktasını iptal edip elle tanımlamaya yarar. Çok özel bir durum olmadıkça devre dışı bırakılıp yazılımın otomatik yapması tavsiye edilir. Delta için Z değeri mutlaka Z_MAX yani Z eksenin gidebileceği en uzak nokta olmalıdır.

#define Z_SAFE_HOMING

#if ENABLED(Z_SAFE_HOMING)
#define Z_SAFE_HOMING_X_POINT ((X_MIN_POS + X_MAX_POS) / 2) // X point for Z homing when homing all axis (G28).
#define Z_SAFE_HOMING_Y_POINT ((Y_MIN_POS + Y_MAX_POS) / 2) // Y point for Z homing when homing all axis (G28).
#endif

Yukarıdaki satırlar eksen sıfırlama (Home) işlemi yapılırken Z eksenin güvenliği için kullanılanılır. Malum olduğu üzere Z eksenin konumundan dolayı X ve Y eksen hareketleri verildiğinde zaman zaman tablaya sürtme, çarpma ya da tabla dışına çıkma durumları yaşanmaktadır. İşte bu tür olayların önüne geçmek için sıfırlama işleminde Z ekseni bir miktar yukarı kalkar ve önce X ve Y eksenler sıfırlandıktan sonra Z eksen varsayılan olarak tablanın ortasına konumlanıp ondan sonra Z eksen sıfırlaması yapılır. İstenirse if-endif arasındaki X ve Y değerleri ile bu konum değiştirilebilir. Eğer Z eksen sıfırlama için limit anahtarı kullanılıyorsa bu güvenlik önlemine gerek yoktur ancak mevcut sensör hem tabla seviye hem de Z sıfırlama için kullanılıyorsa mutlaka aktif olmalıdır.

#define HOMING_FEEDRATE_XY (3000)
#define HOMING_FEEDRATE_Z (240)

Eksen sıfırlama (Home) işlemi esnasında eksenlerin hareket hızını yukarıdaki iki satır belirler. Dakikada mm cinsindendir. Yazıcınızın izin verdiği en yüksek hız kullanılabilir. Max Feed Rate ve Max Acceleration değerleri ile sınırlıdır.

//#define EEPROM_SETTINGS

Kontrol kartlarının üzerinde bulunan EPROM yani kalıcı kayıt hafızası önemli ayarları kaydetmek için kullanılabilir ve yazıcı kapatılıp açıldığında bu ayarlar tekrar EPROM’dan okunabilir. Aksi halde Marlin derlendiği zaman yapılan ayarlar sürekli geçerli olur. Varsayılan olarak devre dışı olan EPROM seçeneği yukarıdaki satır aktif edilerek kullanılmaya başlanabilir.

EPROM aktif iken kullanılabilecek komutlar aşağıdaki gibidir;
M500 : Mevcut tüm ayarları kaydeder.
M501 : EPROM’a kayıtlı ayarları geri yükler.
M502 : Tüm ayarları varsayılan değerlere çevirir. Configuration.h dosyasının derlendiği andaki değerler geçerli olur.
M503 : O an için geçerli olan tüm ayarların listesini verir. Listenen ayarlar EPROM’a kayıtlı olanlar değil geçerli olan ayarlardır. Yani bu listede M500 ile kaydedilmemiş ayar varsa yazıcı kapatılıp açıldığında EPROM daki ayarlar geçerli olacaktır.

//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.

Yukarıdaki ilk satır düşük hafızalı kartlarda alan kazanmak için aktif edilebilir ve çok sık kullanılmayan M503 komutu devre dışı kalır. İkinci satır ise EPROM ile ilgili bir işlem yapıldığında seri haberleşme kanalından geri bildirim yapar. İlave hafıza alanı kazanmak için devre dışı bırakılabilir.

#define HOST_KEEPALIVE_FEATURE // Disable this if your host doesn’t like keepalive messages
#define DEFAULT_KEEPALIVE_INTERVAL 2 // Number of seconds between “busy” messages. Set with M113.
#define BUSY_WHILE_HEATING // Some hosts require “busy” messages even during heating

Marlin normal şartlarda yazıcı kontrol yazılımı (Host) ile sürekli haberleşir. Zaman zaman o kadar yoğun işlemler yapılır ki bu haberleşmenin kesilmesi gerekir. İşte bu gibi durumlarda Marlin uygulamaya meşgul (busy) sinyali gönderir ve komut kabul edemeyeceğini bildirir. Böylece kontrol yazılımı bu durum sona erene kadar herhangi bir talepte bulunmaz. Eğer kullandığınız kontrol yazılımı bu tür bir işlemi desteklemiyorsa yukarıdaki ilk satırı devre dışı bırakınız. İkinci satır kontrol yazılımına bu bildirimlerin saniye cinsinden ne kadar sürede bir yapılacağını belirler. Üçüncü satırın amacı ısıtma işlemi sırasında da meşgul mesajının iletilmesini sağlar. Normal şartlar altında bu satırların değiştirilmesi gerekmemektedir.

//#define M100_FREE_MEMORY_WATCHER

Aktif edildiğinde komut listesine M100 komutu eklenir ve mevcut boş hafıza durumu bilgileri alınabilir.

//#define INCH_MODE_SUPPORT

Varsayılan olarak verilen komutlardaki tüm mesafe değerleri metriktir. Yukarıdaki satır aktif edildiğinden INCH ölçü birimi kullanılmaya başlanır.

//#define TEMPERATURE_UNITS_SUPPORT

Yukarıdaki satır devre dışı olduğu sürece tüm ısı değerleri Celsius olarak kabul edilir. Satır aktif edildiğinde M149 komutu kullanılmaya başlanır ve M149 komutu ile parametre olarak C (Celsius), F (Fahrenheit) ve K (Kelvin) birimleri kullanılabilir.

#define PREHEAT_1_TEMP_HOTEND 180
#define PREHEAT_1_TEMP_BED 70
#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255

#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED 110
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255

LCD Prepare menüsünde iki adet hazır ön ısıtma (Preheat) ayarı bulunmaktadır. Bunlar PLA ve ABS olarak tanımlanmıştır. Bu tanımlamaların varsayılan değerleri yukarıdaki satırlarda belirlenmektedir. İstediğiniz zaman bu varsayılan değerleri Control > Temperature > Preheat Material menüsünden de değiştirebilirsiniz.

//#define NOZZLE_PARK_FEATURE
#if ENABLED(NOZZLE_PARK_FEATURE)
// Specify a park position as { X, Y, Z }
#define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS – 10), 20 }
#endif

Yukarıdaki ilk satır aktif edildiğinde yazıcı herhangi bir sebeple bekleme konumuna geçtiğinde ya da G27 komutu verildiğinde Nozzle, NOZZLE_PARK_POINT satırında sırasıyla X, Y ve Z olarak tanımlanan konuma park edilir. G27 komutu “P” parametresi olarak üç adet değer alır. Bunlar;

G27 P0 : Eğer Z eksen belirlenen park pozisyonundan daha aşağıda ise park pozisyonuna kadar yükseltirlir. (Varsayılan)
G27 P1 : Z eksen her zaman tanımlanan Z park seviyesine getirilir.
G27 P2 : Z eksenin konumu ne olursa olsun Z park değeri kadar yükseltilir. Yani mevcut Z seviyesine Z park değeri eklenir. Z_MAX_POS değeri ile sınırlıdır.

//#define NOZZLE_CLEAN_FEATURE

G12 Nozzle temizleme komutunu aktif eder ve komut kullanıldığında Nozzle temizleme işlemi gerçekleştirilir.

#define PRINTJOB_TIMER_AUTOSTART

M104, M109 ve M190 komutları verildiğinde otomatik olarak baskı zaman sayacını başlatır veya durdurur. Ayrıca aşağıdaki komutlarda komut setine eklenir;
M75 : Baskı zamanlayıcıyı başlatır.
M76 : Baskı zamanlayıcıyı beklemeye alır.
M77 : Baskı zamanlayıcıyı durdurur.

//#define PRINTCOUNTER

Aktif edildiğinde Marlin toplam baskı sayısı, toplam başarılı baskı sayısı, toplam başarısız baskı sayısı ve toplam baskı süresi gibi bilgilerin kaydını tutar. Bu bilgiler M78 komutu ile görülebilir.

#define LCD_LANGUAGE en

Marlin oldukça geniş bir dil desteğine sahiptir. Aşağıdaki tablodan kullanmak istediğiniz dilin kodunu bularak yukarıdaki satıra girebilirsiniz.

en English (Default)
an Aragonese
bg Bulgarian
ca Catalan
cn Chinese
cz Czech
de German
el Greek
el-gr Greek (Greece)
es Spanish
eu Basque-Euskera
fi Finnish
fr French
gl Galician
hr Croatian
it Italian
kana Japanese
kana_utf8 Japanese (UTF8)
nl Dutch
pl Polish
pt Portuguese
pt-br Portuguese (Brazilian)
pt- Portuguese (Brazilian UTF8)
pt_utf8 Portuguese (UTF8)
ru Russian
sk_utf8 Slovak (UTF8)
tr Turkish
uk Ukrainian

Desteklenen dillerin güncel listesini language.h dosyasında bulabilirsiniz.

#define DISPLAY_CHARSET_HD44780 JAPANESE

Yukarıdaki tanımlama sadece karakter tabanlı ekranlar için geçerlidir. Bu tür ekranlar belirli bir ASCII karakter seti ve aşağıdaki dil eklentilerinden birini içerir ve ekrana yazılacak bilgiler için bu seti kullanırlar.
JAPANESE : En çok kullanılan tanımlamadır. Genellikle değiştirmeniz gerekmez.
WESTERN : Vurgulu karakterlere sahip diller içindir.
CYRILLIC : Rusça içindir.

Kullandığınız ekrana hangi dil eklentisinin yüklü olduğunu görmek için “#define LCD_LANGUAGE test” satırı ile Marlin’i derleyip kontrol kartına yükleyin. LCD menü tuşuna basın. Ekranda Japanese, Western, veya Cyrillic dillerden birinin harflerini gösterecektir.

//#define ULTRA_LCD // Character based
//#define DOGLCD // Full graphics display

Karakter tabanlı ve grafik tabanlı olmak üzere iki tür LCD vardır. Normal şartlarda yukarıdaki iki seçenek devre dışı bırakılıp ilerleyen bölümlerde inceleyeceğimiz tanımlama ile Marlin en uygun LCD ayarlarını otomatik olarak yapacaktır. Eğer kullandığınız LCD Marlin tarafından desteklenmiyorsa yukarıdaki seçeneklerden uygun olanını aktif ediniz.

//#define SDSUPPORT

Marlin doğrudan SD karttan baskı alabilmektedir. Eğer kullandığınız kontrol kartı veya LCD SD kart desteğine sahipse yukarıdaki satırı aktif ediniz.

//#define SPI_SPEED SPI_HALF_SPEED
//#define SPI_SPEED SPI_QUARTER_SPEED
//#define SPI_SPEED SPI_EIGHTH_SPEED

Marlin SPI haberleşme protokolünü desteklemektedir. Varsayılan olarak yukarıdaki satırlar devre dışıdır ve herhangi bir sebeple SPI haberleşme hatası alıyorsanız bunlardan sadece birini aktif ederek SPI haberleşme hızını düşürebilirsiniz.

//#define SD_CHECK_AND_RETRY

SD kart işlemlerinde Cyclic Redundancy Check (CRC) denilen bir sağlama işlemi ile doğru verilerin okunduğundan emin olmak gerekebilir. Eğer SD kart veri okumalarında sorun yaşıyorsanız bu tanımlamayı aktif ederek deneyebilirsiniz.

//#define ENCODER_PULSES_PER_STEP 1

Yazıcılarda kullanılan birçok LCD kontrolcüsünde encoder denilen ve menüye girip menü içinde dolaşmayı sağlayan bir araç bulunur. Sonsuz turda dönen bu araç her çevirdiğinizde kontrol kartına belli miktarda tetikleme sinyali gönderir ve buna göre işlemler yapılır. Eğer kullandığınız encoder çok hassas ya da hassasiyeti düşükse ve menü hareketlerinde sorun yaşıyorsanız yukarıdaki satırı aktif edip varsayılan değeri değiştirebilirsiniz. Yüksek çözünürliklü encoder için bu değer arttırılmalıdır.

//#define ENCODER_STEPS_PER_MENU_ITEM 5

Encoder ile gönderilen her bir tetikleme sinyali sayılır ve buna göre belirli işlemler yapılır. Normal şartlarda menü seçenekleri arasında gezinirken bir seçenekten diğerine geçmek için gereken tetikleme sayısı yeterlidir ancak bu konuda sorun yaşıyorsanız veya menü içi hareketlerin daha hassas veya az hassas olmasını istiyorsanız yukarıdaki satırı aktif edip değerini değiştirebilirsiniz. Örneğin 5 değeri encoder tarafından 5 adet tetikleme sinyali gönderildiğinde bir sonraki yada önceki menü satırına geçileceğini belirtir.

//#define REVERSE_ENCODER_DIRECTION

Ekranlarda kullanılan Encoder’lar sağa ve sola çevrilerek iki ayrı yönde işlem yapılmasını sağlar. Bunlar menü yukarı aşağı gezinme, herhangi bir değerin arttırılıp düşürülmesi gibi işlemlerdir. Bu işlemleri yaparken bazen çevirme yönü istediğiniz etkiyi yapmayabilir ve tersine çalışıyor olabilir. Yukarıdaki seçenek aktif edildiğinde Encoder hareketi tüm işlemlerde tersine çevrilir. Yani saat yönünde yapılan hareket artık saat yönünün tersinde yapılır. Eğer saat yönüne çevirdiğinizde ayarlamak istediğiniz bir değer yükselmek yerine düşüyorsa aktif etmeniz gerekir.

//#define REVERSE_MENU_DIRECTION

Yukarıdaki seçenek sadece menü hareketlerini tersine çevirir. Eğer saat yönüne çevirdiğinizde menü seçeneği bir alt satıra iniyorsa yukarıdaki seçenek aktif olduğunda bir üst satıra çıkacaktır.

Menü hareketleri haricinde sadece rakamsal değerleri değiştirme hareketlerinin yönünü değiştirmek istiyorsanız yukarıdaki her iki seçeneğide aktif etmelisiniz.

//#define INDIVIDUAL_AXIS_HOMING_MENU

Varsayılan olarak eksen sıfırlama (Home) işlemi için menüde tek bir seçenek vardır ve çalıştırıldığında tüm eksenler sıfırlanır. Yukarıdaki seçenek aktif edildiğinde menüye her eksen için ayrı ayrı sıfırlama seçeneği eklenir.

//#define SPEAKER

Marlin, normal şartlarda kontrol kartınızda tek tonda ses çıkarabilen bir ses aygıtı olduğunu varsayar. Eğer çoklu tonda ses üretebilen hoparlör tarzı bir ses aygıtı kullanıyorsanız yukarıdaki seçeneği aktif ediniz.

//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
//#define LCD_FEEDBACK_FREQUENCY_HZ 1000

LCD menüde yapılan eylemler için kullanıcıyı bilgilendirmek amaçlı belirli tonda sesler üretilmektedir. Eğer bu seslerin frekansı ve çalma süresini değiştirmek isterseniz yukarıdaki satırları aktif edip değerleri ile oynayabilirsiniz. İlk satır Hertz cinsinden ses tonunu yani frekansı, ikinci satır ise milisaniye cinsinden çalma süresini belirler. Ses çıkışını test etmek veya yazma işleminin belirli aşamalarında (örneğin baskı bittiğinde veya belirli bir katmana gelindiğinde) ikaz tonu vermek için M300 S<frekans Hz> P<süre ms> komutunu kullanablirsiniz.

LCD Kontrolcüsü

Marlin birçok LCD kontrolcü desteğine sahiptir. Bunlardan en popüler olan ikisi;

REPRAP_DISCOUNT_SMART_CONTROLLER : 20×4 basmalı encoder barındıran karakter LCD

REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER : Tek renkli, 128×64 piksel çözünürlüğe sahip basmalı encoder barındıran ve grafik içerikler gösterebilen LCD

Diğer tüm LCD tanımlamaları yukarıdaki iki türün varyantlarıdır.

Ekran olarak sadece bir tane seçenek aktif olabilir.

//#define FAST_PWM_FAN

Devir kontrollü çalışan parça soğutma fanının çalışma frekansını arttırarak daha sessiz çalışmasını sağlar ancak MOSFET ısınmasına sebep olabilir.

//#define FAN_SOFT_PWM

Varsayılan olarak parça soğutma fanının çalışma frekansı dolayısıyla hızı donanımsal olarak kontrol edilir. Eğer ısıtıcılarda olduğu gibi yazılımsal kontrol kullanmak istiyorsanız yukarıdaki tanımlamayı aktif etmelisiniz. Bu sayede donanım kontrolünün aksine çok daha düşük frekanslarda çalışma sağlanabilir. Eğer frekans çok düşük gelir ve fanın çalışmasında kararsızlık olursa alttaki tanımlama bu sorunu çözmek içindir.

#define SOFT_PWM_SCALE 0

Yazılımsal olarak fan devir kontrolünü aktif ettiğinizde donanımsal kontrole göre daha düşük frekanslarda çalışma sağlanır. Eğer frekans çok düşük gelirse değeri bu satırdan arttırabilirsiniz. Her 1 artış frekansı iki katına çıkarır. Aynı zamanda her 1 artışta devir kontrol kademe sayısı yarıya düşürülür. Sıfır değerinde 128 etkin kontrol kademesi vardır.

//#define SOFT_PWM_DITHER

Eğer SOFT_PWM_SCALE sıfırdan farklı bir değere ayarlanırsa her artışta devir kontrol kademe sayısının yarıya düşeceğinden bahsetmiştik. Dolayısıyla kademe sayısı düştüğü için hız artış ve düşüşleri daha keskin olacaktır. Bu durumda yukarıdaki satırı aktif ederseniz hız geçişlerinde her bir kademe arasında yumuşak geçiş sağlanarak biraz olsun keskin hareketlerin önüne geçilecektir.

//#define TEMP_STAT_LEDS

Yazıcıya bağlayacağınız iki adet LED ile ısıtıcıların durumunu görsel olarak izleyebilirsiniz. Çalışma mantığı ısıtıcılar 54 derecenin altında ise mavi led daha yüksek ise kırmızı led yanacaktır. Ledler için kullanılacak pin numaraları anlaşılmaz bir sebeple kontrol kartları için ilgili pins_xxx.h dosyalarında tanımlanmamıştır. Sadece birkaç kart için bu tanımlama yapılmıştır. Özellikle en çok kullanılan RAMPS ve MKS kartlar için bu tanımlamalar yoktur. Eğer kullandığınız kart için bu tanımlamayı yapmak isterseniz ilgili kartın pin tanımlama dosyasını açıp (örneğin RAMPS için pins_RAMPS.h) en sonuna aşağıdaki satırları ekleyip uygun iki adet boş pin tanımlamanız gerekir.

#if ENABLED (TEMP_STAT_LEDS)
#define STAT_LED_RED_PIN 12
#define STAT_LED_BLUE_PIN 10
#endif

//#define PHOTOGRAPH_PIN 23

Yukarıdaki tanımlama komut setine M240 komutunu ekler ve bu komut her kullanıldığında tanımlı pin (23) üzerinden Canon RC-1 uzaktan kumandasını simüle eden bir tetikleme sinyali gönderir. Canon RC-1 uzaktan kumandasının modifiyesi hakkında bilgiye buradan ulaşabilirsiniz.

//#define SF_ARC_FIX

SkeinForge dilimleme yazılımı kullanıldığında yay şeklindeki çizimlerinin G-Code’larında bazı hatalar oluşmaktadır. Eğer SkeinForge kullanıyor ve yay şekillerinin baskısında hatalar oluyorsa bu tanımlamayı aktif ediniz. Aksi halde devre dışı kalmalıdır.

//#define BARICUDA

Pasta süslemelerinde kullanılan ve Nozzle’dan krema, çikolata gibi maddeleri çıkaran Baricuda isimli bir Extruder projesi bulunmaktadır. Yukarıdaki satırı aktif ettiğinizde bu extruder üzerinde bulunan pompa ve valflerin kontrolü için komut setine M126, M127, M128 ve M129 komutları eklenir. Konu hakkında detaylı bilgiye buradan ulaşabilirsiniz.

RGB Led Kontrol

Marlin dahili olarak RBG yani üç ana rengi kullanarak birçok renkte ışık veren LED ürünlerini kontrol edebilmektedir. Renk tanımlaması M150 Rx Ux Bx şeklinde olup R kırmızı rengi, U yeşil rengi ve B ise mavi rengi ifade eder. x yerine 0-255 arası bir değer girilerek ilgili rengin seviyesi ayarlanabilir. Bu komut aşağıda değineceğim tüm RGB tanımlamalarında geçerlidir.

//#define BLINKM

BLINKM, genellikle LCD arka aydınlatmalarında kullanılan I2C haberleşme protokolü kullanan bir üründür. Eğer kullandığınız ekranın arka aydınlatmasında bu ürün varsa veya haricen kullanıyorsanız yukarıdaki satır aktif olmalıdır.

//#define PCA9632

PCA9632 de tıpkı BLINKM gibi I2C protokolü kullanan Philips ürünü bir PWM LED sürücüdür. Yazıcınızda bu üründen varsa yukarıdaki satır aktif olmalıdır.

//#define RGB_LED
//#define RGBW_LED
#if ENABLED(RGB_LED) || ENABLED(RGBW_LED)
#define RGB_LED_R_PIN 34
#define RGB_LED_G_PIN 43
#define RGB_LED_B_PIN 35
#define RGB_LED_W_PIN -1
#endif

Yaygın olarak LED çeşitlerinden olan tekli RGB led veya şerit halinde RGB led kullanarak görsel düzenleme yapmak isterseniz Marlin bu konuda da destek sağlamaktadır. İster tek bir RGB ledi doğrudan dijital çıkışlara bağlayın ister şerit halindeki RGB led dizisini MOSFET kullanarak dijital çıkışlara bağlayın yapmanız gereken yukarıdaki satırlardan ilk ikisinden birini aktif etmektir. Eğer RGB_LED satırını aktif ederseniz üzerinde üç renk barındıran standart RGB led (tek veya şerit) kullandığınız anlamına gelir. İkinci satır olan RGBW_LED satırını aktif ederseniz üç ana renge ilave olarak dördüncü led olarak beyazı da içeren RGBW led (tek veya şerit) kullandığınız anlamına gelir. İlk seçenekte beyaz rengi elde etmek için her üç rengide aktif etmeniz gerekirken ikinci seçenekte beyaz için ayrı bir led kullanılmaktadır. if-endif arasındaki satırlar ise sırasıyla Kırmızı, Yeşil, Mavi ve Beyaz ledlerin bağlı olduğu dijital çıkışların numarasını belirler.

Eğer LED leri bağladığınız dijital çıkışlar donanımsal olarak PWM destekliyorsa, renk değerlerini 0-255 arasında belirleyerek çok geniş bir renk yelpazesi kullanabilirsiniz. PWM desteği yoksa 7 renk ile sınırlı kalırsınız.

#if ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632)
#define PRINTER_EVENT_LEDS
#endif

Yukarıdaki tanımlama varsayılan olarak aktiftir ancak herhangi bir RGB Led tanımlaması yoksa bir işe yaramaz. Görevi ise mevcut RGB ledleri kullanarak yazıcı hakkında bazı bilgileri renklerle bildirmektir. Verdiği bilgiler ise;

Baskı başlatıldığında Mavi renk yanar ve tabla hedef ısıya ulaşana kadar Maviden Mor renge doğru yumuşak bir geçiş yapar.
Tabla ısındıktan sonra Nozzle hedef ısıya ulaşana kadar Mordan Kırmızıya doğru yumuşak bir geçiş yapar.
Tabla ve Nozzle ısınınıp baskı işlemi başladığında baskı alanını aydınlatmak için Beyaz renge döner.
Baskı işlemi tamamlanınca kısa bir süreliğine Yeşil renge döner ve sonrasında kapanır.
Eğer RGB led kullanıyor ancak durum bilgilerini bu şekilde almak istemiyorsanız #define PRINTER_EVENT_LEDS satırının başına // işaretlerini koyunuz.

#define NUM_SERVOS 1

Tabla seviye sistemlerini ve Z sensör konularını anlatırken kullanılan yöntemlerden birininde Servo motor olduğuna değinmiştim. İşte bu tür servo kullanan bir Z sensörünüz varsa bu sistemin kaç adet servo kullandığını yukarıdaki satırda tanımlamanız gerekir. Genel olarak tek servo kullanılan sistemler yaygın olduğundan 1 olarak kalması yeterlidir. Kontrol kartlarında kullanılabilecek toplam servo sayısı varsayılan olarak 4 ile sınırlı olsada istenilirse bu sayı artırılabilir. Servo numaraları sıfır (0) dan başlamaktadır. Yani ilk servonun tanımlama numarası sıfırdır. Karıştırılmaması gereken önemli bir konu buradaki tanımlamanın sistemde kullanılan toplam servo sayısı olduğudur. Daha önce Z sensör konusunda değindiğimiz Z_ENDSTOP_SERVO_NR tanımlaması ise o sensörün bağlı olduğu servo numarasını belirler.

#define SERVO_DELAY 300

Servo motorlar verilen açı değeri kadar bir hareketi yerine getirir ve bir hareketten sonra ikinci bir hareket vermek gerekiyorsa ilk hareketin tamamlanması için servo motora biraz süre vermek gerekir. İşte yukarıdaki tanımlama servo motorun iki hareketi arasında en az ne kadar beklenmesi gerektiğini belirler. Milisaniye cinsindendir.

//#define DEACTIVATE_SERVOS_AFTER_MOVE

Yukarıdaki seçenek aktif edildiğinde servo motorlar sadece hareket edecekleri zaman enerjilenir daha sonra enerjileri kesilir. Bu seçenek hem yüksek akım çeken servolardan kaynaklanan güç düşüşlerini hemde aktif iken sürekli çıkardıkları sesi engeller.

Yazının bu bölümü ile birlikte Configuration.h dosyasını tamamladık. Bundan sonraki bölümlerde gelişmiş ayarları içeren Configuration_adv.h dosyası ile devam edeceğiz.

Marlin yazılımı temelde iki adet konfigürasyon dosyasına sahiptir. Dosyalardan biri bu yazı dizisinin ilk 10 bölümünde detayları ile incelediğimiz ve temel ayarları içeren Configuration.h dosyasıdır. İkinci dosya ise daha ileri seviye gelişmiş ayarları içeren ve yazı dizisinin bundan sonraki bölümlerinde inceleyeceğimiz Configuration_adv.h dosyası. Bu dosya genellikle Configuration.h dosyasında yapılan tanımlamaları referans alarak o tanımlamaları bir üst seviyeye çıkarır. Bu yüzden anlatımlarda Configuration.h dosyası ile olan ilişkileri referans göstereceğim ki iki dosya arasındaki bağlantı daha iyi anlaşılsın. Genelde tüm tanımlamalar #if – #endif satırları arasında olup Configuration.h dosyasında ilgili tanımlamanın aktif veya pasif olmasına göre işlev kazanmaktadır. Şimdi sözü fazla uzatmadan bu dosyayı incelemeye başlayalım.

#if DISABLED(PIDTEMPBED)
#define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control
#if ENABLED(BED_LIMIT_SWITCHING)
#define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
#endif
#endif

Yukarıdaki satırlar Configuration.h dosyasında termal ayarları incelerken bahsettiğim tabla ısıtma sisteminde kullanılan Bang-Bang ısıtma yöntemi ile alakalı bir tanımlamadır. Eğer Configuration.h dosyasında Bang-Bang ısıtma yöntemi aktif ise bu satırların #if – #endif arası kısmı görev yapacaktır aksi halde işlevsizdir. BED_CHECK_INTERVAL satırı yazılımın tabla ısısını ne sıklıkta kontrol edeceğini milisaniye cinsinden belirler. 5000 ms yani 5 sn. varsayılan değerdir. Eğer Configuration.h dosyasında BED_LIMIT_SWITCHING tanımlaması aktif edilmiş ise bu durumda tabla ısıtmanın ne zaman kesileceğini ve ne zaman başlatılacağını BED_HYSTERESIS tanımlaması belirler. Değeri santigrad derece türündendir ve tabla ısıtma işlemi hedef ısı + tanımlanan değere ulaştığında kesilir, hedef ısı – tanımlanan değere düştüğünde tekrar başlatılır. Yani bu örneğe göre hedef ısısı 70 derece olan bir tabla 72 dereceye ulaştığında ısınma durur, 68 dereceye düştüğünde tekrar başlar.

#if ENABLED(THERMAL_PROTECTION_HOTENDS)
#define THERMAL_PROTECTION_PERIOD 40 // Seconds
#define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius
#define WATCH_TEMP_PERIOD 20 // Seconds
#define WATCH_TEMP_INCREASE 2 // Degrees Celsius
#endif

Yukarıdaki satırlar Configuration.h dosyasındaki THERMAL_PROTECTION_HOTENDS tanımlamalarında anlatılan ısı koruma yöntemlerinin varsayılan değerlerini değiştirir. Sistemin nasıl çalıştığı ile ilgili detaylı bilgiye bu yazıdan ulaşabilirsiniz.

#if ENABLED(THERMAL_PROTECTION_BED)
#define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
#define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius
#define WATCH_BED_TEMP_PERIOD 60 // Seconds
#define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius
#endif

Yine Configuration.h dosyasında THERMAL_PROTECTION_BED tanımı için varsayılan değerler yukarıdaki satırlarda belirlenir. Hotend için kullanılan bir önceki ısı koruma sisteminin ısıtıcı tabla için kullanılan tanımlarıdır. Çalışma mantığı Hotend ile aynıdır.

#if ENABLED(PIDTEMP)
// this adds an experimental additional term to the heating power, proportional to the extrusion speed.
// if Kc is chosen well, the additional required power due to increased melting should be compensated.
//#define PID_EXTRUSION_SCALING
#if ENABLED(PID_EXTRUSION_SCALING)
#define DEFAULT_Kc (100) //heating power=Kc*(e_speed)
#define LPQ_MAX_LEN 50
#endif
#endif

Hotend için PID kalibrasyonu ve yukarıdaki satırlardan da PID_EXTRUSION_SCALING aktif edilmiş ise filament eritme sisteminde bazı geliştirmeler yapılmaktadır. Şöyle ki; Extruder tarafından Nozzle’a ilerletilen filament henüz ortam ısısında olduğundan ilk etapta erime ısısına ulaşana kadar kendi üzerinde belli miktarda bir ısı tutacak ve Nozzle ısısını bir miktar düşürecektir. Bu sırada hedeflenen Nozzle ısısı dengelenene kadar filament ilerlemesinde aksama yaşanabilmektedir. İşte yukarıdaki satırlar bu sorunu ele almaktadır. Kullandığınız Hotend ısıtma sistemi ve filamente göre belirlenecek uygun bir Kc değeri ile her Extruder hareketinde (geri çekme hariç) belli bir filament uzunluğu boyunca (LPQ_MAX_LEN) nozzle ısısı bir miktar arttırılır. Kc değeri tamamen deneyseldir ve belli bir deneme yanılma yolu ile bulunabilir. Maalesef Marlin dökümanları şu ana kadar bu konuda detaylı bir içeriğe sahip değil.

#define AUTOTEMP
#if ENABLED(AUTOTEMP)
#define AUTOTEMP_OLDWEIGHT 0.98
#endif

M109 komutu Hotend ısıtmak için kullanılır ve Hotend belirlenen ısıya ulaşana kadar yazıcı başka bir işlem yapmaz. Sonrasında ilgili G-Code’lar devreye girer ve Hotend ısısı sürekli takip edilerek istenen değerde tutulur. Bunun yanında eğer baskı sırasında çok fazla Extruder hızı değişikliği varsa ya da siz baskı hızını elle yükseltip düşürüyorsanız bu durumda filament eritme işleminin değişen hıza ayak uydurabilmesi için Hotend ısısının bir miktar değişmesi gerekir. Genellikle hız arttıkça ısının artması beklenir. İşte bu durumda kullanılacak tanımlama yukarıdadır. Yaptığı işlem M109 ile birlikte çalışıp geçmiş tüm G-Code satırlarındaki hız değişikliklerinin bir kaydını tutmak ve ona göre belli bir ısı aralığı oluşturmaktır. Kullanımı M109 S215 B260 şeklindedir. Burada S215 istenen en düşük sıcaklık yani hedef ısı, B260 ise Extruder hızı arttıkça çıkılacak en yüksek değerdir. Değerler hiçbir zaman Configuration.h dosyasında tanımlanan MINTEMP ve MAXTEMP değerlerini aşamaz.

//#define SHOW_TEMP_ADC_VALUES

Yukarıdaki satır aktif olursa Marlin yazıcı kontrol (Host) yazılımına işlenmemiş ham ısı değerlerini rapor eder. Bu değer genellikle termistörden okunan değerin ısı karşılığı değil ADC yani analog dijital çevrimi sonucu elde edilen ham değerdir.

//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0

Bazı yüksek ısı termistörleri belli bir ısının altında hatalı ölçüm yapabilmektedir. Doğru ölçüm yapmaları için belli bir ısıya ulaşmaları gerekir. Eğer böyle bir termistör kullanıyorsanız Marlin’in ısı ölçümüne başlamadan önce Hotend’i belli bir süre ısıtmasını sağlayabilirsiniz. Böylece gerçek ısı ölçümü bu süre sonunda başlayacak ve bu esnada termistör kararlı ölçüm ısısına ulaşmış olacaktır. Girilecek değer milisaniye cinsindedir ve ne kadar düşük olursa ısıtma güvenliği için o kadar iyidir. Termistörün doğru değer ölçmeye başladığı süreyi belirleyip milisaniye olarak tanımlayınız ancak 30.000 den yüksek bir değere ihtiyaç duyuluyorsa bu termistörü kullanmanız önerilmez.

#define TEMP_SENSOR_AD595_OFFSET 0.0
#define TEMP_SENSOR_AD595_GAIN 1.0

Eğer AD595 termistör kullanıyorsanız doğru ölçüm için kalibre edilmesi gerekir. Yukarıdaki iki satır bu kalibrasyon için kullanılır ve gireceğiniz değerlere göre rapor edilecek ısı şu şekilde hesaplanır; Sensörün Ölçtüğü Değer * TEMP_SENSOR_AD595_GAIN + TEMP_SENSOR_AD595_OFFSET

//#define EXTRUDER_RUNOUT_PREVENT
#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
#define EXTRUDER_RUNOUT_MINTEMP 190
#define EXTRUDER_RUNOUT_SECONDS 30
#define EXTRUDER_RUNOUT_SPEED 1500 // mm/m
#define EXTRUDER_RUNOUT_EXTRUDE 5 // mm
#endif

Bazı durumlarda yazıcı baskı işlemi yapmadığı halde sadece Hotend ısıtılırak beklemede kalabilir. Bu gibi durumlarda Nozzle içindeki erimiş filament belli bir süre sonra sürekli ısıtılmaktan dolayı kömürleşebilir. Nozzle tıkanmalarına sebep olan bu durumu önlemek için EXTRUDER_RUNOUT_PREVENT tanımlaması kullanılır. Tanımla aktif edildiğinde eğer Nozzle belli bir ısı değerinin üzerinde ise belirli aralıklarla ve hızda bir miktar filament ilerletir. Buradaki örneğe göre açıklamak gerekirse; Nozzle 190 derece ve üstüne çıktığında her 30 saniyede bir 1500 mm/mt. hızında 5 mm filament ilerletilir.

//#define USE_CONTROLLER_FAN
#if ENABLED(USE_CONTROLLER_FAN)
//#define CONTROLLER_FAN_PIN FAN1_PIN // Set a custom pin for the controller fan
#define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
#define CONTROLLERFAN_SPEED 255 // 255 == full speed
#endif

Soğutma fanları 3 boyutlu yazıcıların olmasa olmaz parçalarındandır. Dolayısı ile bu fanların kontrol edilmesi gerekir. Zorunlu olan Hotend soğutma fanı haricinde kontrol kartını, sürücüleri, motorları, MOSFET’leri ve basılan parçayı soğutmak içinde fanlar kullanılabilir. Yukarıdaki tanımlama kontrol kartını dolayısıyla sürücüleri soğutma amaçlı fan takılması halinde kullanılmaktadır. Böylece herhangi bir motor sürücüsü aktif olduğunda bu fan çalışacak ve tüm sürücülerin çalışması durduktan belli bir süre sonra duracaktır. İlgili fan FAN1_PIN parametresi ile tanımlanan kontrol kartı çıkışına takılacak fandır. Bu çıkış kullandığınız kontrol kartının pins_xxx.h dosyasında belirtilmiştir. CONTROLLERFAN_SECS için belirlenecek değer fanların sürücüler çalışmayı durdurduktan ne kadar sonra kapanacağını saniye olarak belirler. CONTROLLERFAN_SPEED ise 0-255 arası fan hızını belirler.

//#define FAN_KICKSTART_TIME 100

Devir kontrollü fanlar eğer çok düşük bir devire ayarlanırsa ilk hareket anında çalışmakta zorlanabilirler. Böyle bir durumda fanı önce belli bir süre yüksek devirde çalıştırıp sonrasında belirlenen hıza sabitlemek sorunu çözecektir. Eğer kullandığınız fan düşük devirlerde böyle bir sorun yaratıyorsa yukarıdaki satırı aktif edip süre olarak milisaniye cinsinden tam güçte çalıştırılacak süreyi giriniz.

//#define FAN_MIN_PWM 50

Eğer kullandığınız devir kontrollü fan bir önceki tanımlamaya rağmen hala düşük devirlerde sorun yaratıyorsa yukarıdaki satırı aktif edip 1 ile 255 arasında en düşük devir sınırı belirleyebilirsiniz. Böylece fan o devrin altına hiçbir zaman düşmeyecektir. M106 fan devir kontrol komutu da bu değeri en düşük değer olarak referans alacak ve girdiğiniz değer ile 255 arasını yeniden 0-255 arasında kademelendirecektir. Yani eğer bu değeri 50 olarak ayarlarsanız artık fanınızın devir aralığı 50 ile 255 arasında olacak ancak M106 komutu bu iki değerin arasını 255’e bölerek her bir kademeyi yine 0-255 arasında belirleyecektir.

#define E0_AUTO_FAN_PIN -1
#define E1_AUTO_FAN_PIN -1
#define E2_AUTO_FAN_PIN -1
#define E3_AUTO_FAN_PIN -1
#define E4_AUTO_FAN_PIN -1
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed

Normal şartlarda Extruder fanları Hotend ısısına bakmaksınızın sürekli çalışırlar. Eğer Extruder fanının belli bir ısıdan sonra çalışmaya başlamasını isterseniz ilgili fanın -1 olan değerini kontrol kartınızın pin_xxx.h dosyasında belirtilen Ex_AUTO_FAN_PIN değeri ile değiştiriniz. Burada Ex kullandığınız Extruder numarasıdır. İlk Extruder sıfır (0) dır. Böylece Extruder fanı EXTRUDER_AUTO_FAN_TEMPERATURE satırında belirlediğiniz ısıdan sonra EXTRUDER_AUTO_FAN_SPEED satırında belirlediğiniz hızda çalışmaya başlayacaktır. Eğer birden fazla Extruder kullanıyorsanız ancak tek fan varsa ilgili tüm fan tanımlarının PIN değerini aynı yapınız. Böylece Extruder’lardan herhangi birinin ısısı belirlenen değere ulaşınca fan çalışacaktır.

//#define CASE_LIGHT_ENABLE

#if ENABLED(CASE_LIGHT_ENABLE)
//#define CASE_LIGHT_PIN 4
#define INVERT_CASE_LIGHT false
#define CASE_LIGHT_DEFAULT_ON true
#define CASE_LIGHT_DEFAULT_BRIGHTNESS 105
#define MENU_ITEM_CASE_LIGHT
#endif

Yazıcı baskı alanı ya da görsel amaçlı çevre aydınlatması sık kullanılan bir uygulamadır. Geçmişte standart bağlantı yöntemleri ile doğrudan güç kaynağına bağlanan ve genellikle LED kullanılan aydınlatma sistemleri Marlin RC8 sürümünden bu yana yazılım kontrollü olarak uygulanabilmektedir. Yukarıdaki ilk satırı aktif ettiğinizde LCD menüye eklenen yeni bir seçenek ile yazıcıya bağlayacağınız LED aydınlatma sistemini kontrol edebilirsiniz.

//#define CASE_LIGHT_PIN 4 satırı varsayılan olarak kullandığınız kontrol kartının pins_xxx.h dosyasında belirlenen LED bağlantı pin’ini değiştirmek için kullanılır. LED sistemini varsayılanın dışında bir pin’de kullanmak isterseniz bu satırı aktif edip ilgili pin numarasını girmeniz gerekir.

Mevcut sistemlerde kullanılan kontrol kartlarının çıkışları doğrudan LED sürmeye yetecek voltaj ve akımı sağlayamadığı için LED’ler genellikle bir güç transistörü ile sürülür. Varsayılan olarak Marlin, güç transistörünü tetikleyecek pin’e 1 yani HIGH çıkış verir. Eğer kullandığınız güç transistörünün tetiklenmesi için 0 yani LOW çıkış gerekiyorsa #define INVERT_CASE_LIGHT satırının tanımlamasını true yapınız.

#define CASE_LIGHT_DEFAULT_ON true satırı yazıcıya güç verildiği an aydınlatmanın açılacağını tanımlar. Eğer yazıcı açıldığında kapalı kalmasını istiyorsanız değerini false yapınız.

Eğer aydınlatma için kullandığınız pin PWM destekliyorsa aydınlatma sisteminin parlaklığını ayarlamanız mümkündür. #define CASE_LIGHT_DEFAULT_BRIGHTNESS satırı varsayılan olarak aydınlatmanın ilk açıldığı an kullanılacak parlaklık seviyesini belirler. 0-255 arası bir değer alabilir. Aydınlatma ile ilgili diğer bir yazıya buradan ulaşabilirsiniz.

Son satır olan #define MENU_ITEM_CASE_LIGHT tanımlaması aktif olduğunda LCD menüye aydınlatmayı açıp kapatabileceğiniz bir seçenek ekler. Eğer LCD menüde böyle bir seçenek olmasını istemiyorsanız satırın baş tarafına // işaretlerini koyarak iptal edebilirsiniz.

//#define ENDSTOPS_ALWAYS_ON_DEFAULT

Normal şartlarda limit anahtarları sadece eksen sıfırlama esnasında aktif olur ve yazılım tarafından dikkate alınır. Bunun dışında herhangi bir anda limit anahtarı tetiklense dahi dikkate alınmazlar. Eğer her şartta limit anahtarlarının dikkate alınmasını ve tetiklendiğinde eksenin durmasını istiyorsanız yukarıdaki tanımlamayı aktif ediniz.

//#define Z_LATE_ENABLE

Bu seçenek aktif edildiğinde Z eksen sürücüsü dolayısıyla da Z eksen motoru hareket sırası geldiği son anda aktif edilir ve o zamana kadar enerji uygulanmaz. Böylece eğer Z eksen motorunuz veya sürücünüz uzun süre enerjili kaldığında ısınma yapıyorsa mümkün olduğunca uzun süre enerjisiz kalması sağlanabilir. CORE(XY) sistemler ile uyumlu değildir.

//#define X_DUAL_STEPPER_DRIVERS
#if ENABLED(X_DUAL_STEPPER_DRIVERS)
#define INVERT_X2_VS_X_DIR true
//#define X_DUAL_ENDSTOPS
#if ENABLED(X_DUAL_ENDSTOPS)
#define X2_USE_ENDSTOP _XMAX_
#define X_DUAL_ENDSTOPS_ADJUSTMENT 0
#endif
#endif

//#define Y_DUAL_STEPPER_DRIVERS
#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
#define INVERT_Y2_VS_Y_DIR true
//#define Y_DUAL_ENDSTOPS
#if ENABLED(Y_DUAL_ENDSTOPS)
#define Y2_USE_ENDSTOP _YMAX_
#define Y_DUAL_ENDSTOPS_ADJUSTMENT 0
#endif
#endif

//#define Z_DUAL_STEPPER_DRIVERS
#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
//#define Z_DUAL_ENDSTOPS
#if ENABLED(Z_DUAL_ENDSTOPS)
#define Z2_USE_ENDSTOP _ZMAX_
#define Z_DUAL_ENDSTOPS_ADJUSTMENT 0
#endif
#endif

Bazı durumlarda güç ve denge dağılımı için aynı eksende iki adet motor kullanmak gerekebilir. Örnek olarak tablası Z eksende hareketli yazıcıların karşılıklı iki Z eksen yataklama ve hareket unsurları kullandığı durumlar verilebilir. Normal şartlarda bu iki motor paralel olarak bağlanıp kontrol kartında tek bir sürücü soketine takılır.

Herhangi bir sebeple çift kullanılan eksen motorlarını birbirinden ayırıp bağımsız olarak farklı sürücüler ile kullanmak isterseniz yukarıdaki tanımlamalar bunun için kullanılmaktadır.

Öncelikle hangi eksen için çift motor kullanıyorsanız o eksene ait tanımlama gurubunun başındaki satırı aktif etmelisiniz.

//#define X_DUAL_STEPPER_DRIVERS,
//#define Y_DUAL_STEPPER_DRIVERS,
//#define Z_DUAL_STEPPER_DRIVERS

Daha sonra yine X ve Y eksen gurubunun tanımlama satırlarında motorların birbirlerine göre dönüş yönlerini belirlemeniz gerekmektedir. Bazı durumlarda motorların birbirine zıt yönlerde bazı durumlarda ise aynı yönde dönmesi gerekebilir. Eğer motorlar zıt yönde dönecekse #define INVERT_X2_VS_X_DIR veya #define INVERT_Y2_VS_Y_DIR satırlarının tanımlamaları true olmalıdır. Aksi durumda false olmaları gerekir.

Çift motor kullanılan eksende bir de çift limit anahtarı kullanılacak ise ilgili eksen gurubunda #define X_DUAL_ENDSTOPS, #define Y_DUAL_ENDSTOPS ve #define Z_DUAL_ENDSTOPS satırları aktif edilmelidir.

Çift limit anahtarı aktif edildiğinde varsayılan olarak ikinci limit anahtarlarının bağlantı noktası ilgili eksenin Max. limit anahtar noktası (örneğin _XMAX_) olarak tanımlanır. Farklı bir noktaya bağlamak isterseniz her eksen gurubunda bulunan (örneğin #define X2_USE_ENDSTOP) ilgili tanımlamanın karşısına o değeri giriniz.

Eğer çift motor kullanılan bir eksende karşılıklı olarak farklı hizalama yani bir tarafın diğerine göre daha farklı bir seviyede olması gerekiyorsa o eksen için özel bir hizalama seviyesi tanımlayabilirsiniz. Örneğin Z eksen belirli bir nedenden dolayı karşılıklı olarak aynı hizaya değilde bir tarafı sıfır iken diğer tarafın 3mm aşağıda olması istenebilir. İşte bu gibi durumda ilgili eksen tanımlamalarının son satırı olan (örneğin #define Z_DUAL_ENDSTOPS_ADJUSTMENT) tanımlamaya -3 değerini girmeniz eksen sıfırlamasından sonra sadece ikinci motorun 3mm aşağı indirilmesini sağlayacaktır. Buraya girilen değer sürekli ilk motoru referans alıp ikinci motoru (X2, Y2, Z2) hareket ettirir.

//#define DUAL_X_CARRIAGE
#if ENABLED(DUAL_X_CARRIAGE)
#define X2_MIN_POS 80
#define X2_MAX_POS 353
#define X2_HOME_DIR 1
#define X2_HOME_POS X2_MAX_POS

#define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_FULL_CONTROL_MODE

#define TOOLCHANGE_PARK_ZLIFT 0.2
#define TOOLCHANGE_UNPARK_ZLIFT 1

#define DEFAULT_DUPLICATION_X_OFFSET 100
#endif

Çift renk baskı sistemlerinde kullanılan bir yöntem; bağımsız iki motora sahip iki adet X taşıyıcı kullanmaktır. Bu sistemlerde X eksende iki motor, iki kayış kasnak sistemi ancak tek eksen yataklaması vardır. Bu sistemlerde hem filament sızıntısının baskı alanından uzaklaştırılması hemde eksen yükünün hafifletilmesi için baskı alacak extruder aktif iken diğeri park pozisyonuna alınır. Bu pozisyonlar ilk X taşıyıcı (T0) için Min. limit anahtarı pozisyonu ikinci X taşıyıcı (T1) içinde Max. limit anahtarı pozisyonudur. Böyle bir sistem kullanacaksanız ikinci X eksen motorunu kullanılmayan ilk Extruder motor soketine bağlamalısınız.

#define X2_MIN_POS satırı ikinci X taşıyıcının, park halindeki birinci X taşıyıcıya çarpmadan gidebileceği en düşük X eksen değerini tanımlar. Burada dikkate alınacak değer birinci X taşıyıcının toplam genişliğidir. Örneğin birinci X taşıyıcı toplamda 70mm genişliğinde ise diğer X taşıyıcının park halindeki bu taşıyıcıya çarpmadan gidebeleceği en düşük X yönü 70mm den düşük olmamalıdır.

Her iki taşıyıcı da park pozisyonunda iken iki Nozzle arasındaki mesafenin #define X2_MAX_POS satırına girilmesi gerekir. #define X2_HOME_DIR 1 satırı ikinci taşıyıcının Max. limit anahtarı yönünde park edeceğini tanımlar. #define X2_HOME_POS X2_MAX_POS satırı ise ikinci taşıyıcının daha önce tanımlanan X2_MAX_POS satırındaki değerde park edeceğini belirler. Eğer daha önde bir konumda park etmesini isterseniz bu değeri X2_MAX_POS değerinden küçük bir değere ayarlayabilirsiniz.

Çift X Taşıyıcılı sistemin üç farklı çalışma modu vardır; #define DEFAULT_DUAL_X_CARRIAGE_MODE

Mode 0 : Tam Kontrol Modu (DXC_FULL_CONTROL_MODE). Tüm eksen hareketlerini (part etme, boşta hareket yönleri vs.) dilimleyici yazılım yönetir.

Mode 1 : Otomatik Park Modu (DXC_AUTO_PARK_MODE). Extruder değişimlerinde park etme ve parktan çıkarma işlemlerini Marlin yapar.

Mode 2 : Kopyalama Modu (DXC_DUPLICATION_MODE). Bu modda ikinci extruder birinci extruder hareketlerini birebir taklit eder ve iki extruder aynı baskıyı alır. Aynı parçadan bir defada iki adet basmak ve zamandan kazanmak için ideal bir yöntemdir.
DXC_AUTO_PARK_MODE modu kullanıldığında park ve partktan çıkarma işlemleri esnasında Z eksenin bir miktar hareket etmesi istenebilir. Bu durumda;
#define TOOLCHANGE_PARK_ZLIFT satırına part işleminden önce Z eksenin ne kadar yükseleceğini, #define TOOLCHANGE_UNPARK_ZLIFT satırına da parktan çıkmadan önce Z eksenin ne kadar yükseleceğini tanımlayabilirsiniz.

DXC_DUPLICATION_MODE kullanılırken iki taşıyıcı arasında bellirli bir mesafe bırakmak gerekir. Aksi halde taşıyıcılar birbirine çarpacaktır. #define DEFAULT_DUPLICATION_X_OFFSET satırına girilecek değer ile bunu belirleyebilirsiniz. Bu değer genelde tabla genişliğinin yarısı kadardır.

Bazı çoklu extruder kullanan sistemlerde extruder geçişleri esnasında bir solenoid (elktro mıknatıs yardımı ile belirli bir nesneyi hareket ettiren mekanizma) kullanılarak extruder’lar arasında motor ya da nozzle değişimi yapılabilmektedir. Böylece tek bir motor ile iki extruder kontrol edilebilir. Bu gibi bir sistemde kullanılırken Solenoid’in bağlantı noktasının belirlenmesi gerekmektedir.

//#define EXT_SOLENOID

Öncelikle yukarıdaki satırı aktif ederek böyle bir sistem kullandığımızı yazılıma bildiriyoruz. Daha sonra da sistemde kaç adet solenoid var ise o sayıda pin tanımlaması yapıyoruz. Pin tanımlaması SOL0_PIN, SOL1_PIN şeklinde devam eden bir sırada solenoid sayısı kadar yukarıdaki satırın hemen altına sizin tanımlamanız gerekmektedir. Örneğin ilk solenoid için kullanılacak olan tanımlama SOL0_PIN xx şeklinde olmalıdır. Burada xx yerine kullandığınız pin numarasını girmelisiniz.

#define X_HOME_BUMP_MM 5
#define Y_HOME_BUMP_MM 5
#define Z_HOME_BUMP_MM 2
#define HOMING_BUMP_DIVISOR { 2, 2, 4 }

Eksen sıfırlama işlemi yapılırken ilgili eksen önce limit anahtarını bulana kadar ilerler. Anahtara ulaşıp tetiklediğinden hareket durur, bir miktar aksi yönde gider ve tekrar limit anahtarına doğru daha düşük bir hızda gider. Böylece sıfırlama işlemi daha hassas yapılmış olur. Yukarıdaki ilk üç tanımlama her eksen için yavaş yaklaşmadan önce ne kadar geri gidileceğini mm cinsinden tanımlar. Son satır olan #define HOMING_BUMP_DIVISOR satırı ise ikinci yaklaşmanın hızını belirleyen faktördür. İlgili eksenin varsayılan eksen sıfırlama hızını bu değere böler. Sırası ile X, Y ve Z değerleridir.

//#define QUICK_HOME

X ve Y ekseni için aynı anda sıfırlama komutu verilirse varsayılan olarak önce X sonra Y ekseni sıfırlanır. Yukarıdaki tanımlama aktif edildiğinde ise X ve Y eksenleri aynı anda hareket ederek sıfır noktasına ilerler. Limit anahtarına ilk varan eksen sıfırlama işlemini yaptıktan sonra diğer eksen sıfırlamayı tamamlar.

//#define HOME_Y_BEFORE_X

G28 komutu ile tüm eksenlere sıfırlama yapıldığında ve QUICK_HOME aktif olmadığında önce X sonra Y eksen sıfırlanır. Eğer bu sıralamayı önce Y sonra X olarak değiştirmek isterseniz yukarıdaki satırı aktif ediniz.

#define AXIS_RELATIVE_MODES {false, false, false, false}

Yazıcılarda eksen hareketleri için kullanılan Relative ve Absolute olarak iki tür hareket modu vardır. Varsayılan olarak Absolute modu aktiftir ancak Relative modunu varsayılan olarak tanımlamak isterseniz yukarıdaki sırasıyla X, Y, Z ve Extruder için ilgili tanımı true yapınız. Konu hakkında daha önce bir yazı yazdığım için detaya girmiyorum. İlgili yazıya buradan ulaşabilirsiniz.

//#define DUAL_NOZZLE_DUPLICATION_MODE

Yukarıda anlatılan çift X taşıyıcılı sistem haricinde kullandığınız bir çift ektruder sistemi varsa yukarıdaki tanımlama o sistemede kopyalama modun özelliğini kazandırır. Yani her iki noozle aynı anda aynı parçayı basar.

#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
#define INVERT_E_STEP_PIN false

Varsayılan olarak çoğu motor sürücü modülü adım (step) sinyali için +5V (HIGH) ister. Bazı özel ve yüksek güçlü sürücüler ise bu sinyalin 0 (LOW) olmasını isteyebilir. Böyle bir sürücü kullanıyorsanız yukarıdaki satırlardan ilgili eksenin değerini true yapınız.

#define DEFAULT_STEPPER_DEACTIVE_TIME 120
#define DISABLE_INACTIVE_X true
#define DISABLE_INACTIVE_Y true
#define DISABLE_INACTIVE_Z true
#define DISABLE_INACTIVE_E true

Tüm motor hareketleri sona erdikten sonra belirli bir süre başka bir motor hareketi olmazsa motorların enerjilerinin kesilmesi hem sürücülerin hemde motorların ısınmaması ve gereksiz yere güç tüketmemesi için en uygunudur. Yukarıdaki tanımlamaların ilk satırı bu süreyi belirler. Saniye cinsindedir ve tüm motorların hareketi durduktan sonra bu süre boyunca herhangi bir yeni hareket olmazsa motorların enerjisi kesilir. Bununla birlikte bazı motorların sürekli aktif kalması istenebilir. Özellikle enerjisi kesildiğinde kendi ağırlığı ile düşen Z eksenler için motorların sürekli enerjili kalması daha uygun olacaktır. Herhangi bir eksen için böyle bir ihtiyaç olursa ilgili eksenin tanımını false yapınız. Böylece diğer eksenlerin belirlenen süre sonunda enerjileri kesilirken o eksen aktif kalacaktır.

#define DEFAULT_MINIMUMFEEDRATE 0.0
#define DEFAULT_MINTRAVELFEEDRATE 0.0

Baskı ve boşta hareket hızlarına en düşük girilebilecek değeri sınırlamak isterseniz yukarıdaki satırlara istediğiniz en düşük değeri giriniz.

//#define HOME_AFTER_DEACTIVATE

Motorlar devre dışı kaldığı takdirde yani zaman aşımı veya başka bir sebeple enerjileri kesildiği zaman yeni bir hareket verilmeden önce mutlaka eksen sıfırlama yapılması gerekirse yukarıdaki satırı aktif ediniz. Bazı durumlarda enerjisi kesilen motor konumunu koruyamaz ve yazıcının varsaydığı konumdan başka bir konuma kayabilir. Böyle bir durumda sonraki tüm hareketler hatalı koordinatlara gideceğinden yukarıdaki tanımlamanın bazen aktif edilmesi gerekebilir.

#define DEFAULT_MINSEGMENTTIME 20000

Baskı esnasında yazıcıya gönderilen baskı komutları belirli bir tampon belleğe saklanır ve oradan sıra ile işletilir. Bazı durumlarda bu tampon bellek boşalır ve bir sonraki komutun gönderilmesi gecikebilir. Böyle bir durumda baskının kesintiye uğramaması için yazıcının mevcut komutun işletilmesinde harcayacağı en düşük süreyi tanımlamak gerekebilir. Bu sayede eğer tampon bellek boşalırsa ve mevcut komuttan sonra yeni bir komutun gelmesi zaman alacaksa yazıcı bu son komutu belirlenen süreden daha düşük bir zamanda bitirmeyecek ve yeni komutların gelip tampon belleğin dolmasına süre tanıyacaktır. Değer mikro saniye cinsindendir.

#define SLOWDOWN

Yine bir tampon bellek koruması olan yukarıdaki tanımlama bellek doluluğu yarının altına düştüğünde yazıcının baskı hızını düşürecektir. Varsayılan olarak aktiftir.

//#define XY_FREQUENCY_LIMIT 15

Varsayılan olarak pasif olan bu tanımlama yazıcı hareketlerinin sıklığını kontrol eden bir sistem kullanarak bu harekete bir sınırlama koymak için kullanılmakta. Detaylarına girmeyeceğim zira çok kullanılacak bir yöntem olmadığı gibi yazıcı türüne göre değişik davranışlara sebep olabilmektedir. Merak edenler konu hakkında detaylı bilgiye buradan ulaşılabilir.

#define MICROSTEP_MODES {16,16,16,16,16}

Çoğu kontrol kartında motor sürücülerinin microstep ayarları sürücünün takıldığı soketlerin arasında bulunan üç adet jumper ile yapılır. Bunların takılı olup olmaması durumuna göre sürücü 1/4, 1/8. 1/16 …. gibi mikro adımlar ile çalışır. Ancak bazı kontrol kartlarında sürücülerin bu adım ayarlarını yaptığı pinler doğrudan mikro işlemciye bağlıdır ve yazılım aracılığı ile mikro adım ayarı yapılabilir. İşte bu tür bir kart kullanıyorsanız mikro adım ayarları için yukarıdaki tanımlama kullanılmalıdır.

//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 }
//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 }
//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 }

Bazı kontrol kartları mikro adım ayarları haricinde motor akımlarını da yazılımsal olarak ayarlama kabiliyetine sahiptir. Genellikle bu tür kartlarda sürücü üzerindeki akım ayar trimpotunu devre dışı bırakan dijital bir potansiyometre entegresi kullanılır. Kullanılan dijital potansiyometreye göre yukarıdaki satırlardan biri aktif edilip her eksen sürücüsü için akım değerleri girilmelidir.

PWM_MOTOR_CURRENT : MINIRAMBO ve ULTIMAIN_2 kartları tarafından kullanılır. Bilinen uyumlu motor sürücü entegresi A4982 dir. Girilecek geğerler mA cinsindendir.
DIGIPOT_MOTOR_CURRENT : BQ_ZUM_MEGA_3D, RAMBO ve SCOOVO_X9H kartları tarafından kullanılır. Bilinen uyumlu sürücü entegresi AD5206 dır. Girilecek değerler 0-255 arasıdır.
DAC_MOTOR_CURRENT_DEFAULT : PRINTRBOARD_REVF ve RIGIDBOARD_V2 kartları tarafından kullanılır. Bilinen uyumlu sürücü entegresi MCP4728 dir. Girilecek değer yüzde olaraktır.

//#define DIGIPOT_I2C
#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A)
/**
* Common slave addresses:
*
* A (A shifted) B (B shifted) IC
* Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451
* AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451
* MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018
*/
#define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT
#define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT
#endif

Azteeg X3 Pro,Smoothie, MIGHTYBOARD_REVE gibi kontrol kartları I2C haberleşme protokolü kullanan Digipot marka dijital potansiyometre kullanmaktadır. Eğer böyle bir karta sahipseniz öncelikle //#define DIGIPOT_I2C satırını aktif etmelisiniz. Daha sonra ilgili karta uygun haberleşme adresini belirlemelisiniz. Bilinen adresler tanımlamanın açıklama satırlarında verilmiştir.

//#define DIGIPOT_MCP4018
#define DIGIPOT_I2C_NUM_CHANNELS 8
#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 }

Digipot MCP4018 dijital potansiyometresini kullanan kartlarda yukarıdaki ilk satır aktif edilmelidir. Aktif edildikten sonra buradan ilgili kütüphane indirilip Arduino IDE yazılımına eklenerek yazılım derlenmelidir.

İkinci satırda kullanılan sürücü sayısına göre kanal sayısı tanımlaması yapılmaktadır. 5DPRINT kontrol kartı için 4, AZTEEG_X3_PRO için 8 adede kadar kanal tanımlanabilir.

Son satırda ise tanımlanan sürücü sayısı kadar akım değeri Amper olarak girilmelidir.

//#define ENCODER_RATE_MULTIPLIER
#define ENCODER_10X_STEPS_PER_SEC 75
#define ENCODER_100X_STEPS_PER_SEC 160

LCD üzerinde bulunan ve menüye giriş, menüde dolaşma ve menü değerlerinde değişiklik yapmak için kullanılan araca encoder denilmektedir. Eğer yukarıdaki üç satırdan ilki aktif edilirse yazılım bir değerin değiştirilmesi esnasında çevirme hızınıza bağlı olarak sonraki iki satırdaki değere göre arttırma yada eksiltme yapacaktır. İkinci satır eğer çevirme hızı saniyede 75 tetiklemeyi geçerse ilgili değerde 10 kat fazla artış ya da düşüş yapar. Üçüncü satır ise çevirme hızı saniyede 160 tetiklemeyi geçerse ilgili değerde 100 kat fazla artış ya da düşüş yapar. Örneğin yazıcının her hangi bir ekseninin Steps Per mm değerini değiştirirken normal çevirmede değer birer birer artıyorsa saniyede 75 tetikleme olacak hızda çevirirseniz o değer onar onar, saniyede 160 tetiklemeye ulaşılırsa değer yüzer yüzer artacak ya da eksilecektir.

//#define CHDK 4
#define CHDK_DELAY 50

Baskı esnasında otomatik olarak fotoğraf çekip bu çekilen kareler ile zaman kaydırmalı bir video oluşturmak istiyorsanız fotoğraf makinasını tetikleyecek bir pin tanımlamanız gerekir. İlk satırı aktif edip yazacağınız pin numarası fotoğraf makinasını tetikleyecek pin dir. Detaylı bilgiye buradan ulaşabilirsiniz.

CHDK_DELAY satırına ise ms cinsinden ilgili pinin tetikleme için ne kadar süre ile aktif kalacağını belirleyebilirsiniz.

//#define LCD_INFO_MENU

Kullanılan yazıcı ile ilgili bazı teknik bilgilere LCD üzerinden ulaşmak isterseniz yukarıdaki satırı aktif ediniz. Bu durumda LCD menüye ilgili seçenek eklenecektir.

//#define STATUS_MESSAGE_SCROLLING

LCD bilgi ekranında iken son satırda bilgi mesajları verilir. Eğer bu mesaj ilgili satıra sığmayacak kadar uzun ise sığmayan kısmı görüntülenmeyecektir. Yukarıdaki satırı aktif ederseniz bu mesaj ekranda kaydırılarak tamamı görüntülenir.

//#define LCD_DECIMAL_SMALL_XY

Normal şartlarda bilgi ekranında eksen konumları tam sayı olarak verilir. Yukarıdaki satır aktif edildiğinde X ve Y eksenler için virgülden sonra bir basamak ondalık olarak görüntülenir.

#define LCD_TIMEOUT_TO_STATUS 15000

Herhangi bir menü ekranında belirli bir süre işlem yapmadan beklenirse yazılım otomatik olarak bilgi ekranına döner. Bu bekleme süresi ms olarak yukarıdaki satırda belirlenir.

#define SD_DETECT_INVERTED

Bazı kontrol kartları SD kart takıldığını anlayamayabilir. Sorun genellikle SD kartın takıldığını hisseden dijital pin’in ters çalışmasından kaynaklanmaktadır. Eğer kullandığınız kontrol kartı SD kartın takıldığını hissetmiyorsa yukarıdaki tanımlamayı devre dışı bırakmayı deneyiniz.

#define SD_FINISHED_STEPPERRELEASE true
#define SD_FINISHED_RELEASECOMMAND “M84 X Y Z E”

SD karttan baskı aldığınızda varsayılan olarak baskı sonunda tüm motorlar devre dışı bırakılır. Yukarıdaki satırların ilki bu özelliği aktif etmektedir. Eğer özelliği kullanmak istemiyorsanız true olan değeri false yapınız. İkinci satır ise motorları devreden çıkaran komutun tanımlandığı satırdır. Marlin G-Code listesinde yer alan M84 komutu kendisine parametre olarak verilen eksene ait (X, Y, Z, E) motoru devre dışı bırakır. Eğer baskı sonrası motorlar devre dışı kalınca Z ekseniniz kendiliğinden aşağı düşüyorsa yukarıdaki ikinci satırda tanımlanan komuttan Z ekseni çıkarabilirsiniz.

//#define MENU_ADDAUTOSTART

Marlin her işletim sistemi gibi başlangıç (boot) sonrası otomatik olarak istenen işlemleri yapabilir. Bu işlemlerin komutlarının kaydedildiği ve SD karta yüklenmesi gereken dosya ismi auto0.g olmalıdır. Eğer Marlin yazılımı açılışta SD kartta bu isimde bir dosya tespit ederse içeriğindeki tüm G-Code komut satırlarını sırayla çalıştırır. Böylece yazıcıyı ilk açtığınızda sürekli yaptığınız ve tekrar eden işlemler varsa bunları otomatik olarak yaptırabilirsiniz. Bu işlem için birden fazla dosya da kullanabilirsiniz ve auto1.g, auto2.g gibi numaraları ardışık olarak giden tüm dosyalar sırayla çalıştırılır. Yukarıdaki tanımlama ise LCD menüye bu dosyaları yazıcı açıldıktan sonra da istediğiniz zaman çalıştırmanıza imkan tanıyan bir seçenek ekler.

#define SDCARD_RATHERRECENTFIRST

Yukarıdaki tanımlama ile SD karta yüklenen dosyalar sık kullanılanlar en başka olacak şekilde sıralanır.

//#define SDCARD_SORT_ALPHA

Diğer bir SD kart dosya sıralama tanımlaması da yukarıdaki gibidir ve dosyaları alfabetik sırayla ekrana getirir. Eğer alfabetik sıralama aktif ise aşağıda listelenen bazı ilave tanımlamalar kullanılmaktadır.

#if ENABLED(SDCARD_SORT_ALPHA)
#define SDSORT_LIMIT 40
#define FOLDER_SORTING -1
#define SDSORT_GCODE false
#define SDSORT_USES_RAM false
#define SDSORT_USES_STACK false
#define SDSORT_CACHE_NAMES false
#define SDSORT_DYNAMIC_RAM false
#define SDSORT_CACHE_VFATS 2
#endif

SDSORT_LIMIT : alfabetik sıralamaya kaç dosyanın dahil edileceğini belirler. 10 ile 256 arasında bir değer girilebilir. Sıralanan her dosya hafızadan 27 byte kullanmaktadır.

FOLDER_SORTING : Üç değer alabilir. Bunlar; -1 Klasörler üstte görüntülenir. 0 klasörler görüntülenmez 1 klasörler dosyaların altında görüntülenir.

SDSORT_GCODE : LCD menüye dosya sıralamayı aktif/pasif edecek bir seçenek eklenir. Aynı zamanda G-Code listesine de aynı işi yapan M34 komutu eklenir.

SDSORT_USES_RAM : Dosya sıralama işlemleri için hafızada özel bir alan tanımlanır ve sıralama işlemi daha hızlı yapılabilir.

SDSORT_USES_STACK : Dosya sıralama işlemleri için yığın yöntemini kullanarak bir miktar hafızanın serbest kalmasını sağlar.

SDSORT_CACHE_NAMES : Daha çok hafıza kullanımına sebep olsa da performans artışı için sıralanan dosya isimlerinin hafızada daha uzun süre tutulmasını sağlar.

SDSORT_DYNAMIC_RAM : Dinamik olarak anlık sıralama yapar ve daha az hafıza kullanır. Ancak yavaştır. Kullanmadan önce
SDSORT_LIMIT değerini tanımlayınız.

SDSORT_CACHE_VFATS : Sıralalama için kullanılacak en fazla 13 byte’lık dosya yerleşim tablosu girişi. Sadece SCROLL_LONG_FILENAMES ve SDSORT_CACHE_NAMES ile çalışır.

//#define LCD_PROGRESS_BAR
#if ENABLED(LCD_PROGRESS_BAR)
#define PROGRESS_BAR_BAR_TIME 2000
#define PROGRESS_BAR_MSG_TIME 3000
#define PROGRESS_MSG_EXPIRE 0
//#define PROGRESS_MSG_ONCE
//#define LCD_PROGRESS_BAR_TEST
#endif

Yukarıdaki tanımlama aktif edildiğinde HD44780 türü LCD kullanan sistemlerde SD kart ile baskı alınırken ekranda bir ilerleme çubuğu görüntülenir. Diğer alt seçenekleri ise bu özelliğin bazı detaylarını ayarlamaktadır.

İlerleme çubuğu ekrandaki durum mesajı ile aynı satırı kullandığından her ikisinin ne sıklıkta ekranda görüntüleceğini PROGRESS_BAR_BAR_TIME ve PROGRESS_BAR_MSG_TIME tanımları ms cinsinden belirler. PROGRESS_MSG_EXPIRE durum mesajının ms olarak ne kadar süre geçerli kalacağını belirler. 0 (sıfır) sürekli geçerli anlamındadır. PROGRESS_MSG_ONCE satırı aktif edilirse durum mesajını PROGRESS_BAR_MSG_TIME satırında belirlenen süre kadar gösterir ve mesajı gizler. LCD_PROGRESS_BAR_TEST ise LCD menüye ilerleme çubuğunu test edebileceğiniz bir seçenek ekler.

//#define LCD_SET_PROGRESS_MANUALLY

G-Code komut listesine M73 komutunu ekler. Komutun yaptığı iş baskının herhangi bir yerinde baskı ilerleme yüzdesini değiştirmektir.

//#define LONG_FILENAME_HOST_SUPPORT

Yazıcı kontrol (Host) yazılımının uzun dosya isimlerini talep etmesine izin verir. Böylece M33 [dosya yolu] komutu ile uzun dosya ve klasör dosya isimleri kullanılabilir.

//#define SCROLL_LONG_FILENAMES

Uzun dosya isimlerinin SD kart menüsünde kaydırılarak tamamının gösterilmesi sağlanır.

//#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED

SD karttan baskı alınırken herhangi bir limit anahtarı tetiklenirse baskının iptal edilmesine izin veren seçeneği ekler. Baskı öncesi LCD menüden veya M540 S1 komutu ile aktif edilmelidir. Ayrıca M120 komutu ile limit anahtarlarının baskı esnasında da aktif olmasını sağlamayı unutmayın.

//#define SD_REPRINT_LAST_SELECTED_FILE

Sd karttan sürekli aynı dosyayı peş peşe basıyorsanız yukarıdaki seçeneği aktif ettiğinizde yazıcı baskıyı bitirince LCD üzerinde SD kart dosya menüsünü açıp son basılan dosya seçili halde bekleyecektir. Sadece menü butonuna basarak yeni bir baskı başlatabilir ya da menüden çıkabilirsiniz.

#if ENABLED(DOGLCD)
#define XYZ_HOLLOW_FRAME
#define MENU_HOLLOW_FRAME
//#define USE_BIG_EDIT_FONT
//#define USE_SMALL_INFOFONT
//#define DOGM_SPI_DELAY_US 5
#endif

Grafik LCD kullanan sistemler için bazı performans iyileştirmeleri yapmak amacıyla yukarıdaki tanımlamalar kullanılmaktadır. İlk iki seçenek bilgi ve menü ekranlarında ekranı komple silmek yerine içi boş çerçeveler kullanarak geçici olarak ekranı boşaltmakta ve işlem döngülerinde zaman kazanmaktadır. USE_BIG_EDIT_FONT seçeneği aktif edilirse değişiklik yapılabilen değerler ekrana geldiğinde daha büyük yazı tipi kullanılır. Sadece Western karakter tipi ile uyumludur. Normaldan 3210 byte fazla hafıza gerektirir. USE_SMALL_INFOFONT aktif edildiğinde bilgi ekranında küçük yazı tipi kullanılır. Sadece Western karakter tipi ile uyumludur. Normaldan 2300 byte fazla hafıza gerektirir. Varsayılan olarak 10µs olan LCD ekran haberleşme sıklığını daha düşük ya da yüksek bir süreye ayarlamak için DOGM_SPI_DELAY_US satırı aktif edilip istenen süre µs cinsinden girilmelidir.

#define USE_WATCHDOG

Hemen hemen tüm mikro işlemcilerde bulunan ve donanımsal olarak çalıştığı için işlemcinin çalıştırdığı yazılımın da üstünde çalışan bir koruma yöntemidir. Sistemi sürekli takip eder ve yazılımın tıkandığı, donduğu veya kararsız çalıştığı durumlarda işlemciyi sıfırlayarak tüm çıkışlarını kapatır ve böylece ısıtma sistemlerinin kontrol dışına çıkmasını engeller. Kesinlikle aktif olması tavsiye edilir.

#if ENABLED(USE_WATCHDOG)
//#define WATCHDOG_RESET_MANUAL
#endif

Bir önceki USE_WATCHDOG tanımlaması nadiren de olsa sistemin resetlenmesi sonrasında yeniden başlamasını engelleyebilmektedir. Yukarıdaki seçenek aktif edildiğinde bu sorunun bir nebze önüne geçilebilir ancak güvenli bir sistem değildir. Özellikle kesme (interrupt) kullanan rutinlerde kesme devre dışı bırakılmış ise yazılımın çökmesine neden olacaktır. USE_WATCHDOG ile çok büyük bir sorun yaşamıyorsanız aktif etmeniz önerilmez.

//#define BABYSTEPPING
#if ENABLED(BABYSTEPPING)
//#define BABYSTEP_XY
#define BABYSTEP_INVERT_Z false
#define BABYSTEP_MULTIPLICATOR 1
//#define BABYSTEP_ZPROBE_OFFSET
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING
#define DOUBLECLICK_MAX_INTERVAL 1250
//#define BABYSTEP_ZPROBE_GFX_OVERLAY
//#define BABYSTEP_ZPROBE_GFX_REVERSE
#endif

Babystep, yani mikro adım baskı esnasında yazıcının eksenlerinin gerçek zamanlı ve anlık olarak hareket ettirilebilmesine olanak sağlayan bir sistemdir. Bu sayede baskı alırken eksenlerde oluşan istenmeyen bir kayma düzeltilebilir veya baskının ilk katmanında Z eksen seviyesi ayarlanarak düzgün bir ilk katman tutunması sağlanabilir. Limit anahtarlarını dikkate almaz ve mevcut eksen koordinat değerlerini etkilemez. İlk satırı aktif ederek kullanmaya başlayabileceğiniz bu özelliğin alt seçenekleri şu şekildedir;

BABYSTEP_XY : Varsayılan olarak sadece Z eksen için aktif olan özelliği X ve Y eksenler içinde aktif edebilirsiniz. Delta yazıcılar desteklemez.

BABYSTEP_INVERT_Z : Eğer Z eksenin anahtarın dönüşüne göre aksi istikamete gitmesi isteniyorsa değerini true yapınız.

BABYSTEP_MULTIPLICATOR : Mikro adım özelliği çok çok küçük hareketler ile ekseni kontrol eder. Eğer bu hareketleri hızlandırmak isterseniz bu satırın değerini arttırabilirsiniz.

BABYSTEP_ZPROBE_OFFSET : Z eksende yaptığınız mikro adım işleminin Z Offset değerine eklenmesini ya da çıkarılmasını sağlar. Böylece Z eksende yaptığınız bir düzeltme sonraki baskılarda kalıcı olacaktır.

DOUBLECLICK_FOR_Z_BABYSTEPPING : Mikro adım seçeneğine girmek için LCD menüde birkaç işlem yapmak gerekmekte ve bu da zaman kaybına neden olmaktadır. Bunu engellemek için LCD bilgi ekranında iken menü tuşuna hızlıca iki kere bastığınızda doğrudan Z eksen mikro adım ekranına gitmenizi sağlar.

DOUBLECLICK_MAX_INTERVAL : Çift menü tuşu ile mikro adım girişinde iki basma arasında olabilecek en uzun süreyi ms cinsinden ayarlayabilirsiniz.

Son iki seçenek Z eksen mikro adım ekranının grafiksel olarak daha farklı gösterilmesini sağlar. Her grafik ekranda çalışmamaktadır ve sistem yükünü arttıran bir yapısı vardır.

//#define LIN_ADVANCE

#if ENABLED(LIN_ADVANCE)
#define LIN_ADVANCE_K 75
#define LIN_ADVANCE_E_D_RATIO 0
#endif

Aktif edildiğinde filament akışı ile ilgili bazı iyileştirmeler içeren bir yöntem kullanılır. Bu sistem sayesinde filament akışı sürekli kontrol edilerek Nozzle ucundan filament sızma sorunu, köşelerde bozulma, fazla ya da eksik filament sürülmesi gibi bazı aksaklıkların önüne geçilmeye çalışılır. Bu sistem başlı başına bir yazının konusu olacak kadar detaylı ve açıklaması uzun sürecek bir konudur. Bu yüzden, Marlin kurulumu hakkındaki bu yazı dizisi bittikten sonra daha gelişmiş Marlin konuları arasında açıklamak uygun olacaktır. Şimdilik ingilizce kaynak olarak bilgi edinmek isterseniz bu adresi ziyaret edebilirsiniz.

#if ENABLED(DELTA) && !defined(DELTA_PROBEABLE_RADIUS)
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
#elif IS_SCARA && !defined(SCARA_PRINTABLE_RADIUS)
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
#endif

Kullanılan yazıcının Delta veya Scara olmasına durumuna göre iki adet tanımlama yapılması gerekebilir. Bunlardan ilki Delta yazıcının Sensör ile ölçülebilir alanın yarı çapı ve ikincisi de Scara yazıcının baskı alınabilir alanının yarı çapıdır. Bu iki tanımlamanı varsayılan değerlerden farklı olması isteniyorsa yukarıdaki tanımlamalar değiştirilebilir.

#if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_UBL)
//#define MESH_MIN_X MESH_INSET
//#define MESH_MIN_Y MESH_INSET
//#define MESH_MAX_X X_BED_SIZE – (MESH_INSET)
//#define MESH_MAX_Y Y_BED_SIZE – (MESH_INSET)
#endif

Mesh ve UBL tabla ölçüm sistemlerinden birini kullanıyorsanız ve yazıcınızın tablası çok büyükse ölçüm alanını daraltmak isteyebilirsiniz. Bunun için yapmanız gereken otomatik olarak tanımlanan ölçüm alanı değerlerini varsayılandan farklı bir değere ayarlamaktır. Hangi eksen (X ve Y) ve yön (Min ve Max.) için bu ayarlamayı değiştirmek istiyorsanız ilgili satırı aktif ederek istediğiniz değeri giriniz. Varsayılan olarak tabla ölçüm alanı, X ve Y eksenlerde Min yönünde MESH_INSET değerine, Max yönnde ise X ve Y tabla Max ölçüsünden MESH_INSET değerinin çıkarılması ile elde edilecek değere tanımlanmıştır.

#define ARC_SUPPORT
#if ENABLED(ARC_SUPPORT)
#define MM_PER_ARC_SEGMENT 1
#define N_ARC_CORRECTION 25
//#define ARC_P_CIRCLES// Enable the ‘P’ parameter to specify complete circles
//#define CNC_WORKSPACE_PLANES
#endif

3 Boyutlu yazıcılarda baskı almak için dilimleme yazılımlarına yüklenen STL dosyalar tamamen noktalar ve bunların arasında uzanan çizgilerden oluşur. Öyleki kavisli bir baskı (yay, çember vs.) bile aslında yazıcı için düz çizgilerden oluşur. Sadece daha kısa ve sürekli yön değiştiren çizgiler kullanarak bu kavisleri basar. Marlin baskı esnasında kavisli çizimlere ayrı bir özen göstermektedir ve bu işlem için G2/G3 G-Code’larını kullanmaktadır. Bu sayede basılacak kavisli kısımların bazı detayları ayarlanabilmektedir. Varsayılan olarak aktif olan bu özelliğin alt parametreleri şöyledir;

MM_PER_ARC_SEGMENT : Bir kavis çizilirken yön değiştiren çizgilerin uzunluğunu mm olarak belirler. Böylece çizilecek kavis için bu uzunlukta çizgiler kavis boyunca yön değiştirerek kullanılır.

N_ARC_CORRECTION : Detaylı bilgi edinemediğim bir nevi düzeltme katsayısı.

ARC_P_CIRCLES : Aktif edilirse G2/G3 kodlarına tam bir daireyi tanımlamak için kullanılan P parametresini ekler.

CNC_WORKSPACE_PLANES : Aynı özelliğin CNC modunda çalışan yazıcılarda da kullanılmasını sağlar.

//#define BEZIER_CURVE_SUPPORT

Özellikle bilgisayar grafiklerinde kullanılan parametrik eğri biçimi olan Bezier eğrisi için kullanılan G5 kodunu aktif eder. Komuta parametre olarak I,J,P,Q değerleri verilir. Çizilecek eğri seçilen kontrol noktaları (I ve J) esas alınarak iki nokta (P ve Q) kullanılarak çizilir. Fazladan hafıza kullanımına neden olan bu özellik varsayılan olarak kapalıdır.

#define MIN_STEPS_PER_SEGMENT 6

Baskı işlemi için gerekli tüm işlemler yazıcıya G-Code satırları aracılığı ile bölümler (paketler) halinde gönderilir. Bu bölümler belirli bir hareket dizisini barındırır ve genellikle yazıcının ön belleği el verdiği ölçüde birleştirilerek gönderilirler. Bazı hareketler tek bir G-Code ile gönderilebilirken (örneğin düz bir çizgi) bazı hareketler birden fazla G-Code dizisi gerektirir (örneğin bir çember). Bu durumda bazı bölümler fazla bazıları az sayıda hareket dizisi içereceğinden gereksiz veri haberleşmesini önlemek için düşük sayıda hareket komutu içeren bölümler birleştirilerek tek bölüm halinde gönderilebilir. Yukarıdaki tanımlama belirli bir hareket komutundan düşük bölümün bir sonraki bölüm ile birleştirilmesini sağla.

//#define HEATERS_PARALLEL

Çift Extruder sistemlerde Nozzle ısıtıcıları istendiğinde ayrı ayrı çalıştırılabilmekte ancak istenirse her ikisinin de tek bir komutla aynı anda çalıştırılması sağlanabilir. Yani bir ısıtıcıya komut verildiğinde diğeride aynı komutu alabilir. Yukarıdaki tanımlama bunun içindir.

#if ENABLED(SDSUPPORT)
#define BLOCK_BUFFER_SIZE 16
#else
#define BLOCK_BUFFER_SIZE 16
#endif

Yazıcıya gönderilen doğrusal hareketlerin sayısı her zaman belirli bir plan dahilinde olmalıdır. Bu miktarlar genellikle yazıcının boş kalan hafıza miktarına göre belirlenir. Eğer SD kart özelliği aktif ise ve tampon bellek uyarısı alırsanız yukarıdaki tanımlamalardan ilk BLOCK_BUFFER_SIZE değerini düşürmeyi deneyiniz. Böylece fazladan hafıza kullanan SD kart, LCD vs. nedeniyle düşen boş bellek miktarı daha az sorun yaratacaktır. Girilecek değer 2 ve kuvvetleri (8, 16, 32 …) şeklinde olmalıdır.

#define MAX_CMD_SIZE 96
#define BUFSIZE 4

Yukarıdaki iki satır seri haberleşmede gönderilecek komut uzunluğunu belirler. Toplam karakter sayısıdır. Yani MAX_CMD_SIZE değeri bir defada gönderilebilecek G-Code satırının toplam karakter sayısını belirler. BUFSIZE ise belleğe alınacak toplam satır sayısını belirler. Yukarıdaki tanımlamaya göre bir defada her biri en fazla 96 karakter uzunluğunda 4 satır hafızaya alınacaktır.

#define TX_BUFFER_SIZE 0

Normal şartlarda yazıcı kontrol (Host) yazılımı ile yazıcı arasında yapılan haberleşme işlemlerinde Marlin tarafından gönderilen bilgi mesajları tampon belleğe dahil edilmez. Yazıcının veri alışverişine müsait olduğı anlarda bu haberleşme yapılır. Eğer diğer hareket komutları ile birlikte bu bilgi mesajlarının da tampon belleğe alınmasını istiyorsanız yukarıdaki satıra ayırmak istediğiniz bellek miktarını byte cinsinden giriniz. “ok” mesajı için 4 byte, M105 komutuna karşılık cevap olarak verilen ADVANCED_OK verileri için 32 byte, debug-echo: denilen hata ayıklama mesajları için 128 byte belleğe ihtiyaç vardır.

//#define RX_BUFFER_SIZE 1024
#if RX_BUFFER_SIZE >= 1024
// Enable to have the controller send XON/XOFF control characters to
// the host to signal the RX buffer is becoming full.
//#define SERIAL_XON_XOFF
#endif

Normal şartlarda kendisi ayarlasa da Yazıcı kontrol (Host) yazılımı için bir tampon bellek tanımlanabilir. Bu tampon bellek verileri için XON/XOFF kontrol verileri olmayacaksa 32 byte yeterli olacaktır ancak XON/XOFF kontrol verileri dahil edilecekse en az 1024 byte olmalıdır. Yukarıdaki tanımlamalardan ilk satır aktif edildiğinde karşısındaki değer kadar tampon bellek kullanılmaya başlanır. Eğer bellek miktarı 1024 byte veya üzerinde tanımlanırsa XON/XOFF kontrol verilerinin de aktif edilmesi için SERIAL_XON_XOFF satırı aktif edilmelidir.

#if ENABLED(SDSUPPORT)
// Collect and display the maximum RX queue usage after an SD file transfer.
//#define SERIAL_STATS_MAX_RX_QUEUED

// Collect and display the number of dropped bytes after an SD file transfer.
//#define SERIAL_STATS_DROPPED_RX
#endif

SERIAL_STATS_MAX_RX_QUEUED aktif ve SD karta kaydedilmek üzere bir dosya gönderilmiş ise bu transfer esnasında kullanılan en yüksek tampon bellek miktarı hakkında bilgi mesajı verilir. SERIAL_STATS_DROPPED_RX aktif edilirse bu transfer esnasında işleme alınmayıp kaçırılan verinin byte cinsinden değeri rapor edilir.

//#define EMERGENCY_PARSER

Öncelikli komut ayrıştırıcısı olarak adlandırabileceğimiz bu özellik aktif edildiğinde tampon bellekteki belirli komutlar kesinlikle engellenmez ve mutlaka işleme konulur. Şu an için M108, M112 ve M140 komutları bu tür komutlardandır. AT90USB (USBCON) işlemci kullanan kontrol kartlarında çalışmamaktadır.

//#define NO_TIMEOUTS 1000 // (ms)

Bazı yazıcı kontrol (Host) yazılımları düşük veya kararsız haberleşme şartlarında “ok” komutunu kaçırabilir ve bir sonraki komutu isteyemez. Bu durum zaman aşımına dolayısıyla baskı işleminin durmasına sebep olabilir. Çoğu yazılımda bu süre 30 sn. dir. Eğer haberleşme ile ilgili sorunlar yazşıyorsanız yukarıdaki satırı aktif edip ms cinsinden gireceğiniz değer ile zaman aşımı süresini arttırabilirsiniz. Genellikle 1 sn. (1000 ms) yeterli olacaktır.

//#define ADVANCED_OK

Marlin belirli aralıklar ile yazıcı kontrol (Host) yazılımına “ok” mesajı göndererek haberleşmeyi canlı tutar. Bu mesaj ile birlikte tampon bellek verileri hakkında ilave bilgilerin de iletilmesini isterseniz yukarıdaki satırı aktif ediniz. Şu an için çoğu yazılım bu özelliği desteklemese de ileride destekleyecekleri düşünülmekte. Aktif edildiğinde bir önceki tanımlama olan NO_TIMEOUTS seçeneğine ihtiyaç kalmayacaktır.

//#define FWRETRACT

#if ENABLED(FWRETRACT)
#define MIN_AUTORETRACT 0.1
#define MAX_AUTORETRACT 10.0
#define RETRACT_LENGTH 3
#define RETRACT_LENGTH_SWAP 13
#define RETRACT_FEEDRATE 45
#define RETRACT_ZLIFT 0
#define RETRACT_RECOVER_LENGTH 0
#define RETRACT_RECOVER_LENGTH_SWAP 0
#define RETRACT_RECOVER_FEEDRATE 8
#define RETRACT_RECOVER_FEEDRATE_SWAP 8
#endif

Tüm dilimleme yazılımlarında bulunan ve bir çok ayarlamaya sahip olan geri çekme işlemi Marlin içinde dahili olarak bulunmakta ve istenirse yazılımsal olarak değilde donanımsal olarak geri çekme yapılabilmektedir. Sistem tam olarak test edilmemiş ve kısmi olarak çalışıyor olabilir. Kullanmak isterseniz ilk satır olan #define FWRETRACT satırını aktif etmeniz gerekecektir. Bu aşamadan sonra dilimlemede oluşan tüm G1 E ile başlayan geri çekme komutları donanımsal geri çekmeye çevrilecektir.

Alt tanımlamaları şu şekildedir;

MIN_AUTORETRACT : Bu değere eşit ya da büyük tüm geri çekme işlemleri donanımsal geri çekmeye çevrilir.

MAX_AUTORETRACT : DOnanımsal geri çekme işlemi için üst limit. Bu değerden büyük geri çekmeler dikkate alınmaz ve yazılımsal olarak uygulanır.

RETRACT_LENGTH : Varsayılan geri çekme uzunluğu (mm).

RETRACT_LENGTH_SWAP : Çoklu filament kullanımında filament değişimi esnasında kullanılacak geri çekme uzunluğu (mm).

RETRACT_FEEDRATE : Geri çekme hızı (mm/sn).

RETRACT_ZLIFT : Geri çekme esnasında Z eksen kaldırma yüksekliği.

RETRACT_RECOVER_LENGTH : Geri çekme sonrası tekrar filament sürme esnasında kullanılacak ilave uzunluk (mm). Filamenti tekrar ileri sürerken geri çekme miktarına eklenir.

RETRACT_RECOVER_LENGTH_SWAP : Filament değişimi için geri çekilen miktara tekrar ileri sürülürken eklenecek ilave düzeltme miktarı (mm).

RETRACT_RECOVER_FEEDRATE : Filamentin yeniden ileri sürülmesi esnasında kullanılacak hız (mm/sn).

RETRACT_RECOVER_FEEDRATE_SWAP : Filament değişim için geri çekilen filamentin ileri sürülmesi esnasında kullanılacak hız (mm/sn).

//#define EXTRA_FAN_SPEED

Parça soğutma fanı için ikinci bir hız tanımlaması belirler ve iki hız arasında hızlı geçiş için kullanılır. Örneğin M106 P1 T3-255 komutu sıfır numaralı fan için 255 yani tam hızda bir değer tanımlar. Daha sonra istenilen yerde M106 P1 T2 ve M106 P1 T1 komutları ile bu tanımlanan ikinci hız ile önceki fan hızları arasında geçiş yapılabilir.

//#define ADVANCED_PAUSE_FEATURE
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#define PAUSE_PARK_X_POS 3
#define PAUSE_PARK_Y_POS 3
#define PAUSE_PARK_Z_ADD 10
#define PAUSE_PARK_XY_FEEDRATE 100
#define PAUSE_PARK_Z_FEEDRATE 5
#define PAUSE_PARK_RETRACT_FEEDRATE 60
#define PAUSE_PARK_RETRACT_LENGTH 2
#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10
#define FILAMENT_CHANGE_UNLOAD_LENGTH 100
#define FILAMENT_CHANGE_LOAD_FEEDRATE 6
#define FILAMENT_CHANGE_LOAD_LENGTH 0
#define ADVANCED_PAUSE_EXTRUDE_FEEDRATE 3
#define ADVANCED_PAUSE_EXTRUDE_LENGTH 50
#define PAUSE_PARK_NOZZLE_TIMEOUT 45
#define FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS 5
#define PAUSE_PARK_NO_STEPPER_TIMEOUT
//#define PARK_HEAD_ON_PAUSE
//#define HOME_BEFORE_FILAMENT_CHANGE
#endif

Şu an için deneme aşamasında olan geliştirilmiş baskı bekletme ve filament değiştirme sisteminin tüm ayarları yukarıdaki satırlarda yapılmaktadır. İlk iş olarak #define ADVANCED_PAUSE_FEATURE satırını dolayısı ile bu özelliği aktif ediyoruz.

Sistem aktif olduktan sonra G-Code komut listesine M600 filament değiştirme komutunu eklemektedir. Aynı zamanda #define PARK_HEAD_ON_PAUSE satırı aktif edilmiş ise M125 Nozzle park komutunu da ekler. LCD ekran gerektirir. Mevcut tanımlamalar sırasıyla aşağıdaki gibidir;

PAUSE_PARK_X_POS : X eksende Nozzle park pozisyonu (mm).
PAUSE_PARK_Y_POS : Y eksende Nozzle park pozisyonu (mm).
PAUSE_PARK_Z_ADD : Z eksene eklenecek mesafe. Bu kısma girilen değer o anki mevcut Z değerine eklenecek ve Z eksen eklenen değer kadar yukarı kalkacaktır (mm).

PAUSE_PARK_XY_FEEDRATE : Nozzle park esnasında kullanılacak X ve Y eksen hızı. (Delta yazıcılarda aynı zamanda Z eksen) (mm/sn)

PAUSE_PARK_Z_FEEDRATE : Nozzle park esnasında kullanılacak Z eksen hızı. (Delta yazıcılarda dikkate alınmaz) (mm/sn)

PAUSE_PARK_RETRACT_FEEDRATE : Nozzle park esnasında kullanılacak geri çekme hızı (mm/sn).

PAUSE_PARK_RETRACT_LENGTH : Nozzle park esnasında kullanılacak geri çekme miktarı. (mm)

FILAMENT_CHANGE_UNLOAD_FEEDRATE : Filament değişimi için filament çıkartma hızı. (Geri çekme değildir. Filamenti komple Extruder’dan çıkarmak içindir) (mm/sn).

FILAMENT_CHANGE_UNLOAD_LENGTH : Filament değişimi için filament çıkartma miktarı. (Geri çekme değildir. Filamenti komple Extruder’dan çıkarmak içindir) (mm).

FILAMENT_CHANGE_LOAD_FEEDRATE : Filament değişimi için filament yükleme hızı. (Filamenti Extruder’a yüklemek içindir) (mm/sn).

FILAMENT_CHANGE_LOAD_LENGTH : Filament değişimi için filament yükleme miktarı. (Filamenti Extruder’a yüklemek içindir) (mm).

ADVANCED_PAUSE_EXTRUDE_FEEDRATE : Filament yüklendikten sonra Nozzle’dan bir miktar çıkarılması istenirse bu işlemin hızı (mm/sn).

ADVANCED_PAUSE_EXTRUDE_LENGTH : Filament yüklendikten sonra Nozzle’dan bir miktar çıkarılması istenirse ilerlitilecek filament miktarı (mm).

PAUSE_PARK_NOZZLE_TIMEOUT : Belirlenen süre içinde kullanıcı filament değişimini yapmazsa Nozzle ısıtması kapatılır.

FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS : Yazıcı durudurlmadan önce verilecek sinyal sayısı.

PAUSE_PARK_NO_STEPPER_TIMEOUT : Motorlar için boşta bekleme süresi dolsa dahi eksen konumlarını koruyabilmek için sürekli enerjili kalmalarını sağlar.

PARK_HEAD_ON_PAUSE : Aktif edilirse baskı beklemeye alındığında Nozzle filament değiştirme noktasına gider. Baskı başlatıldığında kaldığı yerden devam eder.

HOME_BEFORE_FILAMENT_CHANGE : Filament değişimi esnasında önce eksenler sıfırlanır sonra filament değişim noktasına gidilir.

//#define HAVE_TMCDRIVER

Trinamic TMC26X serisi motor sürücüleri kullanıyorsanız yukarıdaki satırı aktif etmelisiniz. Arduino IDE yazılımına yüklenecek kütüphane dosyasını buradan indirebilirsiniz.

//#define HAVE_TMC2130

Trinamic TMC2130 motor sürücüsü kullanıyorsanız yukarıdaki satırı aktif etmelisiniz. Arduino IDE yazılımına yüklenecek kütüphane dosyasını buradan indirebilirsiniz. TMC2130 sürücülerini SPI modda kullanmak için sürücünün SPI bağlantı noktalarını kontrol kartınızın donanımsal SPI pinlerine bağlamanız ve kartınızın pins_xxx.h dosyasında CS pinlerini tanımlamanız gerekmektedir. Örneğin RAMPS 1.4 AUX3 soketindeki pinleri kullanmaktadır. TMC2130 kullanan her eksen için bir CS pini tanımlanmalıdır. X_CS_PIN 53, Y_CS_PIN 49 gibi.

//#define HAVE_L6470DRIVER

L6470 motor sürücüleri kullanıyorsanız yukarıdaki satırı aktif etmelisiniz. Arduino IDE yazılımına yüklenecek kütüphane dosyasını buradan indirebilirsiniz.

//#define EXPERIMENTAL_I2CBUS
#define I2C_SLAVE_ADDRESS 0

Yukarıdaki ilk satır henüz test aşamasında olan I2C haberleşme protokolünü aktif eder. Bu sayade Marlin yazılı ile I2C haberleşme protokolü kullanan herhangi bir harici cihaz ile haberleşilebilir. Örneğin I2C LCD veya I2C encoder gibi. Ayrıca gerekli protokol alt yordamları kullanılarak Marlin yazılımına uzaktan kontrol özelliği eklenip sistemin yükü birden fazla kontrol kartına dağıtılabilir.

İkinci satır ise kontrol kartınızın I2C adresini tanımlar. 0 – 7 arası bir adres girildiğinde kontrol kartınız yönetici (master) olarak çalışırken 8 – 127 arası bir değer yönetilen (slave) olarak çalışmasını sağlar.

I2C üzerinden veri göndermek için kullanılacak komut M260 dır. Kullanım şekli ise;

M260 Axx ile önce veri gönderilecek cihazın adresi belirlenir.
M260 Bxx ile ASCII kodlar kullanılarak gönderilecek ilk karakter tampon belleğe yazılır. ASCII karakter tablosunda 65 ‘A’ harfine denk gelmektedir.
M260 Bxx gönderilecek her karakter için bu satır tekrarlanır.
M260 S1 ile tampon belleğe yüklenen karakter dizisi karşı cihaza gönderilir. Örneğin Marlin karakterlerini göndermek için gereken komut dizisi aşağıdaki gibidir;

M260 A99 ; Hedef cihaz adresi
M260 B77 ; M
M260 B97 ; a
M260 B114 ; r
M260 B108 ; l
M260 B105 ; i
M260 B110 ; n
M260 S1 ; Tümünü gönder

Aynı zamanda karşı cihazdan veri talep etmek için de M261 komutu kullanılır. Kullanım şekli M261 Axx Bxx şeklindedir. A karşı cihazın adresi B ise istenecek toplam byte sayısıdır. İstenecek toplam byte sayısı 0 (sıfır) dan başlamalıdır. Yani bir byte veri isteyecekseniz B0 kullanmanız gerekir. Örneğin 99 adresindeki bir cihazdan 6 byte veri istemek için kullanılacak komut;

M261 A99 B5 şeklindedir.

//#define SPINDLE_LASER_ENABLE
#if ENABLED(SPINDLE_LASER_ENABLE)

#define SPINDLE_LASER_ENABLE_INVERT false
#define SPINDLE_LASER_PWM true
#define SPINDLE_LASER_PWM_INVERT true
#define SPINDLE_LASER_POWERUP_DELAY 5000
#define SPINDLE_LASER_POWERDOWN_DELAY 5000
#define SPINDLE_DIR_CHANGE true
#define SPINDLE_INVERT_DIR false
#define SPINDLE_STOP_ON_DIR_CHANGE true

#define SPEED_POWER_SLOPE 118.4
#define SPEED_POWER_INTERCEPT 0
#define SPEED_POWER_MIN 5000
#define SPEED_POWER_MAX 30000

#endif

Marlin yazılımı aynı zamanda CNC ve Lazer desteğine de sahiptir. Yukarıdaki tanımlamalardan ilk satırı aktif ettiğinizde yazılıma M3, M4 ve M5 komutları eklenir. Bu sayede CNC motorunu veya Lazeri açıp kapatabilir, yine CNC motorun hızını ve yönünü, lazerin gücünü ayarlayabilirsiniz. Diğer tanımlamalar şu şekildedir;

SPINDLE_LASER_ENABLE_INVERT : Varsayılan olarak false değerine sahiptir. Eğer açma/kapama sinyalini tersine çevirmek isterseniz değerini true yapınız.

SPINDLE_LASER_PWM : Eğer kullandığınız kontrol kartı CNC motorunun hızını veya Lazer gücünü ayarlayabiliyorsa değerini true yapınız.

SPINDLE_LASER_PWM_INVERT : Eğer CNC motor hızı veya Lazer gücü ters çalışıyorsa değerini true yapınız.

SPINDLE_LASER_POWERUP_DELAY : CNC motor hızı veya Lazer gücünün istenen seviyeye gelmesi için beklenecek süre. (ms).

SPINDLE_LASER_POWERDOWN_DELAY : CNC motor hızı veya Lazer gücünün tamamen durması için beklenecek süre. (ms).

SPINDLE_DIR_CHANGE : CNC motor kontrolcünüz motor yönünü değiştirmeyi destekliyorsa true yapınız.

SPINDLE_INVERT_DIR : CNC motorunun yönünü varsayılanın tersine çevirmek için true yapınız.

SPINDLE_STOP_ON_DIR_CHANGE : CNC motorunun yönü değişmeden önce tam olarak durudurlması için değerini true yapınız.

Sondaki dört satır kullandığınız motor devir kontrol kartı ile ilgili olup detaylı bilgiyi kontrol kartının kullanma kılavuzundan alabilirsiniz.

//#define FILAMENT_WIDTH_SENSOR

Filament çapı baskı esnasında önemli bir faktördür ve çapının yazılım tarafından bilinmesi gerekmektedir. Ayrıca çapta oluşacak değişimler baskı kalitesini etkileyecektir. Eğer filamentin çapını ölçen bir sensör kullanıyorsanız yukarıdaki satırı aktif ettiğinizde Marlin filament akışını bu sensörden aldığı bilgiye göre otomatik olarak ayarlayacaktır. Şu an için sadece bir Extruder desteklenmektedir.

#define FILAMENT_SENSOR_EXTRUDER_NUM 0

Sadece bir Extruder filament çap sensörü kullanabilir. Yukarıdaki satıra hangi Extruder çap sensörü kullanıyorsa onun numarasını giriniz. İlk Extruder 0 (sıfır) dır.

#define MEASUREMENT_DELAY_CM 14

Filament erime noktası ile filament çap sensörü arasındaki mesafe. (cm)

#define MEASURED_UPPER_LIMIT 1.360
#define MEASURED_LOWER_LIMIT 1.90

Kullandığınız filament için üreticinin verdiği çap toleransı. En üst ve en alt değerler. (mm)

#define MAX_MEASUREMENT_DELAY 20

Filament ölçümü için kullanılacak tampon bellek miktarı. Bu değer MEASUREMENT_DELAY_CM değerinden büyük ya da eşit olmalıdır.

#define FILAMENT_LCD_DISPLAY

Ölçülen filament çapını belirli zamanlarda LCD üzerinde gösterir.

//#define CNC_COORDINATE_SYSTEMS

Eğer Marlin CNC modunda çalışıyorsa ve yukarıdaki satır aktif edilirse CNC sistemine uygun koordinat sistemi kullanılır. Bu durumda G53 ve G54 – G59.3 komutları aktif edilir.

//#define PINS_DEBUGGING

Kontrol kartlarının temelinde bir mikro işlemci ve bunun kontrol ettiği dijital veya analog çıkışlara sahip pinler yatmaktadır. Yazıcılardaki tüm donanımlar da bu pinlerin aktif/pasif durumuna göre çalıştırılır. Zaman zaman yazıcının normal işleyişinden bağımsız olarak bu pinlerin durumlarını görmek veya değerlerini değiştirmek gerekebilir. Yukarıdaki satır aktif edildiğinde M43 komutu eklenir ve artık pin listesi alma, durumlarını izleme, limit anahtarları takip etme, LED yakıp söndürme, Servo motoru test etme veya herhangi bir pinin durumunu değiştirme işlemlerini yapabilirsiniz.

#define AUTO_REPORT_TEMPERATURES

Normal şartlarda yazıcı kontrol (Host) yazılımı periyodik olarak M105 komutu ile yazıcıdan o anki ısıyı talep eder. Yukarıdaki satır varsayılan olarak aktiftir ve öyle kalması tavsiye edilir. Yaptığı iş ise yazılımın M105 komutu ile sürekli ısı bilgisi istemesine gerek bırakmadan Marlin’in ısı bilgilerini belirli aralıklarla göndermesini sağlamaktır. Bu işlem komut ön belleğinde alan kazanılmasını ve aşırı ısınmanın önüne geçilmesini sağlar. M115 komutu istenilen herhangi bir anda bu ısı bilgilerinin gönderilmesini sağlar.

#define EXTENDED_CAPABILITIES_REPORT

Bir önceki AUTO_REPORT_TEMPERATURES özelliğini ile bağlantılıdır ve M115 komutuna gelişmiş özellikle ekler.

//#define VOLUMETRIC_DEFAULT_ON

Varsayılan olarak Marlin filament ekstrüzyon yöntemi olarak uzunluk tabanlı G-Code kullanır. Eğer hacimsel ekstrüzyon kullanmak isterseniz yukarıdaki satırı aktif etmeniz gerekmektedir. M404 W ve M200 D komutları ile belirlenen filament hacim ve çap değerleri kullanılır. Bu özelliği devre dışı bırakmak istediğiniz yerde M200 D0 komutunu kullanınız.

//#define NO_WORKSPACE_OFFSETS

Yukarıdaki tanımlama aktif edildiğinde tüm çalışma alanı sınırları kaldırılır ve daha basit bir koordinat sistemi kullanılır. Bu işlem biraz daha hızlı bir baskı imkanı sunar. Bunun yanında M206 ve M428 komutları devre dışı kalır ve G92 komutu Marlin sürüm 1.0 daki haline döner.

#define PROPORTIONAL_FONT_RATIO 1.0

Yazıcı kontrol (Host) yazılımları çıktı ekranlarında orantılı yazı fontları kullanırlar ve sabit genişlikli yazı fontuna göre ayarlı Marlin için bu mesajları okumak zorlaşır. Yukarıdaki seçenek Marlin’e bir karakterlik boşluğu doldurmak için ne kadar alan gerektiğini bildirir. Eğer sabit ölçekli fonto kullanan bir yazılım kullanıyorsanız (OctoPrint gibi) bu değeri 1.0 olarak bırakın aksi taktirde kullandığınız yazılıma göre belirleyin.

#define FASTER_GCODE_PARSER

Bu seçenek sistem belleğinden 28 byte kullanır ve bu sayede G-Code yorumlayıcının daha hızlı çalışmasını sağlayan alternatif bir yöntem kullanılır. Mümkün olduğu sürece aktif tutulmalıdır.

//#define CUSTOM_USER_MENUS
#if ENABLED(CUSTOM_USER_MENUS)
#define USER_SCRIPT_DONE “M117 User Script Done”
#define USER_SCRIPT_AUDIBLE_FEEDBACK
//#define USER_SCRIPT_RETURN // Return to status screen after a script

#define USER_DESC_1 “Home & UBL Info”
#define USER_GCODE_1 “G28\nG29 W”

#define USER_DESC_2 “Preheat for PLA”
#define USER_GCODE_2 “M140 S” STRINGIFY(PREHEAT_1_TEMP_BED) “\nM104 S” STRINGIFY(PREHEAT_1_TEMP_HOTEND)

#define USER_DESC_3 “Preheat for ABS”
#define USER_GCODE_3 “M140 S” STRINGIFY(PREHEAT_2_TEMP_BED) “\nM104 S” STRINGIFY(PREHEAT_2_TEMP_HOTEND)

#define USER_DESC_4 “Heat Bed/Home/Level”
#define USER_GCODE_4 “M140 S” STRINGIFY(PREHEAT_2_TEMP_BED) “\nG28\nG29”

#define USER_DESC_5 “Home & Info”
#define USER_GCODE_5 “G28\nM503”
#endif

Marlin son birkaç sürümden bu yana LCD menüye kullanıcı tanımlı menü seçenekleri ekleme imkanı sundu. Bu sayede kullanıcı menüsü altına 5 adede kadar hazır kodlar tanımlayıp bunları menüden istediğimiz zaman çalıştırabiliriz. Öncelikle CUSTOM_USER_MENUS satırı aktif edilmelidir. Sonrasında yapılacak ayarlar aşağıdaki gibidir;

USER_SCRIPT_DONE : Kullanıcı menüsünden bir komut çalıştırılıp bittiğinde LCD üzerinde verilecek mesaj belirlenir. Çift tırnak arasında yazılmalıdır.

USER_SCRIPT_AUDIBLE_FEEDBACK : Aktif edildiğinde kullanıcı menüsünden bir komut çalıştırıldığında sesli ikaz verilmesi sağlanır.

USER_SCRIPT_RETURN : Aktif edildiğinde kullanıcı menüsünden bir komut çalıştırıldığında hemen ana ekrana döner.

USER_DESC_1 : İlk kullanıcı menü seçeneğinin ekranda görünecek açıklaması.

USER_GCODE_1 : İlk kullanıcı menü seçeneği seçildiğinde çalıştırılacak komut. Birden fazla komut için her komut arasına \n koyunuz.

Diğer satırlarda USER_DESC_1 ve USER_GCODE_1 gibi 4 adet daha menü satırı tanımlar.

//#define ACTION_ON_KILL “poweroff”

Yukarıdaki tanımlama yazıcı çalışmaz hale gelip bir sorunla karşılaştığında Yazıcı kontrol (Host) yazılımına gönderilecek mesajı tanımlar. Örneğin yukarıdaki satır aktif edildiğinde Marlin //action:poweroff komutunu gönderecektir. Yazıcı kontrol yazılımının bunu destekliyor olması ve bu tür mesajları işleyebiliyor olması gerekir.

Son birkaç tanımlama daha olmasına rağmen bunlar çok kullanılmayan ve özel donanımlara göre olduğundan yazıya dahil etmiyorum. Bu yazı hazırlanırken Marlin 1.1.8 son sürümüydü. Bugfix denilen ve mevcut son sürüm hatalarının giderilmesi ile birlikte resmi olarak yayınlanmayan günlük sürümler dikkate alınmamıştır. Bu düzeltmelerin tamamı çıkacak olan son sürümde yer aldığında yazıya eklenecektir. Buraya kadar okuduysanız sanırım artık Marlin hakkında bir fikir sahibi olmuş ve sıfırdan kendi Marlin kurulumunuzu yapacak duruma gelmişsinizdir. En azından yazıcınızı çalıştırıp geri kalan sorunlar için uğraşabilirsiniz. Sağlıcakla kalınız.

kaynak : https://boyut3.com/3boyut4kose/2019/08/24/860-2/

One Response

  1. muhammet taha sarı 13 Ekim 2020

Leave a Reply