Wanhao Duplicator i3 Marlin

by Nitrogen777 Jul 24, 2017
Download All Files

Thing Apps Enabled

Please Login to Comment

Hey, here is my 2.0.x config files. Some v 2.1 printers come with default 4.7k resistor (mine for example) so thermistor table 1 should be used for bed and extruder or ambient temperatures will be f*d



Wanhao i3 Duplicator v2.1 - Marlin 2.0.x Firmware

Can confirm this works with stock a Melzi on Marlin 1.1.9 - I was able to use the thermistor tables to much success as a part of my complete custom firmware upgrade for my i3 - https://github.com/botinaboxer/wanhao-i3-custom-firmware

Hey, i have a problem with your custom firmware, when printer homing all axes (G28) or i want start a print extruder heater just stop heating and temperature goes down to room temperature. Do you know where could be the problem? Hardware is ok i
checked wires and mosfet. Preheat works too (until command G28)
and I made pid autotune. Also i have //#define PROBING_HEATERS_OFF .
Thanks :)

Have you tried your flashing your printer back to stock firmware to confirm that everything works as it should.

So you're saying that it does heat up, but it stops heating after you home the extruder? When you turn the printer on, before heating anything up, are the temperatures accurate to your room temp?

Also, did you edit any of the Marlin files and if so what did you change?

I know another guy had an issue with the temperatures not being accurate, and he ended up making his own configuration files for Marlin 2.x. He was nice enough to open-source them: https://github.com/theremotheman/Wanhao-i3-Duplicator-Marlin-2.0 (though you'll have to put the files into a copy of Marlin 2.x, or you could just flash the .hex file) - it's possible that his firmware might work, and at this point it may be worth a try using the newer version of Marlin - just a thought.

Yes exactly, when i G28 extruder heater stop heating. Yes temperature are accurate. I try 5 versions of marlin and i did not change anything. :(

Well, that is strange... The only real mention of this sort of thing online (short of people experiencing problems for having uncommented #define PROBING_HEATERS_OFF is https://www.th3dstudio.com/knowledgebase/heater-recovery-after-g29/ - though it's on a modified version of Marlin, I think the commands are the same. The article suggests "G4 SXX – XX being the seconds you want it to wait after G29." Perhaps if you added a wait function in your Gcode after the heaters turn off?

Also, as @Nitrogen777 suggested, have you tried flashing back the stock firmware? That would be your best bet at this point. (Honestly I could not find a stock firmware .hex for the i3, though)

I have a Monoprice maker Select v2 running Marlin 1.1.8. My room temperature readings are double, showing 46 instead of 23. Does the v2 have the 10kOhm resisters too. Will this thermistor map work https://gist.githubusercontent.com/anonymous/ede61812d6023b2b470ba012954e19b7/raw/83836a05207c798a2461d9d763d4f4f88b09b60e/thermistortable_99.h

Thanks for your effort. I "ported" it to Marlin version 1.1.8, but ultimately ended up just replacing the 10K pull-up resistors with through hole 4.7Kohm on the board, and running standard marlin 1.1.8 instead. If you completely remove the 10K resistor on the hotend, you will be able to use a PT100 amplifier board, pulling the needed 5v from the FTDI 6 pin socket :-)

To compile Marlin 1.1.8 onto the i3, use BOARD_MELZI and #define LCD_FOR_MELZI in the configuration.h
To compile and upload using PlatformIO, use Anet10 or simply add the following to your platformio.ini file:
[env:Wanhao i3]
platform = atmelavr
framework = arduino
board = sanguino_atmega1284p
build_flags = ${common.build_flags}
upload_speed = 115200
lib_deps = ${common.lib_deps}

"I also had to edit the config file for the Melzi board to get the lcd to work."

What exactly did you have to change to get it working? Thanks

I had to edit these lines in pins_SANGUINOLOLU_11

if ENABLED(U8GLIB_ST7920) // SPI GLCD 12864 ST7920 ( like [www.digole.com] ) For Melzi V2.0

  #if IS_MELZI // Melzi board
    #define LCD_PINS_RS     17 
    #define LCD_PINS_ENABLE 16 
    #define LCD_PINS_D4     11 

But if you use the M150 example in marlin the lcd should work.

Comments deleted.

This is great. Thank you for sharing this. I have the 10kOhm version. There are two small resistors labelled R4 and R5 near the front of the board and they say, in very small print, 1002 on them. I used some generic parameters for a 100k thermistor, with a beta of 3950 and a T0 of 25C, to make (using a calculator, not measured) another table. I have no idea if it's more accurate or not, but it's working for me:


Thanks again for the work. My wanhao was one of the first, on preorder from the original sale, and it's seeing some age, so this is the first step towards adding some newer features.

Thank you Jeffeb3 and Nitrogen777. This version works. Confirmed with my laser heatbed, was only able to test hotend up to 160 but it was accurate. The file posted is for 11 even though the file says 99 so just overwrite thermistortable_11.h with this file ONLY IF you verify you have this problem.

I flashed marlin months ago for manual bed leveling before I noticed this temp problem, I was wondering why the prints weren't coming out right and abs wasn't sticking to glass without hairspray. I created a hack even for auto bed leveling thinking it was me not leveling properly and then made an enclosure with the same result.

Turns out the temp was WAY too low. So far after this mod my first layer is nice and clean, sticking properly. Thank you so much again you guys are awesome.

I have the Monoprice Maker select v2 with stock board and thermistor with mosfet mod on stock heatbed.

I used the latest version of the IDE to compile it.
This guide will help you to compile it.


What version of the Arduino IDE did you use to compile your sketch? I've tried everything from 1.6.0 to 1.6.9 (as recommended by the instructables link) and even the latest, and I always get compile errors. Thanks the help!

What board setting did you use to compile this with the Arduino IDE?

What would need to change to use the latest Marlin release (1.1.6)?

It now looks like the Malyan M150 has the same display and will work you just have to change the steps per mm for the extruder.
You also have to have 4.7K pull-up resistors on your Melzi board for the thermistors.

.Install Arduino 1.6.9 (I use this only because the firmware was confirmed working with this, you can probably use the latest but not certain), and install the Sanugino package. This can be done by copying the contents of the zip to /ARDUINO_INSTALL_DIRECTORY/hardware.
The processor for the Melzi is not in the standard board list so you have to add it.

You will need to have a bootloader to update the firmware.

This guide will help you to compile the firmware.

Also the new menu system in marlin often selects the wrong item in the menu if you move too fast.

I don't think the firmware is the problem. I found that I had to put paper in the back of the knob to space it properly as it would bottom out on the face plate.

That might be my issue. I will have to look into trying that fix. Thanks!

I am back again. Firmware works great. One minor thing is the button knob tends to give me issues. The encoder I know works, but the push button only works some of the time. It was working before the new firmware was uploaded, which makes me think it's the firmware not recognizing the push button. Any advice on fixing this?

I am getting about 10C for room temperature as well. I am using the Monoprice Maker Select with the original Melzi board that came with it (unlike mrmi2u who replaced the old board). Do I need to set the thermistor table to 1?

Yes you should use thermistor table 1. I have uploaded Marlin 1.14 that is setup for my Duplicator I3 with 4.7k pull-up resistors. The Melzi boards in the Duplicator have 10K pull-up resistors on them.(I think they did this to stop people changing the firmware) I am not sure what the pull-up resistors are in the Monoprice Maker Select but it sounds like 4.7K. Just check that your steps per mm are correct as well. It seems like some models have different gears on the extruder.(Eg. Malyan M150)

You were correct. Setting it to table 1 worked well. Extruder and steps per mm were virtually the same. The only difference (going by the EEPROM I saved) was a slight increase for the z-axis (405.46). I still need to run a print to verify everything is working. Thank you again for the quick response.

No problem Glad it worked for you!

Did you use the stock repetier firmware for the Duplicator i3 or create your own for the board?

I tried the repetitier firmware with several different tweaks but I couldn’t get the temperature readings to work right. When I saw your firmware, I thought I’d give it a try (since I’ve become so good at flashing firmware over the past week or so) hoping that the temperature readings would work correctly.

I got pretty close with the repetier firmware. I got to a place where my bed and extruded temps would read somewhat close to being correct, but they would fluctuate wildly throughout the print. This resulted in very low quality printing

Did your Duplicator work properly after changing the thermistor table?

Yes it did! Thanks again!!

The standard Repetier Firmware will be expecting 10k pull-up resistors so the Temp readings will be wrong. If you are using this firmware and you change the Thermistor table to thermistor table 1 and recompile and upload it, should work perfectly. With the standard marlin thermistor table 1 expecting a 4.7k pull-up resistor the temperatures are doubled if 10k resistors are used. I am running this exact firmware with the exception of the thermistor table 99. I am using Thermistor table 1 with 4.7k resistors just like your board.

Comments deleted.

Awesome! I’ll make that change. I really appreciate you responding!

Hey, so I flashed this firmware onto my i3 and now room temperature is showing as 10 degrees celsius... How can I fix it?

I blew up my original Melzi (Heated bed connector killed the board), so I bought a Melzi V2 (confirmed that it has the 4.7K pull-up resistors) and installed it. I have not changed my thermistors. I'm sure that they work because I have also tried the Repetier Firmware and was able to get the normal 22-24 degrees celsius at room temperature.

From what I can see the thermistors that come with the Wanhao are 100k 3950. These are close enough to the EPCOS 100k but the only problem is the 10K pull-up resistors on the melzi board. That is why I created a custom thermistor (table 99) in marlin. I had not changed the PID settings in Marlin. I have uploaded a new version to try and the hex file.

what is the thermistor type that come on the melzi board, i flashed the firmware from stock to marlin for bed leveing, and it show "Heating failed, printer halted, please reset" error

If you change the resistors that the melzi board uses for the thermistors from 10k to 4.7k you can use thermistor table 1 in marlin. I desolderd the standard surface mount resistors and replaced them with 4.7k resistors.
The standard melzi board uses 4.7k but the wanhao board uses 10k resistors.