Portable life saving kit

Published Apr 21, 2026
 120 hours to build
 Advanced

The Portable Life-Saving Kit is a compact, low-cost emergency medical support system designed to provide immediate respiratory assistance and vital sign monitoring during critical situations. The system integrates an automated ventilator mechanism with real-time monitoring of three essential vital parameters: SpO₂ (oxygen saturation), heart rate, and body temperature.

display image

Components Used

ESP32 DevKitC 32E
ESP32 DevKitC 32E
2
nima motor
for compressing and decompressing purpose
2
MLX90614
for temperature
1
Max 30102
MAX30102 is an integrated pulse oximetry and heart-rate monitor sensor solution.
1
ambu bag
providing breathing support
1
3D Design
1
Zero PCB
Zero PCB are used easy to implement electronics circuits
1
Description

PROJECT SUMMARY

The Portable Life-Saving Kit is a compact, low-cost emergency medical support system designed to provide immediate respiratory assistance and vital sign monitoring during critical situations. The system integrates an automated ventilator mechanism with real-time monitoring of three essential vital parameters: SpO₂ (oxygen saturation), heart rate, and body temperature.

The kit is built using a microcontroller-based architecture ESP-32 to ensure reliable processing, portability, and optional wireless data transmission. It is specifically designed for use in ambulances, accident sites, rural healthcare centers, disaster zones, and home-care environments, where access to full ICU facilities is limited.

By combining ventilation support with continuous vital monitoring in a single portable unit, the project aims to stabilize patients during the critical “golden hour”, reducing mortality risk and improving emergency response efficiency. The system emphasizes affordability, ease of use, and rapid deployment, making it suitable for first responders, paramedics, and primary healthcare providers

 

PROBLEM STATEMENT

 

SOLUTION

 

3.1 Working

The proposed system is designed for use during emergency situations, especially within the golden hour, where immediate respiratory support and vital monitoring are required. The methodology consists of the design and integration of an automated ventilation mechanism, vital parameter monitoring unit, pressure safety system, and portable power supply to ensure reliable operation in low‑resource environments.

 

 1.Automated Ventilation Mechanism

The ventilation support system is developed using a mechanical compression mechanism to automate the Ambu‑bag operation. A rack‑and‑pinion based linear actuation system driven by stepper motors is used to control the compression and release of the bag. The controller regulates the breathing cycle by adjusting tidal volume (VT), respiratory rate (RR), and inspiratory‑to‑expiratory (I:E) ratio. These parameters allow the system to provide controlled and repeatable ventilation suitable for emergency stabilization.

 

2. Vital Parameter Monitoring

To monitor the patient’s condition in real time, vital sensors are integrated into the system. The parameters measured include heart rate, oxygen saturation (SpO₂), and body temperature. The sensor data is processed using a microcontroller and displayed on a digital interface, allowing the operator to continuously observe the patient’s physiological status during operation. This monitoring helps in adjusting ventilation settings based on the patient response.

 

3. Airway Pressure Monitoring and Safety

A pressure sensing unit is incorporated to measure airway pressure during the ventilation cycle. The system maintains the pressure within the safe clinical range to prevent over‑inflation of the lungs. If the pressure exceeds the predefined limit, the controller stops the compression mechanism to ensure patient safety.

 

4. Portable Power and Solar Support

To ensure usability in ambulances, disaster zones, and rural healthcare environments, the system is powered using a rechargeable battery. A solar charging provision is included to allow operation in off‑grid conditions. This makes the device suitable for emergency deployment where continuous power supply may not be available.

 

5. System Integration

All modules, including the mechanical ventilator, vital monitoring sensors, pressure sensor, and power unit, are integrated into a compact portable structure. The complete system is designed to act as life saving kit  that can provide temporary respiratory assistance and patient monitoring until advanced medical care becomes available.

 

 

Step 1: System Start and Power ON

When the system is powered ON, the controller initializes all connected modules including the ESP32 controller, sensors, motor driver, dashboard interface, and AI chatbot communication module. Default settings are loaded into the system memory.

 

Step 2: Parameter Setting

The operator sets the required ventilation parameters such as tidal volume (VT), respiratory rate (RR), and inspiratory‑to‑expiratory ratio (I:E).
These parameters are stored in the controller and used to control the ventilation cycle.

 

Step 3: Sensor Initialization and Data Reading

The system starts reading the vital sensors continuously.
The following parameters are measured:

  • SpO₂ (oxygen saturation)
  • Body temperature
  • Airway pressure

The sensor values are sent to the controller for processing.

 

Step 4: Dashboard Display

The processed sensor data is transmitted to the dashboard.
The dashboard displays real‑time values of vital parameters and system status so that the operator can monitor the patient continuously.

 

Step 5: Motor Control Signal Generation

Based on the selected ventilation parameters, the controller sends control signals to the motor driver.The motor driver controls the stepper motor speed and direction.

 

Step 6: Rack and Pinion Mechanism Operation

The stepper motor drives the rack‑and‑pinion mechanism.
This mechanism converts rotary motion into linear motion to compress and release the Ambu bag.

 

Step 7: Ambu Bag Compression and Airflow

The Ambu bag is compressed according to the set VT, RR, and I:E ratio.
This produces controlled airflow which is delivered to the patient.

 

Step 8: Safety Check

During each cycle, the system checks the pressure sensor and vital parameters.
If the pressure or vital values exceed the safe limit, the controller stops the motor and generates an alert on the dashboard.

 

Step 9: Continuous Loop Operation

The system continues running in a loop:

  • Read sensors
  • Display data
  • AI analysis
  • Motor control
  • Safety check

This process repeats until the system is turned OFF or the patient is shifted to advanced medical car.

 

Implementation

circuit diagram for breathing support

 

codes

#include <Arduino.h>
#include <WiFi.h>
#include <WebServer.h>

// -------- WIFI --------
const char* WIFI_SSID = "Pj26";
const char* WIFI_PASS = "kumar@26";

WebServer server(80);

// -------- MOTOR PINS --------
#define PUL_A 18
#define DIR_A 19
#define ENA_A 21

#define PUL_B 22
#define DIR_B 23
#define ENA_B 5

// -------- SAFETY --------
#define SAFETY_PIN 4
#define BUZZER_PIN 15
#define EMERGENCY_BTN 27

// -------- PARAMETERS --------
float desired_tidal_ml = 450.0;
float RR = 12.0;
float IE_in = 1.0;
float IE_ex = 2.0;

bool running = false;

// -------- POSITION TRACKING --------
long currentPosition = 0;   // 🔥 KEY VARIABLE

// -------- TIMING --------
long steps_target = 600;
unsigned long delayMicros_in = 600;
unsigned long delayMicros_ex = 600;

// -------- BUZZER --------
bool buzzerActive = false;
unsigned long buzzerTimer = 0;

// -------- COMPUTE --------
void computeVentParams() {
  steps_target = map(desired_tidal_ml, 100, 500, 200, 1200);

  float period = 60.0 / RR;
  float inhale = period * (IE_in / (IE_in + IE_ex));
  float exhale = period - inhale;

  delayMicros_in = (inhale * 1000000) / (steps_target * 2);
  delayMicros_ex = (exhale * 1000000) / (steps_target * 2);

  if (delayMicros_in < 50) delayMicros_in = 50;
  if (delayMicros_ex < 50) delayMicros_ex = 50;
}

// -------- STEP --------
void stepBoth(unsigned long d) {
  digitalWrite(PUL_A, HIGH);
  digitalWrite(PUL_B, HIGH);
  delayMicroseconds(d);
  digitalWrite(PUL_A, LOW);
  digitalWrite(PUL_B, LOW);
  delayMicroseconds(d);
}

// -------- RETURN TO HOME (ACCURATE) --------
void returnToStart() {

  Serial.println("Returning to HOME...");

  digitalWrite(ENA_A, LOW);
  digitalWrite(ENA_B, LOW);

  if (currentPosition > 0) {

    digitalWrite(DIR_A, HIGH);
    digitalWrite(DIR_B, HIGH);

    while (currentPosition > 0) {
      stepBoth(delayMicros_ex);
      currentPosition--;
    }
  }

  digitalWrite(ENA_A, HIGH);
  digitalWrite(ENA_B, HIGH);

  running = false;

  Serial.println("HOME reached ✔");
}

// -------- BREATH --------
void doOneBreath() {

  // INHALE
  digitalWrite(DIR_A, LOW);
  digitalWrite(DIR_B, LOW);

  for (int i = 0; i < steps_target; i++) {
    if (!running) return;
    stepBoth(delayMicros_in);
    currentPosition++;   // 🔥 track forward
  }

  // EXHALE
  digitalWrite(DIR_A, HIGH);
  digitalWrite(DIR_B, HIGH);

  for (int i = 0; i < steps_target; i++) {
    if (!running) return;
    stepBoth(delayMicros_ex);
    currentPosition--;   // 🔥 track backward
  }
}

// -------- ROUTES --------
void handleStart() {
  computeVentParams();
  digitalWrite(ENA_A, LOW);
  digitalWrite(ENA_B, LOW);
  running = true;
  server.send(200, "text/plain", "STARTED");
}

void handleStop() {
  running = false;
  returnToStart();
  server.send(200, "text/plain", "STOPPED");
}

void handleSet() {
  if (server.hasArg("vt")) desired_tidal_ml = server.arg("vt").toFloat();
  if (server.hasArg("rr")) RR = server.arg("rr").toFloat();
  if (server.hasArg("ie_in")) IE_in = server.arg("ie_in").toFloat();
  if (server.hasArg("ie_ex")) IE_ex = server.arg("ie_ex").toFloat();

  computeVentParams();
  server.send(200, "text/plain", "UPDATED");
}

void handleEmergency() {
  desired_tidal_ml = 450;
  RR = 14;
  IE_in = 1;
  IE_ex = 2;

  computeVentParams();

  digitalWrite(ENA_A, LOW);
  digitalWrite(ENA_B, LOW);

  running = true;

  server.send(200, "text/plain", "EMERGENCY");
}

// -------- SETUP --------
void setup() {

  Serial.begin(115200);

  pinMode(PUL_A, OUTPUT);
  pinMode(DIR_A, OUTPUT);
  pinMode(ENA_A, OUTPUT);

  pinMode(PUL_B, OUTPUT);
  pinMode(DIR_B, OUTPUT);
  pinMode(ENA_B, OUTPUT);

  pinMode(SAFETY_PIN, INPUT_PULLUP);
  pinMode(EMERGENCY_BTN, INPUT_PULLUP);

  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW);

  digitalWrite(ENA_A, HIGH);
  digitalWrite(ENA_B, HIGH);

  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  Serial.println("WiFi Connected");
  Serial.println(WiFi.localIP());

  server.on("/start", handleStart);
  server.on("/stop", handleStop);
  server.on("/set", handleSet);
  server.on("/emergency", handleEmergency);

  server.begin();
}

// -------- LOOP --------
void loop() {

  server.handleClient();

  // 🚨 SAFETY BUTTON
  if (digitalRead(SAFETY_PIN) == LOW) {

    Serial.println("🚨 SAFETY TRIGGER");

    running = false;

    // buzzer ON
    digitalWrite(BUZZER_PIN, HIGH);
    buzzerActive = true;
    buzzerTimer = millis();

    returnToStart();
  }

  // 🔘 HARDWARE EMERGENCY
  if (digitalRead(EMERGENCY_BTN) == LOW) {
    handleEmergency();
  }

  // 🔔 BUZZER OFF AFTER 1s
  if (buzzerActive && millis() - buzzerTimer > 1000) {
    digitalWrite(BUZZER_PIN, LOW);
    buzzerActive = false;
  }

  // RUN
  if (running) {
    doOneBreath();
  }
}

 

circuit diagram for vital parameter

codes

#include <Wire.h>
#include "MAX30105.h"
#include <LiquidCrystal_I2C.h>
#include <Adafruit_MLX90614.h>

MAX30105 sensor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_MLX90614 mlx;

// Filters
float spo2_filtered = 97;
float hr_filtered = 70;

// Time
unsigned long lastSecond = 0;
int hh = 14, mm = 58, ss = 0;

// HR detection
bool peakDetected = false;
unsigned long lastPeakTime = 0;

int detectHR(long ir)
{
    static long prevIR = 0;
    int threshold = 1500;
    int hr = -1;

    if ((ir - prevIR) > threshold && !peakDetected)
    {
        peakDetected = true;
        unsigned long now = millis();
        unsigned long diff = now - lastPeakTime;
        lastPeakTime = now;

        if (diff > 280 && diff < 1500)
            hr = 60000 / diff;
    }

    if ((prevIR - ir) > threshold)
        peakDetected = false;

    prevIR = ir;
    return hr;
}

// Time update
void updateTime() {
  if (millis() - lastSecond >= 1000) {
    lastSecond = millis();
    ss++;
    if (ss >= 60) { ss = 0; mm++; }
    if (mm >= 60) { mm = 0; hh++; }
    if (hh >= 24) hh = 0;
  }
}

String timeString() {
  char buf[6];
  sprintf(buf, "%02d:%02d", hh, mm);
  return String(buf);
}

// SETUP
void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);

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

  if (!sensor.begin(Wire)) {
    lcd.print("MAX30102 FAIL!");
    while (1);
  }

  sensor.setup();
  sensor.setPulseAmplitudeRed(0x2A);
  sensor.setPulseAmplitudeIR(0x2A);

  if (!mlx.begin()) {
    lcd.print("MLX FAIL!");
    while (1);
  }

  lcd.print("System Ready");
  delay(1000);
  lcd.clear();
}

// LOOP
void loop() {

  updateTime();

  long ir = sensor.getIR();
  long red = sensor.getRed();

  // No finger
  if (ir < 50000) {
    lcd.setCursor(0, 0);
    lcd.print("Place Finger     ");
    lcd.setCursor(0, 1);
    lcd.print(timeString());

    Serial.println("{\"hr\":0,\"spo2\":0,\"temp\":0}");
    delay(1000);
    return;
  }

  // SpO2
  float ratio = (float)red / (float)ir;

  float spo2 =
      (-1254.82 * ratio) +
      (1550.46 * ratio * ratio) +
      (-620.23 * ratio * ratio * ratio) +
      421.16;

  spo2 = constrain(spo2, 70, 100);
  spo2_filtered = 0.85 * spo2_filtered + 0.15 * spo2;

  // HR
  int hr_raw = detectHR(ir);
  if (hr_raw > 40 && hr_raw < 180)
    hr_filtered = 0.8 * hr_filtered + 0.2 * hr_raw;

  // Temp
  float tempC = mlx.readObjectTempC();

  // JSON OUTPUT
  String data = "{";
  data += "\"hr\":" + String((int)hr_filtered) + ",";
  data += "\"spo2\":" + String((int)spo2_filtered) + ",";
  data += "\"temp\":" + String(tempC, 1);
  data += "}";

  Serial.println(data);

  // LCD
  lcd.setCursor(0, 0);
  lcd.print("SpO2:");
  lcd.print((int)spo2_filtered);
  lcd.print("% HR:");
  lcd.print((int)hr_filtered);

  lcd.setCursor(0, 1);
  lcd.print("T:");
  lcd.print(tempC, 1);
  lcd.print(" ");
  lcd.print(timeString());

  delay(500);
}

 

 

Working

 

Final lookout

 

 

Observation

Ambu Bag Volume Range by Age Group 

CategoryWeight Range (kg)Bag CapacityTypical Deliverable Tidal VolumeUse
Adult (including Aged / Elderly)50–100 kg1600–2000 mL400–600 mLNormal adult ventilation, elderly patients
Aged40–60 kg1600–2000 mL350–500 mLElderly patients up to 60 kg
Child5–20 kg500–1000 mL150–400 mLChildren (approx.)
Infant2–10 kg250–500 mL30–80 mLBabies up to 10 kg
Neonatal1–3 kg150–250 mL10–30 mLNewborn babies

 

Ventilation Parameters for Motor Rotation Mechanism

S.NoTidal Volume (mL)RR (Breaths/min)I:E RatioMotor Step
1450121:29
2400151:28
3350131:27

 

 

 

 

 

 

Comparison of Measured Vital Parameters with Normal Range

NameTemperature (°C)Normal Temp (°C)Heart Rate (BPM)Normal HR (BPM)SpO₂ (%)Normal SpO₂ (%)
Shivam Singh31.330–3710160–1009695–100
Ayush Pandey30.330–3710460–1009495–100
Pradip Kumar29.430–3710360–1008895–100

Sample 4

 

31.630–3710660–1009495–100

Sample 5

 

30.630–3710060–1009695–100

Sample 6

 

29.830–378760–1009595–100

               5.4 Competitors

 

Solution / Competitor TypeExamples (Reference)CostPortabilitySkilled Operator NeededVentilation Control (VT, RR, I:E)Safety (Pressure + Alarms)Vital Monitoring (SpO₂, HR, Temp)IoT / Dashboard
ICU Ventilator (Hospital Grade)Dräger / GE / PhilipsVery HighLowYesHigh PrecisionYes (Advanced)Separate monitor requiredLimited
Transport Ventilator (Ambulance Type)ResMed / Hamilton / MedtronicHighMedium–HighYesModeratePartialLimitedMinimal
Manual Ambu Bag VentilationAmbu Bag BVMVery LowVery HighYes (Manual skill)NoNoNoNo
Basic Ambu Bag Automation PrototypeDIY Research modelsLowHighNo/MinimalPartialWeak / Not reliableNoNo
Our Portable Life-Saving KitNeuroventLowHighNo (Easy Use)Yes (Controlled)

Yes (Smart Alerts)

 

Yes (Integrated)Yes (Live Dashboard + IoT)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Conclusion

The implementation of the Portable Life-Saving Kit represents a significant advancement in emergency healthcare delivery, particularly in resource-limited and time-critical environments. Through careful design and development, the system demonstrates its ability to provide rapid diagnosis, continuous monitoring, and timely emergency response in situations where conventional medical infrastructure may be unavailable or inaccessible.

 

The project objectives were successfully achieved through the integration of vital sign monitoring sensors, an intelligent control unit, and an automated ventilation mechanism based on the Ambu bag. By continuously monitoring critical parameters such as heart rate, oxygen saturation, body temperature, and respiratory status, the system enables early detection of medical emergencies and supports informed clinical decision-making. The incorporation of IoT and AI technologies further enhances system functionality by allowing real-time data transmission, remote monitoring, and alert generation.

 

One of the key outcomes of the project is its potential to improve patient safety and survival rates while maintaining affordability and portability. Compared to conventional ICU-grade ventilators and diagnostic systems, the proposed solution offers a cost-effective alternative suitable for ambulances, rural healthcare centers, disaster response units, and public emergency setups. Additionally, the system’s safety features, including controlled ventilation parameters and alarm mechanisms, ensure reliable and consistent respiratory support.

 

Overall, the portable life-saving kit highlights the importance of innovative, intelligent, and accessible healthcare solutions in addressing modern medical challenges. By reducing response time, improving diagnostic accuracy, and extending emergency care to underserved areas, the proposed system contributes to strengthening healthcare preparedness and building a more resilient and inclusive healthcare ecosystem.

 

TARGET AUDIENCE 

  1. Emergency Medical Technicians (EMTs) & Ambulance Staff – for providing immediate life support during patient transport
  2. Paramedics & First Responders – for rapid intervention at accident sites, disaster zones, or remote areas
  3. Rural & Primary Healthcare Centers (PHCs) – where advanced ICU equipment is unavailable
  4. Doctors & Nurses in Emergency Departments – as a quick stabilization support system
  5. Disaster Response Teams (NDRF/SDRF, NGOs) – for mass casualty management
  6. Military & Defense Medical Units – for field-level emergency care
  7. Home-care Providers – for patients requiring continuous monitoring and emergency support
  8. Mobile Health Units & Medical Camps – for temporary healthcare setups

 

Conclusion

 

Research and Reference

we are in contact with some doctor as shown above  in the picture.

 

complete project

 

Thank you!!!!!!

Codes

Downloads

WhatsApp Image 2026-03-23 at 11_31_43 PM Download
Picture1 Download
IEEE-paper Download
Presentation Download

Institute / Organization

LOKMANYA TILAK JANAKALYAN SHIKSHAN SANTHAS LOKMANYA TILAK INSTITUTE OF ARCHITECTURE AND DESIGN STUDIES, MUMBAI
Comments
Ad