Mask Reborn Box: New Life For Old Masks

We created an affordable, at-home kit to extend the life of masks so you can join the fight against the pandemic by helping your community.

AdvancedFull instructions provided5 hours9,386
Mask Reborn Box: New Life For Old Masks

Things used in this project

Hardware components

high-voltage booster
DC 5V input and 400KV output
×1
LM2596 module
DC-DC 12V/5V regulator
×2
Switching power supply
AC 110/220V DC 12V 100 watts
×1
Switching power supply
AC 110/220V DC 5V 3.5 watts
×1
DC Fan
DC 12V 0.6A
×1
PTC Heater
AC 220V 300 watts. You can change to AC 110V depend on where you live.
×1
DHT11 Temperature & Humidity Sensor (3 pins)
DHT11 Temperature & Humidity Sensor (3 pins)
you can find more cheaper and useful ones from other sites.
×1
relay
DC 5V control, 4 connectors
×6
SS14 diode
SMD package
×7
S8050 triode
SOT-23 package
×6
0603 LED
0603 SMD package
×6
300 ohm resistor
0805 SMD package
×6
10K ohm resistor
0603 SMD package
×6
Capacitor, 220 µF
Capacitor, 220 µF
SMD package
×1
Capacitor, 470 µF
Capacitor, 470 µF
SMD package
×1
Capacitor 1000 uF
SMD package
×1
Capacitor 22 uF
0402 SMD package
×2
XH2.54 2P socket
×6
XH2.54 3P socket
×2
XH2.54 4P socket
×1
XH2.54 2P wire
5 are single header, 1 is double header
×6
XH2.54 3P wire
×1
XH2.54 4P wire
double header
×1
Switch Button
×5
PH2.0 2P socket
×6
PH2.0 2P wire
single header
×6
Spring terminal
×8
UVC light tube
wavelength shorter than 285nm
×2
UVC light tube driver
supports 2 tubes on 1 driver
×1
5.6M ohm high voltage resistor
×1
1 ohm 5 watts cement resistor
×1
OLED
128*64 resolution, IIC interface
×1
LGT8F328P MCU board
Arduino nano compatible board and I use Arduino IDE to program it. This needs board library. You may use ordinary arduino nano instead of it.
×1
carbon fiber non-woven
×1
Aluminum foil
×1
dual adhesive tape
×1
Foam Tape
×1
Plastic net
×1
Velcro
×1
magnet
×1
Reed Switch, SPST-NO
Reed Switch, SPST-NO
×1
Wire Clip
×20
2.54 pin socket
×2
3P wire
60~80cm long
×1
Plastic Angles Bar
6 meters
×6
Triangle angle
×4
AC socket AC-01
×1
Mains Power Cord, 14 AWG
Mains Power Cord, 14 AWG
×1
18 AWG wire
1 meter
×1
5.08mm pitch pin
1 is 2P, another is 3P
×2
PP hollow board
50*50cm size, 5mm thickness
×5
PC hollow board
The structure inside the board is better to be hive like. 50*50cm size, 12mm thickness
×3
Submerge pump
With rubber tube
×1
Thermostat Switch
React temperature 100/70 degrees celcius
×1
ESD Protection Device
Protect the controlling board not to be shocked by static charge
×30

Software apps and online services

Arduino IDE
Arduino IDE
LCEDA

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
Wire Stripper & Cutter, 30-10 AWG Solid & Stranded Wires
Wire Stripper & Cutter, 30-10 AWG Solid & Stranded Wires
paper cutter
Laser cutter (generic)
Laser cutter (generic)
Electrostatic meter
It is used to measure the remained surface static charge.

Story

Read more

Custom parts and enclosures

The enclosure

It's the enclosure of Mask Reborn Box. I used 123D Design to make it.

Schematics

The main control board circuit diagram

The schematic picture

Code

The code of controlling board

Arduino
It's for Arduino nano. Also compatible for LGT8F328P boards. (need board library). I haven't included the buzzer. The buzzer is soldered in pin 13.
//Mask Reborn Box type PMRB
//CC-BY-SA 4.0 licence

#include <DHT.h>
#include <U8g2lib.h>
#include <Wire.h>

boolean Func[]={0, 0, 0, 0}; //Function status

boolean Func_Lock[]={0, 0, 0, 0}; //Function lock status

volatile unsigned long Heat_Timer; 
volatile boolean Heat_Timer_Lock;
volatile unsigned long Recharge_Timer; 
volatile boolean Recharge_Timer_Lock;
String Status[]={"Hot Wind Off", "Hot Wind On", "UVC Off", "UVC On", "Washer Off", "Washer On", "Recharger Off", "Recharger On"};

U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE); 
DHT dht11(11, 11); 

void Display() {
  u8g2.setFont(u8g2_font_timR08_tf);
  u8g2.setFontPosTop();
  u8g2.setCursor(0,0);
  u8g2.print("Mask Reborn Box  by M.A.P.");
  u8g2.setFont(u8g2_font_timR10_tf);
  u8g2.setFontPosTop();
  u8g2.setCursor(0,15);
  u8g2.print(Status[Func[0]]);
  u8g2.setCursor(0,27);
  u8g2.print(Status[2 + Func[1]]);
  u8g2.setCursor(0,39);
  u8g2.print(Status[4 + Func[2]]);
  u8g2.setCursor(0,51);
  u8g2.print(Status[6 + Func[3]]);
  u8g2.setCursor(90,15);
  u8g2.print(dht11.readTemperature());
  u8g2.setCursor(112,15);
  u8g2.print(" C");
  if (Heat_Timer_Lock == true) {
    u8g2.setCursor(80,27);
    u8g2.print(String(((1800000 - (millis() - Heat_Timer)) / 1000)) + String(" S"));
  } else {
    u8g2.setCursor(80,27);
    u8g2.print("                                ");
  }
  if (Recharge_Timer_Lock == true) {
    u8g2.setCursor(90,51);
    u8g2.print(String(((90000 - (millis() - Recharge_Timer)) / 1000)) + String(" S"));
  } else {
    u8g2.setCursor(90,51);
    u8g2.print("                                ");
  }
}

void Dry(boolean OnOff) {
  digitalWrite(2,(OnOff && dht11.readTemperature() <= 70));
  digitalWrite(3,(OnOff || dht11.readTemperature() >= 50)); 
  if ((OnOff == true && dht11.readTemperature() >= 57) && Heat_Timer_Lock == false) {
    Heat_Timer_Lock = true;
    Heat_Timer = millis();
  }
  if (millis() - Heat_Timer >= 1800000 && Heat_Timer_Lock == true) {
    Func_Lock[0] = 0;
    Heat_Timer_Lock = false;
    Heat_Timer = 0;
  }
}

void Recharge(boolean OnOff) {
  if (OnOff == true) {
    if (Recharge_Timer_Lock == false) {
      Recharge_Timer_Lock = true;
      Recharge_Timer = millis();
    }
    digitalWrite(6,(OnOff && (long) ((millis() - Recharge_Timer)) % (long) (15000) <= 10000));
  } else {
    digitalWrite(6,OnOff);
    Recharge_Timer_Lock = false;
    Recharge_Timer = 0;
  }
  if (millis() - Recharge_Timer >= 90000) {
    Recharge_Timer_Lock = false;
    Recharge_Timer = 0;
    Func[3] = 0;
    Func_Lock[3] = 0;
  }
}

void UVC(boolean OnOff) { //
  digitalWrite(4,OnOff);
}

void Wash(boolean OnOff) { //
  digitalWrite(5,OnOff);
}

void setup(){
  Heat_Timer = 0;
  Heat_Timer_Lock = false;
  Recharge_Timer = 0;
  Recharge_Timer_Lock = false;
  u8g2.begin();
  u8g2.enableUTF8Print();
  dht11.begin();
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop(){
  u8g2.firstPage();
  do
  {
  Display();
  }
  while (u8g2.nextPage());
  for (int i = 0; i <= 3; i++) { //
    if (digitalRead(14 + i) == false) { //
      Func_Lock[i] = 0;
    }
    if (digitalRead(14 + i) == true && Func_Lock[(int)(i - 1)] == 0) { //
      Func_Lock[i] = 1;
      Func[i] = !Func[i];
    }
    switch (i) { //
     case 0:
      Dry(Func[i]);
      break;
     case 1:
      UVC(Func[i]);
      break;
     case 2:
      Wash(Func[i]);
      break;
     case 3:
      Recharge(Func[i]);
      break;
    }
  }
}

Credits

Heng Long Lok (Kalimov)

Heng Long Lok (Kalimov)

1 project • 2 followers
This is Kalimov, a Macanese who lives in Shanghai. Hacking things and tinkering are routine in my life.
Jason Leong

Jason Leong

1 project • 1 follower
Torrey Nommesen

Torrey Nommesen

1 project • 1 follower
Artist, Rock Star and Geek by passion. Teacher, Designer and Tech Writer by trade.
Yan Heng Li

Yan Heng Li

1 project • 1 follower
Guang Yun Feng

Guang Yun Feng

1 project • 1 follower
halima ouatab

halima ouatab

1 project • 1 follower

Comments