Open Source Thermal Cycler

A thermal cycler currently being developed for use as a Polymerase Chain Reaction (PCR) machine

Similar projects worth following
The thermal cycler we have built is capable of cycling to temperatures close to 100 degrees Celsius, or of holding at one temperature for a prolonged period of time. It has a heated lid, a 16 sample copper thermal block, a screen that displays the temperature, run time, and current cycle, and more. The end price is around $200.

PCR is used in biology to amplify small amounts of DNA to measurable levels. Applications include testing for HIV genes in the blood, amplifying DNA from a crime scene, testing for specific disease alleles, and determining paternity. This device we have built could be used in schools, in low-budget labs such as those in developing countries, and for interest, at home.

Keep in mind that it does not need to be used as a PCR machine. A few modifications and this could be a hot plate, or a set-up for automatic distillation. If you need a variable source of heat for any application, you can modify this device to make it suit your needs.


Check out our demo video here:

The thermal cycler is set to cycle to three different temperatures and holds for 15 seconds. The temperatures and hold times can be adjusted in the code. Below you will find the temperature profile of the thermal cycler as done in Matlab.

The microcontroller (Atmega 32U4) receives temperature data from a thermistor within the heated lid and from a thermocouple within the thermal block itself. The microcontroller uses this temperature data to regulate the temperature of the heated lid and to cycle the thermal block temperature to the desired levels. Once the thermal block reaches the specified temperature, it holds at a defined interval. The temperature and hold interval can only be specified in the code right now, but we're working on being able to input that information directly from an encoder. The microcontroller switches the Peltier from heating to cooling or back again via relays once the block finishes its hold, thus cycling the temperatures back and forth.

The microcontroller also outputs information to the screen. The screen displays information such as run time, number of cycles completed, temperature, and stage in current cycle. There are two buttons: one to start the cycler and a controlled stop. The cycler stops itself when it finishes a user defined number of cycles.

Below you will find the systems design document.

Breakdown of components


The thermal cycler is powered by a 15V 10A modular power supply. The power runs to two relays which are switched back and forth, depending on whether the Peltier is to be heating or cooling at the time. The power supply also powers the fan and circuit board.

Rather than the one we used, we recommend a power supply more like this one:

It is much safer and the project will be updated as time goes on with this power supply.

Heated Lid

The heated lid uses nichrome wire to generate heat through resistance. The temperature is monitored through a thermistor embedded within the heated lid. The microcontroller receives temperature data from the thermistor and can adjust the voltage flowing to the heated lid through a mosfet, thus regulating the heat generated by the nichrome wire.

Thermal Block

The thermal block in our design is made of copper but one can substitute any metal with high thermal conductivity. The current design ca be improved by reducing the amount of material between the bottom of the wells and the heating element. We intend to modify the design in the future.

The Screen

The screen is a Nokia 5110/3310 monochrome LCD from Adafruit. The tutorial for setting up the screen can be found here, courtesy of Adafruit:

A picture of the screen in action is below: 

The Software

The source code can be found here:

Everything was prototyped using an Arduino Uno and a breadboard before being adapted to a PCB controlled by an Atmega 32U4.


The schematic for the circuit board can be found here:

We did all the work in Eagle CAD and sent the board to Itead Studios to be developed. The parts list for the circuit board can be found in the zipped folder in the Dropbox.

View all 17 components

  • Made PCB

    Katherina Baranova08/19/2014 at 01:22 0 comments

    Now that we had all the components on the breadboard, we created the PCB layout in Eagle. The circuit schematics for the breadboard can be found in the link to the Dropbox folder below. The files are meant to be viewed in Eagle.

    The schematic for the parts is shown below, as well as a screen shot of the PCB in Eagle. 

    We added an encoder in the circuit which we intend to use to allow the user to set the temperature and scroll through options but have not written it into the code as of yet.

    We then sent the circuit diagram to Itead studio:

    They sent us the finished board. We soldered on all the components, programmed the Atmega using our previous code and the Arduino IDE. These tutorials explain how to do it nicely:

    We then connected everything to the PCR and we now have a working prototype. The next step will be to design and build a case. We also intend to make an interactive screen with options for temperatures and holding times, as well as an option for saving frequently used programs. We intend to improve this project as time goes on so we have a great thermal cycler!

  • Created heated lid, buttons, and set up cycling

    Katherina Baranova08/19/2014 at 01:16 0 comments

    We wrote in the code for the cycling, buttons, and heated lid at this stage. We used a switch case to define the three cases for our cycler: heating to temperature 1, cooling to temperature 2, and then heating to temperature 3. We used 95 degrees C, 55 degrees C, and 75 degrees C for our temperatures.

    At this stage, the thermal block did not hold or stop after a predetermined number of cycles. It just went to our defined temperatures. It displayed the temperature on the screen but nothing else.

    We set up the heated lid and buttons now as well. We looped Nichrome wire through a bread board and wrapped it in heat resistant tape. We set up the thermistor using this tutorial:

    And this temperature table:

    We set up the buttons using this tutorial:

    We also set up a buzzer at this time that would alert us if the temperature went above 100, for debugging purposes.

  • Set Up Various Breadboard Components

    Katherina Baranova08/19/2014 at 01:15 0 comments

    For prototyping, we set up the various electrical components of our PCR on a breadboard controlled by an Arduino Uno.

    We set up the thermocouple and screen using the tutorial provided here: for the thermocouple and here for the screen.

    We also set up the power supply, relays, and fan. The power supply is connected to the relays to control the peltier. It is also connected to the fan to power it. The relays are controlled by the arduino in response to the block temperature. We set up the relays to switch the peltier from heating to cooling at defined intervals, not through temperature sensing at this time, just to test if it works.

  • Cut Thermal Block

    Katherina Baranova08/19/2014 at 01:13 0 comments

    About two years ago we began this project with a lone thermal block.

    Our thermal block was generously donated by the physics machine shop at the University of Western Ontario. They donated the copper, and manufactured our thermal block to our specifications. We provided them with an autocad drawing, shown below:


    The first design proved to be inefficient, with an overly large bottom. In the future, we intend to modify the block design to reduce thermal mass.

View all 4 project logs

Enjoy this project?



srinivasan wrote 06/13/2017 at 12:26 point

I wanted to know K type thermocoupler is preferred than the other ones.

  Are you sure? yes | no

Liam Marshall wrote 01/06/2015 at 18:45 point

This is really cool! One question though: Where'd you get the heater block?

  Are you sure? yes | no

Katherina Baranova wrote 01/06/2015 at 22:53 point

I'm a student at the University of Western Ontario, and the Western Physics and Astronomy Machine Shop generously donated the copper and machined the block to our specifications.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates