Precise Peristaltic Pump

We are a student team from different disciplines of the RWTH Aachen
University and have created this project in the context of the 2017 iGEM competition.

After all the work that went into our pump, we would like to share our results with you!

We built this peristaltic pump as generally applicable liquid handling solution for any project which requires transportation of liquids. Our pump is capable of precise dosing and pumping, providing a wide range of dosing volumes and flow rates to maximize possible applications. Through 125 dosing experiments we were able to demonstrate and quantify the accuracy of our pump. For a tubing with 0,8 mm inner diameter and any flowrate or dosing volume within the specifications we could show an accuracy better than 2% deviation from the set value. Given the results of the measurements, the accuracy can be improved even further if the speed of the calibration is adjusted to the required flow rate.

The pump can be controlled without programming knowledge via the built-in LCD display and a rotary knob. In addition, the pump can be remotely controlled via USB by serial commands. This simple way of communication is compatible with common software and programming languages (MATLAB, LabVIEW, Java, Python, C#, etc.).

The pump is simple and inexpensive to manufacture, with all the parts totaling less than $100 compared to $1300 for the cheapest comparable commercial solution we could find. Besides a 3D printer, only common tools are needed. Our project is open source in terms of hardware and software. We provide the CAD files for the 3D printed parts, a complete list of all required commercial components and their sources, and the source code used in our pump.

Step 1: Check Specifications

Check the specifications and the discussion of accuracy attached below.

Does the pump meet your requirements?

Step 2: Gather Components

1x Arduino Uno R3/ compatible board
1x Stepper motor (WxHxD): 42x42x41 mm, Shaft (ØxL): 5x22 mm
1x Power supply 12 V/ 3 A, connector: 5.5 / 2.1 mm
1x Step motor driver A4988
1x LCD module 16x2, (WxHxD): 80x36x13 mm
3x Needle bearing HK 0408 (IØ x OØ x L) 4 mm x 8 mm x 8mm
1x Encoder 5 V, 0.01 A, 20 switch postions, 360 °
1x Pump tubing, 1.6mm wall thickness, 0.2m
4x Foot self-adhesive (L x W x H) 12.6 x 12.6 x 5.7 mm
3x Straight pin (Ø x L) 4 mm x 14 mm
1x Control knob (Ø x H) 16.8 mm x 14.5 mm
1x Potentiometer/ Trimmer 10k
1x 220 Ohm Resistor
1x Capacitor 47µF, 25V

Wiring:
1x PCB (L x W) 80 mm x 52 mm, Contact spacing 2.54 mm (CS)
2x Pin strip, straight, CS 2.54, nominal current 3A, 36 pins
1x Socket strip, straight, CS 2.54, nominal currrent 3A, 40 pins
1x Cables, different colors (e.g. Ø 2.5 mm, cross section 0,5 mm² )
Heat shrink (suitable for cables, e.g. Ø 3 mm)

Screws:
4x M3, L = 25 mm (length without head), ISO 4762 (hex head)
7x M3, L = 16 mm, ISO 4762 (hex head)
16x M3, L = 8 mm, ISO 4762 (hex head)
4x Small tapping screw (for LCD, Ø 2-2.5mm, L = 3-6 mm)
1x M3, L=10mm grub screw, DIN 916
1x M3, nut, ISO 4032

3D printed parts: (Thingiverse)
1x Case_main
2 x Case_side (3D print not necessary => milling/cutting/sawing)
1x Pump_case_bottom
1x Pump_case_top_120°
1x Bearing_mount_bottom
1x Bearing_mount_top

Step 3: Post Processing of 3D Prints

The 3D printed parts have to be cleaned after printing
to remove any residues from the printing process. The tools we recommend for postprocessing are a small file and a thread cutter for M3 threads. After the printing process most of the holes have to be widened by using a suitable drill. For the holes that contain M3 screws, a thread has to be cut with the above mentioned thread cutter.

Step 4: Cables & Wiring

The core of the circuit consists of the Arduino and a perfboard. On the perfboard is the stepper motor driver, the trimmer for the LCD, the 47µF capacitor and connections for the power supply of the various components. In order to turn off the Arduino by the power switch, the power supply of the Arduino was interrupted and led to the Perfboard. For this purpose, the diode which is located on the Arduino directly behind the power jack was unsoldered and brought to the perfboard instead.

Step 5: Hardware Settings

There are three settings that need to be made directly on the circuit.

First the current limit for the step motor driver must be set, by adjusting the little screw on the A4988. For example, if the voltage V_ref between screw and GND in the on state is 1V, the current limit is twice the value: I_max = 2A (this is the value we used). The higher the current, the higher the torque of the motor, allowing higher speeds and flow rates. However, also the power consumption and the heat development increases.

Furthermore, the mode of the stepper motor can be set via the three pins which are located on the top left of the stepper motor driver (MS1, MS2, MS3). When MS2 is at + 5V, as shown in the wiring diagram, the motor is operated in quarter step mode, which we used. This means that exactly one step (1.8 °) is performed for four pulses that the stepper motor driver receives at the STEP pin.

As last value to set, the trimmer on the perfboard can be used to adjust the contrast of the LCD.

Step 6: Test Circuit and Components

Before assembly it is recommended to test the components and the circuit on a breadboard. On this way, it is easier to find and fix possible mistakes.

You can already upload our software to the Arduino, to try all functions beforehand. We published the source code on GitHub:

https://github.com/iGEM-Aachen/Open-Source-Peristaltic-Pump

Step 7: Assembly

The video shows the assembly of the components in the intended sequence without the wiring. All connectors should first be attached to the components. The wiring is best done at the point where all the components are inserted, but the side walls have not yet been fixed. The hard to reach screws can be easily reached with a hex-wrench.

1. Insert the power switch and the encoder into their designated hole and fix them to the case. Attach the control knob to the encoder – be careful – once you attached the knob, it might destroy the encoder if you try to remove it again.

2. Attach the LCD display with small tapping screws, make sure to solder the resistor and wiring to the display before assembly.

3. Fix the Arduino Uno board to the case using 8 mm M3 screws.

4. Insert the step motor and attach it to the case together with the 3D printed part (Pump_case_bottom) using four 10 mm M3 screws.

5. Attach the perfboard to the case – make sure you soldered all components to the perfboard as shown in the wiring diagram.

6. Wire the electronic parts inside the case.

7. Close the case by adding the side panels using 10x 8 mm M3 screws.

8. Assemble the bearing mount as shown in the video and attach it to the motor’s shaft using a 3 mm grub screw

9. Finally, attach the counter support for holding the tube (Pump_case_top_120°) with two 25 mm M3 screws and insert the tubing. Insert two 25 mm M3 screws to keep the tubing in place during the pump process

Step 8: Insert Tubing

Step 9: Get Familiar With the User Interface (manual Control)

The user interface provides a comprehensive control of the peristaltic pump. It consists of a LCD display, a control knob and a power switch. The control knob can be turned or pushed.

Turning the knob allows to select from different menu items, the menu item on the upper line is currently selected. Pushing the knob will activate the selected menu item, indicated by a blinking rectangle. The blinking rectangle implies that the menu item is activated.

Once the menu item is activated, it starts depending on the selected item either an action or allows the change of the corresponding value by turning the knob. For all menu items connected to a numerical value the knob can be held to reset the value to zero or double pushed to increase the value by one-tenth of its maximal value. To set the selected value and deactivate a menu item the knob needs to be pushed a second time.

The power switch will immediately shut down the pump and all its components (Arduino, step motor, step motor driver, LCD), except when the pump is connected via USB. The Arduino and the LCD can be powered by USB, so that the power switch will not affect them.

The pumps menu has 10 items, which are listed and described below:

0|Start
Start pumping, the operation mode is depending on the mode selected at “6) Mode”

1|Volume
Set the dosing volume, is only considered if “Dose” is selected at “6) Mode”

2|V.Unit:
Set the volume unit, options are:
“mL”: mL
“uL”: µL
“rot”: rotations (of the pump)

3|Speed
Set the flow rate, is only considered if “Dose” or “Pump” is selected at “6) Mode”

4|S.Unit:
Set the volume unit, options are:
“mL/min”: mL/min
“uL/min”: µL/min
“rpm”: rotations/min

5|Direction:
Choose pumping direction: “CW” for clockwise rotation, “CCW” for counterclockwise

6|Mode:
Set operation mode:
“Dose”: dose the selected volume (1|Volume) at the selected flow rate (3|Speed) when started
“Pump”: pump continuously at the selected flow rate (3|Speed) when started
“Cal.”: Calibration, pump will perform 30 rotations in 30 seconds when started

7|Cal.
Set calibration volume in mL. For calibration, the pump is run once in calibration mode and the resulting calibration volume which was pumped is measured.

8|Save Sett.
Save all settings to Arduinos EEPROM, values are retained during power off and reloaded, when the power is turned on again

9|USB Ctrl
Activate USB Control: Pump reacts to serial commands sent via USB

Step 10: Calibration and Try Dosing

Performing a proper calibration before using the pump is crucial for precise dosing and pumping. The calibration will tell the pump how much liquid is moved per rotation, so the pump can calculate how many rotations and which speed is needed to meet the set values. To start the calibration, select the Mode “Cal.” and start pumping or send the calibration command via USB. The standard calibration cycle will perform 30 rotations in 30 seconds. The volume of liquid pumped during this cycle (calibration volume) should be measured precisely. Ensure, that the measurement is not affected by drops sticking to the tubing, the weight of the tubing itself or any other interferences. We recommend using a microgram scale for calibration, as you can easily calculate the volume, if density and weight of the pumped amount of liquid is known. Once you measured the calibration volume you can adjust the pump by setting the value of menu item “7|Cal.” or attaching it to your serial commands.

Please note that any change after calibration to the tubing mount or the pressure difference will affect the precision of the pump. Try to perform the calibration always at the same conditions, at which the pump will be used later. If you remove the tubing and install it again in the pump, the calibration value will change up to 10%, since to small differences in positioning and force applied to the screws. Pulling on the tubing will also change the positioning and therefore the calibration value. If the calibration is performed without pressure difference and the pump is later used to pump liquids at another pressure it will affect precision. Remember even a level difference of one meter can create a pressure difference of 0.1 bar, which will have a slight influence on the calibration value, even if the pump can reach a pressure of at least 1.5 bar using the 0.8 mm tubing.

Step 11: Serial Interface – Remote Control Via USB

The serial interface is based on the Arduino’s serial communication interface via USB (Baud 9600, 8 data bits, no parity, one stop bit). Any software or programming language capable of writing data to a serial port can be used to communicate with the pump (MATLAB, LabVIEW, Java, python, C#, etc.). All functions of the pump are accessible by sending the corresponding command to the pump, at the end of each command a new line character '\n' (ASCII 10) is required.

Dose: d(volume in µL),(speed in µL/min),(calibration volume in µL)'\n'

e.g.: d1000,2000,1462'\n' (dosing 1mL at 2mL/min, calibration volume = 1.462mL)

Pump: p(speed in µL/min),(calibration volume in µL)'\n'

e.g.: p2000,1462'\n' (pump at 2mL/min, calibration volume = 1.462mL)

Calibrate: c'\n'

Stop: x'\n'

The Arduino environment (Arduino IDE) has a built-in serial monitor, which can read and write serial data, therefore serial commands can be tested without any written code.

Step 12: Share Your Experiences and Improve the Pump

If you have built our pump, please share your experiences and improvements in software and hardware on:

Thingiverse (3D printed parts)

GitHub (software)

Instructables (instructions, wiring, general)

Step 13: Curious About IGEM?

The iGEM (international Genetically Engineered Machine) Foundation is an independent, non-profit organization dedicated to education and competition, the advancement of synthetic biology, and the development of an open community and collaboration.

iGEM runs three main programs: the iGEM Competition - an international competition for students interested in the field of synthetic biology; the Labs Program - a program for academic labs to use the same resources as the competition teams; and the Registry of Standard Biological Parts - a growing collection of genetic parts used for building biological devices and systems.

http://igem.org/Main_Page

Share

Recommendations

  • Tape Contest

    Tape Contest
  • Epilog X Contest

    Epilog X Contest
  • Organization Contest

    Organization Contest

32 Discussions

0
None
NataliaT

Question 5 months ago on Step 13

I did it! I made some changes to stl files to adapt my parts but it´s done! The thing now is that it´s not pumping....I´ll remove the micro step to full step to guarantee torque firts, but it seems that the rotor+bearings are not colapsing or pressing the tube as required to pump. I tried to lower down the adjustable part (like a bridge) but the pressure was stopping the motor at all or losing steps. How did you ensure the tube compression to have positive displacement of product? Did you experience this? I tried to manually purge the tube or prime it but no news....I need to fix it to have it operational. Thanks for ideas and support.

Capture.JPG
7 answers
0
None
TheClarkJBNataliaT

Answer 4 months ago

Do you have nice soft squishy silicone tubing? What sized tubing did you go with?

0
None
NataliaTTheClarkJB

Reply 4 months ago

it´s silicone based, 9mm external diameter and 6mm internal diamter, and it feels soft

44989835_308699346527336_6945856020585381888_n.jpg
0
None
TheClarkJBNataliaT

Reply 4 months ago

I have the exact same problem. Have been trying different tygon tubing, but the pump does not make a good seal. If I drop the top fitting down tighter, the pump cannot turn. The driver is set to max amps, sure wish I could get it to work like the videos.

0
None
NataliaTTheClarkJB

Reply 3 months ago

Problem solved after redisegning rotor part (green tube housing)

46891395_1950612495060491_2349414000732667904_n.jpg46829599_577076699402055_5540650924445270016_n.jpg46782685_329309527660652_730605354735370240_n.jpg
0
None
sudhir laxmanNataliaT

Reply 7 weeks ago

Hello guys trying to work on this project but my lcd screen goes blank and shows some weird symbols can u help me. if u can give me ur email it will be really helpful

0
None
TheClarkJBNataliaT

Reply 3 months ago

Nice! Do you have STLs for the new part? Is that the 9mm/6mm tubing?

1
None
NataliaTTheClarkJB

Reply 3 months ago

Yes, it´s for A 9x6mm tubing, silicone type 60A shore. Not sure how to share the part here, but send me a message or leave me your mail and I´ll forward it to you.
I want to highlight that it´s pumping perfectly but still having issues with dosing and calibration...I think I´m doing something wrong. the 30 complete cycles are delivering 50gr of water, I adjust this on calibration mode stating the exact amount weighed on a balance, but when dosing later, I´m not getting the exact volume. Will continue trying and come back here just in case. Question, where in the code am I have to change from 30 cycles to 10 maybe?

0
None
TheClarkJB

Tip 4 months ago on Introduction

Tubing specs from the attached image (I had a hard time finding them)
- Up to 4mm ID
- 1.6mm wall thickness

0
None
TheClarkJB

4 months ago

Amazing job! One question, what sized tubing should be used?

1 reply
0
None
TheClarkJBTheClarkJB

Reply 4 months ago

I see it in the jpg at the top:
- Up to 4mm ID
- 1.6mm wall thickness

Silicone tubing, could use something like tygon LFL for longest life

0
None
AdamB454

Question 6 months ago

Would it be at all possible add in the menu dosing times and how much to dose? And or a extra motor?

0
None
NataliaT

Question 8 months ago on Step 5

I´m continuining with your design, perfboard details (pictures from back of the board) not here to confirm some connections but even though moving forward. All my connections are on place, motor fairly moved but nothing else. Now measuring Vref on driver and no V detected, not sure how the driver burnt out. Paying attention to the circuit, ENABLE pin from driver is not connected and is not at the setup of the code, I thought ENABLE was critical to make a motor work. Can you explain me why you are not using it for this circuit so I can learn from this project? Maybe I burnt my popolu due to bad perfbaord connection and not using ENABLe pin. Your answer and a picture from back side of the perfboard with final connections and 12V inlet will help me a lot. Thanks!

1 answer
0
None
iGEM_AachenNataliaT

Answer 7 months ago

I'm sorry, I have no access to the pumps right now and can't send you the picture of the back side of the perfboard. The wiring diagram of step 4 should provide all necessary information.

The enable pin can be left unconnected, since the ENABLED pin is set to LOW (=enabled) by default on the motor driver PCB. https://forum.pololu.com/t/a4988-and-nothing-happ...

There are many good tutorials on how to run a stepper motor using an A4988 driver and an arduino. Maybe this one could help, to get your stepper motor running: https://howtomechatronics.com/tutorials/arduino/ho...

If you are unsure, if your motor driver is damaged, have a look at this discussion: https://forum.pololu.com/t/how-to-check-if-a4988-i...

I would recommend that you test each component (stepper motor, LCD, encoder) of our pump individually using a breadboard and small self written arduino programs. This way you can familiarize yourself with all the functions, learning step by step how to build the pump.

I hope that helps and good luck on your project :)

0
None
NataliaT

Question 8 months ago

Hi, question again! How did you connect power source to the power switch? Did you add a ac-DC female adaptor (wiring the switch to the power female terminal board?) as you are not using arduino power plug anymore? Can you upload pictures of the real perfboard finished (not the diagram) and the power plug solution connected to the switch? The diodo from arduino is really tiny, how did you manage to sold it to the perfboard and to disolder from arduino without burning out the board? Many thanks again for your support and patience!!!

0
None
NataliaT

Question 8 months ago on Step 4

is it possible for you to share a closer pic of the pcb? I´m not able to distinguish the diode you desoldered from arduino on pcb and how everything is connected there. It will be my first arduino project so I´m learning sorry! I want to add 3 more steppers to have a 4 motor pump to dose things on my lab. Do you think that replicating the dsign for one motor but for 4 is possible? I read that I will need to use a I2C adaptor for lcd to decrease de amount of pins used. No idea then about the code, but want to merge other project on instructables (a perisltatic pump system with 4 motors to dose dye and prepare colored paint) with yours. Thanks for your guidance, I love your machine!

2 answers
0
None
NataliaTNataliaT

Answer 8 months ago

thanks for being so gentle uploading the pics!! You rock. I´ve ordered the I2C adaptro to reduce pins and add more motor...Will try to change the code, not sure if I´m gonna make it as I´m so newbie! Will share results with you all if God helps me! LOL

0
None
iGEM_AachenNataliaT

Answer 8 months ago

We are glad that you are interested in building our pump! I added a few close ups to step 4, additionally you can download Fritzing (http://fritzing.org/home/) and have a look at the original wiring file (attached to step 4).

It should be possible to control 4 pumps, if you have enough pins. The additional pumps and the I2C control of the LCD will require some changes in the code, though.

Good luck on your project :)

0
None
StasN3

Question 9 months ago

Thank you for your Peristaltic pump project.

I assembled the pump according to your instructions, but the stepper motor can not turn around (rests on the hose). But when I connect this stepper motor to my 3d printer and rotate the axis using the encoder, it rotates perfectly. Prompt please in what there can be a problem?

1 answer
0
None
iGEM_AachenStasN3

Answer 9 months ago

There are several possible reasons, you could try to narrow down the problem:
Does the stepper motor turn, if no tubing is inserted?

If it does, the torque is too low to compress the flexible tube. Maybe the motor current is too low (check power supply, if it's strong enough, see step 4 => increase current limit). Another possible cause is, that the gap between bearings and 3D-printed part is too small for the tubing (imprecise print, try to increase the gap size using sandpaper on the printed arc, or slightly loosen the screws on the arc).

If it does not turn, there is probably a problem in the wiring or the step motor driver is damaged. (check wiring & step motor driver)