Intelligentes UV-C & Wärme-Desinfektionsgerät für Gesichtsmasken – Arduino-gesteuert
Komponenten und Zubehör
| Seeed Grove Infrarot-Temperatursensor | × | 1 |
| Arduino UNO | × | 1 |
| Seeed Base Shield V2 | × | 1 |
| Seeed Grove Lichtsensor (P) v1.1 | × | 1 |
| Adafruit Quad Alphanumerisches Display 0,54″ (I²C Backpack) | × | 1 |
| Seeed 12 mm Domed Push Button | × | 1 |
| Piezo-Summer | × | 1 |
| Netzteil 12 VDC / 1,2 A (Hutschiene) | × | 1 |
Projektbeschreibung
Gesichtsmasken-Desinfektionsgerät
UV-C / Wärme, Arduino-gesteuert, für Coronavirus (SARS-CoV-2)

Open Source unter CC BY-NC-SA. Ursprüngliche Veröffentlichung: needlab.org.

Haftungsausschluss: Fällt unter „Good Samaritan Law“. Keine Labortests für SARS-CoV-2 mit diesem Gerät. Nutzung auf eigene Verantwortung.
Einführung
FFP1/FFP2-Masken sind bei Pandemien unverzichtbar, aber als Einwegprodukt gedacht. Bei Knappheit ist Wiederverwendung nötig → Desinfektion erforderlich. Krankenhäuser nutzen UVGI (UV-C) und/oder Trockenwärme. Dieses Projekt bietet ein kostengünstiges, portables Gerät für den privaten/klinischen Bedarf, das beide Methoden kombiniert.
SARS-CoV-2 bleibt auf chirurgischen Masken bis 7 Tage infektiös. Effektive Desinfektion ist daher kritisch.
DIY-Bauanleitung
Geräte-Setup

- Temperatur: 65 ± 5 °C halten.
- UV-C-Lampe (kein Glas, Quarzglas nötig – Glas blockiert UV-C).
- Desinfektionszyklus: mind. 30 Min (Empfehlung: nicht länger, um Maskenmaterial zu schonen).

Abmessungen

Erste Wärmetests




Heizsystem bauen
- Bratpfanne 22 cm Ø (Induktionstauglich), Griff entfernt.
- Innen mit Alufolie auskleiden (UV-C-Reflektion).
- 20 cm Loch in Boxboden schneiden.
- 4 Metallhalter positionieren Pfanne mittig, ohne Holzkontakt (Wärmebrücke vermeiden).





Deckel bauen


UV-C-System

11 W UV-C-Lampe aus Aquarien-Sterilisator. In Deckel montiert (4 Löcher, Kabelbinder + Polsterung). Deckel-Innenseite mit Alufolie beklebt (Reflektion). Kein Glas als Abdeckung – blockiert UV-C!
⚠ WARNUNG: UV-C-Gefahr
UV-C-Strahlung ist extrem gefährlich für Augen und Haut! Lampe NUR bei geschlossenem Deckel einschalten, bei geöffnetem Deckel AUSSCHALTEN.
Wichtiger Hinweis von Horror Coder (Kommentare): Gerät muss lichtdicht sein. Sichtbares Licht der Röhre ist nur 3–4 % der Emission. Prüfung: Helle Lampe (10× Röhrenleistung) in geschlossene Box, in völliger Dunkelheit auf Lichtlecks prüfen. Alle Löcher abdichten (Schaumgummi, Ränder).



Innenflächen mit Alufolie auskleiden

Seitenwände & Deckel-Innenseite mit Alufolie (Doppelklebeband, Kanten mit Gewebeband). Ziel: UV-C auf Seitenflächen reflektieren → höhere Wirksamkeit.
Drahtgitter für Masken (Einschub)
Kupferdraht (30 mm Abstand), 120 mm über Boden. Drähte durch kleine Löcher in Vorder-/Rückwand geführt.



Arduino & Sensoren einrichten
Arduino-Übersicht

Stückliste (Bill of Materials)
- Arduino UNO Rev3
- Grove Base Shield V2
- Grove Infrarot-Temperatursensor
- Grove Lichtsensor (P)
- Taster 12 mm
- Piezo-Summer
- Quad Alphanumeric Display (Adafruit #2157)
- Netzteil 12 VDC 1,2 A
Alle Links im Originalprojekt.
Temperatur- & Lichtsensor


Siehe auch: Benchmarking Temperatursensoren.
Arduino-Steuerlogik (Zustandsautomat)
- INIT: Display zeigt Temperatur. Warten bis ≥ 70 °C (Schwellwert 59 °C im Code), dann Start per Taster → COUNT.
- COUNT: Countdown 30 → 0 Min, Temperatur & Zeit abwechselnd (Punkt blinkt 1 Hz). Bei Temp. < Schwellwert oder UV-C aus → ERR.
- END: Normaler Zyklusende. Summer signalisiert. Taster → INIT.
- ERR: Fehlerzustand (Temp. zu niedrig / UV-C aus). Summer warnt. Taster → INIT.
Alarme: Spezifische Tonfolgen & Display-Meldungen bei: ERR-Zustand, Übertemperatur (> 75 °C).

Arduino-Quellcode
Benötigte Libraries:
Adafruit_LEDBackpack.h– Adafruit TutorialMetro.h– GitHub
Bedienungsanleitung

- Box auf Induktions- (oder Ceran-) Kochfeld stellen.
- Arduino-Stromversorgung EIN.
- Deckel schließen, Kochfeld auf 70–80 % Leistung.
- Bei 60 °C Leistung auf 30 % reduzieren.
- Deckel öffnen, Masken einlegen, schließen.
- Taster drücken → Countdown 30 Min startet.
- Warten bis 00 Min, Summer ertönt.
- Für neuen Zyklus Taster drücken (→ INIT).
Hinweis: Im COUNT-Zustand blinkt der Punkt zwischen Zeit & Temperatur im 1-s-Takt.
Temperaturverläufe


Hintergrund: Vireninaktivierung durch Wärme
Feuchthetze < 100 °C bekannt seit Pasteur. Trockenwärme wirksam gegen SARS-CoV: 56 °C 30–90 Min, 65 °C 20–60 Min, 75 °C 30–45 Min fast vollständige Inaktivierung. SARS-CoV-2: 56 °C 30 Min oder 70 °C 5 Min → keine nachweisbare Infektiosität mehr. Gewähltes Protokoll: 65 °C / 30 Min (Schonung Maskenmaterial).
Keimtötende Protokolle für Masken
Influenza-Viren (auch ssRNA) auf Masken: UVGI ~1 J/cm², UVGI ~18 J/cm², oder Feuchthetze 65 ± 5 °C 3 h wirksam. Keine direkten Coronavirus-Masken-Studien, aber vergleichbare Effekte erwartet.
Empfohlenes Desinfektionsverfahren
Prozedur für gebrauchte Masken essenziell: Personalisierung, Zykluszählung, Verpackung. Orientierung an Nebraska Medicine UVGI-Prozess für N95.
Fazit
Protokoll: 30 Min UV-C + Trockenwärme 65 ± 5 °C. Zeit zählt ab Erreichen von Temp. & Lichtintensität. Jede Methode allein bei diesen Parametern bereits hochwirksam, Kombination erhöht Sicherheit.
Sicherheitshinweise
- UV-C schädigt Haut & Augen → Lampe nur bei geschlossenem Deckel AN.
- Metallteile werden heiß → Verbrennungsgefahr nach Zyklus.
Disclaimer
Basierend auf verfügbarer Evidenz wahrscheinlich fast vollständige Inaktivierung. Keine Labortests mit SARS-CoV-2 an diesem Gerät. Keine Garantie für Filterleistung nach Desinfektion. Nutzung freie Entscheidung.
Weiterentwicklung (V2)
- Größere Abmessungen (mehr Masken)
- CNC- & Lasercutter-Dateien
- 3 Heizoptionen: Induktion, Kochplatte, Infrarot (mit PID-Regelung)
- 2×16 LCD Display
- Modi: Heat+UV-C, Heat only, UV-C only
- Verschiedene Temperatursensoren wählbar

Validierung durch Fachlabore angestrebt.
Update Juni 11: V2 mit 12 FFP2/N95 Masken, OPT 1. Preis, Kooperation mit Universität Marokko für lokale Produktion.



Update Sept 2: V2 auf Hackaday: hackaday.io
Team: Jean Noel Lefebvre, Daniel Moreno, Dr. Alejandra Duque, Dr. Felipe Gutiérrez Arango, Jason Knight, Maria Isabel Velez Isaza, Sameera Chukkapalli.

#COVID19DetectProtect
Literaturverzeichnis
- CDC – Extended Use & Limited Reuse of N95 Respirators
- Chin et al. – Stability of SARS-CoV-2 in different environmental conditions (medRxiv 2020)
- Tseng & Li – Inactivation of Viruses on Surfaces by UVGI (J Occup Environ Hyg 2007)
- Hackerfarm – NUKEMETER: Measuring UV-C Light Intensity (2020)
- van Doremalen et al. – Aerosol and Surface Stability of SARS-CoV-2 (NEJM 2020)
- Kariwa et al. – Inactivation of SARS coronavirus (Jpn J Vet Res 2004)
- Duan et al. – Stability of SARS Coronavirus (Biomed Environ Sci 2003)
- Darnell et al. – Inactivation of SARS-CoV (J Virol Methods 2004)
- Ansaldi et al. – SARS-CoV, influenza A resistance against disinfectants/UV (2004)
- Mills et al. – UVGI of influenza-contaminated N95 (Am J Infect Control 2018)
- Lore et al. – Three Decontamination Treatments against Influenza (Ann Occup Hyg 2012)
- Lindsley et al. – Effects of UVGI on N95 Filtration (J Occup Environ Hyg 2015)
- Viscusi et al. – Five Decontamination Methods for FFR (Ann Occup Hyg 2009)
- Bergman et al. – Multiple (3-Cycle) Decontamination Processing (J Eng Fiber Fabr 2010)
- Kampf et al. – Persistence of coronaviruses on surfaces (J Hosp Infect 2020)
Code
TheBox V1 (Arduino Sketch)
/* * Author: Jean Noel Lefebvre - www.ootsidebox.fr - march 31th 2020 * */
#include <Wire.h>
#include "Adafruit_LEDBackpack.h"
#include <math.h>
#include <Metro.h>
#define LIGHT_SENSOR A2
#define SUR_TEMP_PIN A0
#define OBJ_TEMP_PIN A1
#define BUZZER 3
#define BP 2
#define SEUIL_TEMP 59
#define HIGH_TEMP 75
#define SEUIL_LIGHT 60
#define TIMER 30
float temp_calibration=0;
float objt_calibration=0.000;
float temperature_range=10;
float offset_vol=0.014;
float tempValue = 0;
float objtValue= 0;
float current_temp=0;
float temp=0;
float temp1=0;
float temp2=0;
unsigned int temp3=0;
const float reference_vol=0.500;
unsigned char clear_num=0;
float R=0;
float voltage=0;
long res[100]={ 318300,302903,288329,274533,261471,249100,237381,226276,215750,205768,
196300,187316,178788,170691,163002,155700,148766,142183,135936,130012,
124400,119038,113928,109059,104420,100000,95788,91775,87950,84305,
80830,77517,74357,71342,68466,65720,63098,60595,58202,55916,
53730,51645,49652,47746,45924,44180,42511,40912,39380,37910,
36500,35155,33866,32631,31446,30311,29222,28177,27175,26213,
25290,24403,23554,22738,21955,21202,20479,19783,19115,18472,
17260,16688,16138,15608,15098,14608,14135,13680,13242,12819,
12412,12020,11642,11278,10926,10587,10260,9945,9641,9347,
9063,8789,8525,8270,8023,7785,7555,7333,7118,6911};
float obj [13][12]={
{ 0,-0.274,-0.58,-0.922,-1.301,-1.721,-2.183,-2.691,-3.247,-3.854,-4.516,-5.236},
{ 0.271,0,-0.303,-0.642,-1.018,-1.434,-1.894,-2.398,-2.951,-3.556,-4.215,-4.931},
{ 0.567,0.3,0,-0.335,-0.708,-1.121,-1.577,-2.078,-2.628,-3.229,-3.884,-4.597},
{ 0.891,0.628,0.331,0,-0.369,-0.778,-1.23,-1.728,-2.274,-2.871,-3.523,-4.232},
{ 1.244,0.985,0.692,0.365,0,-0.405,-0.853,-1.347,-1.889,-2.482,-3.13,-3.835},
{ 1.628,1.372,1.084,0.761,0.401,0,-0.444,-0.933,-1.47,-2.059,-2.702,-3.403},
{ 2.043,1.792,1.509,1.191,0.835,0.439,0,-0.484,-1.017,-1.601,-2.24,-2.936},
{ 2.491,2.246,1.968,1.655,1.304,0.913,0.479,0,-0.528,-1.107,-1.74,-2.431},
{ 2.975,2.735,2.462,2.155,1.809,1.424,0.996,0.522,0,-0.573,-1.201,-1.887},
{ 3.495,3.261,2.994,2.692,2.353,1.974,1.552,1.084,0.568,0,-0.622,-1.301},
{ 4.053,3.825,3.565,3.27,2.937,2.564,2.148,1.687,1.177,0.616,0,-0.673},
{ 4.651,4.43,4.177,3.888,3.562,3.196,2.787,2.332,1.829,1.275,0.666,0},
{ 5.29,5.076,4.83,4.549,4.231,3.872,3.47,3.023,2.527,1.98,1.379,0.72}
};
int Light;
float Heat;
int Timer=0;
int Minute=59;
Adafruit_AlphaNum4 alpha4 = Adafruit_AlphaNum4();
Metro ledMetro = Metro(1000);
enum States{INIT, COUNT, END, ERR};
int Automate=INIT;
bool TemperatureOK=false;
bool LightOK=false;
void setup() {
pinMode(BP, INPUT_PULLUP);
Serial.begin(9600);
analogReference(INTERNAL);
alpha4.begin(0x70);
alpha4.clear(); alpha4.writeDisplay();
PrintLed(alpha4,"TboX");
tone(3, 3000, 500); delay(1000);
Automate=INIT;
}
void loop() {
static int Point=1;
float T1=measureSurTemp();
float T2=measureObjectTemp();
Heat=T1+0;
if (ledMetro.check() == 1) {
#ifndef TEST
if (Automate==COUNT)
#endif
{
if(Point) Point=0; else Point=1;
Minute--;
if(Minute==0) { Minute=59; if(Timer) Timer--; PrintSensors(); }
}
if(Automate==END) tone(3, 3000, 100);
if(Automate==ERR) tone(3, 300, 200);
}
#ifdef TEST
TemperatureOK=true;
#else
if (Heat >= SEUIL_TEMP) TemperatureOK=true; else TemperatureOK=false;
#endif
Light=analogRead(LIGHT_SENSOR)/10;
if(Light >= SEUIL_LIGHT) LightOK=true; else LightOK=false;
if(Heat>=HIGH_TEMP) { tone(3, 300, 200); delay(500); }
switch(Automate) {
case INIT:
Timer=0;
if((!digitalRead(BP)) && TemperatureOK) { Automate=COUNT; Timer=TIMER; tone(3, 3000, 500); }
if((!digitalRead(BP)) && !TemperatureOK) { PrintLed(alpha4,"lowT"); tone(3, 300, 200); }
else PrintLedVal(alpha4,Timer,(int)Heat,Point);
break;
case COUNT:
if(Timer==0) Automate=END;
if(!LightOK || !TemperatureOK) Automate=ERR;
PrintLedVal(alpha4,Timer,(int)Heat,Point);
break;
case END:
if(!digitalRead(BP)) Automate=INIT;
PrintLed(alpha4,"END.");
break;
case ERR:
if(!digitalRead(BP)) Automate=INIT;
PrintLed(alpha4,"Err.");
break;
}
}
void PrintSensors() {
Serial.print(Timer); Serial.print(", ");
Serial.print((int)Heat); Serial.print(", ");
Serial.print(100); Serial.println();
}
float binSearch(long x) {
int low=0, mid, high=100;
while (low<=high) {
mid=(low+high)/2;
if(xobj[temp3][i])&&(voltage
GitHub Libraries
Schaltplan

Herstellungsprozess
- Thyristor-Technologie: Von SCR über TRIAC, GTO bis UJT
- IoT Provisioning skalieren: Sichere, effiziente Strategien für Device Onboarding
- Fortschritte in der Medizintechnik verfolgen
- Outdoor-Wetterstation mit Raspberry Pi 2 & ADS-WS1 bauen
- LM35-basiertes Temperatursteuerungssystem mit AT89S52 Mikrocontroller
- Kompakter DHT Temperatur- & Feuchtigkeits-Breakout für Raspberry Pi – ATtiny85 & DHT22/DHT11
- Pico-Powered Boot Switch: OS vor dem Einschalten per Schalter wählen
- Datensicherheit im Mobile Scanning: Warum On-Device Processing entscheidend ist
- Geräte-Attestation: Wie GlobalPlatform Vertrauen in IoT schafft
- Medizinprodukte-Zubehör: Definitionen, Klassifizierung & regulatorische Auswirkungen