UV-C Disinfectant Robot

Published Jul 10, 2024
 240 hours to build
 Intermediate

Autonomous UV-C disinfection robot is designed to enhance hospital sanitation by effectively eliminating pathogens in isolation wards. Utilizing UV-C light and equipped with advanced sensors for autonomous navigation and obstacle detection, the robot minimizes cross-contamination and ensures a safer environment for patients and healthcare staff. This innovative solution aims to revolutionize disinfection procedures, increasing efficiency and reducing the need for human intervention.

display image

Components Used

Arduino UNO
Arduino UNO
1
Connecting Wire Jumper Wires
Connecting Wire Breadboard wires
1
L298N Motor driver
L298N is a high current, high voltage dual full bridge motor driver. It is useful for driving inductive loads.
1
SG90 micro servo Motor
DFRobot Accessories 9g micro servo (1.6kg)
1
Infrared beam sensor
Infrared beam sensor
2
Gear motor DC 5V
1
18650 rechargeable lithium ion battery
3
Ultrasonic Sensor - HC-SR04
Used to find range
1
Description

Project Overview:

This project presents an autonomous UV-C disinfection robot designed to revolutionize sanitation procedures in hospital isolation wards. It leverages the proven germicidal power of UV-C light to effectively eliminate pathogens on surfaces and in the air, minimizing the risk of hospital-acquired infections (HAIs) and protecting healthcare workers.

Key Features:

Autonomous Navigation: Utilizes line following and obstacle detection algorithms  for self-directed movement within isolation wards.

a.            b.

Algorithm for (a)path following , (b) obstacle avoidance

UV-C Disinfection: Placed UV-C lamps on top of robot to deliver 360-degree disinfection, ensuring comprehensive elimination of microorganisms.

note: UV-C rays are harmful for human body so I have used led light strip in a lamp model structure to represent the UV-C in this prototype as a demonstration purpose.


Arduino Uno Control:  Sensor integration, and decision-making are handled by an Arduino Uno microcontroller.
Sensors: I have used obstacle avoiding method in my robot prototype so that this robot can detect obstacles and disinfect the obstacles surface. Also used path following methods for easy navigation.

 

Building the Robot:

Initial prototype of robot model

Hardware Components:

Arduino Uno microcontroller
L298N motor driver
UV-C lamps
Infrared and ultrasonic sensors 
Motors, wheels, Chassis


Software Development:

The robot is programmed using Arduino IDE. 
The code include line following and obstacle detection algorithms for autonomous navigation.
Sensor integration and control functionalities are implemented within the codebase.

// CODE FOR PATH FOLLOWING

distance_F = Ultrasonic_read();
Serial.print("D F=");Serial.println(distance_F);
 if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 0)){
  if(distance_F > Set){forword();}
                  else{Check_side();}  
 }  
else if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 0)){turnRight();}  
else if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 1)){turnLeft();}  
delay(10);
}
void servoPulse (int pin, int angle)
{
 int pwm = (angle*11) + 500;   
 digitalWrite(pin, HIGH);
 delayMicroseconds(pwm);
 digitalWrite(pin, LOW);
 delay(50);                         
}

// CODE FOR OBJECT AVOIDANCE

long Ultrasonic_read() {
  digitalWrite(trigger, LOW);
  delayMicroseconds(2);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  long time = pulseIn (echo, HIGH);
  return time / 29 / 2;
}
void compareDistance() {
   if(distance_L > distance_R)
  {
    turnLeft();
    delay(500);
    forword();
    delay(600);
    turnRight();
    delay(500);
    forword();
    delay(600);
    turnRight();
    delay(400);
   }
  else
 {
   turnRight();
   delay(500);
   forword();
   delay(600);
   turnLeft();
   delay(500);
   forword();
   delay(600);  
   turnLeft();
   delay(400);
  }
}
void Check_side() {
    Stop();
    delay(100);
 for (int angle = 70; angle <= 140; angle += 5)  
{
   servoPulse(servo, angle);  
 }
    delay(300);
    distance_R = Ultrasonic_read();
    Serial.print("D R=");Serial.println(distance_R);
    delay(100);
  for (int angle = 140; angle >= 0; angle -= 5)  
 {
   servoPulse(servo, angle);  
  }
    delay(500);
    distance_L = Ultrasonic_read();
    Serial.print("D L=");Serial.println(distance_L);
    delay(100);
  for (int angle = 0; angle <= 70; angle += 5)  
 {
   servoPulse(servo, angle);  
  }
    delay(300);
    compareDistance();
}

void forword()                 
{  
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH); 
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW); 
}
void backword() 
{
digitalWrite(in1, HIGH);    
digitalWrite(in2, LOW);    
digitalWrite(in3, LOW);    
digitalWrite(in4, HIGH); 
}
void turnRight()                 
{  
digitalWrite(in1, LOW);      
digitalWrite(in2, HIGH);   
digitalWrite(in3, LOW);      
digitalWrite(in4, HIGH);  
}
void turnLeft()                
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);    
digitalWrite(in3, HIGH);    
digitalWrite(in4, LOW);    
}
void Stop()                         
{
digitalWrite(in1, LOW);     
digitalWrite(in2, LOW);     
digitalWrite(in3, LOW);     
digitalWrite(in4, LOW);    
}

Full code is given below.


Assembly and Testing:

The robot is assembled using the selected hardware components according to the design
The code is uploaded to the Arduino Uno microcontroller.
Many testing is conducted to ensure proper functionality of movement, obstacle detection, and UV-C lamp operation.

Simulation:

                                               Simulation using Tinker CAD

Assembling components:

 

 

Testing:

 

Initial Design

Usability Testing

Iterated Design

FINAL PRODUCT

 

 

 

Codes

Downloads

block diagram Download
circuit diagram Download
Tinkercad simulation configuration Download
Comments
Ad