Introduction: 3D Printed Syringe Pump Rack

This instructable serves to document the build process of a 3D Printed Syringe Pump Rack. The rack is composed by 5 Syringe Pumps, with this set-up you can have 2 continuous flow systems and one remaining pump (if you have the proper tubing's and valves).

A Syringe Pump is normally used to gradually administer small amounts of fluid to a patient or for use in chemical and biomedical research. Normally they allow for infuse and withdraw capabilities.

Here are the main features of this particular 3D printed Syringe Pump Rack:

- Open hardware/software

- Extremely compact size ( 7cm movement range )

- High precision lead-screw and nut

- Low cost (300€ for the 5 syringes)

- Simple to use (command line interface)

- Simple to replicate

- Minimal clean Design

Check out the videos:


With loud disco music :)

Without the loud disco music :)


Step 1: 300 USD Vs 30000 USD Syringe Pump Rack

"The most popular use of syringe drivers is in palliative care, to continuously administer analgesics (painkillers), antiemetics (medication to suppress nausea and vomiting) and other drugs. This prevents periods during which medication levels in the blood are too high or too low, and avoids the use of multiple tablets (especially in people who have difficulty swallowing). As the medication is administered subcutaneously, the area for administration is practically limitless, although edema may interfere with the action of some drugs.

Syringe drivers are also useful for delivering IV medications over several minutes. In the case of a medication which should be slowly pushed in over the course of several minutes, this device saves staff time and reduces errors.

Syringe pumps are also useful in microfluidic applications, such as microreactor design and testing, and also in chemistry for slow incorporation of a fixed volume of fluid into a solution. In enzyme kinetics syringe drivers can be used to observe rapid kinetics as part of a stopped flow apparatus. They are also sometimes used as laboratory media dispensers."

http://en.wikipedia.org/wiki/Syringe_driver

The 30000 USD Syringe Pump Rack

The neMESYS syringe pump system is probably the most advanced system on the market, extremely smooth and pulsation free fluid streams in the range of millilitres or even nano-litres per second.

A rack of 5 pumps and software cost around 30.000USD, i have already seen one working and it looks and performs outstandingly , have a look this promotional video .



The 300 USD 3D Printed Syringe Pump Rack (5 Syringes)


Costing 100 times less, i present the 3D Printed Syringe Pump Rack, featuring a very compact system, a Teflon coated threaded screw for precision, easy to replicate and is open hardware/software. For most application this units work fine, it has 0.5ul resolution on a 5ml syringe.

NOTE: The neMESYS system outperforms the 3d printed version in all aspects. This is just a price comparison to get some perspective.

Step 2: The Open Hardware Design

DOWNLOAD THE 3D SKETCHUP FILE FOR ALL THE DETAILS


The Design of the System is minimalistic, and thought out having in mind it would be 3D printed, so for that reason the pump is composed by 2 main parts, the pump's body and the pump's carrier. The idea is to 3D print as few as possible components, and by doing so, maintaining the lest possible mechanical misalignment's.

The 3D printed Syringe pump is very small compared to other commercial syringe pumps.

A single Pump is designed to operate independently from the other pumps on the rack. Simultaneous pump movements are done using software scripts.

The designs allows for 5ml 10ml and 20ml syringes to be lodged onto the pump. The design as a open hardware logo on the front.

Step 3: List of Materials

In order to build a 3D Printed Syringe Pump Rack you will need the following items:

- Filament for the 3D printer - 10€

- 5 USB mini Cable (1 for each pump) - 10€

- 15 cylindrical 5mm diameter Neodymium magnets ( 3 for each pump) - 2€

- 5 Small Nema Stepper 17 Motor 38mm length 4000gr/cm torque ( 1 for each pump) - 50€

- 10 Small hall effect sensors (2 for each pump) - 4€

- 5 Arduino Nano V3 ( 1 for each pump) - 15€

- 5 Pololu Micro stepping driver ( 1 for each pump) - 10€

- 5 Perception Teflon coated Miniature Lead screw (1 for each pump) - 80€

- 5 Lead Screw Nut (1 for each pump) - (80€)

- 10 10cm grounded hardened (H7 or H6) 6mm precision round rod (2 for each pump)- 20€

- 10 copper bearings 6mm interior (2 for each pump)- 10€

- 15 M3 screws and nuts (3 for each pump) -1€

- 1 meter Shrink sleeves -1€

- 4mm inner 6mm outer diameter Vinyl Tubing (5cm) -1€

- 1mm wire (for the motor lead-screw coupling) - 1€

- 12V power supply 2 amps per motor - 13€

- 5 Syringe 5ml 10ml or 20ml (1 for each pump)- 2€

- 10 10K ohm resistors (2 for each pump) - 1€

- 5 100uf Capacitor (1 for each pump) - 1€

Step 4: Tools and Machines

Here is the list of tools and machines necessary to help build the pumps:


- A 3D Printer or a 3DHUBS near you

- Cutting saw (to cut the motor shafts and lead screw)

- A kit of files (to file down some plastic from the 3D printed parts)

- A set of Screw drivers

- Soldering iron and wire

- Multimeter

- Computer

Step 5: 3D Printed Pump Parts

The 3D printed parts are printed with 80% infill for toughness and durability. They where printed using PLA, but can be printed using any other plastic.

Here is the list of 3d Printed parts that constitute a single Syringe pump:


- Pump Body

- Syringe Carrier

- Cable Enclosure

- Motor Enclosure

- Electronics Enclosure

Step 6: Pump Body

The Pump Body is the main part of the Pump. It holds the motor and the guide/transmission systems.

The body also holds the front part of the syringe.

The design of the body allows for 2 hall sensors to be inserted inside its chassis.

On the side of the body, there is space for inserting the cables from the hall sensors.

Print notes:

- 80% infill

- 6 external perimeters (0.4mm nozzle)

- support on


Step 7: Syringe Carrier

The Syringe carrier is the moving part of the system, it serves the function of moving the syringe back and forward.

It has a small hole on its top right corner where magnets will be inserted.

It has two holes for copper bearings and one for the nut screw.


Print notes:

- 80% infill

- Pint's best with face down

- 6 external perimeters (0.4mm nozzle)

- Support on

Step 8: Cable Enclosure

The cable enclosure is just a piece of plastic to glue or melt onto the pump body in order to hide the cables.


Print notes:

- 20% infill
- 3 external perimeters (0.4mm nozzle)

Step 9: Motor Enclosure

As the name suggests, the motor enclosure function is to enclose the motor, it has a nice open hardware logo on its front.

Print notes:

- 20% infill

- 3 external perimeters (0.4mm nozzle)


Step 10: Electronics Enclosure

The electronics enclosure has a USB mini door and a circular hole for powering the motor with 12V. It is just the right size to fit an Arduino Nano without the need of screw or glue.

Print notes:

- 20% infill

- 3 external perimeters (0.4mm nozzle)

Step 11: The 3D Printed Syringe Fixation Parts

The 3D printed syringe fixation parts are composed by 2 parts, the rear and front syringe fixation parts that we shall identify from here onwards as:

- Syringe_holder_A

- Syringe_holder_B

The rear fixation part serves the purpose of fixating the rear part of the syringe to the syringe carrier part.

The front fixation part serves the purpose of fixating the syringe to the body of the pump.

These fixation parts fit tightly fit the inside the space between the syringe and the pump.

They are fixated by using pressure, in order to fixate the syringe on-board the pump.

These parts can be modified to suit different syringes, the only modification necessary is the width of the vertical walls.

Print notes:


- 40% infill

- 3 external perimeters (0.4mm nozzle)


Step 12: Inserting the Magnets

The 3D Printed Syringe Pump was designed to have end-stop protection at the limits of the pumps movements, this is done using a magnet on the moving part and 2 hall sensors on both ends of the movement limits.

Instructions:

- Using a set of pliers push 3 neodymium magnets into the magnet socket as shown on the photos.

- Remember to align the magnetic poles always facing the same side on all pumps

Step 13: The Guide System

The guide system used is composed by two round rail calibrated reinforced shafts and two oil impregnated brass bearings.

Instructions:

- The 100mm shafts are inserted inside the passages of the pumps body, as seen on the figures.

- The next step is to insert the central pump part with the bearings in place, and lock the shafts in the housing in front of the pump.

Step 14: The Transmission System

The transmission system is composed by a motor a lead-screw and a nut.

Instructions:

- Insert the nut screw inside the syringe carrier

- lock the nut with 2 threaded screws (M2 20mm) and 2 M2 nuts

- Make sure the nut is perpendicular aligned with the syringe carrier (if not, use the file to clean some support material)

Step 15: Shortening the Motor Shaft

Instructions:

- Using a saw, shorten the stepper motor's shafts to 1.5cm in length

NOTE: be careful not to shorten it too much or else you yell render your motor useless.

Step 16: Motor Shaft to Lead Screw - Coupling

The motor shaft and the lead-screw have to be "attached" to each other. This can be done using a flexible shaft coupler. Flexible shaft coupler are quite bulky, and the miniature ones are very expensive. So i implemented a DIY flexible shaft coupler using Vinyl Tubing and Wire.

Instructions:

- Cut 20mm of Vinyl tubing (4mm interior 6mm exterior diameters)

- Insert the Vinyl tubing on to the motors shaft

- Using a strong wire, spin several loops along the motor shaft and tighten using a pair of pliers

- Screw in the lead-screw onto the Vinyl tubing until the 2 shafts collide.

- Using a strong wire, spin several loops along the Vinyl tubing and tighten using a pair of pliers


NOTE: This solution works remarkably well, and results in a strong flexible motor shaft coupling.

Step 17: Stepper Motor Fixation

Instructions:

- After the motor shaft lead-screw coupling is done, you just simply screw the lead-screw inside the screw nut. After this you need to lock the motor in place using 3 M3 16mm screws.

Step 18: Wiring the Linear Hall Effect Sensors

The linear hall effect sensor has 3 pins, VCC GND and SIGNAL. We are using 5V for VCC. The hall sensor works great with the neodymium magnet, it can detect the magnet when it 0cm to 4 cm away.

Instructions:

- Solder 3 wires to the sensor

- Use shrink tube to isolate the pins from each other

- Insert the sensor inside their housings

- Careful align the wires inside the wire housing and attached the 3D printed wire enclosure

- Using a soldering iron, solder the wire enclosure to the pump body. (be careful not to melt the plastic in a ugly way)

Step 19: The Electronics Wiring Diagram

The pump circuit is very simple, here are its components:

- Arduino Nano V3 micro-controller

- Pololu Micro Stepping Driver

- Nema 17 Stepper motor 4000gr/cm 38mm length (2 coils 4 wires)

- 2 Hall effect sensors (3 pin Vcc GDN signal)

- 12V power supply

- 2 10K ohm resistors

- 1 100uf Capacitor

Step 20: Wiring the Electronics

Follow the diagram in order to make all the necessaries connections.

Instructions:

- Solder all connections from the Motor to the micro stepper driver.

- Solder all the connections from the motor driver to the Arduino Nano.

- Solder the hall sensor's to the Arduino Nano.

- Solder the external power supply connector to the Micro stepping driver.

Step 21: Motor and Electronics Enclosure

Instructions:

- First you need to insert the motor enclosure onto the motor, be careful with the wires.

- Next you need to solder all the necessary wiring.

- Than you just need to insert the electronics onto the electronics enclosure.

- The last step is to solder the plastic using a soldering iron (be careful not to melt the plastic in a ugly way.)

Step 22: Universal Syringe Mount

The 3D printed Syringe Pump can fit the following syringe sizes:

- 5ml

- 10ml

- 20ml

I speculate glass syringes have better performance than cheap plastic ones, i have not tried glass ones, so i don't know if the fit.

Step 23: 12V Power Supply

In order to power the pumps/stepper motors we are going to need 12V. A PC power supply is perfect for the job, because it has a lot of current, and we will be needing 2A per pump - 5 pumps 10A.

Instructions:

- Open the power supply using a screwdriver

- Cut off exterior cable connectors

- Solder the green and one black wire together in order to activate the Power Supply when turned on using the switch.

- Bundle together same colour wires and isolate using some electrical tape.

- Bundle together one black and one yellow wire (make 6 groups) and position them outside the Power Supply

- Close the Power Supply

- Solder connectors on the ends of the yellow and black wires.

Test for 12V, turn on the power supply and test for 12V on all 6 terminals.

Step 24: The Mathematics - Relation Between Motor Steps and Litres

Before we go any further i need to explain the relation between motor steps and litres of liquid pumped by the syringe pump.

The facts:

The NEMA 17 stepper motor we are using has 200 steps per revolution, this means that each step is 1.8º.

The micro-stepping driver allows 16 micro-steps (intermediate) in one stepper motor step.

The motor is attached to the lead-screw, the lead-screw has a 1.22mm pitch. This means that for each 360 rotation of the lead screw the nut screw will dislocate 1.22mm.

The relations:

The system resolution is given by the following equations:

200 steps per revolution x 16 microsteps = 1.22mm

1 step = Xmm

3200 steps = 1.22mm

1 step = X

X = 1.22/3200

1 motor step = 0.00038125mm

1 motor step = 381.25nm (nanometres)

The syringe inner diameter:

The area of a circle is given by the following equation:

PixRxR.

The volume of a cylinder is given by the following equation:

PixRxRxH

A 5ml syringe has 12mm inner diameter, this means that the radius is 6mm.

So if the motor moves 1 step (381.25nm) the total volume dislocated will be as follows:

3.14 x 0.06m x 0.06m x 0.00000038125m = 4.311x10^-9m3 (cubic meter) is the resolution for a 5ml syringe

Step 25: The Arduino Stepper Library

Stepper motors are great for precision, as we just calculated a single step results in nanometres of dislocation. In order to run a stepper motor we are going to use the Acellstepper library "developed" on a paper written by David Austin. More info here:

http://fab.cba.mit.edu/classes/MIT/961.09/projects...

The Acellstepper library is under a GPL license, and has it home here:

http://www.airspayce.com/mikem/arduino/AccelSteppe...

This library allows for extremely slow stepper speeds, with is perfect for any syringe pump. Without this library this project could not have been developed, so for that reason I would like to thank the developers.

Step 26: Instaling the Firmware

Now that you have the pump wired and everything connected, connect the USB cable to the Arduino Nano to you PC and upload the syringe pump's code.

Don't forget to import the Acellstepper library to your Arduino folder.

The final code should be non blocking and should constantly checking the hall sensors for safety reasons.

NOTE: This is not the final code, you can use it for testing, i will update the code as soon as i can.

#include <AccelStepper.h>

AccelStepper stepper(1, 9, 10);  // driver step direction

char  userInput[21] = {'d','0','0','0','0','0','v','0','0','0','0','0','v','0','0','0','0','0','d','1','\r'};

int deslocamento=0;  int volume=0;  int mspeed=1;  int mdirection=0;  int data=0; int microstepping = 16;  int   msg_lenght = 0;

void setup(){  Serial.begin(9600);   stepper.setMaxSpeed(1000.0);   stepper.setAcceleration(1000.0);   stepper.setCurrentPosition(0);}

void loop() {
    delay(500);
    
    if ( data==0 ) readuserdata();
    
    if ( data==1 ){
      deslocamento = char(userInput[1] - 48)*10000  + char(userInput[2] - 48)*1000  + char(userInput[3] - 48)*100  + char(userInput[4] - 48)*10   + char(userInput[5] - 48);
      volume =       char(userInput[7] - 48)*10000  + char(userInput[8] - 48)*1000  + char(userInput[9] - 48)*100  + char(userInput[10] - 48)*10  + char(userInput[11] - 48);
      mspeed =       char(userInput[13] - 48)*10000 + char(userInput[14] - 48)*1000 + char(userInput[15] - 48)*100 + char(userInput[16] - 48)*10  + char(userInput[17] - 48);
      mdirection =   char(userInput[19] - 48);
      
      if (mdirection==0)
        deslocamento=-1*deslocamento;   
      else
        deslocamento=deslocamento;   

      Serial.println(" "); Serial.print(deslocamento, DEC); Serial.print(" "); Serial.print(volume, DEC); Serial.print(" "); Serial.print(mspeed, DEC); Serial.print(" "); Serial.println(mdirection, DEC);        
            
      stepper.setSpeed(mspeed);        
      stepper.setMaxSpeed(mspeed);
      stepper.runToNewPosition(deslocamento*microstepping);
      //stepper.setCurrentPosition(0);

      data=0;       deslocamento=0;       volume=0;       mspeed=0;      mdirection=0;

      for (int i=0 ; i<=21 ; i++)      
          userInput[i]=0;
      }
}

void readuserdata(){
  char tmp;
     if(Serial.available()){     
        msg_lenght = Serial.available(); 
        Serial.print("Message lenght=");
        Serial.print(msg_lenght);
        if( msg_lenght == 20  ){ 
           tmp = Serial.read();
           if( tmp == 'd' ){
              userInput[0] = tmp;
              for (int i=1;i<=msg_lenght;i++){
                tmp=Serial.read(); 
                userInput[i] = char(tmp);                  
              }
              data=1;
              }
        }
     }
}

Step 27: Comand Line Inputs

Using the Arduino serial monitor, you can now send commands to your pump.

Here is an example of the syringe pump command line:

The character "d" for position (number of steps*16), following 5 digits corresponding to the position "00000"

d01000v01000v01000d1

The character "d" for the speed, following 5 digits corresponding to the speed "00000"

d01000v01000v01000d1

The character "D" for the direction, following 1 digit corresponding to the direction (1 for forwards and 0 for backwards)

d01000v01000v01000d1

Here is a couple of examples of several command:

d02000v01000v01000d1

P02000 for steps

S01000 for speed rate

D1 for forward direction

d05000v00100v01000d0

P05000 for steps

S00100 for speed rate

D0 for backward direction

Step 28: Controlling the Pump Rack

Multiple pumps can now be controlled be using a USB Hub, you will need to write code in order control all 5 syringes. Using Java C C++ or any other language, you only need to open the USB COM port an send the commands to the pumps.

Step 29: Analytical Weighing Balance Results

The 3D Printed Syringe Pump was put to the test using an Analytical Weighing Balance.

Here are some of the first results:

- 5ul pump command - measured value 5.5ul

- 5ul pump command - measured value 5.6ul

- 5ul pump command - measured value 5.6ul

- 5ul pump command - measured value 5.8ul

- 5ul pump command - measured value 5.6ul

- 5ul pump command - measured value 5.6ul

- 5ul pump command - measured value 5.8ul

- 5ul pump command - measured value 5.5ul

After this test we corrected the steps per mm of the stepper motor in order to pump 5ul instead of the 5.6 mean value. These shift in volume is due to the diameter of the syringe not being a precision glass syringe. We adjust the steps and got 5ul results with 0- 0.5ul error.

More tests where made using 10ul 20ul 50ul and 100ul pump commands, the error is in the range of 0.5ul below 1ul.

This is a very good result for a 3D printed syringe pump and even outperforms other pumps on the market with a higher price tag.

I speculate that a great part of the errors are due to the cheap plastic syringes used, overall the syringe has good repeatability results.

Mind for Design

First Prize in the
Mind for Design

3D Printing Contest

Runner Up in the
3D Printing Contest

Move It

Participated in the
Move It