цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Автор: Mike(admin) от 5-09-2020, 03:55

Из-за продолжающейся пандемии многое изменилось. Нам нужно везде носить маски, время от времени дезинфицировать руки и т. д. Но после использования мобильных телефонов или других вещей на улице мы часто забываем дезинфицировать их или делаем это с помощью жидкого дезинфицирующего средства. Но это не правильно. Для решения этой проблемы можно создать что-то, что могло бы помочь людям держаться подальше от микробов, дезинфицируя их предметы первой необходимости, не касаясь самого дезинфицирующего устройства.


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Решением может стать бесконтактное устройство для дезинфекции микробов, которое может дезинфицировать все, от масок, кошельков до мобильных телефонов, убивая максимальное количество микробов с помощью ултрафиолетового излучения диапазона C (UV-C). При этом для создания такого устройства не потребуются какие-либо экзотические компоненты, все можно купить в ближайшем магазине электроники и найти среди старой компьютерной и офисной техники.


В нынешнюю эпоху электронные отходы представляют собой серьезную угрозу для окружающей среды. Таким образом, этот проект в основном основан на максимально эффективном использовании электронных отходов.


Прежде чем приступить к сборке устройства, расскажем немного теории. УФ-С убивает микробы, разрывая их клеточные мембраны и изменяя их ДНК/РНК. Такой ультрафиолетовый свет способен убить даже вирусы COVID-19.


UV-C

Так что это основная идея при выполнении данного проекта. Камеры для УФ-дезинфекции уже появились на рынке, но одной из основных функций, которых им всем не хватало, была дезинфекция всей поверхности на 360 градусов. Этот проект преодолевает эти ограничения и дезинфицирует все поверхности, автоматически переворачивая предметы после дезинфекции одной поверхности.


Принцип работы данного дезинфицирующего устройства довольно прост. Микроконтроллер непрерывно отслеживает любые препятствия вблизи ИК-датчиков. При обнаружении препятствия в непосредственной близости на необходимое время (в данном случае 1,5 секунды) событие запускается в зависимости от того, что отображается на ЖК-дисплее. Когда инициируется событие открытия лотка, шаговый двигатель выполняет необходимое количество шагов, чтобы открыть лоток.


Таким же образом, когда запускается событие закрытия лотка, шаговый двигатель приводится в действие до тех пор, пока концевой выключатель не покажет «красный флаг» (переключатель изменяет свое состояние), так что лоток закрывается. Таймер устанавливается либо по умолчанию, либо путем измерения расстояния между ультразвуковым датчиком и рукой. После выбора режима дезинфекции реле включается, таким образом включается лампа UV-C. После дезинфекции одной поверхности предметы автоматически переворачиваются с помощью серводвигателей при включенном УФ-излучении. Наконец, после дезинфекции лоток снова открывается с помощью шагового двигателя.


Поскольку это устройство сделано из электронных отходов, вам нужно сначала собрать необходимые компоненты. Для начала понадобится: старый планшетный сканер или встроенный сканер (от принтера), старый корпус процессора, геометрическая коробка


Разберите сканер и выньте нижнюю часть сканера, к которой прикреплены сканирующая головка и шаговый двигатель. Он будет использоваться для вывоза предметов внутрь и наружу дезинфицирующего устройства. Припаяйте провода к шаговому двигателю, чтобы они были достаточно длинными для подключения к макетной плате. Закрепите концевой выключатель на конце основания, чтобы мы могли определить положение сканирующей головки при запуске микроконтроллера.


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Удалите лампу, которая находится внутри сканирующей головки, вы можете повторно использовать ее позже. Закрепите прочную основу (лоток) на сканирующей головке. Вещи, подлежащие дезинфекции, будут размещены на подносе.


Теперь возьмите геометрическую коробку и отделите крышку от основания. Присоедините к серводвигателям, серводвигатели будут использоваться, чтобы перевернуть эти элементы. Теперь закрепите сервомоторы, установленные с лотком, чтобы они могли поднимать предметы и переворачивать их. Убедитесь, что вы используете достаточно мощный сервопривод, например, с металлическим редуктором (MG90S). Теперь установите лоток на сканирующую головку. У вас должно получиться что-то вроде этого:


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Снимите переднюю часть корпуса процессора так, чтобы она полностью открылась с одной стороны. Теперь прикрепите нижнюю часть сканера к корпусу процессора винтами. При необходимости просверлите отверстия.


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Теперь перейдем к электронике. Первичной платой микроконтроллера будет Arduino MKR WiFi 1010, а вторичной платой микроконтроллера – Arduino Uno. Подключите соединения согласно следующей схеме.


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Закрепите ИК-датчик перед верхней панелью, а ультразвуковой датчик посередине, дисплей должен находиться в углу и хорошо виден пользователю. УФ-светильник следует разместить под верхней панелью в разумном месте, чтобы максимальное количество света падает на предметы, размещенные на подносе. Проверяйте каждую деталь, включая двигатель и датчик, когда вы подключаете их к микроконтроллеру. Сделайте провода, соединяющие сервопривод, достаточно длинными, чтобы они не мешали полному выходу лотка. В итоге может получиться что-то вроде этого:


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей

Теперь перейдем к коду. Предоставляемый код является полностью модульным, вызывайте функции, которые вам нужно выполнить, проверяя схему. Код для Arduino MKR WiFi 1010 следующий:



   const int stepPin = 3;
   const int dirPin = 4;   

    #include <Wire.h>
    #include <LCD.h>
    #include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C  lcd(0x3F,2,1,0,4,5,6,7);

    const int pingPin = 7;                  
    const int echoPin = 6;         
         
    long duration, cm;                      
    
    const int b_ls = A3;                    
    int bls_val = LOW;                      

    const int ir1 = A4;                     
    const int ir2 = A5;                     
    int val1 = 0;                           
    int val2 = 0;                           

    long int time1, time2;                  
    int timer = 1000;                       
    long int dis_time = 12500*60;          

    const int uv_pin = 1;                   

   const int servopin = 9;                  

void setup() 
{


  pinMode (stepPin,OUTPUT);                 
  pinMode (dirPin,OUTPUT);                  
                                             
  pinMode (b_ls, INPUT_PULLDOWN);           
                                            
            
  digitalWrite (dirPin,LOW);                

  while (bls_val == LOW)                    
  {                                         
    digitalWrite (stepPin,HIGH);            
    delay (1);                              
    digitalWrite (stepPin,LOW);             
    delay (1);                              
    //Continuously read switch value        
    bls_val = digitalRead (b_ls);           
  }                                         

  lcd.begin (16,2);
  lcd.clear ();                             
  lcd.home ();                              
  lcd.print ("UVC Based");                  
  lcd.setCursor (0,1);                      
  lcd.print ("Disinfector");                
  delay(4000);                              

  pinMode (pingPin, OUTPUT);                
  pinMode (echoPin, INPUT);                  

  pinMode (ir1, INPUT);                     
  pinMode (ir2, INPUT);                     

  pinMode (uv_pin, OUTPUT);                 

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

} 

void loop() 
{
  execute();
}



void execute()
{ 
  DisplayControl (1);     
  delay(1000);
  sense_1();              
    DisplayControl (2);  
    TraverserControl (1);  
    DisplayControl (3);   
  sense_2();              
    DisplayControl (9);  
    TraverserControl (0);  
    DisplayControl (4);    /
    int val = sense_1_2_();
    if (val == 0)         
    {  
      DisplayControl (5);  
      disinfect();        
    }
    else
    {
       changeTime();      
       DisplayControl (5); 
       disinfect();      
    }
  sense_1();
    DisplayControl (6);   
    TraverserControl (1);  
  sense_1();
    DisplayControl (9);    
    TraverserControl (0);  
    DisplayControl (7);  
}

void DisplayControl(int a)
{
  lcd.clear ();
  lcd.home ();
  switch (a)
  {
    case 1:                              
      lcd.print ("Do not touch :)");                  
      lcd.setCursor (0,1);                      
      lcd.print ("1 to Open tray");
      break;
    case 2:
      lcd.print ("Opening tray");
      lcd.setCursor (0,1);                      
      lcd.print ("Please wait...");
      break;
    case 3:
      lcd.print ("Place the items");
      lcd.setCursor (0,1);
      lcd.print ("2 to close tray");
      break;
    case 4:
      lcd.print ("Default time:");
      lcd.setCursor (0,1);
      lcd.print ("12.5 Minutes");
      delay (4000);
      lcd.clear ();
      lcd.home();
      lcd.print ("1 to continue");
      lcd.setCursor (0,1);                      
      lcd.print ("2 to change time");
      break;
    case 5:
      lcd.print ("Disinfecting...");
      lcd.setCursor (0,1);                      
      lcd.print ("Emergency stop 1");
      break;
    case 6:
      lcd.print ("Opening tray...");
      lcd.setCursor (0,1);                      
      lcd.print ("1 to close tray");
      break;
    case 7:
      lcd.print ("Thank you for");
      lcd.setCursor (0,1);                      
      lcd.print ("using YM Labs DM");
      break; 
    case 8:
      lcd.print ("Invalid choice");
      lcd.setCursor (0,1);                      
      lcd.print ("Try again");
      break;  
    case 9:
      lcd.print ("Closing tray");
      lcd.setCursor (0,1);                      
      lcd.print ("Please wait...");
      break; 
      default:
      lcd.print ("Welcome!");       
  }
}


void disinfect()
{
  digitalWrite(uv_pin, HIGH);
  delay(dis_time/2);
  digitalWrite(servopin, HIGH);
  delay(1010);
  digitalWrite(servopin, LOW);
  delay(dis_time/2);
  digitalWrite(uv_pin, LOW);
}

int sense_1()
{
  do 
  {
    val1 = digitalRead(ir1); 
  } while (val1 == 0);
    time1 = millis();
    while (val1 == 1) 
    {
      val1 = digitalRead(ir1);
      time2 = millis();
      if( (time2-time1) > timer) 
      { 
        return 0;
      }
    }
    sense_1();
}

int sense_2()
{
  do 
  {
    val2 = digitalRead(ir2); 
  } while (val2 == 0);
    time1 = millis();
    while (val2 == 1) 
    {
      val2 = digitalRead(ir2);
      time2 = millis();
      if( (time2-time1) > timer) 
      { 
        return 0;
      }
    }
    sense_2();
}

int sense_1_2_()
{
  do
    {
      val1 = digitalRead(ir1); 
      val2 = digitalRead(ir2);
    } while (val1 == 0 && val2 == 0) ;
    if (val1 == 1 && val2 == 1)
    {
      DisplayControl (8);
      delay(2000);
      sense_1_2_();
    }
    time1 = millis();
    while (val1 == 1) 
    {
      val1 = digitalRead(ir1);
      time2 = millis();
      if( (time2-time1) > timer) 
      { 
        return 0;
      }
    }
    while (val2 == 1) 
    {
      val2 = digitalRead(ir2);
      time2 = millis();
      if ( (time2-time1) > timer) 
      {
        return 1;
      }
    }
    sense_1_2_();
}

void TraverserControl (int y)
{
  if (y == 0)
  {
    digitalWrite (dirPin, LOW); 
    bls_val = digitalRead (b_ls); 
    while (bls_val == LOW) 
    {
      digitalWrite (stepPin,HIGH); 
      delay (1); 
      digitalWrite (stepPin,LOW); 
      delay (1); 
      bls_val = digitalRead (b_ls); 
    }
  }
  else
  {   
    digitalWrite (dirPin,HIGH); 
    for (int x = 0; x < 6800; x++)  
    {
      digitalWrite (stepPin,HIGH); 
      delay (1); 
      digitalWrite (stepPin,LOW); 
      delay (1); 
    }
  }
}

int changeTime()         
{
  while (val1 == 0) 
  {
    lcd.clear ();
    lcd.home ();
    lcd.print ("Timer: ");
    long dist = calcDistance();  

    if (dist >= 1 && dist <= 5)        
    {
      lcd.print ("30 min.");
      dis_time = 1000*60*30;
    }
    else if (dist > 5 && dist <= 10)
    {
      lcd.print ("1 Hr.");
      dis_time = 1000*60*60;
    }
    else if (dist > 10 && dist <= 15)
    {
      lcd.print ("2 Hrs.");
      dis_time = 1000*60*60*2;
    }
    else if (dist > 15 && dist <= 20)
    {
      lcd.print ("4 Hrs.");
      dis_time = 1000*60*60*4;
    }
    else if (dist > 20 && dist <= 25)
    {
      lcd.print ("8 Hrs.");
      dis_time = 1000*60*60*8;
    }
    else if (dist > 25 && dist <= 30)
    {
      lcd.print ("12 Hrs.");
      dis_time = 1000*60*60*12;
    }
    else
    {
      lcd.print ("12.5 Min.");
      dis_time = 12500*60;
    }
    lcd.setCursor (0,1);                      
    lcd.print ("1 to set Timer"); 
    delay(500);
    val1 = digitalRead(ir1);
  }       
  while (val1 == 1) 
  {
    lcd.clear ();
    lcd.home ();
    lcd.print("Timer Set");
    delay(2000);
    return 0;
  }
}

long calcDistance()       
{
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(pingPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = microsecondsToCentimeters(duration);
  return cm;
}

long microsecondsToCentimeters(long microseconds) 
{
   return microseconds / 29 / 2; 
}

Далее приведен код для Arduino Uno:



#include <Servo.h>                     

     Servo servo1;                          
     Servo servo2;                              

     int pos1 = 0;                                             
     int pos2 = 0;                          

     const int input = 12;                   
     int value = 0;                         

    long int time1, time2;                  
    int timer = 1000;                       

void setup()
{

   servo1.attach (3);                       
   ServoControl (0);                        

}


void loop()
{

  do 
  {
    value = digitalRead(input); 
  } while (value == 0);
  time1 = millis();
  while (value == 1) 
  {
    value = digitalRead(input);
    time2 = millis();
    if( (time2-time1) > timer) 
    { 
      flip();
      break;
    }
  }
}

void flip()
{
  ServoControl(1);
  delay(1000);
  ServoControl(2);
  delay(1000);
}

void ServoControl (int x)                   
{                                                                                      
  if (x == 1)                           
  { 
    pos2 = 166;                                       
    for (pos1 = 178; pos1 >= 30; pos1 -= 1)  
    {                                        
      servo1.write (pos1);
      servo2.write (pos2);                  
      delay (15);                            
    }    
    delay(250);
    for (pos1 = 30; pos1 <= 178; pos1 += 1)  
    {                                        
      servo1.write (pos1);      
      servo2.write (pos2);             
      delay (15);                           
    } 
    delay(250);
  }                                      
  else if (x == 2)                               
  {  
    servo2.attach(6);
    pos1 = 178;                                        
    for (pos2 = 166; pos2 >= 30; pos2 -= 1)
    {     
      servo2.write (pos2);
      servo1.write (pos1);
      delay (15);  
    }
    delay(250);                                      
    for(pos2 = 30; pos2 <= 166; pos2 += 1)   
    {                                        
      servo2.write (pos2); 
      servo1.write (pos1);                  
      delay (15);                            
    }    
    delay(250);    
    servo2.detach();                                
  }
  else
  {
    servo1.write (178);
    delay (1000);
    servo2.attach(6);
    servo2.write (166);
    delay (1000);
    servo2.detach();
  }
}

Собрав всю аппаратную часть и загрузив код на платы Arduino, можно получить функциональное дезинфицирующее устройство, которое поможет в борьбе с коронавирусом.


Дезинфицирующее устройство с УФ-лампой на основе Arduino и старых компьютерных деталей



© digitrode.ru


Теги: Arduino, коронавирус




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий