Skip to content

Peristaltic Pump

Conception & 3D Print

Peristaltic Pump


The peristaltic Pump is largely used in food and medical industry for its two main advantages.

It’s able to deliver a very accurate quantity of liquid (even viscous) and the transfert is done without any contact between the mechanical parts and the liquid. 

The depression is done by pressure points on the tube containing the liquid. 


The pump was designed to irrigate a indoor garden and to be added to the Automatic Drink Dispenser.

It is powered by a Nema 17 (StepMotor), as these are widly used by makers & 3D Printer Enthusiats.

The pump has an industrial look and it’s been printed in PLA.  It’s taking approximately 24 Hours to print all parts to build one full Peristaltic pump.  

Parts to assemble
Printing hours / Pump

working principle

A peristaltic pump, is a type of positive displacement pump used for pumping a variety of fluids. The fluid is contained in a flexible tube fitted inside a circular pump casing [The body].

The rotor has a number of “wipers” or “rollers” attached to its external circumference, which compress the flexible tube as they rotate by.

The part of the tube under compression is closed, forcing the fluid to move through the tube. Additionally, as the tube opens to its natural state after the rollers pass, more fluid is drawn into the tube.”

3D Rendering

Power & Control

Initially powered by a 12VDC with buildt in Gearbox, the design has quickly moved toward a Nema 17 type (0.59Nm).  The precision of the stepper combined to the peristaltic pump increase the accuracy of the whole device.

Using a Stepper forced the system to be properly dimmentioned. The Stepper torque depend on few parameters:

  • The driver used
  • VRef Adjustment (on the driver)
  • The power supply voltage
  • The Speed Requested
  • The acceleration

I am using the highest step resolution achievable  with an A4988 by setting all MS pin “High” (See Electrical diagram below). The resulting resolution is:

1 step = 1.8°/16 = 0.1125° (3200 Steps for one rotor full revolution)

This resolution has two main advantages: A better acceleration to achieve the expected torque at certain speed and noise reduction while the engine is working (as the frequency reach the limit of the range human ears can hear).

To Simplify the wiring, I advise you to use an A4988 extention Board. It is existing in different versions: With One Driver connection slot or Four Driver connection slots.

  • Power Supply - 12VDC to 35VDC

    Here the power supply used is 19.3V (Recovered from an old laptop)

  • Arduino Uno x1

    Can be replaced with an Arduino Nano

  • Stepdown - LM2596 x1

    DC/DC Voltage Converter - Input 19.3VDC output set at 9VDC

  • Stepper Driver - A4988 x1

    Can be replaced by a DRV8825 if a higher torque is required.

  • Potentiometer - 2000 Ohm

    Used to modulate the speed of the Stepper

  • Stepper Motor - NEMA 17 (0.59 Nm)


// Creative Commons - - 2021
// This Code was written for under CC license: BY-NC-SA  (Attribution Mandatory, NonCommercial & ShareAlike)
// You must you credit "" to remix, adapt, and build upon your work non-commercially. You must license your new creations under the identical terms.

//======== CONTANTS ====

const int stepPin = 4;            // stepPin for Stepper Driver
const int dirPin = 5;             // Direction pin for Stepper Driver
const int enPin = 3;              // Enable pin for Stepper Driver (Low = enable)
const int rPin = A0;              // Potentiometer Analog Reading Pin

//======== VARIABLES ====

int vit;                  // Declare Variable "vit" as integer for potentiometer raw value reading
int vMap = 0;             // Declare Variable mapped speed after convertion to match with expected values
int microSec = 500;       // Declare Variable for Step duration

void setup() {

  pinMode(stepPin, OUTPUT);    //  defines stepPin as Output
  pinMode(dirPin, OUTPUT);     //  defines dirPin as Output
  pinMode(enPin, OUTPUT);      //  defines enPin as Output
  pinMode(rPin , INPUT);       //  defines rPin as Input for analog reading


//========= MAIN LOOP ====

void loop() {

  digitalWrite (enPin, LOW);              // Enable the Driver and the step motor (Holding Torque is ON if Enable)
  digitalWrite(dirPin, HIGH);             // Give the driver the expected direction
  for (int j = 0; j < 100; j++) {         // Stepper rotation Main for Loop
    vit = analogRead (A0);                // Reading the Potentiometer value
    vMap = map(vit, 0, 1023, 30, 250);    // Convert the value of the potentiometer in the range of speed expected for the engine
    for (int i = 0; i < 10000; i++) {     // Stepper Motion SubLoop (With acceleration)
      digitalWrite(stepPin, HIGH);        // Set the Value of stepPin at 1
      delayMicroseconds(microSec);        // Delay of define microSec
      digitalWrite(stepPin, LOW);         // Set the Value of stepPin at 0
      delayMicroseconds(microSec);        // Delay of define microSec
      if (microSec > vMap) {              // SPEED MODULATION LOOP - Speed Comparison (microSec will Move toward vMap value in this loop)
        microSec --;                      // SPEED MODULATION LOOP - If (microSec > vMap) microstep will decrement of "1"
      }                                   // SPEED MODULATION LOOP - This will occur at each iteration of the sub loop until statement is false
      else if (microSec < vMap) {         // SPEED MODULATION LOOP - If (microSec < vMap) microstep will increment of "1"
        microSec ++;                      // SPEED MODULATION LOOP - This will occur at each iteration of the sub loop until statement is false
      }                                   // SPEED MODULATION LOOP - If Both statement are false, nothing happens, speed is not modulated
    }                                     // End of Stepper Rotation Sub Loop
  }                                       // End of Stepper Rotation Main Loop

Torque Calculation

PP - Round R - 01 FINAL v1

As the lever is 4.5cm long the total torque at the extremity of the 3 arms is:

100 Ncm / 4.5 cm = 22.2 N

The Total and Maximum torque available at the extremity of the 3 arms is 22.2 N.

The torque can overcome a rolling resistance of 2.3 kg (22.2/9.8) in this configuration.

If required, it is be possible to play on several factor to reduce the rolling resistance, such as:

  • Shorten the Arms (Reduce the lever)
  • Modify the Diameter / Form of the Rollers
  • Changing the thickness of the silicone tube
  • Increasing the Reduction Ratio of the gears

Here I have used Silicone tube 8mm Outer Diameter and 6mm Inner Diameter.

The Nema 17 used here is rated 0.59Nm, which means, its holding torque is 59Ncm.

The holding torque normally is the highest torque the stepper can produce. At 300 RPM should be around 80% of the Rated Torque. For this project I have consider 45Ncm. 

Stepper Motor torque is tenflod by a gear box, the ratio is 0.41 as the driving gear is the smallest. 

The Torque available on the biggest gear would then be:

(45Ncm/0.41) = 109 Ncm

Due to the friction, I have considered 100 Ncm Max.


Peristaltic Pump
  • Working Principle on Wikipedia:
Stepper Nema 17 & Stepper Driver
  • Stepper on Wikipedia:
  • Stepper Motor Basics:
  • Stepper Motor Basics:
  • Torque Curve Explaination:
  • Torque Curve Explaination:
  • Tutorial for Stepper & A4988:
  • Driver DM8880:
  • Driver A4988:
  • Vref Adjustment:
  • Vref Adjustment A4988:
  • Vref Adjustment A4988:
Lever & Torque Calculation
Human Ear Frequency Range: