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.jpg ASCII���User comments
Nearly completed An early mess but operational

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 about a dozen 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 :

eMotronic (Smoothieboard) mainboard

Purchased in february 2020. The smoothieboard (and eMotronic) uses an ARM CPU clocked at 100MHz and the stepper drivers are soldered directly on the PCB and configurable via the simple config.txt file present on the SD card. Changing the settings does not require reflashing the board as it does on an Arduino Mega which itself is only clocked at 16MHz.

The board should bring an improvement to the quality of movement control which is essential in 3D printing and any CNC based solution.


I tested it out but the eMotronic board I ordered differs from the smoothieboard project in a few ways. First, the entire PCB was redesigned by eMotion Tech and most of the pin numbers were reaffected. Documentation of the eMotronic is at the time of writing rather poor and scarce.

I encountered some major problems with the Z motors and manual control rendering the board impossible to use. As I thought the board was defective I sent it back to shop for revision and testing. They found no fault on the stepper drivers so they sent it back. As it turns out the eMotronic board takes many liberties with the original smoothieboard design and is not an easy implementation on an i3-type architecture.

Jenny still runs on the good old Mega + Ramps with a 2.0+ marlin firmware.

She also has brand new stepper motors for controlling X, Y and Z.

New Fan Duct

I redesigned the fan duct of the radial fan cooling the print. The problem with the first design was the large flat bottom surface too close to the print that would hit on any print part warping during print.


It requires supports to print but does it's job perfectly.

Currently working on

  • Try some new gcode on print stop line 1050 of configuration_adv.h (try multiple successive commands)


  • Lookout for resonance on the cooler radial fan
  • Upgrade to a smoothie board
  • 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
  • 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

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.

Probe removal & Z mechanical endstop

In April 2020 I removed the Z Probe which was not consistent on first layers. I replaced it with a mechanical Endstop fastened above the Z left motor.

-0.05mm was added to slicer Z offset to squish a little the first layer.

Upgrade to Marlin 2.0.5 - April 2020

Jenny's Z probe was not reliable and I was having difficulty getting consistent first layers without tweaking the settings at every print.

I reverted Jenny to a more reliable mechanical endstop to control Z min and at the same time updated Marlin to latest version and reconfigured it from scratch.


// Z Clearance between probe points - This removes lifting Z when homing X and Y
#define Z_AFTER_HOMING  10 
#define STRING_CONFIG_H_AUTHOR "(mh, Jenny-marlin-2.0.5)"
#define BAUDRATE 115200
#define TEMP_SENSOR_0 1
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80, 80, 400, 104 }
#define DEFAULT_MAX_FEEDRATE          { 100, 100, 12, 120 }
#define DEFAULT_MAX_ACCELERATION      { 3000, 3000, 100, 10000 } 
#define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
//#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN //Commented out : Not using a Z-probe for now
#define INVERT_Z_DIR true
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define Z_MAX_POS 190
// Preheat Constants
#define PREHEAT_1_LABEL       "PLA"
#define PREHEAT_1_TEMP_BED     80
#define PREHEAT_1_FAN_SPEED     0 // Value from 0 to 255

Thermal Protection - configuration_adv.h

During one of the first prints after upgrade I had a false positive of a bed temperature hysteresis.

I modified the thermal protection values to the following.

Thermal protection for the heated chamber should not have any incidence since Jenny is not equipped with a heated chamber nor a sensor for that function but it was kept activated nonetheless just in case it's of any use that I don't know of.

// Tolerance increased (2 -> 8) and Time increased (20 -> 30) for Thermal hysteresis on bed
  #define THERMAL_PROTECTION_BED_PERIOD        30 // Seconds
  #define THERMAL_PROTECTION_BED_HYSTERESIS     8 // Degrees Celsius
// Time decreased (60 -> 40) for watchdog on bed heating -- Jenny's bed heats up quickly enough
  #define WATCH_BED_TEMP_PERIOD                40 // Seconds
  #define WATCH_BED_TEMP_INCREASE               2 // Degrees Celsius
// Tolerance increased (2 -> 5) and time increased (20 -> 30) just in case to avoid false positives

I closely monitored a 7 hour print and found the following :

Heat Bed : Jenny's bed target temperature is 80°C and it oscillates +/- 3 degrees during print. The oscillations are not long but the thermistor (taped under the heatbed with Kapton) may be subject to cooling air drafts in the room and it could be enought to spike a false thermal hysteresis. Values were tweaked to allow a 10% tolerance for 30 seconds. The protection should still be effective if the thermistor comes loose during print.

With the bed Heated at 80°C it took 21.2s for the thermistor to read 72°C (-10%) when bed heating was interrupted.

Hot End : Jenny's hot end target temperature is 195°C and does not move during print. Thermal protection settings were left untouched.

Possible improvement : Add a custom bitmap with Jenny's name instead of Marlin logo

Old Marlin

Click to unfold

Currently using Prusa slic3r.

Backup PrusaSlic3r config - April 2020 → Save under .ini file

Start G-Code

Current version (April 2020)

This was setup in april 2020 on a configuration without a Z-Probe and with a mechanical endstop to get Z home.

M140 S80 ; set bed temp don't wait
M104 S200 ; set nozzle temp don't wait
G28 X Y; home X & Y
M190 S80 ; wait for bed temp
G28 ; home all axes
G0 X100 Y100 Z20 F4000 ; Center on bed and lift Z a bit so we can clean any drooling filament
M82  ; use absolute distances for extrusion
G92 E0 ; reset extrusion
G1 E10 F1000 ; prime
G4 S4 ; Wait 4 seconds
M109 S200 ; wait for nozzle temp

Older version (June 2019)

Click to unfold

End G-Code

This one has been used for some time now

M104 S0 ; turn off hot end
M140 S0 ; turn off bed
G91 ; relative coords
G0 E-2 ; retract
G0 Z5 ; lift Z off the print
G90 ; absolute coords
G28 X0  ; home X axis
G0 Y185 ; Bring Bed fully to front
M84     ; disable motors

First Layer Tips

  • Level Print surface relative to the nozzle
  • Clean Bed with 90% alcohol before every print
  • Use good quality material
  • For TPE & PETG don't print directly on the bed (use some protection & release agent)


  • Print with slightly higher temperature (~+5°C)
  • Push First Layer Line Width (+150-200%)
  • Push First Layer Height (0.3 for 0.4mm nozzle)
  • Lower First Layer Print Speed (20-30 mm/s)

To get pieces that should snap in together, like notches, leave a 0.35mm space margin between both pieces in model.

In every case, it's worth it to just print a test part of the parts that need to snap together to test different values.

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 :

Mechanical Endstop Calibration

The trick is to get the printer to go below it's Z=0 so that you can manually lower it to paper-grab height from the print bed and set the Z endstop in position with the carriage at that Z position.

M211 is super useful for this. It controls the software endstop status and is ON by default. You can turn it off by sending the G-code M211 S0. This will allow the printer to go below Z=0 (it's normal Z_MIN_HEIGHT position).

Note that repetierHost does not allow this move with manual jog but the latest marlin firmware has improved movement control and allows for .1mm moves on all axes.

Start by sending a Z homing order and manually clicking the endstop so the printer thinks it has reached it. Note the endstop has to be clicked twice, the second time is when it comes back down in slow homing speed. Try and do this pretty near the print bed but keep a safe distance so you don't ram the carriage into the bed.

Use the LCD Screen & controller to bring the printer down to paper-grab height.

Set the endstop into position and verify it by jogging back and forth between that position and +.4mm.

The endstop does not unclick immediatly but you're looking to have it consistently click at paper height grab and not more than +.1mm higher.

Probe Calibration

Probe Calibration (unused as of April 2020)

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
M211 Toggle Software Endstop Useful for setting a mechanical Z endstop in position
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/06/20 12:05
  • by mh