DrainWatch

Smart Jackson-Pratt Drain Monitoring System

Project Overview

DrainWatch is an innovative wearable system designed to monitor the fluid output from Jackson-Pratt surgical drains in real-time. Using a 5kg load cell sensor integrated into a wearable belt, the system provides automated tracking of drain volume, sends alerts when the drain reaches 100cc, and eliminates the need for manual, error-prone monitoring by patients and healthcare providers.

Project Goal

Transform post-operative patient care by providing clinicians and patients with real-time, objective data on wound drainage, reducing infection risk and improving recovery outcomes.

Clinical Motivation

The Jackson-Pratt Drain Challenge

Jackson-Pratt drains are the gold standard for post-operative fluid management following surgeries like mastectomies, abdominoplasties, and liposuction. However, current clinical practice relies on patients to manually empty, measure, and record drain output multiple times daily—a process prone to error, inconsistency, and patient burden.

Clinical Impact

Accurate drain monitoring is critical for clinical decision-making. Drain removal timing is typically based on output thresholds (commonly 30-50cc per day), and delayed removal increases infection risk while premature removal compromises wound healing. Current manual methods make it difficult to track trends or detect anomalies in real time.

Jackson-Pratt Drain: Clinical Context

The Jackson-Pratt drain is the gold standard for post-operative fluid management. Understanding its design and clinical application motivated our project.

System Design & Sensor Selection

Design Methodology

DrainWatch employs a non contact sensing approach to maintain sterility and safety throughout clinical use. Rather than placing sensors within the drain system, the system measures fluid weight accumulated in the bulb using a precision load cell. The load cell is mounted beneath a molded holster that securely accommodates the drain bulb assembly.

Sensor Selection Rationale

A 5kg load cell was selected as the primary sensing element based on the following criteria:

Potential Sensor Enhancements

Should additional funding become available following project completion, the following sensor enhancements may be explored:

These additional sensors would enhance the system's capabilities but require more complex integration and regulatory considerations.

Hardware Components & Wiring

Key Components

Arduino Uno

Microcontroller for sensor processing and OLED display control

Load Cell

5kg Digital Scale Load Cell
Mounted beneath the bulb holster to measure fluid weight as it accumulates

HX711 Amplifier

Analog-to-digital converter for load cell signal conditioning

SSD1306 OLED Display

128x64 pixel display showing real-time weight, volume, and elapsed time

Vibrating Motor

Adafruit Mini Disc Motor (Product 1201) for haptic alert at 100cc threshold

Momentary Push Button

H10 button for tare (zeroing) the load cell between measurements

Wiring Connections

Arduino Firmware

The firmware integrates all sensors and provides real-time monitoring with visual and haptic feedback.

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;
const int BUZZER_PIN = 6;

HX711 scale;
float reading;
float lastReading = 0;
#define CALIBRATION_FACTOR -420.457

// Threshold for 100cc alert
const float VOLUME_THRESHOLD_CC = 100;
const float WEIGHT_THRESHOLD_G = VOLUME_THRESHOLD_CC * 1.0;

// OLED display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Tare button
#define BUTTON_PIN 4
int buttonState = 0;
int lastButtonState = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
unsigned long startTime = 0;
bool experimentRunning = false;

void displayWeight(float weight, float volume, unsigned long elapsedTime) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  
  display.setCursor(0, 0);
  display.println("Weight:");
  display.setTextSize(2);
  display.print(weight, 1);
  display.print("g");
  
  display.setTextSize(1);
  display.setCursor(0, 25);
  display.println("Volume:");
  display.setTextSize(2);
  display.print(volume, 1);
  display.print("cc");
  
  display.setTextSize(1);
  display.setCursor(0, 50);
  display.print("Time: ");
  display.print(elapsedTime / 1000);
  display.println("s");
  
  if (weight > WEIGHT_THRESHOLD_G) {
    display.setTextSize(1);
    display.setCursor(0, 62);
    display.println("*** 100cc REACHED ***");
  }
  
  display.display();
}

void setup() {
  Serial.begin(57200);
  
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, HIGH);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  Serial.println("Initializing the scale");
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_scale(CALIBRATION_FACTOR);
  scale.tare();
  
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(10, 25);
  display.println("Press button to start");
  display.display();
  
  Serial.println("Time(ms),Weight(g),Volume(cc)");
}

void loop() {
  int reading = digitalRead(BUTTON_PIN);
  
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      
      if (buttonState == LOW) {
        if (!experimentRunning) {
          Serial.println("--- EXPERIMENT STARTED ---");
          scale.tare();
          startTime = millis();
          experimentRunning = true;
          digitalWrite(BUZZER_PIN, HIGH);
        } else {
          Serial.println("--- EXPERIMENT STOPPED ---");
          experimentRunning = false;
          digitalWrite(BUZZER_PIN, HIGH);
        }
        delay(500);
      }
    }
  }
  
  lastButtonState = reading;
  
  if (scale.wait_ready_timeout(200)) {
    reading = scale.get_units();
    
    if (experimentRunning) {
      unsigned long elapsedTime = millis() - startTime;
      float volumeCC = reading * 1.0;
      
      if (elapsedTime % 1000 < 200) {
        Serial.print(elapsedTime);
        Serial.print(",");
        Serial.print(reading);
        Serial.print(",");
        Serial.println(volumeCC);
      }
      
      displayWeight(reading, volumeCC, elapsedTime);
      
      if (reading > WEIGHT_THRESHOLD_G) {
        digitalWrite(BUZZER_PIN, LOW);
      } else {
        digitalWrite(BUZZER_PIN, HIGH);
      }
    }
  }
  
  delay(200);
}

Load Cell Calibration

Calibration Process

To accurately convert raw HX711 readings to weight values, we calibrated the 5kg load cell using a known reference weight. The calibration factor is determined by the ratio of load cell output to applied weight.

Calibration Data & Calculations

Calibration Factor Calculation:

The calibration factor of -420.457 was determined using the following method:

  • Place a known weight (e.g., 100g) on the load cell
  • Record the raw ADC reading from HX711
  • Calculate: Calibration Factor = Raw Reading / Weight (grams)
  • Used multiple reference weights to average and verify accuracy

Formula: Weight(g) = Raw ADC Count / Calibration Factor

✓ Calibration Verified: Average error less than 0.5%, confirming the load cell is accurately calibrated for weight measurement.

Experimental Data & Analysis

Excel Data Analysis

Complete experimental data was collected and analyzed in Excel, including calibration verification, weight-to-volume conversion, and temporal analysis of fluid accumulation.

Complete Data Analysis: All raw data, calculations, and graphs are documented in the Excel workbook: Jackson_Pratt_Data.xlsx

Key Graphs Generated

Two primary analyses were performed on the experimental data:

Analysis Charts

✓ Data Validation: Excel analysis confirms both calibration accuracy and the system's capability to provide meaningful real-time drainage monitoring.

Experimental Results

Experimental Protocol

A proof of concept test was conducted to validate system functionality. Water was introduced into the JP bulb mounted on the load cell to simulate post operative fluid accumulation. The system successfully tracked volume accumulation in real time and activated the alert mechanism at the predetermined threshold.

Performance Results

Hardware Assembly & Prototype

Below are photos documenting the development, assembly, and testing of the DrainWatch prototype.

Project Presentation Materials

Project Poster

The final project poster summarizes our research, design, and findings.

Video Explanation

A detailed video walkthrough of the DrainWatch project is currently in development.

Project Report

The complete technical report documenting the project's research, methodology, and outcomes is available for review.

📄

DrainWatch Final Report

Comprehensive documentation including literature review, design methodology, concept evaluation, and final design specifications.

Ask For Access
Access Information: To request access to the project report, please contact Pranavi Paudel at pp892@msstate.edu or pranavipaudel@gmail.com

System Limitations and Current Status

Future Development Pathways

Near Term Development (Post Graduation with Additional Funding)

Long Term Vision (3 to 5 Years Post Graduation)

Project Team & Attribution

DrainWatch was developed as part of an engineering design project at Mississippi State University.

Team Members

Contact Information

For inquiries about this project, please contact Pranavi Paudel at pp892@msstate.edu

Acknowledgments

We acknowledge Mississippi State University, the Department of Agricultural and Biological Engineering, and the UMEEDD program for their support. We thank Dr. Van Den Heever for guidance and mentorship, and Laura Geter, RN, BSN, for valuable clinical insights. We also appreciate our friends Spandan, Nischal, and Pritam for assistance with electronics, code debugging, and providing electronic components at a critical time.

References