Introduction: Replace Monoprice Select Mini Controller With Arduino Mega & Ramps 1.4

The Monoprice Select Mini is an inexpensive solid little printer. I have used mine for many hours and made lots of custom improvements to it. At some point the the controller board failed. I contacted Maylan the original manufacturer of the board for a replacement and was quoted at $66 for a replacement ($45 board, $16 shipping, $5 currency conversion). Rather than buy another board that might fail for a third of the cost of the printer I started researching my options.

Step 1: Parts

Many of the kit 3D printers use Marlin on the Arduino Mega and a Ramps 1.4 board to control them. I decided to buy the parts and see if I could set Marlin up to talk to the Monoprice's existing hardware. Marlin is an open source firmware that is easily compiled and deployed to an Arduino compatible board. The configuration in Marlin is well documented and easy to update. You can find many people selling the parts you need in a single kit in the $30 - $40 dollar range on Amazon ( or Ebay and if you part out the individual pieces you need on places like you can often get it for even less but you will wait since most of these will be shipped to you via China Post.

These are the basic parts you need to do this project:

Step 2: Wiring the Endstops and Thermistors

The spacing of the headers on the ramps board matches the spacing of the holes in the connectors for the Monoprice controller. I was able to use the existing connectors on the stepper motors but things were too cramped for the connectors on the endstops and the thermistors. I clipped the connectors off and soldered in some breadboard connectors I had from other projects ( I retained the yellow cable labels and used the same colors for the wires. I used some shrink wrap tubing ( to keep everything looking nice. Using the longer wires also had the advantage of extending the board out so I can figure out a way to mount it next to the printer.

The ramps board can support having and endstop at the origin and the end of the run. They are arranged on the ramps boards as X-Origin, X-End, Y-Origin, Y-Origin, Y-End, Z-Origin, Z-End. The Monoprice printer only has origin endstops so you will want to put the X,Y,Z endstops at the 1st, 3rd, and 5th positions on the ramps board. The ramps boards supports powered 3 pin normally closed endstops but the Monoprice uses normally open 2 wire endstops. So you will be wiring just the top 2 pins for your endstops.

The thermistors on my board are wired T0 T1 T2. The A thermistor is the hotend thermistor and goes to T0, the B thermistor is the bed thermistor and goes to T1.

Step 3: Wiring the Stepper Drivers

The steps are configurable on the ramps board with jumpers. If you don't set them to match the Monoprice stepper motors you will get scaled prints. You can see how much smaller the raft for the cat print was before I fixed the jumper settings for my DRV8825 stepper drivers.

By trial and error I've determined that the Monoprice board had the steps set to 1/16th steps. Depending on which stepper drivers you picked or got with your kit you will need to adjust the jumpers. The jumpers are located under the where the stepper drivers go. The jumpers are numbered 123 from left to right when the blue and green connectors are on the left. For the A4988 drivers you need all 3 jumpers in for 1/16th steps, and for the DRV8825 stepper drivers I used just the 3rd jumper is set for 1/16th steps.

There is a variable resistor on the drivers (potentiometer). We will use this later to limit the current to the motors. The A4988 potentiometer faces away from the potentiometer and with the DRV8825 they face towards the power supply.

Step 4: Wiring the High Current Bus

I clipped the connectors off of the fan, heated bed, and the hotend cartridge and they get wired on the blue bus connectors. The top is the hot end, the middle is the fan, and the bottom is the bed. I needed to extend the wires of the heated bed as well. Be sure to splice in some wire with the same gauge or higher if you do that. I also left the yellow labels to help know which is which.

If you want to use the same power supply you can also cut the connector and splice in some longer wires to the ramps board. I didn't trust the cheap power supply that came with the printer so I've been using the 203W Xbox 360 power supply I found at Goodwill for $3.99. (You can also find them at GameStop for about $7 - $15) The green connector is the input power. The bottom and top are paired ground and power. Starting with the bottom as ground it's ground, power, ground, power. With my power supply I have multiple power and ground and have both wired. The Monoprice power supply only has two wires. You maybe be able to only wire the bottom two but if you want to put power on both rails you could wire the bottom two and jumper over the other rail.

Step 5: Wiring the Stepper Motors

I just pushed the existing pins into the X,Y,X & EO headers with the green wire facing the power supply side. There was plenty of room for these connectors so I didn't have to clip them.

Step 6: Marlin

To install Marlin on the Arduino board I used a Windows 10 compter. I'm guessing that doing the same on a different OS is going to be similar. The Marlin software is hosted on GitHub and is easily deployed to your Arduino Mega via a free development tool Arduino IDE. Get the Arduino IDE from here and install it.

You will need to select the Arduino/Genuino Mega or Mega 2560 board from the Tools -> board drop down. You should check mark icon (verify) to verify it compiles. My Ardiono IDE was all setup to do this but you may need to install some things to get to this point. There is plenty of Instructables to help you do that.

Next you will need to get the Marlin code to edit in Arduino IDE. I forked the latest release from Marlin so that I could submit my changes and get them later if I need to. You can do one of 2 things, you can download the source from Marlin and make the same edits that I did or download my copy of the source and use my edits.

My version:

Marlin source repo:

If you download the latest from Marlin these are my edits. Be aware the line numbers will likely change.

In Configuration.h: (Line numbers are approximate)

  • Ln. 133 Make sure MOTHERBOARD is BOARD_RAMPS_14_EFB
  • Ln. 252 Set TEMP_SENSOR_0 to your extruder sensor type. The stock bead thermister should be 11 (I have an E3D v6 with a cartridge thermistor so mine is set to 5)
  • Ln. 256 Set TEMP_SENSOR_BED to 11 for the stock bed thermister
  • Ln. 289 Set HEATER_0_MAXTEMP to somthings smaller than 275 to not destroy your hotend. I used 250
  • Ln. 293 Set BED_MAXTEMP to something smaller to keep the bed from getting too hot. I used 100
  • Ln. 489 #define DEFAULT_AXIS_STEPS_PER_UNIT { 93, 93, 1097.5, 97 } from
  • Ln. 690 INVERT_X_DIR false, INVERT_Y_DIR false, INVERT_Z_DIR true Ln. 723 Set X_MAX_POS 120, Y_MAX_POS 120, Z_MAX_POS 120 to match the size of the Monoprice bed size so we don't travel past the limits
  • Ln. 915 uncomment the #define EPROM if you want to be able to update and write to the EPROM.
  • Ln. 1109 uncomment #define SDSUPPORT to enable the SD Card
  • Ln. 1091 uncomment #define DOGLCD if you bought a 128x64 LCD panel
  • Ln. 1267 uncomment #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER if you bought the same LCD I did

Now to enable the full graphic display you need to add another library to your Marlin sketch to draw to the screen. Download the .zip file on this page:

In Arduino IDE go to Sketch -> Include Library -> Add Zip Library... and pick the zip file you downloaded.

The high power D9 pin on the Ramps board seems to be intended for a parts fan blowing on the printed part and not an extruder fan in their default setup. If you have a setup with an extruder fan like the stock hotend or the E3d v6 like I have you'll want to change this a little.

In pins_RAMPS.h:

  • Ln. 168, change FAN_PIN to -1 to disable it.

In Configuration_adv.h:

  • Ln. 220 #define E0_AUTO_FAN_PIN 9 instead of -1

This will turn on the fan on D9 when the temperature of the hotend gets to 50c and will turn off when it falls below 50c.I would keep compiling with the verify button as you go to make sure you didn't break anything and can easily back up and check.Now press the upload button to deploy the firmware to the Mega board.

Step 7: PID Auto Tuning

Once I got to the point where the firmware was flashed to the board, I wanted to run the M303 command to autotune the PID instead of taking the default Ultimaker settings. I used Pronterface ( to connect to the printer and run M303 to auto tune the hotend. After it runs it will output a Kp, Ki, and Kd for you to put in the Configuration.h like this:

  • #define DEFAULT_Kp 26.15
  • #define DEFAULT_Ki 2.74
  • #define DEFAULT_Kd 62.35

Then I ran the "M303 E-1 C8 S60" to auto tune the heat bed. By default the bed was in a bang bang mode that turned it on when it was below the set temp and off when it went above the set temp. In Pronterface you could see a pretty ugly saw wave it made. Once I ran the autotune and used those values it was a nice slope to the value and stayed right on the temp. My stock bed values looked like this:

  • #define DEFAULT_bedKp 231.09
  • #define DEFAULT_bedKi 45.21
  • #define DEFAULT_bedKd 295.34

Step 8: Final Tweaks

After publishing this Instructable and using the setup for a while I have a few more tweaks to post.

First is that to enable the SD Card you have to uncomment the #define SDSUPPORT around ln 1120 in Configuration.h to be able to print from the SDCard. There is also a #define SPEAKER too to use the speaker next to the knob.

I also discovered the default direction and steps of the rotary encoder were kind of wonky. You can still get around but it doesn't exactly behave as you'd expect with respect to direction. For the LCD that I bought I needed to change the direction of the encoder and the menu to get things to move in a logical direction. I also added individual axis homing.

  • uncomment #define REVERSE_ENCODER_DIRECTION

  • uncomment #define REVERSE_MENU_DIRECTION

  • uncomment #define INDIVIDUAL_AXIS_HOMING_MENU

Printing higher temperature filament like ABS would trigger the max temperature fail safe so I had to adjust that to a higher temp. I chose 260 in Configuration.h with this line.

  • #define HEATER_0_MAXTEMP 260

I upgraded my extruder assembly with this all metal one ( and the gear was a different size so I had to adjust my extruder steps. I extruded and measured filament several times and did the math to zero in on 99 steps for my extruder and gear and updated this code in Configuration.h to reflect that:

  • #define DEFAULT_AXIS_STEPS_PER_UNIT { 93, 93, 1097.5, 99 }

The heater bed in the Mini isn't the fastest at getting up to speed and I found that Marlin would detect an error happened fairly often so I increased the time it waited to detect a problem a little with this line in Configuration_adv.h

  • #define THERMAL_PROTECTION_BED_PERIOD 45 // Seconds

Lastly I printed the parts for this LCD Cover and moved the LCD into the machine. The pints on the bottom of the new controller didn't fit the pins of the Monoprice controller so I found some bushings to attach to the bottom of the Arduino Mega to keep the pins off the metal plate and found a enough space to put everything in and re-attach the bottom plate.

I have a Raspberry Pi mounted on the back of the printer that I use Octoprint with to control my printer. I drilled out a hole in the back by the power connector to run the USB cable out of the new controller up to the Pi. If you make the same modification I would disconnect the whole controller and move it away from the printer to make sure you don't drop metal shavings into your new controller.

After all this the printer is back in business. And to be honest I think it prints better prints than before and there are more protections from thermal runaway in the Marlin firmware than the one that shipped with the Mini.


mcevanlong (author)2017-07-23

Have you considered doing an auto level set up?

BrianHanifin (author)2017-06-27

Filament width needs to be changed to 1.75.

Replace with #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

BrianHanifin (author)2017-06-26

I downloaded the latest Marlin and the FAN_PIN variable is now defined by a series of if statements in pins_RAMPS.h. I followed every step in Step 6 except for that one. Please advise, I am prepping for the arrival of my hardware tonight.



As a result of this, I get an error "#error "You cannot set E0_AUTO_FAN_PIN equal to FAN_PIN.""

Full error:


Nevermind this. I left that setting alone and setup my single fan on pin9 and am happy with this setup for now.

LuisO2 (author)2017-05-13

I did the modification last night after my
Mini´s board fried during a thermistor swap. I followed the instructions
and everything worked out ok.

Some small issues though:

the printer, after homing axis, just moves up to 60 mm in all axis;

the lcd after a few minutes shifts the picture to the right by about 1 cm (weird).

double checked the hardware steps config and i only have jumper 3 in
all axis and extruder (putting the steps at 1/16th on the DRV8825) and the steps
configured in the firmware at (100, 100, 1097,5 , 93) as i did the gt2
belt swap for X and Y. I also used the prusa calculator to verify the
steps for X Y and Z. The Z also only moves 60mm up :( .

Any suggestions on how to fix the issue ?

jalex9 (author)LuisO22017-05-14

I think maybe you are skipping steps because the stepper drivers aren't set right. I need to add a section on tuning the stepper drivers. The adjustable potentiometer on them is what sets the current to the stepper motors. The stepper drivers I got were set high and caused noisy steppers and missed steps. I took my multimeter and connected black to the ground on the power and the red I clipped it to a small metal screwdriver with alligator clips. Then with the motors engaged I used the screwdriver to dial the screw back until I had .6 V on the meter.
This made them work a lot better. I settled on .6v by playing around and it may not be the best voltage/current for you. Do that and see if it works a little better.
However it may be that your stepper drivers are jumpered different. Did you double check the settings by searching for the manufactures info? Or you could put all the jumpers in on one driver and see if it fixes the issue.

LuisO2 (author)jalex92017-05-14

I did tune all the steppers to 0.7V as they were all too hot at around 1.6 and 1.5V. As funny as this may sound, i tried two boards (ramps) and nothing actually changed in terms of movement of the axis. Messing around with the jumper setting on the ramps also did not alter anything at all. Maybe all the 4 drivers are bad?

Btw, i believe that we can select the microstepping we want (ideally, as long as the firmware steps are matched accordingly (double the steps in marlin for 1/32).

I will just order a few more drivers from amazon or i might jump on a mks board. Suggestions :) ?

LuisO2 (author)LuisO22017-05-14

I managed to fix it by updating manually the EEPROM using the M50x commands. All is awesome now, using 1/32 microsteps :) . The printer is significantly quieter also!

For reference, this might help,486208,49537...

jiayuancheng (author)2017-04-09

First, jalex9 Thank you so very much for this instructable. I'm not that familiar with Arduino but I managed to follow the instruction closely.

I use this Arduino Mega clone and this RAMPS 1.4 The final step I powered it up. A few seconds later I smell something went wrong. The Arduino Mega board was hot and I can no longer communicate with my Arduino Mega anymore. Windows thinks it's a malfunctioned usb device. I checked all the wires again. Everything look fine...

Is it possible the cheap Arduino clone caused this when all wiring on the RAMPS seems correct? I know it's hard to say without diagnosing it carefully. Any thoughts or ideas will be appreciated. Thank you.

jalex9 (author)jiayuancheng2017-04-10

For me I plugged everything in and it worked. The Arduino/Ramps setup is the cheapest controller out there and the clones aren't always the best build quality. It's hard to tell if I got a decent board and you got a lemon or what. If you can initiate a return with Amazon you might want to try that.
If there was some internal issue that allowed power to the wrong componenet's it's the boards fault. However if the ramps pins weren't pushed into the arduino correctly, or the 12v power supply to the Ramps was reversed, you'll potentially fry the replacement.
It's a real bummer that it didn't just work once you wired it up. Feel free to post any pics and maybe something will stand out.

jiayuancheng (author)jalex92017-04-10

Thanks for your reply. I ordered new boards to try again. I will let you know if things are working or not.

hward13 (author)jiayuancheng2017-05-07

Were you able to figure out what happened? Mine did the exact same thing. I haven't dug into the board yet, since you might already have the answer.

jiayuancheng (author)hward132017-05-08

hward13, which issues are you referring to? It took me several days to finally figure out most of the problems I had. Let me know exactly the problems you bump into. Hope I can help.

hward13 (author)jiayuancheng2017-05-08

jiayuancheng, sorry, my question was not very clear. I got to the same point that you did with the power, and the Arduino Mega died. I think it's the same issue with the regulator, because I'm not getting the 5V or 3.3V out on the board. The Ramps shield passes 12V down to the arduino, but nothing powers on.

jiayuancheng (author)hward132017-05-08

I bought some voltage regulators and I replaced the one on Arduino Mega but I think I damage the board more than just the voltage regulator. So I bought another Arduino Mega and it works fine. I plugged the stepper motor driver the wrong way which caused the problem. You may want to do some google search and pay attention to the pins of your RAMPS 1.4 and stepper motor drivers. Double or triple check your wiring before you turn on the power will always be a good idea.

hward13 (author)jiayuancheng2017-05-09

After going through the process again, I found my issue. I plugged the motor drivers in backwards.

jiayuancheng (author)hward132017-05-09

The prints on the board are tiny and sometimes not recognizable. It's always a good idea to double check the pins and do few more google searches as cross reference. I'm glad you found the issue.

jiayuancheng (author)jalex92017-04-16

I ordered new Arduino Mega 2560 and RAMPS 1.4. I can control most of the things. However, I think I might have fried the voltage regulator on Arduino again because the RAMPS is not powering up the Arduino. I replaced the voltage regulator but it is still not working. For now, I can just plug in the USB and it will work. I probably will try to fix the voltage regulator or get a geniune Arduino Mega...

I noticed after I adjust my stepper motor driver's voltage to 0.5v, X and Y stepper motors will work but Z is wobbling. If I turn off the hotend and bed power, the Z stepper motor will work normally. Does that mean I don't have enough power? (I use the stock power brick came with MP Select mini).

anson1l (author)2017-04-13

Do you have link to download the front panel replacement 3D model? You only gave a link to download the mount for the LCD screen.

jalex9 (author)anson1l2017-04-13

This contains the 4 models that I used to replace the LCD.
I'm not sure what you are looking for?

anson1l (author)jalex92017-04-13

I am looking for the front part that replaces the original front metal panel( the panel that the nob and the screen is placed on.)

jalex9 (author)anson1l2017-04-13

I'm not sure what you are looking for but I only replaced the LCD/Knob face with the 3d printed case and the Ramps compatible LCD.

anson1l (author)2017-04-12

My stepper motor just don't move. Any idea on how I can debug this?

anson1l (author)anson1l2017-04-12

Nevermind, I didn't feed power to the RAMP. Its moving now. Yessss

anson1l (author)2017-04-10

how do you connect the stepper motor? I dont have the same color wire as yours.

jalex9 (author)anson1l2017-04-10

I'm surprised the colors don't match since they almost seem universal on stepper motors that I've seen. That said, just plug that same plug on the stepper motor into the header next to the stepper driver.
Once you have everything setup manually move the extruder to the middle and then you can use Pronterface to move it left or right and make sure it goes the right way. If it doesn't you can either reverse the way you plugged it in or you can invert the direction in the code for Marlin and re-upload it to the Arduino.

anson1l (author)jalex92017-04-10

Hi, Thank you so much. I will give it a try. Unfortunately I just burnt my Arduino by improperly plugging in the screen, had to order another one.

MikeS673 (author)2017-04-09

So I finally found the time to mess with this after blowing up 2 garbage arduinos I bought the real thing. I got the printer FINALLY able to communicate, and I tried to print cat.gcode. It moves everything as advertised (along with some grinding on the X axis for some reason), but it won't extrude filament. It will do so every 10 seconds or so, but it's skipping spots and essentially spitting out garbage.

jalex9 (author)MikeS6732017-04-09

The stepper drivers have a potentiometer on them that controls the voltage through them. I had to turn mine way down to get them to work well. There are a bunch of YouTube videos that show how to adjust them that you should check out. Essentially you use a multimeter to measure the voltage at that pot and turn down the current of the driver.
Your current on the extruder is too high and won't work until you tune it.

MikeS673 (author)jalex92017-04-09

What should the voltage be?

jalex9 (author)MikeS6732017-04-09

It all depends on the stepper drivers you used. You'll have to Google around to find out

MikeS673 (author)jalex92017-04-09

Using DRV8225s. I dialed them all in at ~4.1 and its finally printing! Thank you so much! Might wanna add that to your tutorial. Again, I am incredibly grateful for all your help through all this, and I can't wait to actually get it all back together!

MikeS673 (author)jalex92017-04-09

so I fixed the extruder but it lays down the first layer of cat.gcode and completely shifts it over, not sure how to fix it

jalex9 (author)MikeS6732017-04-09

I'm guessing your other stepper drivers are skipping too. Try setting them all to the same voltage that worked on the extduder

MikeS673 (author)MikeS6732017-04-09

poor kitty :(

MikeS673 (author)MikeS6732017-04-09

Also will add that I have the same all metal extruder set that you do and I made those changes as well.

AzurusNova (author)2017-04-01

I just had the controller for the feeder stepper motor crap out on me tonight. I gave in and I purchased a kit like you specified for upgrading the mainboard. It's going to take a bit of work to get this mod working, but it needs to be done.

Here is the kit I found:

Now does this setup need to be outside the case or is there a way to mount the board inside the case?

Ill also be using this mod to mount the screen where the existing screen is now since it will be useless after this.

Ill be keeping these instructions of yours very close to follow along with what I need to do.

Never was expecting to do this modification so soon after getting my printer, but if it gets me back into printing, then fine.

jalex9 (author)AzurusNova2017-04-01

That kit you bought should work fine. Even if the LCD was slightly different Marlin should have a configuration for it. I added a final page to the Instructable on the last few tweaks I've made and added some before and after pics on for using that very same mount. It looks pretty good now (at least to me it does).

AzurusNova (author)jalex92017-04-07

Does the original power supply for the printer suffice for working the RAMPS board, or do I need a switching power supply with a 12v rail and a 5v rail?

jalex9 (author)AzurusNova2017-04-07

Yes. You could easily cut the connector off of the power connector that was feeding the original controller and feed that into the +/- of the Ramps board. The power connection closest to the edge is used to power the steppers and the hotend and the other one is used to heat the bed. Just make a short wire that connects the two together and you can run everything on the same power supply.

AzurusNova (author)2017-04-01

Also, am I able to print from an SD card, or does this machine need to be perminantly connected to a computer to print from now on?
And if so, am I able to use Cura 2.3.0?

jalex9 (author)AzurusNova2017-04-01

In the kit you have there is a full sized SDCard read on the back of the LCD. All you have to do is uncomment one line in Marlin Configuration.h to enable it.

It sucks that your controller stopped working but doing this instructable should give you a much better understanding of how it all works. Good luck with your repair.

MikeS673 (author)2017-03-14

Holy Crap I've been waiting for a proper tutorial on this! Thank you so much!

jalex9 (author)MikeS6732017-03-14

Sure, it's not exactly complete. Let me know if I can add more.

MikeS673 (author)jalex92017-03-15

Will do! Stupid snow stopped me from getting parts but I'll probably work on this tomorrow!

MikeS673 (author)MikeS6732017-03-16

Side note: if you have a maximus bed extension kit from 4th dimension, you want to set X_MAX_POS 130 and Y_MAX_POS 250

DIY Hacks and How Tos (author)2017-02-26

Cool project. You should enter this into the Microcontrollers contest that is currently running.

About This Instructable




Bio: I'm a technology tinkerer. I like electronics, 3d Printing, woodworking and arcades.
More by jalex9:Replace Monoprice Select Mini Controller With Arduino Mega & Ramps 1.4
Add instructable to: