Skip to content

Peristaltic Pump

Introduction

Peristaltic Pump

A peristaltic pump is a device that moves fluids by squeezing a flexible tube. It creates a wave-like motion along the tube, pushing the fluid in one direction. The pump is commonly used in medical, laboratory, and industrial settings because it allows for accurate and contamination-free fluid transfer. Its design ensures that the fluid only comes into contact with the tube, making it suitable for handling sensitive substances. Additionally, peristaltic pumps are easy to clean and sterilize.

Advantages and Disadvantages

Advantages of Peristaltic Pump:
  1. Gentle handling of fluids, suitable for sensitive or delicate substances.
  2. Easy maintenance and cleaning due to simple design.
  3. Accurate and adjustable flow rates for precise dosing.
  4. Self-priming capability for easy startup.
Disadvantages of Peristaltic Pump:
  1. Limited pressure and flow range, may not be suitable for high-pressure or high-flow applications.
  2. Wear and replacement of the flexible tube over time.
  3. Larger size and potential limitations in terms of portability.

12V DC Pump

A 12V DC pump is a pump that operates using a 12-volt direct current power source. It offers advantages such as compatibility with common systems, portability for remote applications, energy efficiency, and safety due to lower voltage. However, it has limitations in terms of power output for high-flow or high-pressure requirements. Additionally, voltage drop issues may arise with long cable connections. Despite potential limitations, a 12V DC pump is suitable for various applications, especially those that require low to moderate flow rates and pressures.

Electronics

The components of the electronics is:

  1. Adafruit Feather nRF52840 Express
  2. Joy Featherwing
  3. Adafruit Motor FeatherWing
  4. LCD 16x2 + IIC I2C
  5. 12V 5000RPM Peristaltic Dosing Pump
  6. Voltage Regulator LM2596
  7. 12 V Power Supply Ac To Dc Adapter Converte
  8. Breadboard
  9. On/Off Switch Button

We use adafruit components to use less wires and be more organized.

Adafruit Feather nRF52840 Express

The Adafruit Feather nRF52840 Express is a compact development board with a powerful Cortex-M4F processor and built-in wireless connectivity for BLE, Thread, Zigbee, and 802.15.4, making it ideal for IoT projects. For more information visit Adafruit website

Joy Featherwing

The Joy FeatherWing is an add-on board designed by Adafruit that provides joystick and button inputs for microcontroller projects. It offers a compact and convenient way to incorporate gaming or control functionality into your projects. For more information visit Adafruit website

Adafruit Motor FeatherWing

The Adafruit Motor FeatherWing is an expansion board designed by Adafruit that allows you to control multiple motors using a Feather-compatible microcontroller. It provides convenient motor control capabilities, making it easier to build projects involving robotics, automation, or motion control. For more information visit Adafruit website

LCD 16x2 + IIC I2C

The LCD 16x2 + IIC I2C refers to a combination of a 16x2 character LCD (Liquid Crystal Display) module and an IIC (Inter-Integrated Circuit) or I2C interface.

The 16x2 character LCD module is a display component that can show two lines of text, with each line capable of displaying up to 16 characters. It is commonly used for displaying information in various microcontroller-based projects.

The IIC or I2C interface is a communication protocol that allows for easy communication between microcontrollers and peripheral devices, such as the LCD module. It simplifies the connection and control of the LCD module by using only a few wires, making it suitable for projects with limited available pins or complex wiring setups.

By combining the LCD 16x2 module with an IIC/I2C interface, you can easily connect and control the display using the I2C communication protocol, reducing the number of required pins and simplifying the wiring process in your projects.

12V 5000RPM Peristaltic Dosing Pump

A 12V 5000RPM peristaltic dosing pump is a type of peristaltic pump that operates at 12 volts and has a maximum rotational speed of 5000 revolutions per minute (RPM). It is specifically designed for dosing or dispensing precise amounts of fluids in various applications, such as medical, laboratory, or industrial processes.

Voltage Regulator LM2596

The LM2596 is a voltage regulator IC used to step down or regulate voltage levels efficiently, widely used for stable power supply in electronic projects and devices.

12 V Power Supply Ac To Dc Adapter

A 12V AC to DC adapter is a power supply device that converts alternating current (AC) input voltage to a direct current (DC) output voltage of 12 volts. It is commonly used to provide power to various electronic devices and appliances that require a 12V DC power source.

Breadboard

A circuit board, or PCB, is a flat board with copper traces that connects electronic components, allowing them to work together in electronic devices.

On/Off Switch Button

An on/off switch button is a component used to control the power supply to a device by toggling it between on and off positions.

Diagram of the Circuit

The Code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "Adafruit_seesaw.h"
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
#include <stdlib.h>

Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // Create object for the motor shield
int RPM = 100;
int RPMx = 100;
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);

Adafruit_seesaw ss;

#define BUTTON_RIGHT 6  // A Back
#define BUTTON_DOWN 7   // B OK
#define BUTTON_LEFT 9   // Y Calibration
#define BUTTON_UP 10    // X main menu
#define BUTTON_SEL 14   // SEL
uint32_t button_mask = (1 << BUTTON_RIGHT) | (1 << BUTTON_DOWN) |
                       (1 << BUTTON_LEFT) | (1 << BUTTON_UP) | (1 << BUTTON_SEL);


LiquidCrystal_I2C lcd(0x27, 16, 2);

int last_x = 0, last_y = 0;
int currentMenu = 0;
int current_SettingsMenu = 0;
int fluidQuantity = 0;
int fluidQuantityx = 0;
int Left_Time = 0;
int Left_Timec = 0;
float Time_for_one_mL = 2800;
float Time_for_one_mLc =0;
int Percentage_of_Time_Left=0;
int Percentage_of_Time_Leftc=0;
int Time_for_Pump_Down=30000;
int L=0;



void setup() {
  ss.begin(0x49);

  ss.pinModeBulk(button_mask, INPUT_PULLUP);
  ss.setGPIOInterrupts(button_mask, 1);

  lcd.init();
  lcd.backlight();

  updateLCD();


  AFMS.begin(); // Initialize the motor shield
  myMotor->setSpeed(RPM); // Set the motor speed (RPM)
}
void updateLCD() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Menu:");

  if (currentMenu == 2) {
    lcd.setCursor(0, 1);
    lcd.print("> Settings");
    fluidQuantityx = 0;
  } else if (currentMenu == 0) {
    lcd.setCursor(0, 1);
    lcd.print("> Fluid Qty: ");
    lcd.print(fluidQuantity);
    fluidQuantityx = 0;
  } else if (currentMenu == 1) {
    lcd.setCursor(0, 1);
    lcd.print("> Run");
    fluidQuantityx = 0;
  }
}
void Settings_Menu() {

  int x = ss.analogRead(2);
  if (abs(x - last_x) > 3 ) {
    last_x = x;
  }

      if (x > 800) {
        current_SettingsMenu--;
        if (current_SettingsMenu < 0) {
          current_SettingsMenu = 2;

        }

        delay(200);
      } else if (x < 200) {
        current_SettingsMenu++;
        if (current_SettingsMenu > 2) {
          current_SettingsMenu = 0;

        }

        delay(200);
      }


  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Sttings Menu:");


  if (current_SettingsMenu == 0) {
      lcd.setCursor(0, 1);
      lcd.print("^Pump Down Time");
      delay(200);
       if(!(ss.digitalRead(BUTTON_DOWN))){

        delay(200);
        Pump_Down();
      }


  } else if (current_SettingsMenu == 1){
      lcd.setCursor(0, 1);
      lcd.print("^Calibration");
      delay(200);
     if(!(ss.digitalRead(BUTTON_DOWN))){
        delay(200);
        TimeforonemL();
        }
  }else if (current_SettingsMenu == 2){
      lcd.setCursor(0, 1);
      delay(200);
      lcd.print("^RPM of motor");
      if(!(ss.digitalRead(BUTTON_DOWN))){
        delay(200);
        RPMofthemotor();
      }

 }

}
void RPMofthemotor() {
   if (!(ss.digitalRead(BUTTON_UP))) {

  updateLCD();
  delay(200);
   }

  int x = ss.analogRead(2);
  int y = ss.analogRead(3);

  if ((abs(x - last_x) > 3) || (abs(y - last_y) > 3)) {
    last_x = x;
    last_y = y;
  }

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("RPM of the motor");
  lcd.setCursor(0, 1);
  lcd.print("Set the RPM: ");
  lcd.setCursor(13, 1);
  lcd.print(RPM);
  delay(200);
  L=0;
     if (!(ss.digitalRead(BUTTON_RIGHT))) {

        Settings_Menu();
        delay(150);

     }
      lcd.setCursor(0, 1);
      lcd.print("Set the RPM: ");
      lcd.setCursor(13, 1);
      lcd.print(RPM);
      delay(150);
    while (L==0) {
           if (!(ss.digitalRead(BUTTON_RIGHT))) {
             L=1;
        Settings_Menu();
        delay(200);}

         if (!(ss.digitalRead(BUTTON_UP))) {
             L=1;
     updateLCD();
  delay(200);

   }
      int y = ss.analogRead(3);
      int x = ss.analogRead(2);
      if (abs(x - last_x) > 3) {
        last_x = x;
        if (x < 300) {
          RPMx++;
          delay(150);
        } else if (x > 800) {
          RPMx--;
          delay(150);
        } else if( y > 800){
          RPMx+=10;
          delay(150);
        }
         else if( y < 300){
          RPMx-=5;
          delay(150);
        }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("RPM of the motor");
  lcd.setCursor(0, 1);
  lcd.print("Set the RPM: ");
  lcd.setCursor(13, 1);
  lcd.print(RPMx);
      }
      if (!(ss.digitalRead(BUTTON_DOWN))) {
        L=1;
        RPM=RPMx;
         lcd.clear();
        lcd.setCursor(0, 0);
      lcd.print("The current RPM");
      lcd.setCursor(0, 1);
      lcd.print("is :");
      lcd.setCursor(4, 1);
      lcd.print(RPM);
      delay(2000);
      Settings_Menu();

    }
    }
}
void Pump_Down() {
  int Time_for_Pump_Downx=Time_for_Pump_Down/1000;;
  if (!(ss.digitalRead(BUTTON_UP))) {
    updateLCD();
    delay(200);
  }
  if (!(ss.digitalRead(BUTTON_RIGHT))) {
    Settings_Menu();
    delay(150);
  }
  int x = ss.analogRead(2);
  int y = ss.analogRead(3);

  if ((abs(x - last_x) > 3) || (abs(y - last_y) > 3)) {
    last_x = x;
    last_y = y;
  }

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Pump Down Time");
  lcd.setCursor(0, 1);
  lcd.print("Set theTime:   s");
  lcd.setCursor(12, 1);
  lcd.print(Time_for_Pump_Down/1000);
  delay(200);
  L = 0;

  if (!(ss.digitalRead(BUTTON_RIGHT))) {
    Settings_Menu();
    delay(150);
  }

  lcd.setCursor(0, 1);
  lcd.print("Set theTime:   s");
  lcd.setCursor(12, 1);
  lcd.print(Time_for_Pump_Down/1000);
  delay(150);

  while (L == 0) {
    if (!(ss.digitalRead(BUTTON_RIGHT))) {
      L = 1;
      Settings_Menu();
      delay(200);
    }

    if (!(ss.digitalRead(BUTTON_UP))) {
      L = 1;
      updateLCD();
      delay(200);
    }

    int y = ss.analogRead(3);
    int x = ss.analogRead(2);
    if ((abs(x - last_x) > 3) || (abs(y - last_y) > 3)) {
      last_x = x;
      last_y = y;
      if (x < 300) {
        Time_for_Pump_Downx++;
        delay(150);
      } else if (x > 800) {
        Time_for_Pump_Downx--;
        delay(150);
      } else if (y > 800) {
        Time_for_Pump_Downx += 10;
        delay(150);
      } else if (y < 300) {
        Time_for_Pump_Downx -= 5;
        delay(150);
      }
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Pump Down Time");
      lcd.setCursor(0, 1);
      lcd.print("Set theTime:   s");
      lcd.setCursor(12, 1);
      lcd.print(Time_for_Pump_Downx);
    }

    if (!(ss.digitalRead(BUTTON_DOWN))) {
      if (!(ss.digitalRead(BUTTON_RIGHT))) {
      L = 1;
      Settings_Menu();
      delay(200);
    }

    if (!(ss.digitalRead(BUTTON_UP))) {
      L = 1;
      updateLCD();
      delay(200);
    }
      L = 1;
      Time_for_Pump_Down=Time_for_Pump_Downx*1000;
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("The current Time");
      lcd.setCursor(0, 1);
      lcd.print("is:     s");
      lcd.setCursor(4, 1);
      lcd.print(Time_for_Pump_Down/1000);
      delay(2000);
      Settings_Menu();
    }
  }
}  
void TimeforonemL(){

  myMotor->setSpeed(RPM);
  int T=0;

   lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Time for one mL");
  lcd.setCursor(0, 1);
  lcd.print("The Time:    s");
  lcd.setCursor(9, 1);
  lcd.print(Time_for_one_mL/1000);
  delay(200);
  if(!(ss.digitalRead(BUTTON_RIGHT))){
    delay(200);
    Settings_Menu();
  }
   if(!(ss.digitalRead(BUTTON_UP))){
    delay(200);
    updateLCD();
    }
  if (!(ss.digitalRead(BUTTON_DOWN))){
  lcd.clear();
unsigned long startTime = millis(); // Get the current time

while ((ss.digitalRead(BUTTON_UP) == HIGH) && (T==0) ) {
       myMotor->run(FORWARD);
    Time_for_one_mLc=(millis() - startTime);

    lcd.setCursor(0, 0);
    lcd.print("Time for one mL");
    lcd.setCursor(0, 1);
    lcd.print("SitetheTime:   s");
    lcd.setCursor(12, 1);
    lcd.print(Time_for_one_mLc/1000);


  if (!(ss.digitalRead(BUTTON_DOWN)) &&  ((millis() - startTime))>100 ){

      Time_for_one_mL=Time_for_one_mLc;
      T=1;

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Time for one mL");
      lcd.setCursor(0, 1);
      lcd.print("is :     s");
      lcd.setCursor(4, 1);
      lcd.print(Time_for_one_mL/1000);
      myMotor->run(RELEASE);
      delay(5000);
       TimeforonemL();

      }
    }
  }
 myMotor->run(RELEASE);

}

void loop() {
  int x = ss.analogRead(2);
  int y = ss.analogRead(3);

  if ((abs(x - last_x) > 3) || (abs(y - last_y) > 3)) {
    last_x = x;
    last_y = y;

    if (y < 200) {
      currentMenu--;
      if (currentMenu < 0) {
        currentMenu = 2;
      }
      updateLCD();
      delay(200);
    } else if (y > 800) {
      currentMenu++;
      if (currentMenu > 2) {
        currentMenu = 0;
      }
      updateLCD();
      delay(200);
    }
  }

  if (currentMenu == 0) {
    if (!(ss.digitalRead(BUTTON_DOWN))) {
      // Enter Fluid Quantity menu
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Fluid Quantity");
      lcd.setCursor(0, 1);
      lcd.print("Quantity:    mL");
      lcd.setCursor(9, 1);
      lcd.print(fluidQuantity);
      currentMenu = 0;
      L=0;
      delay(500);
    while (L==0) {
      int y = ss.analogRead(3);
      int x = ss.analogRead(2);
      if (!(ss.digitalRead(BUTTON_UP)) || !(ss.digitalRead(BUTTON_RIGHT))) {
        L=1;
        currentMenu = 0;
        updateLCD();
        delay(200);

      } else if (x < 300) {
        fluidQuantityx++;
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Fluid Quantity");
        lcd.setCursor(0, 1);
        lcd.print("Quantity:    mL");
        lcd.setCursor(9, 1);
        lcd.print(fluidQuantityx);
        delay(150);

      } else if (x > 800) {
        fluidQuantityx--;
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Fluid Quantity");
        lcd.setCursor(0, 1);
        lcd.print("Quantity:     mL");
        lcd.setCursor(9, 1);
        lcd.print(fluidQuantityx);
        delay(150);

      } else if (y < 300) {
        fluidQuantityx-=5;
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Fluid Quantity");
        lcd.setCursor(0, 1);
        lcd.print("Quantity:    mL");
        lcd.setCursor(9, 1);
        lcd.print(fluidQuantityx);
        delay(150);

      } else if (y > 800) {
        fluidQuantityx+=10;
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Fluid Quantity");
        lcd.setCursor(0, 1);
        lcd.print("Quantity:    mL");
        lcd.setCursor(9, 1);
        lcd.print(fluidQuantityx);
        delay(150);
      }

      if (!(ss.digitalRead(BUTTON_DOWN))) {
        // Enter Fluid Quantity menu
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Fluid Quantity");
        lcd.setCursor(0, 1);
        lcd.print("Quantity:    mL");
        lcd.setCursor(9, 1);
        lcd.print(fluidQuantity);
        fluidQuantity = fluidQuantityx;
        currentMenu = 0;
        L=1;
        delay(1000);
        currentMenu = 0;
        updateLCD();
        delay(200);
       }
      }
    }
  } else if (currentMenu == 1) {
        if (!(ss.digitalRead(BUTTON_UP))) {
      currentMenu = 1;
      updateLCD();
      delay(200);

    }
  if (!(ss.digitalRead(BUTTON_DOWN))) {
    myMotor->setSpeed(RPM);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Hold OK to run");
    lcd.setCursor(0, 1);
    lcd.print("Fluid Qty:    mL");
    lcd.setCursor(10, 1);
    lcd.print(fluidQuantity);
    delay(500);
  if(!(ss.digitalRead(BUTTON_DOWN))){
    lcd.clear();
      unsigned long startTime = millis(); // Get the current time

     while ((ss.digitalRead(BUTTON_UP)) && (millis() - startTime < abs (fluidQuantity * Time_for_one_mL)) && (ss.digitalRead(BUTTON_RIGHT)) ) { // Run while the BUTTON_UP is pressed and within the specified time

      if(fluidQuantity>0){
      myMotor->run(FORWARD);
     }

      if(fluidQuantity<0){
      myMotor->run(BACKWARD);
    }

    Left_Time = abs(fluidQuantity * Time_for_one_mL - (millis() - startTime));
    Percentage_of_Time_Left =abs( ((millis() - startTime) * 100 / (fluidQuantity * Time_for_one_mL)));

    lcd.setCursor(0, 0);
    lcd.print("Left Time:    s");
    lcd.setCursor(11, 0);
    lcd.print((Left_Time + 999) / 1000); // Display the remaining time in seconds
    lcd.setCursor(3, 1);
    lcd.print("mL");
    lcd.setCursor(0, 1);
    lcd.print(fluidQuantity);
    if (Percentage_of_Time_Left<100) {
    lcd.setCursor(6, 1);
    lcd.print(">>   %");
    lcd.setCursor(8, 1);
    lcd.print(Percentage_of_Time_Left);
    }
    if (!(millis() - startTime < abs (fluidQuantity * Time_for_one_mL))) {
      lcd.setCursor(0, 0);
    lcd.print("Left Time:    s");
    lcd.setCursor(11, 0);
    lcd.print(0); // Display the remaining time in seconds
    lcd.setCursor(6, 1);
    lcd.print(">>   %");
    lcd.setCursor(8, 1);
    lcd.print(100);
    }
  }



      // After the process is completed, go back to the main menu
       myMotor->run(RELEASE);
      // After the process is completed, go back to the main menu
      delay(5000);
      currentMenu = 0;
      updateLCD();
      delay(200);
      }
     }
  }


  if ( (currentMenu == 2) && ((!(ss.digitalRead(BUTTON_DOWN))) || (x>800) || (x<300)  ))  {
      if(!(ss.digitalRead(BUTTON_UP) ) ){
      updateLCD();
      delay(200);
      }

        Settings_Menu();
        currentMenu = 2;


  }  

  if(!(ss.digitalRead(BUTTON_LEFT))){
    lcd.clear();
    myMotor->setSpeed(RPM); // Set the motor speed (RPM)
    unsigned long startTime = millis(); // Get the current time

    while ((ss.digitalRead(BUTTON_UP) == HIGH) && (millis() - startTime < Time_for_Pump_Down) && (ss.digitalRead(BUTTON_RIGHT) == HIGH) ) {

    myMotor->run(FORWARD);

    Left_Timec = Time_for_Pump_Down - (millis() - startTime);
    Percentage_of_Time_Leftc = ((millis() - startTime) * 100 / (Time_for_Pump_Down));

    lcd.setCursor(0, 0);
    lcd.print("PumpDown in:   s");
    lcd.setCursor(12, 0);
    lcd.print((Left_Timec + 999) / 1000); // Display the remaining time in seconds  
    lcd.setCursor(3, 1);
    lcd.print("s");
    lcd.setCursor(0, 1);
    lcd.print(Time_for_Pump_Down/1000);
      if (Percentage_of_Time_Leftc<100) {
        lcd.setCursor(6, 1);
        lcd.print(">>   %");
        lcd.setCursor(8, 1);
        lcd.print(Percentage_of_Time_Leftc);
      }
      if (!(millis() - startTime < Time_for_Pump_Down)) {
        lcd.setCursor(12, 0);
        lcd.print(0); // Display the remaining time in seconds
        lcd.setCursor(6, 1);
        lcd.print(">>   %");
        lcd.setCursor(8, 1);
        lcd.print(100);
        }


   }
  if(!(ss.digitalRead(BUTTON_RIGHT))){
    delay(200);
    updateLCD();
  }
  if(!(ss.digitalRead(BUTTON_UP))){
    delay(200);
    updateLCD();
  }
    myMotor->run(RELEASE);
    delay(2000);
    updateLCD();
  }

}

How the Project Code Work

The system consists of a main menu with options such as Fluid Quantity, Run, and Settings. Navigating through the menu is done by using the analog can be used to move horizontally. And to go inside each option pressing the downward button.

In the Fluid Quantity option, pressing the downward button allows you to input the desired quantity by moving the analog both horizontally and vertically. The screen displays the fluid quantity and the unit (mL). Pressing the downward button again saves the entered fluid quantity.

To run the pump for the saved fluid quantity, select the Run option from the main menu and press the downward button. Holding down the button starts the pump and shows the saved fluid quantity, time, remaining time, and percentage.

In the Settings option, the analog can be used vertically to navigate through the available settings. Here, you can adjust the motor speed and set the pump-down time by moving the analog both horizontally and vertically.

For calibration, running the pump will measure the time it takes to pump 1 mL. Once it reaches 1 mL, press the downward button to save the time required for pumping.

In general, pressing the upward button returns to the main menu, the right button goes back one step without saving changes, and both buttons cancel the operation. The downward button is used to save changes. The left button initiates the pump-down operation, running the pump for 30 seconds and displaying the time completed, remaining time, and percentage before returning to the main menu. And for all of this I use if condition.

3D Design

First 3D Design we make for Stepper Motor then we converted it to 12V DC pump 5000RPM. In next video you can see the design Progress.

For more details you can visit my colleague wibst Noof Abdulla website

Project Installation

We install the component by making hole using soldering iron. First we put the component then we marker the hole of the component to the 3D design then we use screws install the component. In next images you will see the install steps.

This part for the component installation in the base of the design.

Then you can use sanp off knife to make it smooth.

This part for the component installation in the top of the design.

We use screw nuts to holed the screw. First we use iron soldering to heat the screw nuts and we holed it by using screwdriver and then we push the nuts to inside the design.

You can see how it well be in the right of the image.

Then we installation the electronics part and hold it with screw

This how will look like it is connected to power supply.

The Finial Shape

How the Project Work

First, connect the power supply and turn on the switch button. This will activate the screen and indicate if the pump has power. Press the button on the left of the pump to release the air from the system. Adjust the desired fluid quantity by pressing the button down and using the analog control. Moving it up increases the quantity by one, while moving it right increases it by 10. Once the desired quantity is set, press the button down. To start the pump, go to the run mode and hold the button down. You can adjust the speed and pump duration in the settings menu, including calibration for 1 mL measurements. If 1 mL measurement is not available, follow the same process but divide the time for each mL. For example, if it takes 28 seconds to pump 10 mL, the time for 1 mL is 2.8 seconds. The default settings are 100 RPM and a flow rate of 0.357 mL/s, which means you need to run the pump for 2.8 seconds to dispense 1 mL.

In next the video you will see the main menu and Settings menu.

Pump Down

In next the video you will see the pump down process and we use it to let the are get out of the pipe.

Pump 5 mL of Water

And in next the video you will see the pump will pump 5 mL of water.

Pump 5 mL of Water Backward

And in next video you will see the pump will pump 5 mL of water Backward.


Last update: September 23, 2023