Using F-Engrave to Make V-carved Signs

While I had done a few CNC projects using flat end mills, I had not learned the fun of v-carving. This is a method of using a v-shaped bit to make lines of varying widths by cutting deeper or shallower into the material. Typically it is used for lettering and graphics in signs.

Recently, someone contacted me and asked if I could show her how to use her CNC machine that she bought last year to make v-carved signs. I did as much study as I could through YouTube to learn about the software that came with her machine. During my time with her, I got a chance to enjoy the $700 software package that is VCarve Pro. It was fairly easy to understand and use. However, the price tag is much more than I wanted to spend for software that I might use a few times a year.

There are a few other programs that do similar things, but the one I have experience with is Easel Pro (which is the software of choice for my CNC). But at $25 a month for a feature that I might or might not use during the month, I was still left searching for something more reasonable (even if it wasn’t as easy to use).

I’m not against paying for software; especially software that could potentially help me earn money in return. It can be an investment. But, I’m not primarily looking to make money with my CNC projects. I do the projects I do mostly out of personal enjoyment.

Enter F-Engrave

I have seen F-Engrave come up as an open source option for a couple of years. But, it has also been terribly confusing for me to wrap my head around. Having enjoyed the ease of VCarve and the cool effect that v-carving can give, I had to take the time to figure this out.

Screenshot of the opening screen of F-Engrave
The opening screen to F-Engrave.

As is typical with open source software (I am a big fanboy), there is amazing power wrapped up in a less than stellar user interface. Front and center in F-Engrave is the ability to input text and carve it out all in one screen. However, this hides the fact that this is a powerful tool for creating intricate inlays and v-carving any design you can create in a design tool like Inkscape, CorelDraw or Adobe Illustrator.

I made a video on how to use the software, but also have written more detailed instructions here.

Importing Artwork

To import your artwork, you need to have saved it in DXF format from your design software. This can be text or actual art.

You can see I imported the Studebaker logo that I created in Inkscape by clicking File | Open DXF and navigating to my art to open it.

Artwork opened in F-Engrave.

Settings Explained

Following are the settings that are needed to do a v-carve. However, I don’t completely understand every option the software has to offer. For example, everything we are doing here to create a positive v-carve can be inverted to make a perfectly fitting inlay. But I’m still trying to figure some of that out.

V-Carve Radio Box

At the bottom of the left-hand column, there is the V-Carve radio box. Select that. Even though it is the bottom of the column, it is important to choose that so that we have the correct options presented to us in the next steps.

Image Properties

Image Height is the final height of your art on the work piece. This defaults to 2 inches and is probably something that you will need to change unless you actually want your final art to be 2” tall.

Set Height as %. I am not sure why you would use this. A percentage of what?

Image Width is in percentage, but that is in relation to the height. 100% means that it will be normally proportional to the image height. Less than 100 and the image will be scrunched left to right. More than 100 and it will be stretched.

Image Position and Orientation

Image Angle is used to turn the image from horizontal to vertical or any position in between. You can play with the number and see what that does. Typically, this will be left at 0.0.

Origin is where you want to set the X0,Y0 (work home position) on your CNC machine. Typically this will be the bottom left or center of your artwork. To start your origin in the bottom left corner choose Default or Bot-Left (the same thing when using art) in the drop down menu. For a center origin choose Mid-Center.

Flip Image and Mirror Image are used for inlays. You will probably not use these for normal v-carving. You can click the check boxes to see what they do.

Gcode Properties

This is where you set the speed and plunge rate of your travel moves.

For wood, I have been doing 25 in/min using an X Carve machine. If your CNC is a smaller desktop version you may want to go much slower than that.

Plunge Rate should be something in the 5-10 in/min range unless you know your machine can handle something faster. The default of 0 copies whatever the feed rate is that you set in the box above.

Z Safe is how high above the work piece the machine will move before a travel move.

Calc V-Carve

At this point you can hit the Calc V-Carve button and see the results of your settings. But there is another screen we must look at before you can save your project and cut your sign.

After clicking the Calc V-Carve button.

Settings | V-Carve Settings

The Settings screen.

For our purposes, here are the things you need to choose and modify from the Settings screen.

Cutter Type will be a V-Bit. However, you can get similar but different results from the Ball Nose option.

V-Bit Angle is usually 90, 60, 45 or 30 degrees. Type in the angle of your bit.

V-Bit Diameter is the largest width of your bit. I usually use a ¼” router bit, meaning a ¼” shaft. But, that is not the number this option is looking for. This needs to be the size of the cutting area of the bit which will usually be larger than your bit’s shaft.

Cut Depth Limit is set to 0 by default. That means that the next line down is how deep the final cut will be. In my example it will be -0.433 inches. There is nothing you need to put in the Cut Depth Limit box unless the depth shown in the Max Cut Depth line is too deep for your material or deeper than you would like it to be.

If you need to adjust the Cut Depth Limit, then you need to type a negative number in the box.

At this point you could click the Calculate V-Carve button and be ready to save your gcode.

If Done, Save Gcode

On the main screen of F-Engrave you can click File | Save G-Code to save your code. The default file format is .ngc. That may or may not be readable by your CNC control software. If it is, then you can save the file in that format and then send it to your CNC.

In my case, my control software of choice (right now it is OpenBuildsCONTROL) does not recognize the .ngc format. But, you can also manually change the file extension to .gcode if needed. Either way, it is a simple text file that is being created.

Optional Steps


If, after calculating the v-carve you find that there are sections in your carve that have two white lines in a single section of the letter (like in the image below), then you will want to calculate a cleanup path.

Double white lines in the middle of an art stroke indicate you need to calculate a cleanup cut.

Go back to the Settings | V-Carve Settings screen. At the bottom right you will see a Calculate Cleanup button. Leaving the settings at their default values, you can create a cleanup path that will use a ¼” end mill to flatten out the bottom of the carving. Why one would need to do this only became obvious to me once I did a cut that needed it.

In the following image the red arrows are pointing to areas within the letter that should have been carved out during the v-carving process. However, since the letter was so wide, the bit was not able to carve out the area needed without going too deeply into the wood. This is where a cleanup toolpath will flatten out that space inside the letter.

The red arrows show the area that needs a cleanup cut performed.

After clicking the Calculate Cleanup button, click Save Cleanup G-Code and save the cleanup toolpath. Again save it as an .ngc file or .gcode file as needed.

Run the main gcode file first on your machine, then the cleanup gcode after changing to a ¼” bit (or whatever size you specified in the Cleanup Cut Diameter box).

Settings | General Settings

In the General Settings dialog box you can choose whether your units are inches or millimeters. All the other settings are probably important for something, but I have yet to figure them out. You may need to adjust the G Code Header and G Code Postscript for your machine. I was fairly successful in finding what those fields do by searching on Google.

Final Steps

Take the gcode file that was created and run it on your machine by using the CNC control software for your machine. This may be Easel, Universal Gcode Sender, Mach 3|4, OpenBuildsCONTROL, Ready2Control, LinuxCNC or many other control software options.

Actually controlling and sending the code to your machine is beyond what I can do here and keep this general enough for all machines.

Other Features

The other great thing that F-Engrave can do, that I do not yet understand, is inlays. You are able to cut the inverse of the v-carve that we just did in another piece of wood and glue them together for a perfect match. Explaining that will have to wait until I get tired of this process and am ready to spend the time to learn the workflow. There are videos on this process, I just haven’t been able to wrap my head around the steps.

As mentioned at the beginning, I have done a video on the v-carving process that may be a bit easier for you to follow.

Voltage Divider: Power Supply Monitor

I had a power supply that was suspected as faulty at my office. I put together a voltage divider on an Arduino with an SD card data logger to keep track of the voltage coming out of the unit. See the caveats at the end to learn why this can’t be the only test you do.

It turned out, in this case, that the problem was the UPS the computer was plugged into. The battery was fully charged and had sufficient capacity. But the unit would randomly act like an electrical failure had occurred but would not make the switch to battery power. We experience frequent short power losses at our office (on average more than 1 a week). It is likely that the unit has been damaged by these regular power failures over the years that it has been in place. Fortunately, it is the unit that is shielding the computer from taking the hit on this.

This is one of those blog posts that I’m really writing for myself so that I can come back and find out how I did something if I need to do this again in the future. I’m just inviting the public to read over my shoulder.

Building a Power Supply Monitor

I had not previously worked with monitoring voltage with an Arduino, but I knew it was possible. I also knew that the answer was by using a voltage divider. However, I didn’t know how they worked, so I had a little studying to do. I understand the math behind it, but I still haven’t wrapped my head around what is actually happening electronically. Mostly it is because it works and I haven’t really tried to understand it.

Why Use a Voltage Divider

The need for a voltage divider is so that you can feed a higher voltage into an analog pin of the Arduino without destroying the Arduino. The analog pin can only take 5V in. Any more than that and you will destroy the unit (how much more makes it melt down is unknown by me, but I suspect it wouldn’t take much).

Since I wanted to measure the 12V output of the power supply, I needed to step down 12V to no more than 5V. But I didn’t want to use a voltage regulator that would give me a smooth 5V out. If I did that then I’m not actually monitoring the power supply output. I needed a way to vary the 5V going into the Arduino in relationship to how much the 12V fluctuates.

I could have measured the 5V or 3.3V outputs of the power supply, but I didn’t think those would have as much fluctuation as the 12V might if there was a problem with the supply. While those would have been simpler, and potentially not needed a voltage divider, if the 5V or 3.3V outputs spiked over 5V then it would have destroyed the Arduino. And, since I suspected there was a problem with the supply, I worked under the assumption that they might be spike over their intended voltage.

Voltage Divider Concept

The idea of the divider is that you can feed in 12V (or, in the way I set mine up, anything up to 48V) and it will proportionally divide the supply voltage down to less than 5V. Any fluctuation in the input voltage affects the output voltage. In this way you can monitor voltage drops or spikes safely with a 5V tolerant analog pin of an Arduino.

Vout = Vin * (R2 / (R1 + R2))
Image Credit: SparkFun

The math is fairly simple. As you can see from the image above the output voltage is equal to voltage in times the value of resistor2 divided by resistor1 and resistor2 added together. There are calculators online that can do the math for you based on resistors you have available. The key is that you never want your output voltage to go over 5V. Therefore you should add in a bit of a buffer in case the voltage at your supply spikes for some reason.

In my case I wanted my output voltage to never be greater than 5V. I had a handful of resistors that I measured with a continuity tester. What worked for me was a 33K (which measured out to 32.7K) and a 3.9K (measured at 3.8K) resistor which would give me a 48V input max. I would have liked my tolerance to be a bit lower (20V) so that I felt like I got more resolution on my final reading, but these were the resistors I had handy.


Here’s the code that I used. The original author of the code is T.K.Hareendran that I got from the ElectroSchematics website. I have modified it to work for my project and therefore have taken his name off of it. But it might be beneficial to read his site on how it works or if you want to add an LCD display to the unit.


File myFile;

int pinCS = 10;
int analogInput = A0;
float vout = 0.0;
float vin = 0.0;
float R1 = 32700.0; // resistance of R1 (32.7K)
float R2 = 3800.0; // resistance of R2 (3.8K)
int value = 0;

void setup() {
  pinMode(analogInput, INPUT);
  pinMode(pinCS, OUTPUT);
  if (SD.begin()) {
    Serial.println("SD card is ready to use.");
  } else
    Serial.println("SD card initialization failed.");
  Serial.println("DC VOLTMETER");

void loop() {
  // read the value at analog input
  value = analogRead(analogInput);
  vout = (value * 5.0) / 1024.0; // Analog input reads voltage as a percentage from 0-1024
  vin = vout / (R2 / (R1 + R2));
  if (vin < 0.09) {
    vin = 0.0; //statement to quash undesired reading !
    //analogInput = analogRead(0);

  //Create or Open file
  myFile ="Voltage.txt", FILE_WRITE);

  if (myFile) {
  } else
    Serial.println("Error opening test.txt");


This is not a perfect solution for several reasons, but it does (potentially) give enough information that can help me know for certain that the power supply is faulty. However, it can't tell me that it is not faulty because this particular power supply has 3 independent 12V outputs. A whole section of the supply can die and not affect the other 2. If I'm testing a good section there still could be 2 others that are faulty.

The problem, in this case, ended up being a bad UPS. However, if I had monitored this power supply for a few days I may still not have caught a true power supply problem. This circuit can really only tell me if the supply is faulty. It can't determine if it is definitively good. And, it may not present as faulty on the output I'm using during the test period. Therefore, there are plenty of ways that this circuit may not detect a faulty supply and it can never convince me that the supply is definitely not faulty. It only tests a small subset of potential power supply problems.


While, as mentioned, it cannot tell me if a supply is absolutely good, it does give me a chance to test the supply under load. That is one of the reasons I have not invested in a particular type of power supply tester---you can't test under load.

This does, however, help explain how a voltage divider can be used and how to read a higher voltage using an Arduino that is limited to 5V input. And, maybe, in the future when I need to remember how to use a voltage divider I will remember that I wrote this down and I don't have to go searching all over the Internet again for the solution.

Wanhao Duplicator i3 Plus Conversion: Firmware

For my Wanhao i3 Plus clone conversion to a RAMPS setup, I chose Marlin as my firmware. This is for practical reasons more than because I have a strong opinion one way or another. I have read much more about Marlin than any other firmware and I have a friend who runs a Marlin variant for his printer; therefore, I know I can lean on him for configuration help.

I will not go into every small step of setting up and configuring Marlin. There are plenty of guides online that can do a much better job. What I do want to cover are the configuration options that you need to know specifically for the Wanhao Duplicator i3 Plus and its various rebranded counterparts.

Basic Parameters

  • 200, 200, 180 mm build volume (X, Y and Z respectively)
  • Extruder steps per mm: 96
  • X steps per mm: 80.15
  • Y steps per mm: 80.15
  • Z steps per mm: 399.5

The steps per mm numbers above are what mine is currently set to. I am still doing some tuning to make things more precise, but this should get you started. I would assume that your numbers would be identical to mine assuming you still have the stock motors, belts and drive screws. However, other settings inside of Marlin could affect these numbers.

Configuration Changes

I will paste my full configuration.h file below, but here are the lines that I have changed. I will put the line number as it appears in the original Marlin 1.1.x configuration.h file. Listed below are what they were changed to for getting my printer working, but not necessarily perfect. I don’t anticipate that I will update this document with every little change I make in the future.

  • Line 275: #define TEMP_SENSOR_BED 1
  • Line 326: #define PID_AUTOTUNE_MENU
  • Line 339: #define DEFAULT_Kp 25.83
  • Line 340: #define DEFAULT_Ki 1.49
  • Line 341: #define DEFAULT_Kd 112.15
  • Line 475: #define X_MIN_ENDSTOP_INVERTING true
  • Line 476: #define Y_MIN_ENDSTOP_INVERTING true
  • Line 477: #define Z_MIN_ENDSTOP_INVERTING true
  • Line 512: #define DEFAULT_AXIS_STEPS_PER_UNIT { 80.15, 80.15, 399.5, 96 }
  • Line 527: #define DEFAULT_MAX_ACCELERATION { 3000, 2000, 100, 10000 }
  • Line 537: #define DEFAULT_ACCELERATION 1500
  • Line 764: #define Z_MAX_POS 180
  • Line 1231: #define ENCODER_PULSES_PER_STEP 2
  • Line 1237: #define ENCODER_STEPS_PER_MENU_ITEM 2
  • Line 1254: #define REVERSE_ENCODER_DIRECTION
  • Line 1262: #define REVERSE_MENU_DIRECTION

Configuration Details

Lines 1231 and down have to do with the particular LCD display that came with my RAMPS board. You will have to look around for the settings for the display you are using. Mine says “RepRapDiscount Full Graphic Smart Controller” below the LCD.

Line 275 sets the type of thermistor for the heated bed. I uncommented line 326. This was to turn on a PID autotune feature on the control unit. PID is set with lines 339-341. The endstops have to be switched to true because on the Wanhao printer they are wired NO (normally open) as opposed to NC (normally closed).

The DEFAULT_AXIS_STEPS_PER_UNIT on line 512 is to set the motor driver steps. This is a line that you will adjust to dial in how far each step on the motor actually is. You can read the long and detailed version of axis calibration at the RepRap Wiki or check out this Instructable about calibration to get you started.

527 and 537 were changes I made because I was getting a drastic y-axis shift. It turned out the shift was due to the motor driver overheating. With a fan blowing on my RAMPS board I no longer have that problem. I may change lines 527 and 537 back to the default numbers to get more speed out of the printer.

That should be enough information to get you up and running with Marlin. Then you can spend the next 3 years continuing to tweak these settings and many other parameters.

Wanhao Duplicator i3 Plus: Ribbon Cable Pinout

This is the pinout information for rebuilding a Wanhao Duplicator i3 Plus using a RAMPS control board. My printer is actually a Monoprice Maker Select Plus, but it is manufactured by Wanhao who seems to make printers for many brands. Therefore, I have decided to start referring to this printer as a Wanhao machine in hopes that others who have various rebranded printers will be able to get the help they need.

Communication from the control board underneath the printer to the small daughter board behind the actual print head is done through a 16-pin ribbon cable. I had to figure out which of the sensors and actuators in the daughter (or breakout) board corresponded with the ribbon cable pins.

In the end I eliminated the ribbon cable because I did not trust the breakout board behind the print head. This is the part that visibly failed when the motherboard on my printer died. Even though I did an attempt to fix it, I am not certain that all the wiring works as expected. I will explain at the end how I did my own wiring.

Following is an explanation of my original plan, which is probably what you want to do, even though it is more complicated. Then at the end I will tell you how I actually did my wiring. Much simpler. Much more logical. More work. Much uglier.

The Original Plan

This is the best way I could figure out how to explain the ribbon cable that made sense to me. If you discover that any of this information is incorrect, I would greatly appreciate you letting me know. This all seemed to work for me until the voltage regulator in my Arduino burned out. It was at that point I started doubting the breakout board and ended up replacing all the wiring from the print head down to the new RAMPS control board which I explain in the lower part of this post.

Ribbon Cable PinoutGraphical layout of ribbon cable.

Above is a drawing of the output of the cable underneath the print bed. You need to patch into this cable and connect the various pins to the RAMPS control module.

Here is what I have figured out each of these pins do.

  • Pins 1-4: Heater Ground
  • Pins 5-8: Heater Voltage, Hotend Fan Voltage, PWM Fan Voltage
  • Pins 9, 11, 13, 15: Extruder Motor
  • Pin 10: PWM Fan Ground
  • Pin 12: Thermistor Voltage
  • Pin 14: X-axis Limit Switch
  • Pin 16: Signal for Hotend Fan, X-axis Switch and Thermistor

Pin 16

Photo of the ribbon cable connector
I used DuPont cables to plug into the ribbon cable and then out to the RAMPS module. I made them into blocks of cables (1X2 and 1X4) as much as was possible. This keeps you from accidentally switching around the wiring.

The complicated one was the wire coming out of pin 16. It needed to split three ways into the RAMPS board. One wire needed to go into 1 of the 2 inputs of the x-axis limit switch. Another wire for the hotend fan. Finally a wire for the hotend thermistor. You can see in the picture below how I split that out.Photo of a 3-way split on the cable.

What I don’t show in the picture above is how those are all connected together. The black wire is coming out of pin 16 of the ribbon cable (using a male DuPont connector). I then cut that wire and soldered 3 wires with female connectors onto it. This gives me the three outputs needed for the x-axis switch, thermistor and fan.

Blocks of 1-4 and 5-8

I used wires (18 AWG) from a computer power supply for the next part. These were to form the blocks of wires that are needed to plug into multiple pins but go out to a single wires.

For pins 1-4 strip back between 1/4″ and 1/2″ of insulation of one of the 18 gauge wires. I used black since this was ground. Then split the bundle of stranded wire in half. Crimp a male DuPont connector onto half the wires and another one onto the other half so that you use up all the strands split evenly between the two DuPont connectors. These two connectors can plug into pins 1 and 2 or 1 and 3 on the ribbon cable. It does not matter which way you do it.

Do the same thing with another (black) wire. This one will plug into the other two pins in the ribbon cable you have not used out of pins 1-4. My package of DuPont connectors did not come with any 2X2 blocks. So I made them into two 1X2 blocks for this. But you can do a single block for both wires.

Pins 5-8 are done exactly the same. This time I used a yellow wire. You can see the blocks of wires I made for these 8 pins in the pictures above.

The two black wires (pins 1-4) can be soldered together and plugged into the negative terminal of D10 on RAMPS. The two yellow wires go into the positive terminal of D10. It actually does not matter for the purpose of the heater which wires go to the positive and negative power blocks, but it is important for the fan inputs which are also tied to that 5-8 block

Other Pins

A single 1X4 block can be made with pins 9, 11, 13, and 15. Keep them in order and connect them to the E0 four-pin set on the RAMPS board.

For pins 10, 12 and 14 I used 3 individual DuPont jumpers to go to the appropriate pins on the RAMPS board (the other thermistor pin, and the other x-axis switch pin into set 1 of the limit switch pins).

Untested: Proceed With Caution

This is where I ended up deciding to go a different route on the wiring. What you are missing in my instructions above is the wiring for the print cooling fan. Pin 10 on the ribbon cable is the print cooling fan (called PWM fan on the breakout board up top). That fan would normally plug into the D09 connector of the RAMPS board. It is polarity sensitive.

The problem is that the wiring on the ribbon cable takes half of the fan wiring through pin 10 and the other half through pins 5-8. I think what this means is that you plug pin 10 into the negative side of D09 on RAMPS. Then you don’t do anything with the positive side of D09 since the fan is already being fed with pins 5-8 on the ribbon cable and is already connected.

It won’t hurt anything to give this a try. Logic tells me this should be the way the print cooling fan works. And if it doesn’t, you’ve not hooked up anything that is dangerous.

Wiring: Not Part of the Ribbon Cable

The non-ribbon cable wiring will be hooked up logically. This is all the stuff that hooked up to the original board directly. The heated bed goes to D08. The 4 motors plug into the X, Y and Z1 and Z2 of RAMPS. The bed thermistor will go into its place next to the hotend thermistor. The y-and z-axis switches plug into the 3rd and 5th set of limit switch pins.

What I Actually Did

After watching a video (below) of Tom Sanladerer talking about printer wiring, I decided to go with 2 stranded network cables. That gave me 16 wires to cover 14 inputs from RAMPS to the sensors and actuators up top.

I simply crimped on male DuPont pins at top and female ones at the bottom. Some of the ones at the bottom I plugged directly into RAMPS, some I used other DuPont jumpers to give me a little more length to reach other parts of RAMPS.

It should not matter which wires you use for each connection, but watch the video and see the tips Tom gives. Keep the twisted pairs together for the various connections. I did put the 4 heater connections on one LAN cable and the motor on another. I figured these were the biggest power users and it might help to separate them.

My setup isn’t elegant and I may find a better way to clean up the wiring. The network cables I choose (based on availability in my junk drawer) are not the most flexible. But this setup works well and is much simpler to figure out than using the ribbon cable with the original breakout board.

If I do make a change to this in any way, here are the two ways I would consider doing it:

  1. Just use the original ribbon cable. My concern is that the breakout board used extra wires for the heater. Is this really necessary? Is the ribbon cable stout enough for that? Probably so and it would look much better than what I have.
  2. Use 3 flexible USB cables. That only gives me 12 wires (instead of the needed 14). But currently I’m not actually using all 14. I replaced my thermistor with one that had a wire long enough to go all the way to the control board underneath. So I just left it that way. Concern: the same as for the ribbon cable, are the wire rated for the amperage needed.

Modify RAMPS for 24 Volts

One of the first things you need to do to complete a Wanhao Duplicator I3 Plus (or Monoprice Maker Select Plus) conversion to work with RAMPS is modify RAMPS to work with a 24 volt power supply. The other option is to pull out the 24V supply and put in 12V. But that would require changing some of your other hardware and you also lose any advantage that the 24V supply gives in the first place. For me, I chose to keep the (theoretically) better 24V supply and modify RAMPS.

If you have not already bought your RAMPS board, please read through this whole post before purchasing. After reading you can make a better choice and save a little work by buying the right one.

Also, don’t power up the RAMPS board until you have completed all the steps in this post. In a later post I will show you how to wire everything up. It is probably best to wait until you get to that point before applying power.

Choosing a RAMPS Board

You should assume that your RAMPS board is designed to work with 12V. They do make boards that can accept both 12 and 24 volts, and you might want to buy one, but it is best to assume your board is 12V and confirm that it will work with 24 before plugging in the higher voltage to test.

The cost of a 12 volt RAMPS setup with stepper drivers and LCD screen is the same as a 12-24V RAMPS board by itself. All the 12-24V boards that I found had the Arduino Mega integrated into the same board as the Pololu shield. I personally like discrete components (as much as is practical) so that if one part dies it can be replaced without having to replace the whole system.

Therefore, my preference was to buy a $40 kit that included the Arduino, Pololu shield, stepper drivers and LCD that needed to be modified for 24V. As opposed to $40 just for the Arduino/Pololu integrated system without drivers and LCD but was already setup for 24V. You will have to decide that on your own. If you buy the 24V setup, then you can completely skip this step. But you will have to figure out the LCD and stepper drivers on your own. Also, I found out in the end of this conversion, the wider boards can’t be housed underneath the printer like the original board was. You will have to build a separate enclosure for it.

For the rest of this step, I assume you have a 12V RAMPS board. You can get them at the supplier of your choice: Amazon, eBay,, AliExpress or Gearbest. There are many other places to get them, but that should get you started. I chose Amazon for this because I wanted it quickly and for RAMPS, stepper drivers and LCD in one package buying from the Chinese shippers and waiting up to 2 months was not much cheaper (if at all).

Capacitors, Fuses and Diode

Assuming you have a 12V RAMPS board, there are three types of components to check or modify to make it work with the higher voltage supply: capacitors, fuses and diode.

Image of the RAMPS control board.

In the image above (you can click it to get a larger image), you will see various components highlighted with circles and arrows. Refer to this image in the explanation below.


There are two different sets of large, electrolytic capacitors. They are physically different sizes which should make it easier for you to identify. In the image above the capacitors circled in yellow are the ones you need to be concerned about. The 3 circled in green should not need to be checked or modified in any way for working with 24 volts.

The 6 yellow-circled capacitors should be rated at 35V or higher. Your’s may say something like 36V, 100V or some other cryptic code for the voltage rating. If these capacitors are less than 36V you really should replace them. If your capacitors are 24V or less, you can expect it to not work at all, or very unreliably until it fails. To make it easy try to buy a board with the right capacitors so you don’t have to replace them.

The reason we don’t have to worry about the green-circled capacitors and their lower rating is they are not using the 12 or 24 volts from our power supply. That segment of the board is stepped down to 5 volts. Therefore, whatever the manufacturer originally installed for that section of the board should be sufficient.


The diode (pointed at by the pink arrow) is the path through which electricity goes into the Arduino and powers it. Since most Arduinos are rated for up to 12V of power, we don’t want to feed 24V into it. By getting rid of this diode then we stop the 24V from going through the Pololu shield and into the Arduino. That means that after this step is complete we need to find a way to power the Arduino separately with 12V.

Removing the Diode

You can remove the pink-arrow-highlighted diode by snipping the wires on either side of it or by desoldering it. It would be very hard to get a pair of wire cutters in the space to snip the wires on the diode, but it is possible. I chose to desolder mine. You can watch a video or read an Instructable about desoldering components if you don’t know how.

There is another diode next to the poly fuses. You should leave this one in place. Only disable the one indicated by the pink arrow.

Supplying 12V to the Arduino

Now you have to power the Arduino in some way. The way I chose to do it, and the way I recommend, is to use a step down power converter. Also called a DC-DC or buck converter. What this does is take the 24V from the main power supply and converts it (steps it down) to 12V that can be used for the Arduino (and cool looking 12V LEDs). I had already installed one of these in my printer for the purpose of powering LEDs. So this was an easy route for me.

Just because something is easy, doesn’t mean it is best. However, in this case, I think this is the best way to go about powering your Arduino. The other option is to have an external 12V source for the Arduino. It can be a battery (which could leave you with a dead Arduino in the middle of a print) or it could be a second supply plugged into the wall (which is an extra external component). In either case, you need to tie the ground of the battery or secondary supply to the ground of the 24V supply. Too much work.

Use a Step-Down / DC-DC / Buck Converter

A small buck converter will take the 24 volts from our current supply and easily convert it to usable 12 volts. That is what it is designed to do.

My converter (shown above) can take up to 32 volts as input. Then there is a screw adjustment to dial in the output voltage. The one I am using is a buck and boost converter which means that it can also take a lower voltage and boost it to a higher voltage at the cost of amperage. I only used this because I have some sitting around. But if you are buying one for this project a simple buck converter will be fine.

Tie Into the Power Supply

I soldered wires from the IN+ and IN- side of the buck converter and ran those to the extra screw terminals on the power supply. Wasn’t it nice of Wanhao to leave an open spot for us to use? Make sure the IN+ goes to the +V terminal and the IN- goes to the -V of the power supply. The following picture shows where I tied in my buck converter. The first and fourth screw terminals (from the left) on my power supply were empty. These were the ones I used.

Turn the adjustment screw on the buck converter (actually a multi-turn potentiometer) on the buck converter until your volt meter reads 12V as output voltage on the other side of the DC-DC converter. That is where you will get the 12V that will be fed into your Arduino’s barrel jack. I soldered a short pigtail from the +/- OUT on the buck converter to a barrel plug appropriate for input into the Arduino. The center pin should be positive on the plug.

Protect From Shorts

I printed a small sled for the converter to sit on and then hot glued the converter to the sled and the sled to the frame of the printer. (This was when my printer still worked.) For the time being, you can just put tape on the bottom of the buck converter to keep any solder joints from shorting out until you can print an insulating sled.

With the diode removed no voltage will pass from the Pololu shield to the Arduino. The Arduino will get all it’s power from the 12 volts of the buck converter. Since it is all tied into the same power supply, when you turn on the printer it will turn on all the different components like it did originally. The only difference is that part of the system is getting 24 volts and part is only getting 12 volts.


You need to check that the fuses on your RAMPS board are capable of handling the higher voltage. The fuses are indicated with the red arrow in the picture above. One of these fuses on my board (the one closest to the power plug) needed to be replaced. It can be replaced with another resettable fuse of an appropriate capacity, or a different fuse type altogether. In my case I chose to use a fuse made for car applications.

The original fuse on my board was an MF-R1100 poly fuse. It is rated at 16V and 11 amps. Because the voltage is lower than what we need, then this one must be replaced. The other poly fuse on my board is rated up to 30V; therefore, it does not need to be replaced.

Photo of substituted fuse

I replaced mine by desoldering the current fuse and making a holder for an automotive fuse. I did this by soldering 2 wires (20 AWG or better) about 1-1/2 inches long (length is not critical) to the board. Then I soldered the other end of the wires to female spade connectors appropriately sized for my fuse. You will see in the picture above that I am using a 10A fuse. I don’t know for certain that this is the right amperage. 5A was not enough and 10A hasn’t blown out.

CLARIFICATION: The fuse should be more than 5A. When testing, I blew out the 5A fuse almost immediately. I have read that a heated bed will pull up to 13A at 12V. Theoretically, that says to me that we want a fuse that is 7.5 to 8 amps since we are powering the heated bed with 24V now. I will update this if I find out something different. But for now, I am sticking with a 10A fuse.


I said at the beginning of this post that after reading through this you will have a better idea of how to make a better RAMPS choice.

As mentioned previously, you can buy a RAMPS setup that is already made for a 24 volt supply. That is probably the simplest thing that you can do at the expense of not being able to hide the electronics under the printer and not having discrete components that could be replaced.

If you are going with one of the cheap RAMPS setups (there are many for $40 or less on Amazon), then here are some of the things to look for.

  • Has 36V or higher capacitors (preferably 48V or greater).
  • Includes LCD (unless you really don’t want one).
  • Includes the stepper driver modules.
  • Includes the Pololu Shield and the Arduino Mega.

The cheap ones will have to be modified. But if you aren’t wanting to do that, then you are missing out on the fun.

Here is a good video that talks about some of the downsides of the RAMPS setup. But while Tom mentions all the things he doesn’t like about it, he concludes by saying his main printer runs RAMPS. At least as of 3 years ago. I know he has many commercially made printers now and probably does not run a RAMPS based printer as his daily driver anymore.

Other Resources

I was helped through this step by reading other forum questions and watching videos. The following video is one that made sense to me after I had done a lot of other reading. It doesn’t tell you everything you need to know, but it is a great start with this step.

Maybe some of these questions that others have asked will have an answer that makes this step clearer. Here is a Reddit question about the conversion. This forum thread gets a little deep in the weeds, but reading the first response to the question may help clear up what I have posted above.

You can also read this very detailed explanation. It gets into much of the theory as to why you would want to do the conversion. We already know we need to because our printer is already a 24V printer and we have a 24V power supply.