P3Steel Build Log (#21) – RAMPS 1.4 RRD Fan Extender – Controlling Extra Fans on Your 3D Printer

By ChunkySteveo,

  Filed under: 3D Printing
  Tagged with: , , , , , , , , , ,
  Comments: 6

So, this step is optional, and whether or not you want to be able to control all your fans on your printer or not. To do this we will install the RAMPS 1.4 RRD Fan Extender – read on!

On this printer, we have hooked up a hotend cooling fan (NOT the part cooling fan) which cools the radiator of the E3Dv6 hotend, and a RAMPS cooling fan – to keep all the stepper drivers and mosfetts nice and cool and prolong their life. The simple, quickest and easiest route is to hook these two fans (we are assuming the two RAMPS fans are seen as one fan as they are connected in pararell) up to a 12V supply, such as a free 12V pin and ground on the RAMPS board, or direct to the 12V output of the PSU. This means that when you turn on the printer, the fans will kick in and cool, all day and all night. Trouble is, your printer will not be in use all day and night, and will be sat idle as you pull your hair out trying to slice up an STL file, or as you scroll endlessly through page after page after page of Thingiverse looking for that perfect model to make(😵 !!) While its sat in idle the hotend is not hot, and the RAMPS board is not pushing any stepper drivers or current to the heated bed, so does not need to be cooled. Your fans will be whirling around and buzzing away in your ear like an over worked Pentium III in an old laptop! And drive you mad!

The RAMPS 1.4 RRD Fan Extender

What we need is the ability to turn these fans on only when needed. So only when the hotend is hot and needs cooling, and only when the stepper drivers are in use, or the heated bed is being heated. Turns out Marlin (the printers firmware to-be) can monitor and manage all this, and all you need to do this is a tiny little circuit board add-on below:RAMPS 1.4 RRD Fan Extender

This is the RAMPS 1.4 RRD Fan Extender, and connects to the RAMPS board and gives you the ability to control two additional fans via firmware. It is a driver for the two fans – essentially a couple of mosfets controlled by the pins from the Arduino. You can find dozens of them on AliExpress on this link here – RAMPS 1.4 RRD Fan Extender, take your pick – I got mine from a seller who is no longer there.

It fits on the RAMPS board on the “SERVOS” block of 4×3 (or 3×4) pins as seen below:

IMG_7272 IMG_7273

Once installed we need to connect the two fans and power. First the board needs power, and it needs a 12V supply. Handily this can be picked up from a 12V pin right next to it on the RAMPS board. You can see the two pins (12V, Ground) above, and below you can see the RRD board connected with a small jumper cable from the 12V pins to the “top” two pins of the extender. NOTICE THE POLARITY OF THE CONNECTORS, THE +/- FLIP OVER. YOUR BOARD MAY BE DIFFERENT, CHECK WHERE THE GROUND PLATE IS FOR GROUND.IMG_7819

Now we need to connect the two fans to the board. The “bottom” pins as you look at the extender as per above and images below go as follows – FAN1 GND/12V — FAN2 GND/12V. Again, your board MAY BE DIFFERENT, CHECK THE TRACES!! Lets install the RAMPS cooling fans which blow cold air onto the stepper drivers and mosfets when the printer is in use. Below you can see the fans installed in their frame, and the power leads added to the “left” of the RAMPS 1.4 RRD Extender board, in polarity GND->12V, left->right. Look how neat everything looks… how I miss that… 😢

Now lets remove the RAMPS cooling fan frame and install the cable for the hotend cooling fan. The leads for this have already been cable managed with all the other cables and leads going to the extruder and hotend. The two images below show the hotend cooling fan leads coming in from the left and connecting to the remaining pins on the extender board. Again, we connect GND->12V, Left->Right.

Testing the RAMPS 1.4 RRD Fan Extender and Fans

Now that it’s connected and wired up, it would be useful to know that it’s working, and we’ve got the right fans connected to the correct pins, right? Well, we can upload a test script and fire up the Ardunio and RAMPS board to see if they work.

This is probably the first time you’re firing up your “printer” and powering it and running code – exciting times ahead! Despite it now being all hooked up and ready to run, we’re not going to run it as a printer, but just as an Adruino connected to two fan motors…

I’m not going to go through working with the Arduino IDE, connecting to your PC/Mac etc or troubleshooting issues – I am going to assume that you’ve got experience, or you have gone off and watched enough YouTube clips to play around with Arduino. Now that you have done this – connect the Arduino to your PC via the USB port (the printer does not need to be powered up – your PC will give the Arduino 5V power. The LCD panel may light up…!). With the Arduino IDE open, create a new sketch and copy and paste the following code:

void setup() {
 pinMode(11, OUTPUT);
 pinMode(6, OUTPUT);

void loop() {
 digitalWrite(11, HIGH);
 digitalWrite(6, LOW);
 digitalWrite(11, LOW);
 digitalWrite(6, HIGH);

Save the sketch to your PC as whatever you like “fan_test” or similar. Make sure you have selected your board type and port, and then click upload. The sketch will (should) upload to the Arduino.

When the code has uploaded. Unplug the USB from the Arduino (this isn’t really nessecary, but acts to switch off the Arduino ready to boot and run the above) and switch on the power to the “printer” from the main PSU. With any luck, and a good ear, you should see the RAMPS cooling fan(s) powering up for five seconds, powering down and then the hotend cooling fan doing the same. The RAMPS 1.4 RRD Extender board should have two LEDs on it for each connection – these should also be lighting up in turn as the fans go round.

There you go – you’ve just uploaded your first firmware to your new “printer” (I keep putting that in quotes as it’s not a printer just yet… just a collection of parts and wires and plastic!), powered it up from the mains on 12V power, and watched it run through it’s instructions like a good little thing! But what’s going on with the code you’ve just used?

The above Arduino sketch is telling the Mega to set pins 11 and 6 to be digital output pins. In the loop (the main program loop which will run until you pull power) it is telling the Arduino to set pin 11 high (set it to 5V) and to set pin 6 to low (0V) and then wait for 5 seconds until it executes the next command. Then after the 5 seconds has elapsed do the opposite and set pin 11 to low, and pin 6 to high. While this is going on, the high and low pin signals are travelling through the RAMPS circuit traces to the SERVO pins and up into the RAMPS 1.4 RRD Extender board. Here the high signal is opening the gate of a mosfet which in turn is allowing the 12V power line to feed int the circuit connect to the other end of the mosfet – i.e. the FAN! Each pin controls one mosfet, and thus one fan circuit. You can test this by plugging in the USB port again, changing the 5000 in the delay to 1000 and re-uploading. The fans will spin up for less time (1 second) and the LEDs will light up for only 1 second too. Try it with 10000 and you will get 10 seconds on each fan.

If you’ve got this far, your printer is working, woops – “printer”, and you are ready, yes – ready to print something! Time to replace this useless fan firmware with some instructions that know how to turn Gcode into prints and turn this “printer” in a … printer!!

If you’ve made it to this line, then probably something has gone wrong, arrgh! 😭 With so much that could be at fault, I couldn’t say what the issue may or may not be – if you’re having issues at this point, reply with a comment below and i’ll do my best to help out.


  Comments: 6

  1. Jan-Philipp Scholz

    First of all I want to say thank you for all the effort you put into the Build Log! It was very helpfull and I am currently building my own P3Steel by following along the logs.

    There is only one question that remains: You mentioned in another comment section, that you are using the Marlin Firmware. Could you provide us with the firmware files you are using? I think the configuration and confiuration_adv should be enough to get my printer going. Thanks in advance, your help is much appreciated! 🙂

    • Hi Jan-philipp,

      Thanks for the comment and that you’re using the blog to help build your printer – glad it was of use! Yeah, i’ve still to write up the last couple of steps, especially the firmware part, as it’s changed numerous times since I built the printer to now. I think I was on Marlin 1 – RC6(?) and updated numerous times to I think I am now on Marlin 1 RC8. I think Marlin now has an official V2 release now, I am so far behind the times… but when it works – it works, so I don’t rock the boat too much!!

      So I could send you my settings, but I suspect it is missing a huge amount of cool updates from Marlin. In fact they have been asked for in the past, so I still have them here on my work PC and have uploaded them – marlin_rc8_config_and_config_adv.zip for you in a zip file. I would not recommend copy and pasting the file, but looking through to see my numbers and values and using those as a good starting block. I run my printer slow, about 40mm/s to 35mm/s general speed – to keep ripples and ghosting artefacts to a minimum, so the values used for acceleration and jerk are probably conservative. But it’s a start for you any how!

      I really should just write up a post about uploading my Marlin firmware and some rough numbers!!

      Best of luck with the rest of it!


      • Jan-Philipp Scholz

        Thank you Steve for your detailed reply and the firmware files!
        The settings will be a good starting point (together with Toolsons settings). Hopefully this will save me some time while configuration.

        If you get around to writing a new blog post it might be interesting as well if you have changed or improved anything since you build the printer.

        Best regard and thanks again,

        • No problem, glad to help!

          I do intend to install the latest Marlin and take advantage of a lot of it’s new features, like the improved filament M600 swap out code, bed levelling, filament run out sensor etc… I just need to get round to it! One day… one day!


  2. I notice both the hot end and RAMPS cooling fans are connected to the RRD on two different pins (6 and 11, respectively). Looking through your config I only see code addressing turning on pin 6. Is pin 11 (the hot end fan) already the default pin or is more configuration necessary to get it to work?

    • Hiya, thanks for the comment, sorry for the delay!

      In Marlin today, if you set the board to RAMPS I don’t think there’s much to change in the firmware. You need to enable them in config and/or config_adv. Marlin has changed alot since my first posts, so now I think you just enable the feature and I think the mapping of the pins is already right… I could be wrong though – not at my computer to check.


Your feedback