<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2026-01-26T18:10:20+00:00</updated><id>/feed.xml</id><title type="html">Strayr</title><subtitle>I hack guitars, ride printers and play motorcyles.</subtitle><entry><title type="html">Mechanical Gantry Align</title><link href="/marlin/klipper/2022/08/27/g34.html" rel="alternate" type="text/html" title="Mechanical Gantry Align" /><published>2022-08-27T23:12:00+00:00</published><updated>2022-08-27T23:12:00+00:00</updated><id>/marlin/klipper/2022/08/27/g34</id><content type="html" xml:base="/marlin/klipper/2022/08/27/g34.html"><![CDATA[<p>This appeared in Marlin via <a href="https://www.youtube.com/watch?v=JqH41K2vq0g&amp;t=300s">Prusa</a> as <code class="language-plaintext highlighter-rouge">M45 Z</code> and then in marlin as <a href="https://marlinfw.org/docs/gcode/M915.html">M915</a> before becoming an option for <a href="https://marlinfw.org/docs/gcode/G034-mgc.html">G34</a>. The better known <a href="https://marlinfw.org/docs/gcode/G034-zsaa.html">G34 that uses a probe</a> is equivalent to <a href="https://www.klipper3d.org/G-Codes.html#z_tilt_adjust">Z_TILT_ADJUST</a> in Klipper.</p>

<p>I made a very slow <a href="https://youtu.be/CWfAdz4vtpY">video showing the marlin version in operation on my Ender 3</a> on my SKR mini board.</p>

<p>I implemented <a href="https://github.com/strayr/strayr-k-macros/blob/main/mechanical_level_tmc2209.cfg">MECHANICAL_GANTRY_ALIGN as a Klipper macro</a> almost immediately after getting klipper running on my SKR mini.</p>

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/aVdIeIIpUAk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>

<p>I still use this on my Prusa style printer, despite it having a driver for both stepper motors. If I disturb the adjustable bed, I use this to set the gantry parallel to the top of the frame as a reference before running <a href="https://www.klipper3d.org/G-Codes.html#screws_tilt_calculate">SCREWS_TILT_CALCULATE</a> (<a href="https://marlinfw.org/docs/gcode/G035.html">G35 in marlin</a>, use it) to set the plane through the 4 corners of the bed to be parallel to the Y axis and the level taken from the frame top. However in my START_PRINT routine i use Z_TILT_ADJUST because the bed doesn’t go out of tram once set up unless something really bad happens.</p>

<p>This requires TMC drivers to be set up (<a href="https://www.klipper3d.org/TMC_Drivers.html">using UART or SPI</a>) to allow software control of the stepper current. Without that, or if you use too high a current it may break your printer. This does <strong>not</strong> use <a href="https://www.trinamic.com/technology/motor-control-technology/stallguard-and-coolstep/">STALLGUARD</a> or sensorless homing.</p>]]></content><author><name></name></author><category term="marlin" /><category term="klipper" /><summary type="html"><![CDATA[This appeared in Marlin via Prusa as M45 Z and then in marlin as M915 before becoming an option for G34. The better known G34 that uses a probe is equivalent to Z_TILT_ADJUST in Klipper.]]></summary></entry><entry><title type="html">Managing Klipper features with Custom Gcode in PrusaSlicer</title><link href="/custom-gcode" rel="alternate" type="text/html" title="Managing Klipper features with Custom Gcode in PrusaSlicer" /><published>2022-07-10T03:00:00+00:00</published><updated>2022-07-10T03:00:00+00:00</updated><id>/Custom-Gcode</id><content type="html" xml:base="/custom-gcode"><![CDATA[<p>PrusaSlicer (and SuperSlicer) have the ability to inject custom gcode from the settings pages. That’s great if you use klipper as you can set <code class="language-plaintext highlighter-rouge">PRESSURE_ADVANCE</code> from the slicer, for each filament.</p>

<p>Even better there’s some templating language available so you can query which hotend setup and nozzle size you have. This isn’t always perfect as I’m needing to use different filament profiles for highflow hotends/CHT nozzles but it does reduce the amount of tinkering to get a print to work as I usually have a filament profile set up for every brand and type of filament or maybe every spool with a custom flow multipler set, as they’re all slightly different, ABS is very different from PLA.</p>

<p>First in <code class="language-plaintext highlighter-rouge">printer settings -&gt; notes</code> we set some tags to identify the printer type. On my switchwire I have</p>

<div class="language-jinja highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PRINTER_VENDOR_PRUSA3D
PRINTER_MODEL_MK3
PRINTER_MODEL_E3DD
PRINTER_OS_KLIPPER
HOTEND_AFTERBURNER_E3D
HOTEND_AFTERBURNER_REVO
</code></pre></div></div>

<p>I’ve left the prusa tags in because my printer runs of modified MK3 profiles, and the stock MK3 profiles work great, they’re just very slow on a printer that can do very quick accelerations.</p>

<p><code class="language-plaintext highlighter-rouge">PRINTER_OS_KLIPPER</code> is there for me to test whether i should output marlin gcode or klipper extended gcode</p>

<p><code class="language-plaintext highlighter-rouge">HOTEND_AFTERBURNER_E3D</code> is there for me to test for what kind of hotend I have, I also have <code class="language-plaintext highlighter-rouge">HOTEND_SWITCH_E3D</code> for a multi extruder bowden setup like a prusa MMU1 <a href="https://www.youtube.com/watch?v=X6C9ptTeeyw">(obligotary UberNero)</a> and <code class="language-plaintext highlighter-rouge">HOTEND_AFTERBURNER_CHT</code> for my copperhead/cht highflow setup. I’m not actually doing anything different with <code class="language-plaintext highlighter-rouge">HOTEND_AFTERBURNER_REVO</code> yet, it seems to be performing like an E3D V6 everywhere i would need to tune it, including the max vol flow, but I’ve only tested that with PLA.</p>

<p>In <code class="language-plaintext highlighter-rouge">filament settings -&gt; custom gcode</code> the fun really begins. In the start gcode I might have something like this that</p>

<div class="language-jinja highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{if printer_notes=~/.*PRINTER_OS_KLIPPER.*/ and printer_notes=~/.*HOTEND_AFTERBURNER_E3D.*/ and nozzle_diameter[0]==0.4} SET_PRESSURE_ADVANCE ADVANCE=0.060 SMOOTH_TIME=0.040{endif}  ; 2022-04-14 stealthburner ultramarine blue

{if printer_notes=~/.*PRINTER_OS_KLIPPER.*/ and printer_notes=~/.*HOTEND_SWITCH_E3D.*/ and nozzle_diameter[0]==0.4} SET_PRESSURE_ADVANCE ADVANCE=0.38 SMOOTH_TIME=0.080 {endif}  ;guess

{if printer_notes=~/.*PRINTER_OS_KLIPPER.*/ and printer_notes=~/.*HOTEND_AFTERBURNER_E3D.*/ and nozzle_diameter[0]==0.25} SET_PRESSURE_ADVANCE ADVANCE=0.1275 SMOOTH_TIME=0.040 {endif}  ; guess, from anycubic
</code></pre></div></div>

<p>and in the filament end gcode I just get rid of pressure advance, mostly because it makes MMU behaviour less violent, although I should probably just turn pressure advance off in the MMU filament change scripts.</p>

<div class="language-jinja highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{if printer_notes=~/.*PRINTER_OS_KLIPPER.*/} SET_PRESSURE_ADVANCE ADVANCE=0 {endif}
</code></pre></div></div>

<h2 id="further-reading">Further reading</h2>
<ul>
  <li><a href="https://help.prusa3d.com/article/macros_1775">PrusaSlicer Macro language</a></li>
  <li><a href="https://help.prusa3d.com/article/list-of-placeholders_205643">PrusaSlicer available variables</a></li>
</ul>

<p><img src="../images/custom_gcode/print.png" alt="print settings" />
<img src="../images/custom_gcode/filament.png" alt="filament settings" /></p>]]></content><author><name></name></author><category term="klipper" /><category term="superslicer" /><summary type="html"><![CDATA[PrusaSlicer (and SuperSlicer) have the ability to inject custom gcode from the settings pages. That’s great if you use klipper as you can set PRESSURE_ADVANCE from the slicer, for each filament.]]></summary></entry><entry><title type="html">Thingiverse Protest</title><link href="/thingiverse" rel="alternate" type="text/html" title="Thingiverse Protest" /><published>2022-02-22T14:39:00+00:00</published><updated>2022-02-22T14:39:00+00:00</updated><id>/Thingiverse%20Protest</id><content type="html" xml:base="/thingiverse"><![CDATA[<p>As of today I am removing my files from Thingiverse and replacing them with links of where to find them on my github.</p>

<p>Why? <a href="https://www.reddit.com/r/3Dprinting/comments/sy4hvw/thingiverse_now_doesnt_allow_download_if_i_have/">Thingiverse requires me to disable Firefox’s tracking protection.</a>. I find this really intrusive. I don’t have a problem with being shown ads. They gotta pay the bills. I’m not handing over my privacy because they can’t tell the difference between adblockers and tracking protection.</p>

<p>Most things i have done are all bundled into <a href="https://github.com/strayr/small-fff-projects">small-fff-projects</a>, and I’m going to try to use PrusaPrinters and maybe Thangs more, but I’m keeping and linking back to github as my most recent versions.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[As of today I am removing my files from Thingiverse and replacing them with links of where to find them on my github.]]></summary></entry><entry><title type="html">So I built this site with Jekyll and YAML</title><link href="/2022/02/18/testing-123.html" rel="alternate" type="text/html" title="So I built this site with Jekyll and YAML" /><published>2022-02-18T04:48:00+00:00</published><updated>2022-02-18T04:48:00+00:00</updated><id>/2022/02/18/testing-123</id><content type="html" xml:base="/2022/02/18/testing-123.html"><![CDATA[<p>Mostly to see if I could, and never stopped to think whether I should. Because making blog posts should be a pull request, right?</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Mostly to see if I could, and never stopped to think whether I should. Because making blog posts should be a pull request, right?]]></summary></entry></feed>