Skip to main content
  1. Portfolio Projects & Prototypes/

Dual Syringe Pump Control Interface & Linear Regression Calibration

Project Overview
#

Attribute Details
Domain Precision Fluid Dynamics Control & Electro-Mechanical Instrumentation
Tech Stack Arduino/ESP32 Microcontrollers, Stepper Drivers, Python (Scikit-Learn, Matplotlib)
Core Objective Sub-Microliter/Hour Fluid Delivery Control & Empirical Flow Calibration

Hardware Architecture & Mechanics
#

The Dual Syringe Pump System was custom-engineered to deliver dual reagent streams simultaneously into Lab-on-a-Chip microfluidic devices requiring steady, pulse-free laminar flow dynamics.

Electro-Mechanical Design:
#

  • Precision Actuation: High-torque stepper motors coupled with lead screws providing sub-micron linear positioning resolution.
  • Embedded Controller: Arduino/ESP32 firmware converting targeted volumetric flow rates into precise micro-stepping pulse frequencies.

Empirical Linear Regression Calibration (Python)
#

To verify and calibrate real-world fluid delivery accuracy across different syringe barrels (6mL vs 12mL), empirical measurements were modeled using Scikit-Learn Linear Regression in Python:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Convert raw stopwatch data (minutes.seconds) to absolute seconds
def menitToDetik(menitsecon):
    menit = int(menitsecon)
    Second = round((menitsecon - menit) * 100)
    return (menit * 60) + Second

# Empirical volume (mL) vs measured delivery time (seconds)
volumeSyr12 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
TimeSyr12 = [1.47, 3.27, 5.10, 6.53, 8.27, 10.07, 11.45, 13.27, 15.10, 16.54, 18.50]
TimeSyr12detik = [menitToDetik(t) for t in TimeSyr12]

# Fit Linear Regression Calibration Model
reg1 = LinearRegression()
reg1.fit(np.array(volumeSyr12).reshape(-1, 1), TimeSyr12detik)

# Generate flow prediction model
X_new = np.array(volumeSyr12).reshape(-1, 1)
y_predict1 = reg1.predict(X_new)

print(f"Flow Slope Calibration: {reg1.coef_[0]:.4f} sec/mL")
print(f"Calibration Intercept: {reg1.intercept_:.4f} sec")

This mathematical calibration enables the control software GUI to automatically adjust step-timing across different syringe dimensions, maintaining volumetric flow errors below 1%.