Introduction: Arduino PCR (thermal Cycler) for Under $85

This tutorial will show you how to make a thermal cycler from scratch for about $85. In short, PCR (polymerase chain reaction) amplifies bits of DNA, creating millions of copies of a target sequence. You can use it to test a DNA sample for a specific gene, for instance, to check for genetic modification in food and for hereditary gene testing.

During PCR, a mixture of DNA, primer and DNA polymerase is cycled between three different temperature settings, over and over again. This project uses an arduino to control two high-power resistors to heat up the sample, a computer fan to cool down, and a thermocouple to keep track of the temperature. The design supports two samples at a time, though it could probably be extended to support more.

The parts are all off-the shelf, and the assembly should take a few hours. You will need access to a shop (at the very least a ban saw and drill press).

This project is still a work in progress by Stacey Kuznetsov (stace@cmu.edu) and Matt Mancuso (mcmancuso@gmail.com). Please email us if you have any questions or feedback! Also, huge thanks to Rich Pell, James Lata and the ATX Hackerspace for materials & feedback. 

Step 1: More on PCR

To run PCR, you need DNA, primers that match the sequence you're trying to replicate and polymerase.

PCR consists of 3 steps that are cycled over and over again:

Denaturation (~94C) At this step, DNA 'breaks apart', splitting from a double helix into single strands
Annealing (~60C) Primers bond to the single-stranded DNA
Extension (~72C) Polymerase compliments the DNA, synthesizing strands that are of the target sequence

Each of these phases can be 20-30 seconds long and repeated 30+ times, depending on the protocol. Most protocols also suggest having a longer initial denaturation step and a longer final extension step.

A simple tutorial:
http://www.dnalc.org/resources/animations/pcr.html

There's also a bunch of related resources here: http://www.lab-manual.com/lm_209.htm

The results of PCR can be visualized using gel electrophoresis. DNA samples are loaded into a gel, and a high voltage is applied across it. Because DNA is negatively charged, it will travel through the gel at different speeds depending on its size. This process will effectively separate out the pieces you want, and you can see them by staining the gel. Here's a good tutorial and if you're trying to DIY it, the Macgyver Project is a pretty good resource.

PCR can be performed using 3 water baths (each kept at one of the three temperature settings). A human could physically move the samples from one bath to the next 30+ times. PCR machines were developed to automate the process, but most lab-quality ones cost thousands of dollars. But they don't need to! Today there is a growing number of open source PCR projects, among them OpenPCR (600$), LavaAmp ($200), and the Coffee Cup PCR (350$).

Step 2: Materials

Here's what you need:

2 Wiremound resistors, 150 ohms/50 Watts each (10$ total)
Arctic Silver Thermal Epoxy (14$)
Solid state relay, such as 25A  AC/DC SSR ($8.50)
Aluminum block, final dimensions ~64mm x 64mm x 26mm. check ebay (free - $5)
Arduino board, we used the mini ($20)
MAX31855 breakout (I used this one for $11, but the Adafruit one might be more reliable for $17.50)
Thermocouple wire ($10)
60mm fan ($4)
12V transistor (TIP120 should be fine, $0.70)
12DC, 0.5A power supply ($1)
Regular power cable
Plywood (if you want to make a case)
A few different length bolts and nuts (if you're making the case) we used 6x1" and 2x2" #6 bolts w matching nuts

You'll also be using:
Some wires
Breadboard (small one)
Wire cutters/strippers
Electric tape
Soldering iron/solder
Screw driver
Bansaw & drill press
Laser cutter (if you want to make a case)
Wood glue (if you want to make a case)

Step 3: The Aluminum Block

We chose aluminum to house our samples because it's a really good thermal conductor and also relatively easy to acquire and work with. We machined the center of the block so that the resistors can fit in to 'sandwich' the samples. The outside of the block is cut like a heatsink to allow for faster cool-down.

The images below have our rough dimensions (in mm). Matt was really precise cutting it, but I don't think it has to be super exact.

Step 4: The Circuit Overview

The circuit consists of 1) a solid state relay that drives the heater resistors; 2) a fan, powered by the 12 DC supply and controlled by the arduino through an NPN transistor; and 3) a thermocouple with a MAX31855 breakout

When hooking up the electronics for the first time, I suggest breadboard, not solder. If you end up making a case, you'll have to disconnect and re-connect a few things to make them fit!

Step 5: The Circuit- Resistors

Split and strip the the power adapter as shown in the first image. Hook up the resistors as follows:

Black wire -> pin 1 (AC pin) on the relay
White wire-> one of the resistors. Connect the second resistor in series. Connect the second resistors to pin 2 (AC pin) on the relay.

Connect arduino to the relay
Arduino pin 7 -> pin 3 (+DC pin) on the relay
Arduino GND -> pin 4 (-DC pin) on the relay

Cover all connections w electrical tape!!!

---- some math ---
With 2 150ohm resistors in series, the total resistance should be 300 ohms. So with the U.S. outlet voltage being 120V, the current should be 0.4Amps, which makes the wattage 48Watts. The resistors are rated for 50 Watts, so this should be OK, but please double check the math, especially if your outlet runs on 230V (you'll need different resistors with higher Wattage).

Step 6: The Circuit- Fan

This is a basic setup where the fan is powered by the DC power supply, which is controlled by the arduino through an NPN resistor. ITP has a great tutorial on that. Here's the project set-up

Arduino pin 9 -> transistor base
Fan black wire -> transistor collector
Arduino GND-> transistor emitter
Arduino GND -> ground on the DC adapter (black wire)
Fan red wire -> red wire (power) on the DC adapter

Step 7: The Circuit- Thermocouple and MAX31855 Breakout

There's an awesome tutorial on how to set up the thermocouple and the breakout. Our project pretty much just followed it exactly, so the connections are:

Arduino pin 4 -> DO pin on the MAX31855 breakout
Arduino pin 5 -> CS pin on the MAX31855 breakout
Arduino pin 6 -> CLK pin on the MAX31855 breakout
Arduino GND & VCC -> to GND and VCC on the MAX31855 breakout

The thermocouple screws into the breakout board (yellow wire to the +).

Step 8: Assembly

Use the thermal adhesive to attach the resistors to the notches in the aluminum block. The adhesive takes about 5 min to set, make sure the surfaces are flush (this will determine how fast you can transfer heat to the sample).

You can also use the thermal adhesive to glue the end of the thermocouple wire to the block (that's where the temperature is sensed). You'll get better accuracy if you embed the wire in the block. You can drill a small hole at the top, between the PCR tube holes and attach the thermocouple to that.

Step 9: Test It With Code

You can take a look at the project code here. You will probably also need the max6675 library. The basic idea is that you pulse current across the resistors to heat up (by setting Arduino pin 7 to high); and turn on the fan to cool down (by setting Arduino pin 9 to high). You can check the temperature by polling the thermocouple.

The main thing is to not overheat (or even blow up) the resistors and sample. ***You never want to leave current running through the resistors for long periods of time!!!*** The thermocouple will not instantly respond to changes in temperature. Our 'heat up' code runs current through the resistors for about half a second and then checks the thermocouple. Every 15 seconds, the system times out and waits for a constant temperature to be reached. This ensures that we catch thermocouple delays, and also let the aluminum block heat evenly. Our heat-up code also has a few checks to make sure the thermocouple is properly connected, not heating up too fast, not overheating, etc.

Also, safety first, ***you don't want to leave this on running without watching it!!***

When cooling down, remember that the fan will continue moving for a few seconds after it's shut off, so it's best to shut off the fan 1 or 2 degrees before ideal temperature is reached.

The temperature is held constant by pulsing the resistors on for a tiny fraction of a second and constantly checking the temperature values. Given the limitations of the thermocouple and Arduino, you can get accuracy to +/-0.5C. However, since the Adafruit website reports a precision or +-2°C, you may also need to calibrate your thermocouple with an actual thermometer first.

The full 32 cycles take about 3 hours (depending on how the case is set up).

Step 10: Case

This is sort of optional, but casing does make the heat-up times way faster. We used BoxMaker to make a simple box, and modified it a bit. We added a bunch of holes for ventilation on the front and sides. We also added holes for mounting screws for the fan in the back. The bottom piece has 2 screw holes to attach the relay, and 2 more holes for taller screws for the aluminum block to sit on. The top consists of 2 separate pieces for easier access. You can grab the VSD file.

For the case material, wood or plywood should be fine because it's a pretty good insulator.

Once you have the pieces laser cut, you attach the relay to the bottom. User shorter screws for the relay. Attach the fan to the back piece, making sure the fan sits inside the case.

Then you can use wood glue to attach the bottom, sides and back together.

The aluminum block sits on top of the two taller screws. We drilled 2 extra holes at the top and bottom of the aluminum block to make it fit more snugly (about 48mm apart).

You may need to re-assemble some of the circuitry to make feed the wires through the case. The front and top go on last.

Step 11: Run It!

You can test it out using mineral oil, or you can spend $$ and get a real PCR kit such as this one. You can speed up the cool-down times by putting some ice behind the fan. Currently, 32 cycles take about 3 hours.