Extract DNA at Home with a 3D Printed Centrifuge


Biotechnology is powerful, but only for those with the tools to experiment with and utilize it. The DIYbio movement seeks to put the tools and techniques used in well-funded laboratories around the world into the hands of ordinary people who have an interest but not the means to investigate biology.

Read articles from the magazine right here on

One of these tools is the centrifuge. Centrifuges come in many shapes and sizes to fit a wide variety of laboratory needs. There are large machines with precise controls for RPMs, G-force, timers of all kinds, and even ones with temperature control. Then there are mini-centrifuges used for simple DNA extraction and quick-spins for mixing the contents of test tubes.

This 3D-printed DIYbio mini-centrifuge was designed to do the latter and has actually been used in a real university biology lab doing real protocols. Building one is easy, and hopefully after you’re done reading this, you will have ideas of how to improve on this one, or maybe the inspiration to tackle other types of otherwise inaccessible and expensive pieces of equipment with 3D printing.

Print the Parts

Figure A. Assembly of the printed parts

Go to F.Lab’s Thingiverse page for the centrifuge to download the STL files. Because of the size of the parts, you may need to run multiple print jobs — this gives you a chance to switch colors like we did (Figure A). Print infill of 30% is recommended. Be sure to duplicate the feet so that you have 4 in total.

Program the Arduino

Figure B. Click for larger version

It’s a good idea to program your Arduino first and test everything out before assembling the entire centrifuge. Upload the code below to your Arduino. Wire everything together as in the diagram (Figure B), but make sure to use only temporary connections between the 3 drone motor wires and the ESC, because you’ll need to disconnect them and reattach them during the assembly process.

#include Servo myservo; int potpin = A0; // analog pin used to connect the potentiometer int val; // variable to read the value from the analog pin int listo = 13; void setup() { pinMode(listo, OUTPUT); digitalWrite(listo, LOW); myservo.attach(9); //pin de control al ESC arm(); // Función para armar el esc } void loop() { digitalWrite(listo, HIGH); //Sierra preparada LED intermitente delay(200); digitalWrite(listo, LOW); delay(200); // reads the value of the potent. (value between 0 and 1023) val = analogRead(potpin); // scale it to use it with motor. Limitado a 100. val = map(val, 0, 1023, 55, 140); myservo.write(val); } void arm() { //Función de armado myservo.write(0); delay(1000); myservo.write(30);...
Sasha Harriet

Sasha Harriet

As content editor, I get to do what I love everyday. Tweet, share and promote the best content our tools find on a daily basis.

I have a crazy passion for #music, #celebrity #news & #fashion! I'm always out and about on Twitter.
Sasha Harriet

Latest posts by Sasha Harriet (see all)


More from Around the Web

Pin It on Pinterest

Share This

Subscribe To Our Newsletter

Join our mailing list to receive the latest news from our network of site partners.

You have Successfully Subscribed!