This is Jenny's project page, created when I upgraded Jenny from a Prusa Mendel i2 to an i3

  • Architecture : Prusa Mendel i3 Rework 1.5 (source : eMotion Tech)
  • Extruder : Direct Drive MK8 (custom X carriage)
  • Auto-level Z sensor : Capacitive
  • LCD Screen : Full Graphic - DOGM128
  • SD Card : Yes

XYZ Motors

  • Ref : 42BYGHW609
  • Step Angle : 1.8°
  • Rate Voltage : 3.4V
  • Rate Current : 1.7A

Space under heatbed

Space for anything under 200 x 65 x 50 (mm)


The font used for the cut-out in the frame is Hand Stencil

jenny_i3.jpgASCII���User comments

MK8 Custom X Carriage

Custom MK8 Carriage with custom airblower designed for a 12V 50mm radial fan.

x_carriage_full.jpg x_carriage_top.jpg

I bought an MK8 Extruder on the internet and had to find a carriage to fasten it to Prusa i3 architecture.

I found a community made piece that was OK but lacked some refinements.

Using it as a base model I entirely remodeled my own version with an attachable exhaust for a 12V radial fan to cool the print zone.

Spool holder

I tested a ton of different spool holders. Seriously. I printed dozens and tried various techniques.

This is the best one I've found for Jenny so far.

spool_holder_full.jpg spool_holder_detail.jpg spool_holder_top.jpg

In 3D printing, every mechanical detail has it's impact on the final quality of the print. Filament feeding is mainly the extruder's part, but bringing the filament easily, fluidly and with as little resistance as possible to the extruder should not be neglected.

The great advantage of having the spool sit atop the printer is that the filament is fed directly to the extruder with the least curve - and resistance - as possible.

The great disadvantage is at the cost of safety : in case of a fire accidently starting on the printer, the spool is sitting right up there, just waiting to catch the flames and be set ablaze.

  • Files :
  • Design :

Screen case

The Full Graphic DOGM128 Screen is a great upgrade from the 2 lines 20×4 characters LCD screen that used to equip most RepRaps in the beginning.

It features a 128×64 point screen and comes equiped with a SD Card slot, a control knob, reset switch and buzzer for sound feedback.

screen_case_full.jpg screen_case_support.jpg screen_case_sd.jpg

Of course it just sits there near the printer if it hasn't got a case and some supports to fasten it somewhere to the frame.

I customized mine by adding the “JENNY” cut-out, but since it was printed upside down it kind of blurped. Also, it was printed with a 0.4mm standard nozzle which gives a poor X-Y resolution on small details like this.

Still, it's readable. And customized.

  • Files :
  • Design :

Smoothie board

Purchased and currently being delivered.

Will be set-up in February/March 2020.


Received ! Setup begins on February the 13th

Currently working on

  • Upgrade to a smoothie board
  • Change all motors for a proper set
  • Measure % offset on size to get exact dimensions → print test part, measure, compensate x,y,z, print again


  • Update wiki with Marlin firmware (latest), a backup of Printer/Prusament profiles for prusa-slicer, etc..
  • Buy a compact power supply and integrate on Jenny's front underside/or side of frame
  • Ground the frame to the power supply
  • Run a printer safety check page according to RepRap Wiki
  • Take pictures of upgraded parts and update wiki
  • Setup emergency stop button
  • Redesign custom X-carriage blower for a fan with a larger diameter on output (e.g. the entire lower side here)
  • Calibrate in firmware extruder offset from origin
  • Set up a solid state relay to cut power supply in case motherboard detects a MOSFET broken/stuck in full power mode
  • Setup max endstops to limit the machine from going to impossible positions


  • Update wiki with a backup of Printer/Prusament profiles for prusa-slicer, etc..
  • Build a proper casing for the LCD interface
  • New spool holder, fixed above frame
  • Correct beginning G-CODE
  • Clean up extruder wiring
  • Re-solder proper length on X motor
  • Calibrate extruder
  • Cut all cables to proper length (careful for X motor and X endstop : requires to be at the highest position !)
  • Connect screen and interface
  • Reflash firmware changing screen language to english and with custom message for Jenny
  • Finish custom motor holder and cooler fan
  • Make a successful auto bed leveling
  • Print a bearing-based spool holder
  • Correct custom carriage and reprint all in Polymax
  • Buy a capacitive Z sensor
  • Clean up the wiki, logs, procedures
  • Correct the build dimensions in firmware, slicer and controller
  • Prime @ start is too fast, slow it down !

Between the smooth rods of the Y carriage there is exactly 162 mm (170mm between the centers of the LM8UU slots so by removing 4mm + 4mm (radius of each 8mm smooth rods) we get 162mm)

The mainframe had to be moved along the Y axis to correct an alignment issue where the nozzle was approx. 20mm inside the print zone when the Y axis was at 0 (print bed up against the Y endstop and Y endstop as far back as possible).

A new measure has to be given to indicate where it stands now in relation to the rest of the frame.

Caution when removing the radiator of the MK8 extruder the setup does not hit the X end-stop properly which needs to be replaced by fixing it using the opposing screw hole than the one indicated on the assembly instructions.

Bed Shape & measures

These values are given at launch of i3 Rework in April 2019, using my custom mh8 X-carriage for MK8 extruder with the radiator removed.

X axis X-min : 0 X-max : 200 Bed left : 20
Y axis Y-min : 0 Y-max : 185 Bed front : 0
Print area width : 180 depth : 165 height : 190

Ziflex Print Bed

These might have changed after Ziflex bed was installed in January 2020. Also, there seems to be a ~25°C difference between the heatbed temperature and the surface temperature of the Ziflex printbed. This is probably due to heat propagation on the aluminium plate holding the 3M sticker part. The Preheat value was adjusted accordingly in the firmware to 80°C. The heat value was also adjusted in Slic3r filament settings and beginning G-Code.


In configuration.h

If commented by default, uncomment the thermal runaway protection to activate it.

#define INVERT_X_DIR false
#define INVERT_Z_DIR true
  #ifdef Z_SAFE_HOMING
    #define Z_SAFE_HOMING_X_POINT (100)    // X point for Z homing when homing all axis (G28)
    #define Z_SAFE_HOMING_Y_POINT (100)    // Y point for Z homing when homing all axis (G28)
    // set the rectangle in which to probe
     // set the number of grid points per dimension
     // I wouldn't see a reason to go above 3 (=9 probing points on the bed)
  #else  // not AUTO_BED_LEVELING_GRID
    // with no grid, just probe 3 arbitrary points.  A simple cross-product
    // is used to esimate the plane of the print bed
      #define ABL_PROBE_PT_1_X 70
      #define ABL_PROBE_PT_1_Y 80
      #define ABL_PROBE_PT_2_X 120
      #define ABL_PROBE_PT_2_Y 170
      #define ABL_PROBE_PT_3_X 170
      #define ABL_PROBE_PT_3_Y 80
#define DEFAULT_AXIS_STEPS_PER_UNIT   {80,80,400,110}  // default steps per unit for Ultimaker
#define DEFAULT_MAX_FEEDRATE          {100, 100, 12, 120}    // (mm/sec)
#define DEFAULT_MAX_ACCELERATION      {8000,8000,200,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.

Using the Ziflex print bed I switched the preheat PLA values (80°C preheating gives approximately 55°C on the surface of the Ziflex)


In ultralcd.cpp

if the knob encoder is moving backwards in the LCD when turned clockwise change this value :

#define ENCODER_PULSES_PER_STEP -1 //instead of 1

Smoothieboard evolution

Next motherboard will probably be a smoothieboard v1 to test it while waiting for v2 to come out and see if it's worth the investment.

Smoothie 3D Printer Guide

Currently using Prusa slic3r.

Stable Marlin fw profiles upcoming

Start G-Code

I set this one up mid June 2019 and it works OK

I was following this thread on Thingiverse, copied someone's code and tweaked it to Jenny's needs.

M140 S55 ; set bed temp don't wait
M104 S200 ; set nozzle temp don't wait
G28 X ; home x
M190 S55 ; wait for bed temp
M109 S200 ; wait for nozzle temp
G28 ; home all axes
G29 ; auto-leveling
G92 E0 ; Reset extruder
G1 X0.0 Y0.0 Z10.0 F4000 ; Go to Prime position
M109 S200 ; wait for nozzle temp
G1 E20.0 F1000.0 ; prime
G1 X100.0 Y100.0 F4000 ; Go to print area
G92 E0; Reset extruder

Possible upgrades : Prime is not necessary when using a skirt. It wastes time and requires user assist to remove primed plastic lest it clutters the print area.

Logs as written during Calibration in 2019

E Steps/mm Fine tuning

This procedure was launched in February 2020 to further correct the quality of prints.

Using Triffid Hunter's Guide from RepRap wiki (cf. Ressources), I downstepped E Steps/mm gradually from 110 to 103.56 where I was confident I saw the tiny gaps in between the 95% rectilinear infill on the print.

As I was doing the gradual -0.5% increments, the number of spurt blobs on the outer shell was notably reduced.

This procedure will be done again after motor change and smoothieboard update. The small clutter blobs on the side of prints are still there.

Z Calibration procedure :

  • M851 Z0 : Cancel any previous Z offset.
  • Heat up the hot end and the bed to nominal values (to take in account any thermal deformation of the hot end and build plate)
  • Manually bring the hot end to a paper's thickness from the bed. This is the tricky part. It can be done using the following commands :
    • Home X, Y, Z (G28)
    • Raise Z 10mm
    • G92 Z20 to make the printer think it's higher than it is
    • G0 Z10 to bring it back down 10mm (it will be a few mm from the bed)
    • Lower 0.1mm at a time until you get the paper-grab (G0 Z9.9 - check - G0 Z9.8 - check - etc.)
  • G92 Z0 at paper-grab point
  • Raise Z 10mm (G0 Z10)
  • G30 to probe and get the Z offset value of the distance between your probe and the 0 point of the nozzle.
  • M851 Z-X.X (X.X is the offset value from previous step)
  • M500 to save current configuration
  • G29 can now be run to get an auto-leveling grid
  • M500 again to save current configuration

Useful G-Code

A complete list of marlin G-code can be found here

G-Code Action Example
G type G-Codes
G1 Linear move (F = accel.) G1 X10 F3000
G28 Home G28 X Y Z or just G28
G29 Bed-leveling see usage
G30 Single Z-probe -
G92 Set position G92 Z10
M type G-Codes
M17 Activate/Deactivate motors -
M24 Pause/Resume print -
M92 Set steps/unit M92 E600
M114 Get current position -
M119 Get endstop status Useful for testing a Z sensor
M203 Set max feedrate on axis M203 X200
M410 Quickstop Needs re-homing afterwards. Steppers out of pos.
M500 Save settings to EEPROM -
M503 Get current settings Feedrate, acceleration, etc.






  • projets/jenny.txt
  • Last modified: 2020/02/14 12:20
  • by mh