Categories: let's build a lab

thermocycler v 0.2 w SW

The last prototype gave me an idea of the component layout so I came up with this final diagram for its circuit:

wiring diagram:


Crafting the main heating chamber for small PCR vials proved to be a challenge. I couldn’t use 3D printing as I needed a metal material that would conduct heat very well. I chose aluminum, as it is easy to cut using a CNC machine (which was also the reason I decided to get one in the first place).

note: The heating chamber could have been made using a piece of metal sheet with some stacked bolts as a vial holder, but I wanted a machine that performed well. A chamber that is not a snug fit will limit the temperature’s rate of change.

I had to fit the dimensions to specific 0.2 mL mini-vials intended for use with PCR. Fortunately, the manufacturer of these vials provides exact dimensions and a drawing which I used to 3D model the vial. This model was later used to cut the pocket into a cylinder (shown in the pictures below).

pictures: 3D modeling the heatblock in Fusion360 & generating trajectories for CNC machining:

I could fit nine vials onto the same area (30×30 mm given the size of the Peltier heating element), but to start, I wanted to make my life easier by giving myself more room around the cylinders. Also, I had never cut anything other than wood materials and was nervous about cutting aluminum with small-diameter tools. Only four vials gave the cutting tool more wiggle room. If the thermocycler works, upgrading the chamber for nine vials will not be difficult.

pictures: raw aluminum block machining

a finished heatblock:

wiring it up!

Before final assembly, I checked if all systems are working on a breadboard again and then soldered everything neatly on a prototype circuit board.

chamber & lid asembly

Finally, we can move on to mechanical construction and assemble everything together. From the last prototype test, I found out that I needed more power and a bigger cooler! The whole construction was then assembled around those coolers in a tower-like system, making it stable and sturdy.

Some clamps and parts were 3D printed from ABS, which can withstand around 100 C without deforming. Initially, I was hesitant to use ABS as clamps and crimps, but after testing it beyond its temperature limit towards 200 C, I saw there was no reason not to use it. In PCR reactions, there is never a need to go above the boiling point of a sample anyway.

control parameters & software

Our thermocycler would be useless without reliable control of parameters. One option would be to re-upload the code to Arduino with different parameters every time. I considered this to make my life easier, but then after playing around with controlling Arduino via USB serial PORT, I decided to make my own software to feel better about this project. Proper design needs proper control!

What parameters at min. we need to control each reaction?

  1. initial denaturation temperate + duration
  2. denaturation temp. + duration
  3. annealing temp. + duration
  4. extension temp. + duration
  5. final extension temp. + duration
  6. total cycle count

note: I tried different programming languages for USB Serial PORT communication, but making UI in non-UI based languages was a pain to go throught so I opted to use an very unlikely way of going about it: UnrealEngine4 ( a game engine intended for a creation AAA looking games, running on C++, but has an ok UI-building layer and there is a plugin UE4Duino, which I can recommend!)

Even if its truly an oversized behemoth for its purpose, it will save me time as I am already fammiliar with it and also allows me to usea lot of fancy animations and WYSIWYG aapproach just to get asthetics right, as well!

Making software for controlling thermocycler was straightforward using UE4. I did not need any C++ for this and could use UnrealEngine’s native Blueprint visual scripting language.

The software consists basically only of:

  1. serial read
  2. serial print
  3. draw graph
  4. button to start / stop / connect

pictures: a few snippets of the software side of things look in UnrealEngine BP & final result:

picture: a final UI layout:

As you can see, there are two graph lines representing the temperature of the main heatblock and the lid separately to ensure that everything is in order.

That’s it! It works and I am satisfied with the results and parameters it has achieved.

Final parameters & conclusion:

– final rate of temperature change is 3C/s @ 8A of current and 8,5 V (could achieve higher by feeding more current in, by I will prolong peltier’s lifespan by going little slower
– temperature stability is around -+ 1C
– lid is much more stable then main heatblock, which was much harder to PID tune (because of higher total thermal mass) I might revisit oscilations in the main chamber temperature later

Arduino code:

final arduino code (github)