Commands to move Z axis down relative 10mm from current position. No. That’s wrong. This seems to be absolute.

N484 G1 Z-10 F200*44
  • G0 - Rapid position, fires axes independently to get each axis' position as quickly as possible.

  • G1 - Interpolate, slows an axis down if needed to create a straight line.

    G21 ;metric values
    G90 ;absolute positioning
M190 S80
M104 S230
M109 S230
M82 ;absolute extrusion mode
G21 ;metric values
G90 ;absolute positioning
M82 ;set extruder to absolute mode
M107 ;start with the fan off
G28 X0 Y0 ;move X/Y to min endstops
G28 Z0 ;move Z to min endstops
G1 Z15.0 F9000 ;move the platform down 15mm
G92 E0 ;zero the extruded length
G1 F200 E3 ;extrude 3mm of feed stock
G92 E0 ;zero the extruded length again
G1 F9000
;Put printing message on LCD screen
M117 Printing...
G92 E0
G1 F1500 E-6.5
M104 S0 ;extruder heater off
M140 S0 ;heated bed heater off (if you have it)
G91 ;relative positioning
G1 E-1 F300  ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
M84 ;steppers off
G90 ;absolute positioning
M82 ;absolute extrusion mode
M104 S0

If the printer isn’t quite ready to print the skirt, it failing doesn’t help anything. The following code should "draw" a line to clear the nozzle. The idea is to do a more elaborate pre printing exercise than simply the skirt.

; ==============================================
;XED-Added code to attempt a warmup line to clear nozzle.
M107 ;turn off fan
G28 X0 Y0 Z0 ; Home X, Y and Z axis end-stops.
G0 X0 Y0 F9000 ; Go to home where is should be anyway.
G0 Z0.15 ; Drop to very near bed.
G92 E0 ; Zero the extruded length.
G1 X40 E25 F500 ; Extrude 25mm of filament in a 4cm line
G92 E0 ; zero the extruded length
G1 E-1 F500 ; Retract a little
G1 X80 F4000 ; Quickly wipe away from the filament line
G1 Z0.3 ; Raise and begin printing.
; ==============================================
;XED-Really printing the job now.
M117 XED-StartPrint

Put this where Cura puts these in the G-code.

;Put printing message on LCD screen
M117 Printing...

LCD Display

Want the LCD to display what layer you’re on? Do this to the G-code in Vim (or sed).

:%s/^;LAYER:\([0-9][0-9]*\)/;LAYER:\1\rM117 XED-L\1/

Our Printer - Jankbot

  • Model: Monoprice 113860 Maker Select v2

  • Marking: IIIP

  • Work Envelope: X=200mm Y=200mm Z=150mm? (Z=130mm safe w/ spool on side)

  • Filament: Standard 1.75mm - up to 1kg spool

  • Tip: .4mm, I measured the extruded filament at .011" (.28mm)

  • Based On: Josef Prusa (sometimes used as closest options, e.g. "Prusa i3" in Cura)

Setup Tips:

  • Putting it on a rigid flat surface helped more than I would have liked. In other words its intrinsic structure is not quite enough to keep it aligned.

  • Don’t move it once it’s set up.

  • Move the z limit switch up high until your table can’t reach it even with all the springs uncompressed. Move it just low enough to start compressing the springs. The idea is that you do not want the springs all tightly compressed. Setup is harder that way. OTOH, with the springs lightly compressed, the leveling nuts back off during operation and just fall off! True story!

  • I used an indicator which was probably a mistake. Try to tram in a square 100mmX100mm in the middle. If the outside corners are off, oh well; they’re not usually as important anyway. If the middle is good, it’s also a good starting point for getting the corners ok too.

  • Watch interference with those binder clips holding down the glass. That’s a bad system that needs to be improved upon.

  • It is entirely likely that once the bed is heated, the bed will be a different alignment.

Other Tips:

  • WARNING - The "Stop Print" will only stop after it finishes buffered commands which can be substantial.

  • This video covers a lot of mods that can be done for this printer. Lots of good links in the video description.

  • These diagonal braces are exactly what I was thinking of designing because the Y to Z perpendicularity is shite without some kind of help. Not only that but the lack of triangulated structure seems to exacerbate vibrations.

  • I need a spool holder. Perhaps something like this.

  • It might make sense to remove one of the four Y axis bearings and move the lone one to the middle. Actually this guy says that mod did not wear well. But the thicker baseplate makes sense. Ordered!

  • The bed springs are madness and should be replaced by a second nut. Level with nuts between the plates; lock with nuts underneath. I would make easy to turn lobes calibrated to freedom units so my indicators are happy.

FFF - Fused Filament Fabrication


My green stuff is ABS. Warps and is thermo-sensitive, but makes a nice durable part. Filament: Standard 1.75mm - up to 1kg spool

  • PLA/PLA+ - Nozzle:180C-200C Bed:40C-50C

  • ABS - Nozzle:210-230 Bed:50C-60C

  • TPU/TPE/TPC - Nozzle:210-230 Bed:30C-50C

  • PETG - Nozzle:220C-240C Bed:50C-60C


Interesting test video shows some factors when designing for this manufacturing process. Seems like .006"[.15mm] layer height is strongest. But .008"[.2mm] is comparable and will save a lot of time. His test used a .4mm nozzle, 1.35mm wall thickness and 30% infill. Note that the strength along the extruded axis was about 2.5x stronger than the layer axis.


What a pain to get installed! "Just burn our automagical distro to an SD card!" Great, does that distro drive the obscure lcd display on my Pi? No, ok, then let’s figure out how to install this software on the distribution I need.

The first annoyance is that it needs Python 3.6. No, not Python 3.5. It demands 3.6. Start by sorting out a build toolchain.

sudo apt install build-essential tk-dev libncurses5-dev libncursesw5-dev
sudo apt install libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev
sudo apt install libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev
sudo apt install build-essential tk-dev libncurses5-dev libncursesw5-dev
sudo apt install libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev
sudo apt install libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

Once you have all that, download Python from and start compiling it.

tar xf Python-3.6.5.tar.xz
cd Python-3.6.5
sudo make altinstall
python3.6 --version # Should work now.

Now make a virtual environment for Octoprint.

python3.6 -m venv venv
source venv/bin/activate
pip3.6 install pip --upgrade
pip3.6 install psutil
pip3.6 install wrapt
pip3.6 install octoprint # Might need sudo here. Whatever.

This should create an octoprint executable in /usr/local/bin/octoprint.

I created a script that looks like this.

# This really should be run from a screen session. Insist.
if [ "${TERM::6}" == screen ]; then echo "Screen session OK"; else echo "NOT in a screen"; exit 1 ;fi
# source /home/pi/Octoprint/venv/bin/activate # I don't think this is really needed.
octoprint serve --host= --port=5000

When I run it, it seems to work and fires up the Octoprint server. Once that’s up you can go to a comfortable computer and point it at your target — in my case. Note that if you try https, it will time out and be confusing.

To print something, click the "Upload" button and tell it about a .gcode file you have access to. Then you have to click that item in the "Files" box until its file name is bold. Then the "Print" button in the "State" box becomes ready to click.


Once you have a model in Blender what do you do with it next? First make sure the model itself is really well crafted for 3d printing; this fine article talks about many of the important considerations. Then you need to export it to something Cura likes. The .obj format seems to work. Apparently .stl is good too if it’s one color.

Open the file in Cura and fix anything that’s wrong. Perhaps the most important thing to get right is the scale. Often you’ll want to judiciously balance size to print time which is calculated after slicing.

Hit "Prepare" in the lower right and the model will be sliced for printing. I like to then look at the project in "Layer view" (top towards the right); this shows you what will be printed including helper infrastructure. It’s a good time to catch silly and problematic layouts.

Once you’re happy with it, you can "Save to File" which will save the CNC part program in G-code. From there you can edit it in Vim to make changes. This is the file that you upload to Octoprint, at which point you are ready to start printing.

Cura Plug-Ins

  • The big list of Cura plugins.

  • Tab Anti Warping puts down helper disks instead of a brim or skirt. Seems a reasonable thing to try.

  • Blender Integration should allow .blend files to be opened directly from Cura. Yay.

  • CuraBlender seems like a similar Blender integration system with some more UI features. Seems to read and write .blend files in Cura.

  • Cura-OctoPrintPlugin allows you to tell Cura that your printer is the Octoprint server. You hand it to Octoprint and Octoprint hands it to your printer. Presumably this allows for all of Octoprint’s clever stuff, especially remote networking.