Introduction: 3D Printer Heated Build Plate Arduino Controller

NOTE: Some of the components for this instructable are no longer available. I will be posting an updated version shortly. In the mean time, please use this instructable as a learning guide for your own design.

Heated build plates allow printing larger parts while minimizing warping. They also help hold the part while printing and allow for easy removal after the plate is cooled. There are many good instructables for creating heated build plates. A heated build plate requires a flat glass or metal build surface with an integrated resistive heating element, a high current power supply, and a method to control the current supplied to the build plate to maintain the desired temperature. Temperature control units commonly use relays which open and close depending on the plate temperature. Relays generally result in considerable temperature overshoot/undershoot because the current is either completely on when the relay is closed or completely off when it is open. The high current relays also tend to be expensive. Other methods based on PWM (pulse width modulation) can provide better temperature control because the on/off cycles are much faster than a relay is capable of doing, but they generally require building a custom circuit board. This instructable describes a robust, easy-to-build PWM heated build plate control unit based on an Arduino Uno microcontroller and an inexpensive motor drive shield.

A list of parts needed for this project includes:

  • Arduino Uno Microprocessor ($10)
  • Monster Moto Shield VNH2SP30 30A Motor Driver Module ($10 - make sure to shop around for best price)
  • DC Power Supply 12V 30A ($20)
  • PCB Heatbed RepRap MK2a ($20)
  • BCP NTC3950 100K Thermister (5 for $8)
  • 9 kohm 1% resistor
  • Silicone Wire 10 AWG black/Red ($10)
  • Thermal grease
  • Kapton tape
  • Toggle switches, LED (optional)
  • 3D printed case (optional)

Step 1: Wire Up the Motor Shield Power Cables

The motor drive shield is has two motor drive chips, but we only need one to drive the heat-bed. The outputs for driver chip 1 are labelled A1 and B1. Solder lengths of 10 gauge silicone wire to these outputs, black to A1, red to B1. (The polarity really does not matter for this application.) Solder the other ends of the wires to the power inputs of the PCB heat-bed.

Solder lengths of 10 gauge cable to the power inputs of the motor shield labelled ' + ' and ' - '. Attach the other ends to the appropriate screw terminals of the power supply. You can add a 20A fuse into the positive supply wire to protect the circuit and power supply and yourself.

Step 2: Wire the Thermistor

There is a very nice write-up about thermistors here:

Basically, we need to solder the thermistor wires (the thin white wires in the above photos) between +5V from the arduino and an analog pin A5 (or another pin of your choice). We also need to solder a 9kohm resistor, visible in the photo, between A5 and ground. The voltage on A5 can be read by the arduino and translated into a temperature in code.

The measuring end of the thermistor should be kapton taped to the underside of the heated build plate, near the center. Use some thermal grease between the thermistor and the build plate for good thermal contact and more accurate temperature measurement.

Step 3: Add Control Inputs (Optional)

If you want to add switches to control features such as turning the control on/off or setting the temperature set point for PLA or ABS , you can solder some wires to the analog or digital pass-through pins on the motor shield. These pins simply connect to the corresponding arduino pins and can be read in code as described later. I added two switches and I used glue from a hot glue gun to relieve stress on the solder joints. I also added an LED output to monitor when the unit is heating. The switches simply switch an arduino input pin to ground when closed (set the pins to pull up internally). You can detect when the pins are grounded in code and do something like set the plate target temperature or turn the system on/off. The LED is powered by an arduino output pin through a current limiting resistor in standard LED fashion. You can see in the code that I used the following Arduino pins for my switches and LED:

int startPin = 11; // turns heater on/off
int tempPin = 12; // sets temp PLA or ABS
int ledPin = 13; //controls LED

Step 4: Attach the Motor Shield to the Arduino

You may have to solder the headers onto the arduino at this point. Be careful not to short any pins with solder. Also try to keep the headers straight and lined up properly. It is sometimes useful to plug the loose headers onto a spare shield to hold them in place while soldering them to the arduino board.

Step 5: Program the Arduino

The attached program contains all of the necessary code to control the heated build plate. Use the standard arduino development environment on your PC or MAC to upload the code to the arduino micro controller board using a USB cable ( You may have to adjust the code if you do not want to use control switches or an LED status light. This should be straightforward if you study the code a bit.

Also, since the control unit is not integrated into the 3D printer, it does not know when the print is completed. There is therefore a maximum heating time after which the heat-bed automatically turns itself off. You can adjust this time based on the expected maximum printing time for the part you are printing. A welcome improvement might be to add a motion sensor to detect movement of the print head. When the print head stops, the heat-bed can power down.

Step 6: Add a Case (Optional)

Since you probably have a 3D printer, you can print out a case for your heated build plate controller using the attached .stl files. I recommend printing the case after you get the heated build plate set up and working.


First Time Author Contest

Participated in the
First Time Author Contest