Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Туннель интеллектуальной дезинфекции и санитарии

Компоненты и расходные материалы

Arduino UNO
× 1
Перемычки (общие)
× 1
Датчик движения PIR (общий)
× 2
Реле питания 12 В (4PDT)
× 1
12 В SMPS
× 1
Seeed Grove - 2-канальное реле SPDT
× 1
5-вольтовый SMPS
× 1
Тумблер, (Вкл.) -Off- (Вкл.)
× 1
Raspberry Pi 3, модель B
× 1
Модуль камеры Raspberry Pi версии 2
× 1
Карта Micro SD
× 1
Кабель Micro-USB - USB (общий)
× 1
Радиатор
× 1
Водяной насос 1 HP
× 1
Труба стального короба
× 1
Резервуар для воды (200 л)
× 1
Пластиковая труба из ПВХ
× 1
4-Way Fogger
× 1
Гибкий баннер
× 1
Тройник
× 1
Микротрубная труба
× 1
Настенный светильник
× 1
Локоть
× 1
Кабельная стяжка, двусторонняя
× 1

Необходимые инструменты и машины

Сварочный аппарат
отрезной станок
Паяльник (универсальный)
Проволока для припоя, без свинца
Лазерный резак (универсальный)

Приложения и онлайн-сервисы

IDE Arduino
Raspberry Pi Raspbian
OpenCV

Об этом проекте

Введение

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

Основная идея этого проекта - создать туннель, который сможет предотвратить распространение COVID-19.

Этот туннель дезинфекции и санитарии подготовлен для дезинфекции людей в течение 15 секунд от любых возможных бактерий.

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

Итак, я взял на себя эту инициативу, чтобы построить этот умный туннель для дезинфекции и санитарии. Этот туннель был построен за 12 часов. Он может полностью продезинфицировать человека с головы до пят всего за 15 секунд, а используемый раствор совершенно безвреден *. Общая стоимость туннеля составляет примерно 30 000 или 400 долларов. (Пересмотренная стоимость)

Где использовать?

  • Продовольственные рынки
  • Офисы
  • Торговые центры
  • Аэропорты
  • Автобусные остановки
  • Железнодорожные вокзалы
  • Полицейские участки
  • Колледж
  • Больницы
  • Колония

Как это работает

Водяной насос 1HP размещается сбоку от каждого туннеля, который забирает раствор 0,4% раствора гипохлорита натрия в 100 литрах воды из резервуара. Поскольку машина работает автоматически, она определяет, входит ли кто-нибудь в туннель. Когда кто-то входит в туннель, водяной насос запускается на 15 секунд. Чтобы пользователь мог пройти через этот туннель, и если в туннеле никого нет, насос будет отключен для экономии воды и электричества. Мутный дезинфицирующий спрей защищает жителей от заражения бактериями в течение не менее 60 минут (примерно *). Поскольку он дезинфицирует воздух, открытые участки кожи и человеческую одежду.

Пластиковая емкость на 200 литров раствора и насос для системы трубопроводов высокого давления расположены сбоку от тоннеля. По расчетам, раствора должно хватить на 8-10 часов. Так как над входом есть датчик движения в целях экономии антисептика. (Может варьироваться в зависимости от людей, заходящих в туннель **)

Блок-схема

Настройка оборудования

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

Ознакомьтесь с моделью - https://skfb.ly/6RGvZ

Пластиковый резервуар на 200 литров раствора и насос для системы трубопроводов высокого давления расположены на стороне туннеля, который соединен с 4-Way Fogger Assembly.

>

По всему туннелю использовались микротрубки для подачи раствора в туманообразователь.

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

В качестве решения в этом проекте используется сертифицированное решение. (Сертификат прилагается ниже)

4 Way Fogger

  • Расход:30 л / ч / 0,5 л / мин (для 1 туманообразователя).
  • Рекомендуемое давление:45-60 фунтов на кв. дюйм.
  • Средний размер капли:65 микрон (при 55-60 фунт / кв. дюйм).
  • Требуемая фильтрация:130 микрон (120 меш)
  • Требуемый насос:напор от 40 до 45 метров

Другие используемые аксессуары

Подготовьте Arduino

Водяной насос фактически работает, обнаруживая инфракрасные лучи. Когда человеческое тело приближается к датчику движения, так как человеческое тело отражает инфракрасные лучи, датчик движения обнаруживает эти инфракрасные лучи и дает нам ВЫСОКИЙ сигнал через выходной контакт. Затем этот ВЫСОКИЙ сигнал считывается Arduino. Таким образом, если Arduino считывает ВЫСОКИЙ сигнал, он подаст ВЫСОКИЙ сигнал на модуль реле, что означает, что реле включится, и в результате реле питания включится, и оно включит водяной насос на 15 секунд (может быть изменен). Точно так же, если Arduino считывает НИЗКИЙ сигнал, он переводит контакт реле в НИЗКИЙ, и в результате водяной насос останется выключенным.

В этом случае я использовал 2 датчика PIR, чтобы было точнее, если какой-либо из них обнаружит движение, тогда реле включится на 15 секунд (можно изменить).

Мы не можем использовать реле 5 В напрямую с водяным насосом, потому что в моем случае водяной насос, который я использовал в этом проекте, имеет номинальный ток (А) 16 А, а реле 5 В имеет максимальную нагрузку 10 А, поэтому для управления водяным насосом Я использовал еще одно реле с модулем реле 5 В. это реле питания 12 В.

Код:

  / * 
* Туннель интеллектуальной дезинфекции и санитарии
* /

int relayPin =12; // выбираем контакт для контакта реле

int inputPin =2; // выбираем входной контакт (для датчика PIR)
int inputPin2 =3; // выбираем входной контакт (для датчика PIR 02)

int pirState =LOW; // в начале, если движение не обнаружено
int val =0; // переменная для чтения статуса вывода
int 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) {// проверяем, является ли вход HIGH
digitalWrite (relayPin, HIGH); // включаем реле
if (pirState ==LOW) {
// включаем
Serial.println ("Обнаружено движение!");
// 15-секундная задержка
задержка (15000);
pirState =HIGH;
}
} else {
digitalWrite (relayPin, 0); // выключаем реле
if (pirState ==HIGH) {
// выключаем
Serial.println ("Движение завершено!");
pirState =LOW;
}
}

}

Окончательная разводка проекта выглядит немного запутанной, но сработала нормально.

После того, как все было подключено, я просто проверил его с помощью базовых датчиков, а затем приступил к проверке срабатывания реле.

Подготовьте Raspberry Pi 3 (необязательно)

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

Хотя есть много способов посчитать это с некоторыми физическими датчиками, такими как датчик PIR и ультразвуковой датчик, но я нашел это более точным, размышляя обо всех шансах.

Существует модель машинного обучения, которая обнаруживает человеческое тело с помощью OpenCV в Python и сохраняет журнал в файле, который можно обработать для отображения данных в приложении.

Подключите камеру Pi

  • Выключите Raspberry Pi.
  • Найдите модуль камеры между модулем USB и модулями HDMI.
  • Разблокируйте черный пластиковый зажим, (осторожно) потянув его вверх.
  • Вставьте ленточный кабель модуля камеры (металлические разъемы обращены в сторону . от портов Ethernet / USB на Raspberry Pi 4)
  • Зафиксируйте черный пластиковый зажим.
/

Включите камеру Pi

  • Беги
  sudo raspi-config  
  • Выберите параметры интерфейса (т.е. 4-й вариант) в главном меню Raspberry Pi Software Configuration Tool. Нажмите ENTER.
  • Выберите Включить камеру . (т.е. 5-й вариант) и нажмите ENTER.
  • В следующем меню с помощью клавиши со стрелкой вправо выделите ВКЛЮЧИТЬ . и нажмите ENTER.

Тестовая камера Pi

Затем убедитесь, что Pi Camera установлена ​​правильно, запустив наложение предварительного просмотра камеры. Наложение будет отображаться на экране.

  • Подключитесь к Raspberry Pi с помощью VNC Viewer.
  • Выполните следующую команду:
  raspistill -v -o test.jpg  

Если вы правильно установили камеру Pi, вы должны увидеть кадры с камеры, отображаемые на вашем экране.

Установка OpenCV

Пожалуйста, перейдите по этой ссылке, чтобы установить OpenCV

https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/

Код

Выполните следующую команду, чтобы создать и открыть новый файл сценария:

  cd Desktop 
sudo nano main.py

Скопируйте сценарий и вставьте его в новый созданный файл.

  import cv2.cv as cv 
from datetime import datetime
import time
import sys
import datetime
count =0
class MotionDetector ():
def onChange (self, val):#callback, когда пользователь изменяет ceil
self.ceil =val
def __init __ (self, ceil =8, doRecord =True, showWindows =True):
self.writer =None
self.font =None
self.doRecord =doRecord # Записывать или нет движущийся объект
self.show =showWindows # Либо показать 2 окна, либо нет
self.frame =None
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) # Серый кадр at t-1
cv.CvtColor (self.frame, self.frame1gray, cv.CV_RGB2GRAY)
# Сохранит пороговый результат
self.res =cv.CreateMat (self.frame. высота, self.frame.width, cv.CV_8U)
self.frame2gray =cv.CreateMat (self.fra me.height, self.frame.width, cv.CV_8U) # Серый кадр в точке t
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")
# cv.CreateTrackbar ("Mytrack", "Image", self.ceil, 100, self.onChange)
def initRecorder (self):# Создать рекордер
codec =cv.CV_FOURCC ('D', 'I', 'V', 'X')
#codec =cv.CV_FOURCC ("D", "I", " B "," ")
self.writer =cv.CreateVideoWriter (datetime.now (). Strftime ("% b-% d_% H:% M:% S ") +". Avi ", кодек, 15, cv.GetSize (self.frame), 1)
#FPS установлено на 15, потому что это похоже на частоту кадров моей камеры, но ее следует настроить в соответствии с вашими потребностями
self.font =cv.InitFont (cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) # Создает шрифт
def run (self):
global count
start =time.time ()
в то время как True:
curframe =cv.QueryFrame (self.capture)
Instant =time.time () # Получить временную метку кадра
self.processImage (curframe) # Обработать изображение
если не self.isRecording:
if self.somethingHasMoved ():
self.trigger_time =Instant # Обновить trigger_time
если мгновенно> началось +5:# Подождать 5 секунд после запуска веб-камеры для настройки яркости и т. д.
print "Human Detected"
count + =1
print (count / 2)
orig_stdout =sys.stdout
f =open ('out.txt', 'a +')
sys.stdout =f
print (count / 2)
sys.stdout =orig_stdout
f.close ()
# timestamp log
orig_stdout =sys.stdout
f =open ('log.txt', 'a +')
sys.stdout =f
timestampc =('Отметка времени:{:% Y-% b-% d% H:% M:% S } '. format (datetime.datetime.now ()))
print (timestampc +' Log Entry:1 ')
sys.stdout =orig_stdout
f.close ()
if self.doRecord:#set isRecording =True, только если мы записываем видео
self.isRecording =True
else:
если мгновенно> =self.trigger_time +10:# Запись в течение 10 секунд
печать "Стоп запись "
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 ("Изображение", curframe)
# cv.ShowImage ("Res", self.res)
cv.Copy (self.frame2gray, self.frame1gray)
c =cv.WaitKey (1)
if c ==27 или c ==1048603:# Прервать, если пользователь вводит Esc.
break
def processImage (self, frame):
cv.CvtColor (frame, self.frame2gray, cv.CV_RGB2GRAY)
#Absdiff, чтобы получить разницу между кадрами
cv.AbsDiff (self.frame1gray, self.frame2gray, self.res)
# Убрать шум и установить порог
cv.Smooth (self.res, self.res, cv.CV_BLUR, 5,5)
element =cv.CreateStructuringElementEx (5 * 2 + 1 , 5 * 2 + 1, 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.Thresho ld (self.res, self.res, 10, 255, cv.CV_THRESH_BINARY_INV)
def somethingHasMoved (self):
nb =0 # Будет содержать количество черных пикселей
для y в range (self.height):# Итерация изображения отверстия
для x in range (self.width):
if self.res [y, x] ==0.0:# Если пиксель черный, оставьте it
nb + =1
avg =(nb * 100.0) /self.nb_pixels # Вычислить среднее количество черных пикселей в изображении
#print "Average:", avg, "% \ r ",
if avg> self.ceil:# Если по потолку вызовет тревогу
return True
else:
return False
if __name __ ==" __ main__ ":
detect =MotionDetector (doRecord =False)
detect.run ()

Скачать - https://www.hackster.io/code_files/438321/download

Как только это будет сделано, просто сохраните файл, набрав «CTRL + X», затем Y и затем ENTER. Сценарий можно запустить, набрав следующую команду:

  python main.py  

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

Я только что создал корпус из листа МДФ для Arduino и Raspberry Pi 3

Создание панели управления для рабочего стола / приложения

Шаг 1. Установите Apache

Установите apache2 пакет с помощью этой команды:

  sudo apt install apache2 -y  

Шаг 2. Установите PHP

Чтобы сервер Apache мог обрабатывать файлы PHP, вам необходимо установить последнюю версию PHP и модуль PHP для Apache. Введите следующую команду, чтобы установить их:

  sudo apt install php libapache2-mod-php -y  

Теперь загрузите Dashboard.zip . :

  cd / var / www / html 
wget "https://hacksterio.s3.amazonaws.com/uploads/attachments/1097966/Dashboard.zip"

и установите unzip:

  sudo apt-get install unzip  

извлеките файлы из ZIP-файла:

  разархивировать Dashboard.zip  

Теперь сохраните и обновите ваш браузер. Вы должны увидеть

Настройка Raspberry Pi в качестве точки беспроводного доступа

Пожалуйста, перейдите по этой ссылке https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

Примечание. Назовите точку беспроводного доступа SanitizingTunnel

  interface =wlan0 
driver =nl80211
ssid =SanitizingTunnel
hw_mode =g
channel =7
wmm_enabled =0
macaddr_acl =0
auth_algs =1
ignore_broadcast_ssid =0
wpa =2
wpa_passphrase =SecretPassword
wpa_key_mgmt =WPA-PSK
wpa_pairwise =TKIP
rsn_pairwise =CCMP

Теперь приступим к созданию приложения.

Приложение для Android:

Предварительное условие:Android Studio

Вы можете просто скачать код прямо отсюда.

И измените свои учетные данные, такие как IP-адрес вашего raspberry pi, в соответствии с вашими потребностями.

Приложение для iOS:

Предварительное условие:XCode

Вы можете просто скачать код прямо отсюда.

И измените свои учетные данные, такие как IP-адрес вашего raspberry pi, в соответствии с вашими потребностями.

Используемый химический раствор

В дезинфекционном туннеле содержится 0,4% раствора гипохлорита натрия на 100 литров воды.

/

Обновить - Я видел много комментариев, в которых говорилось, что вы используете вредные химические вещества.

Итак, я просто собираю информацию от продавца, который поставлял мне это химическое вещество. Поэтому он сказал мне, что химикат, который я использую в этом туннеле, от Raman &Weil Pvt. Ltd, и у них есть " Декларация "от Bode Chemie Germany , об эффективности против COVID-19 .

Официальная ссылка - http://ramanweil.com/pdf/Declaration%20from%20Bode%20Chemie%20Germany%20on%20efficacy%20against%20COVID%2019.pdf

Собираем все вместе

Наконец, пришло время включить туннель и проверить, что все процедуры и приложения работают согласно плану.

Стоимость

Ссылка - https://docs.google.com/spreadsheets/d/1jt-hy8N8IwuQnaLYt-25BywdlREkEhp5zjAfYC6eGqw/edit?usp=sharing

Код

  • Туннель кода Arduino
  • main.py
  • Файлы панели мониторинга
  • Исходный код Android для Sanitation-Tunnel
  • Android-приложение Sanitation-Tunnel
  • Исходный код iOS Sanitation-Tunnel
Туннель кода Arduino C / C ++
 / * * Умный туннель дезинфекции и санитарии * / int relayPin =12; // выбираем контакт для реле Pinint inputPin =2; // выбираем входной контакт (для датчика PIR) int inputPin2 =3; // выбираем входной контакт (для датчика PIR 02) int pirState =LOW; // мы начинаем, предполагая, что движения не обнаружено int val =0; // переменная для чтения статуса вывода int val2 =0; // переменная для чтения статуса вывода void setup () {pinMode (relayPin, OUTPUT); // объявляем реле как выход pinMode (inputPin, INPUT); // объявляем датчик PIR как input pinMode (inputPin2, INPUT); Serial.begin (9600);} недействительный цикл () {значение =digitalRead (inputPin); // считываем входное значение val2 =digitalRead (inputPin2); // считываем входное значение if (val ==HIGH || val2 ==HIGH) {// проверяем, является ли вход HIGH digitalWrite (relayPin, HIGH); // включаем реле if (pirState ==LOW) {// мы только что включили Serial.println ("Обнаружено движение!"); // задержка задержки 15 секунд (15000); // Мы хотим печатать только при изменении вывода, а не состояние pirState =HIGH; }} еще {digitalWrite (relayPin, 0); // выключаем реле if (pirState ==HIGH) {// мы только что отключили Serial.println ("Движение закончилось!"); // Мы хотим печатать только при изменении вывода, а не состояние pirState =LOW; }}} 
main.py Python
 import cv2.cv as cvfrom datetime import datetimeimport timeimport sysimport datetimecount =0class MotionDetector ():def onChange (self, val):#callback, когда пользователь изменяет ceil self.ceil =val def __init __ (self, ceil =8 , doRecord =True, showWindows =True):self.writer =None self.font =None self.doRecord =doRecord # Записывать или нет движущийся объект self.show =showWindows # Отображать или нет 2 окна self.frame =Нет self.capture =cv.CaptureFromCAM (0) self.frame =cv.QueryFrame (self.capture) # Принять кадр для инициализации рекордера, если doRecord:self.initRecorder () self.frame1gray =cv.CreateMat (self.frame. height, self.frame.width, cv.CV_8U) # Серый кадр в t-1 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) # Серый кадр при t self.width =self. frame.width self.height =self.frame.height self.nb_p ixels =self.width * self.height self.ceil =ceil self.isRecording =False self.trigger_time =0 # Сохранять временную метку последнего обнаружения, если showWindows:cv.NamedWindow ("Image") # cv.CreateTrackbar ("Mytrack" , "Image", self.ceil, 100, self.onChange) def initRecorder (self):# Создать кодек записывающего устройства =cv.CV_FOURCC ('D', 'I', 'V', 'X') #codec =cv.CV_FOURCC ("D", "I", "B", "") self.writer =cv.CreateVideoWriter (datetime.now (). strftime ("% b-% d_% H:% M:% S" )+".avi", codec, 15, cv.GetSize(self.frame), 1) #FPS set at 15 because it seems to be the fps of my cam but should be ajusted to your needs self.font =cv. InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) #Creates a font def run(self):global count started =time.time() while True:curframe =cv.QueryFrame(self.capture) instant =time.time() #Get timestamp o the frame self.processImage(curframe) #Process the image if not self.isRecording:if self.somethingHasMoved():self.trigger_time =instant #Update the trigger_time if instant> started +5:#Wa it 5 second after the webcam start for luminosity adjusting etc.. print "Human Detected" count +=1 print(count/2) orig_stdout =sys.stdout f =open('out.txt', 'a+') sys.stdout =f print(count/2) sys.stdout =orig_stdout f.close() #timestamp log orig_stdout =sys.stdout f =open('log.txt', 'a+') sys.stdout =f timestampc =('Timestamp:{:%Y-%b-%d %H:%M:%S}'.format(datetime.datetime.now())) print(timestampc+' Log Entry :1') sys.stdout =orig_stdout f.close() if self.doRecord:#set isRecording=True only if we record a video self.isRecording =True else:if instant>=self.trigger_time +10:#Record during 10 seconds print "Stop recording" self.isRecording =False else:cv.PutText(curframe,datetime.now().strftime("%b %d, %H:%M:%S"), (25,30),self.font, 0) #Put date on the frame cv.WriteFrame(self.writer, curframe) #Write the frame if self.show:cv.ShowImage("Image", curframe) #cv.ShowImage("Res", self.res) cv.Copy(self.frame2gray, self.frame1gray) c=cv.WaitKey(1) if c==27 or c ==10 48603:#Break if user enters 'Esc'. break def processImage(self, frame):cv.CvtColor(frame, self.frame2gray, cv.CV_RGB2GRAY) #Absdiff to get the difference between to the frames cv.AbsDiff(self.frame1gray, self.frame2gray, self.res) #Remove the noise and do the threshold cv.Smooth(self.res, self.res, cv.CV_BLUR, 5,5) element =cv.CreateStructuringElementEx(5*2+1, 5*2+1, 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=0 #Will hold the number of black pixels for y in range(self.height):#Iterate the hole image for x in range(self.width):if self.res[y,x] ==0.0:#If the pixel is black keep it nb +=1 avg =(nb*100.0)/self.nb_pixels #Calculate the average of black pixel in the image #print "Average:",avg, "%\r", if avg> self.ceil:#If over the ceil trigger the alarm return True else:return Falseif __name__=="__main__":de tect =MotionDetector(doRecord=False) detect.run()
Dashboard FilesPHP
 Нет предварительного просмотра (только загрузка). 
Sanitation-Tunnel Android Source CodeJava
 Нет предварительного просмотра (только загрузка). 
Sanitation-Tunnel Android AppJava
Demo App
No preview (download only).
Sanitation-Tunnel iOS Source CodeSwift
 Нет предварительного просмотра (только загрузка). 
Smart Disinfection and Sanitation Tunnel
https://github.com/yugn27/Smart-Disinfection-and-Sanitation-Tunnel

Изготовленные на заказ детали и корпуса

smart_disinfection_and_sanitation_tunnel_prlFu8ZRXO.3mf

Схема

Circuit Diagram - fritzing file smart_disinfection_and_sanitation_tunnel_Zkb20Q5S2B.fzz

Производственный процесс

  1. Преимущества Интернета вещей в сельском хозяйстве и интеллектуальном сельском хозяйстве
  2. Регистратор данных температуры и влажности
  3. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  4. Система автоматизации и безопасности умного дома с использованием 1Sheeld
  5. Умная обувь (автоматическая шнуровка и выработка электроэнергии)
  6. С Днем Рождения:свет и звук
  7. Умный автомобиль-робот с отслеживанием лиц
  8. Гитарный медиатор и педаль Stomp!
  9. Умное производство:что это такое и в чем его преимущества
  10. Промышленность 4.0 и гидравлика