Интеллектуальный туннель дезинфекции: Автоматизированная санитизация для мест массового скопления
Компоненты и материалы
| Компонент | Кол-во |
|---|---|
| Arduino UNO | 1 |
| PIR-датчик движения | 2 |
| Реле 12 В (4PDT) — мощное для насоса | 1 |
| Блок питания 12 В (SMPS) | 1 |
| Grove 2-канальное реле (5 В) — управление мощным реле | 1 |
| Блок питания 5 В (SMPS) | 1 |
| Тумблер (On)-Off-(On) | 1 |
| Raspberry Pi 3 Model B + камера V2 + MicroSD + радиатор | 1 комплект |
| Насос 1 л.с. (водяной) | 1 |
| Бак 200 л, стальные/ПВХ трубы, 4-ходовый фоггер, тиги, колена, микротрубки | 1 комплект |
| Баннерная ткань (обшивка), крепёж | 1 |
Инструменты
- Сварка, болгарка, паяльник, припой, лазерный резак (опционально)
Софт и сервисы
- Arduino IDE, Raspbian, OpenCV (Python)
О проекте
Введение
Умный туннель дезинфекции — защита проходящих за ~15 секунд. Помощь в борьбе с COVID-19. Раствор: 0.4% гипохлорит натрия (NaOCl) в воде — нелетучий, длительная бактерицидная активность, безвреден для тканей и кожи*. Стоимость ~$400 (₹30,000), сборка 12 часов.

Где применять
- Продовольственные рынки, офисы, ТЦ, аэропорта, остановки, ж/д вокзалы
- Полицейские участки, колледжи, больницы, жилые комплексы
Принцип работы
Насос 1 л.с. забирает раствор из бака 200 л, подаёт под давлением в 4 фоггера. PIR-датчики на входе детектируют человека → Arduino включает насос на 15 сек (настраивается). Никого — насос выкл (экономия). Туманная доза защищает минимум 60 мин: дезинфицирует воздух, открытую кожу, одежду.

Расхода хватает на 8–10 часов (зависит от трафика). Датчики движения экономят расход.
Железо: рама и обшивка
Рама — металлопрофиль, разборная (транспорт/хранение). Обшивка — баннерная ткань (уличная реклама), крепится пластиковыми стяжками — быстро, без навыков. 3D-модель: skfb.ly/6RGvZ.

Бак и насос сбоку, подключены к фоггерам микротрубками. Внутри — высоконапорная линия с 4 фоггерами. Туман не оставляет следов на одежде, проникает в складки.

Спецификации фоггера: 30 л/ч (0.5 л/мин), давление 45–60 psi, капли 65 мкм, фильтр 130 мкм, насос 40–45 м напора.
Электроника: Arduino
PIR ловит ИК-излучение тела → HIGH на выходе → Arduino → реле 5 В → мощное реле 12 В → насос 16 А (5 В реле держит только 10 А). Два PIR для надёжности.

/* Smart Disinfection and Sanitation Tunnel */
int relayPin = 12;
int inputPin = 2, inputPin2 = 3;
int pirState = LOW, val = 0, val2 = 0;
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(inputPin2, INPUT);
Serial.begin(9600);
}
void loop() {
val = digitalRead(inputPin);
val2 = digitalRead(inputPin2);
if (val == HIGH || val2 == HIGH) {
digitalWrite(relayPin, HIGH);
if (pirState == LOW) {
Serial.println("Motion detected!");
delay(15000); // 15 сек работы насоса
pirState = HIGH;
}
} else {
digitalWrite(relayPin, LOW);
if (pirState == HIGH) {
Serial.println("Motion ended!");
pirState = LOW;
}
}
}

Raspberry Pi 3 (опционально) — подсчёт людей
Для аналитики и точного учёта прошедших. ML-модель на OpenCV (Python) детектирует людей, логирует в файл.
Подключение камеры Pi
- Выключите Pi
- Разъём между USB и HDMI — поднимите защёлку, вставьте шлейф (контакты от Ethernet/USB), зафиксируйте
Включение камеры
sudo raspi-config
# Interfacing Options → Enable Camera → Enable → Finish
Тест
raspistill -v -o test.jpg
Установка OpenCV 4
Гайд: learnopencv.com
Скрипт детекции (main.py)
import cv2.cv as cv
from datetime import datetime
import time, sys, datetime
count = 0
class MotionDetector:
def __init__(self, ceil=8, doRecord=True, showWindows=True):
self.doRecord = doRecord
self.show = showWindows
self.capture = cv.CaptureFromCAM(0)
self.frame = cv.QueryFrame(self.capture)
if doRecord: self.initRecorder()
self.frame1gray = cv.CreateMat(self.frame.height, self.frame.width, cv.CV_8U)
cv.CvtColor(self.frame, self.frame1gray, cv.CV_RGB2GRAY)
self.res = cv.CreateMat(self.frame.height, self.frame.width, cv.CV_8U)
self.frame2gray = cv.CreateMat(self.frame.height, self.frame.width, cv.CV_8U)
self.width = self.frame.width
self.height = self.frame.height
self.nb_pixels = self.width * self.height
self.ceil = ceil
self.isRecording = False
self.trigger_time = 0
if showWindows: cv.NamedWindow("Image")
def initRecorder(self):
codec = cv.CV_FOURCC('D','I','V','X')
self.writer = cv.CreateVideoWriter(datetime.now().strftime("%b-%d_%H:%M:%S")+".avi", codec, 15, cv.GetSize(self.frame), 1)
self.font = cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8)
def run(self):
global count
started = time.time()
while True:
curframe = cv.QueryFrame(self.capture)
instant = time.time()
self.processImage(curframe)
if not self.isRecording:
if self.somethingHasMoved():
self.trigger_time = instant
if instant > started + 5:
print("Human Detected")
count += 1
print(count/2)
# лог в out.txt и log.txt с таймстампом
else:
if instant >= self.trigger_time + 10:
print("Stop recording")
self.isRecording = False
else:
cv.PutText(curframe, datetime.now().strftime("%b %d, %H:%M:%S"), (25,30), self.font, 0)
cv.WriteFrame(self.writer, curframe)
if self.show: cv.ShowImage("Image", curframe)
cv.Copy(self.frame2gray, self.frame1gray)
if cv.WaitKey(1) in (27, 1048603): break
def processImage(self, frame):
cv.CvtColor(frame, self.frame2gray, cv.CV_RGB2GRAY)
cv.AbsDiff(self.frame1gray, self.frame2gray, self.res)
cv.Smooth(self.res, self.res, cv.CV_BLUR, 5,5)
element = cv.CreateStructuringElementEx(11,11,5,5, cv.CV_SHAPE_RECT)
cv.MorphologyEx(self.res, self.res, None, None, cv.CV_MOP_OPEN)
cv.MorphologyEx(self.res, self.res, None, None, cv.CV_MOP_CLOSE)
cv.Threshold(self.res, self.res, 10, 255, cv.CV_THRESH_BINARY_INV)
def somethingHasMoved(self):
nb = sum(1 for y in range(self.height) for x in range(self.width) if self.res[y,x] == 0.0)
avg = (nb * 100.0) / self.nb_pixels
return avg > self.ceil
if __name__ == "__main__":
detect = MotionDetector(doRecord=False)
detect.run()
Запуск: python main.py. В терминале — счётчик, в out.txt и log.txt — логи.
Веб-дашборд (Apache + PHP на Pi)
sudo apt install apache2 -ysudo apt install php libapache2-mod-php -ycd /var/www/html && wget "https://hacksterio.s3.amazonaws.com/uploads/attachments/1097966/Dashboard.zip" && sudo apt-get install unzip && unzip Dashboard.zip
Откройте IP Pi в браузере — дашборд готов.
Точка доступа Wi-Fi на Pi
Инструкция: raspberrypi.org. SSID: SanitizingTunnel, пароль: SecretPassword.
Мобильные приложения
- Android: Android Studio, исходники на GitHub, поменяйте IP Pi
- iOS: Xcode, исходники на GitHub, поменяйте IP Pi
Химический раствор
0.4% NaOCl в 100 л воды. Поставщик: Raman & Weil Pvt. Ltd. Есть декларация Bode Chemie Germany об эффективности против COVID-19.

Итоговая сборка и стоимость

Смета: Google Sheets.
Код и ресурсы
- Arduino код — выше
main.py— выше- Дашборд (PHP), Android/iOS исходники и APK — GitHub
- 3D-модель корпуса (.3mf), схема Fritzing (.fzz) — в репозитории
Производственный процесс
- Как IoT революционизирует сельское хозяйство: ключевые выгоды и инсайты умного фермерства
- Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
- Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
- Умный дом и система безопасности на базе 1Sheeld
- Умные самозавязывающиеся туфли с встроенной сборкой энергии
- Празднуем со светом и звуком: DIY-проект «С днём рождения» на Arduino
- Автономный робот-следопыт с распознаванием лиц на Arduino Nano и OpenCV
- DIY Guitar Speed Pick & Stomp Pedal — моторизированный медиатор на Arduino
- Умное производство: Определение, преимущества и внедрение
- Революция в гидравлике: как Индустрия 4.0 движет умное производство