ProTubeVR-MK3S-MMUv2-MOD-FOR-HEMERA
We calculate the final price from your selected file. You review and accept it before payment.
Saved on this device.
This mod combined with the dedicated Firmware mods allow you to fit an Hemera extruder from E3D on an MK3s using MMUv2…
- Rating
- 5 / 5
- Likes
- 23
- Downloads
- 114
- Makes
- 1
- Views
- 2,841
- Reviews
- 1
Updated at source:
Model information
- Source
- Printables
- Category
- Prusa Parts & Upgrades
- License
- Creative Commons — Attribution — Noncommercial
This mod combined with the dedicated Firmware mods allow you to fit an Hemera extruder from E3D on an MK3s using MMUv2 upgrade.
The mount is rotated 30 degrees to allow the full x-axis carriage travel without the need to move the lead screw, motor, etc.
The pinda is in the same location as the original extruder.
-This is a rework of the Hemera Mount kit from DarrinBrunner (https://www.prusaprinters.org/social/40843-darrinbrunner/prints)
-It's super usefull to use the selector Mod from 78zero to get a more reliable FINDA reading (https://www.prusaprinters.org/social/2481-78zeros/prints)
This is new a mount to attach an E3D Hemera extruder to a Prusa MK3-MMU2 printer. The original interior geometry from the Prusa filament sensor has been incorporated into this design, sourced from Prusa's models.
The pinda is in the same location as on the original.
The nozzle in this new design sits 10mm further forward along the y-axis (toward the front of the machine), than the original. The x-axis location of the nozzle is the same as the original extruder. The y-axis offset of the nozzle from the pinda needs to be changed from 5 to 15.
You can follow this guide to update the firmware:
https://e3d-online.dozuki.com/Guide/Prusa+i3+MK3+Firmware+Modifications/141
Mounting require M3x8 for the Hemera Motor
Others are common M3x10 and M3x14
Print instructions
Source code and test build are there :
https://github.com/ProTubeVR/MK3s-Hemera-Mod
Mandatory Firmware mods :
Configuration.h
Line18 :
// Firmware version
define FW_VERSION "PTVRv0.1_3.9.3"
// BASED ON PRUSA Stock FW 3.9.3
// https://github.com/vertigo235/Build-Prusa-LA-15
define FW_COMMIT_NR 2500
// FW_VERSION_UNKNOWN means this is an unofficial build.
// The firmware should only be checked into github with this symbol.
define FW_DEV_VERSION FW_VERSION_RC
define FW_REPOSITORY "ProTubeVR"
define FW_VERSION_FULL FW_VERSION "-" STR(FW_COMMIT_NR)
Config.h
define LANG_MODE 0 // primary language only (Hemera mod, from E3D Tuto)
//#define LANG_MODE 1 // sec. language support (Hemera mod, from E3D Tuto)
configuration_prusa.h
Line22 :
define NOZZLE_TYPE "E3D_Hemera" // Hemera
// Developer flag
define DEVELOPER
// Printer name
define CUSTOM_MENDEL_NAME "ProTubeVR Hemera MK3s" //Hemera
**Line42:
// Extruder
//#define BONDTECH_MK3S
//#define BONDTECH_MOSQUITO
//#define BONDTECH_MOSQUITO_MAGNUM
define PROTUBEVR_HEMERA_MK3S
line49 :
// Steps per unit {X,Y,Z,E}
//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,140}
//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,280}
//#define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,560}
define DEFAULT_AXIS_STEPS_PER_UNIT {100,100,3200/8,786.5} // (Hemera mod)
Line343:
//#define EXTRUDER_ALTFAN_SPEED_SILENT 128 //(Hemera mod)
define EXTRUDER_ALTFAN_SPEED_SILENT 255 //(Hemera mod)
Line350 :
// Load filament commands
define LOAD_FILAMENT_0 "M83"
//#define LOAD_FILAMENT_1 "G1 E70 F400" //(moded for Hemera)
define LOAD_FILAMENT_1 "G1 E33 F400" //(moded for Hemera)
define LOAD_FILAMENT_2 "G1 E40 F100"
// Unload filament commands
define UNLOAD_FILAMENT_0 "M83"
//#define UNLOAD_FILAMENT_1 "G1 E-80 F7000" //(moded for Hemera)#define UNLOAD_FILAMENT_1 "G1 E-50 F500" //(moded for Hemera)
Line365 :
// Filament change configuration
define FILAMENTCHANGEENABLE
ifdef FILAMENTCHANGEENABLE
define FILAMENTCHANGE_XPOS 211
define FILAMENTCHANGE_YPOS 0
define FILAMENTCHANGE_ZADD 2
define FILAMENTCHANGE_FIRSTRETRACT -2
//#define FILAMENTCHANGE_FINALRETRACT -80 //(moded for Hemera)
define FILAMENTCHANGE_FINALRETRACT -50 //(moded for Hemera)
//#define FILAMENTCHANGE_FIRSTFEED 70 //E distance in mm for fast filament loading sequence used used in filament change (M600)(moded for Hemera)
define FILAMENTCHANGE_FIRSTFEED 33 //E distance in mm for fast filament loading sequence used used in filament change (M600)(moded for Hemera)
Line442:
//#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Z probe to nozzle Y offset: -front +behind (Hemera Mod)
define Y_PROBE_OFFSET_FROM_EXTRUDER 15 // Z probe to nozzle Y offset: -front +behind (Hemera Mod)
Line508:
define PLA_PREHEAT_HOTEND_TEMP 220 //ProTubeVR need
define PLA_PREHEAT_HPB_TEMP 75 //ProTubeVR need
define PET_PREHEAT_HOTEND_TEMP 250 //ProTubeVR need
define PET_PREHEAT_HPB_TEMP 90 //ProTubeVR need
Marlin_main.cpp
Line200 :
//int bowden_length[4] = {385, 385, 385, 385}; //Hemera Mod
int bowden_length[4] = {415, 415, 415, 415}; //Hemera Mod
Line11609 :
current_position[E_AXIS] += bowden_length[mmu_extruder];
plan_buffer_line_curposXYZE(3000, active_extruder);
//current_position[E_AXIS] += FIL_LOAD_LENGTH - 60; //(mod for Hemera)
current_position[E_AXIS] += FIL_LOAD_LENGTH - 23; //(mod for Hemera)
plan_buffer_line_curposXYZE(1400, active_extruder);
//current_position[E_AXIS] += 40; //(mod for Hemera)
current_position[E_AXIS] += 20; //(mod for Hemera)
plan_buffer_line_curposXYZE(400, active_extruder);
//current_position[E_AXIS] += 10; //(mod for Hemera)
current_position[E_AXIS] += 5; //(mod for Hemera)
plan_buffer_line_curposXYZE(50, active_extruder);
Line 11692:
//#define FIL_LOAD_LENGTH 60 //(mod for Hemera)
define FIL_LOAD_LENGTH 23 //(mod for Hemera)
line3243 :
lcd_setstatuspgm(_T(MSG_LOADING_FILAMENT));
//current_position[E_AXIS] += 40; //hemera Mod
current_position[E_AXIS] += 20; //hemera Mod
plan_buffer_line_curposXYZE(400 / 60); //fast sequence
st_synchronize();
raise_z_above(MIN_Z_FOR_LOAD, false);
//current_position[E_AXIS] += 30; //hemera Mod
current_position[E_AXIS] += 13; //hemera Mod
plan_buffer_line_curposXYZE(400 / 60); //fast sequenceload_filament_final_feed(); //slow sequence
st_synchronize();
ultralcd.cpp
Line6427 :
// extr_unload2();//current_position[E_AXIS] -= 45; //Hemera MOD
current_position[E_AXIS] -= 20; //Hemera MOD
plan_buffer_line_curposXYZE(5200 / 60);
st_synchronize();
//current_position[E_AXIS] -= 15; //Hemera MOD
current_position[E_AXIS] -= 5; //Hemera MOD
plan_buffer_line_curposXYZE(1000 / 60);
st_synchronize();
//current_position[E_AXIS] -= 20; //Hemera MOD
current_position[E_AXIS] -= 10; //Hemera MOD
plan_buffer_line_curposXYZE(1000 / 60);
st_synchronize();
mmu.cpp
Line795 :
void mmu_load_to_nozzle()
{
st_synchronize();
const bool saved_e_relative_mode = axis_relative_modes & E_AXIS_MASK;
if (!saved_e_relative_mode) axis_relative_modes |= E_AXIS_MASK;
if (ir_sensor_detected)
{
//current_position[E_AXIS] += 3.0f; // Hemera Mod
current_position[E_AXIS] += 2.0f; // Hemera Mod
}
else
{
current_position[E_AXIS] += 7.2f;
}
//float feedrate = 562; //Hemera Mod
float feedrate = 400; //Hemera Mod
plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize();
//current_position[E_AXIS] += 14.4f; //Hemera Mod
current_position[E_AXIS] += 6.25f; //Hemera Mod
feedrate = 871;
plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize();
//current_position[E_AXIS] += 36.0f; //Hemera Mod
current_position[E_AXIS] += 12.5f; //Hemera Mod
feedrate = 1393;
plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize();
//current_position[E_AXIS] += 14.4f; //Hemera Mod
current_position[E_AXIS] += 6.25f; //Hemera Mod
feedrate = 871;
plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize();
if (!saved_e_relative_mode) axis_relative_modes &= ~E_AXIS_MASK;
}
line1057 :
struct E_step
{
float extrude; //!< extrude distance in mm
float feed_rate; //!< feed rate in mm/s
};
static const E_step ramming_sequence[] PROGMEM =
//{
// {1.0, 1000.0/60}, //Hemera Mod
// {1.0, 1500.0/60}, //Hemera Mod
// {2.0, 2000.0/60}, //Hemera Mod
// {1.5, 3000.0/60}, //Hemera Mod
// {2.5, 4000.0/60}, //Hemera Mod
// {-15.0, 5000.0/60}, //Hemera Mod
// {-14.0, 1200.0/60}, //Hemera Mod
// {-6.0, 600.0/60}, //Hemera Mod
// {10.0, 700.0/60}, //Hemera Mod
// {-10.0, 400.0/60}, //Hemera Mod
// {-50.0, 2000.0/60}, //Hemera Mod
{
{1.0, 1000.0/60}, //Hemera Mod
{1.0, 1500.0/60}, //Hemera Mod
{2.0, 2000.0/60}, //Hemera Mod
{1.5, 3000.0/60}, //Hemera Mod
{2.5, 4000.0/60}, //Hemera Mod
{-7.5, 5000.0/60}, //Hemera Mod
{-7.0, 1200.0/60}, //Hemera Mod
{-6.0, 600.0/60}, //Hemera Mod
{5, 700.0/60}, //Hemera Mod
{-5, 400.0/60}, //Hemera Mod
{-50.0, 2000.0/60}, //Hemera Mod
};
Line1153 :
max_feedrate[E_AXIS] = 80;
//current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2; //(mod for Hemera)
current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 23 + FIL_LOAD_LENGTH) / 2; //(mod for Hemera)
plan_buffer_line_curposXYZE(500, active_extruder);
//current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 60 + FIL_LOAD_LENGTH) / 2; //(mod for Hemera)
current_position[E_AXIS] -= (bowden_length[mmu_extruder] + 23 + FIL_LOAD_LENGTH) / 2; //(mod for Hemera)
plan_buffer_line_curposXYZE(500, active_extruder);
st_synchronize();
Line1467 :
static bool can_load()
{
//current_position[E_AXIS] += 60; //(Mod for Hemera)
current_position[E_AXIS] += 25; //(Mod for Hemera)
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
//current_position[E_AXIS] -= 52; //(Mod for Hemera)
current_position[E_AXIS] -= 5; //(Mod for Hemera)
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize();
Known issue : Unloading LCD and end print request does nothing in the MMU use case