Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Túnel de desinfecção e saneamento inteligente

Componentes e suprimentos

Arduino UNO
× 1
Fios de jumpers (genérico)
× 1
Sensor de movimento PIR (genérico)
× 2
12V Power Relay (4PDT)
× 1
12 Volt SMPS
× 1
Seeed Grove - Relé SPDT de 2 canais
× 1
SMPS de 5 volts
× 1
Chave de alternância, (On) -Off- (On)
× 1
Raspberry Pi 3 Modelo B
× 1
Módulo de câmera Raspberry Pi V2
× 1
Cartão Micro SD
× 1
Cabo Micro-USB para USB (Genérico)
× 1
Dissipador de calor
× 1
1 bomba d'água HP
× 1
Tubo de caixa de aço
× 1
Tanque de água (200 L)
× 1
Tubo de plástico PVC
× 1
Fogger 4 vias
× 1
Banner Flex
× 1
Junta em T
× 1
Tubo de microtubulação
× 1
Luminária de fixação na parede
× 1
Cotovelo
× 1
Braçadeira dupla face
× 1

Ferramentas e máquinas necessárias

Máquina de solda
Máquina de corte
Ferro de soldar (genérico)
Arame de solda, sem chumbo
Cortador a laser (genérico)

Aplicativos e serviços online

Arduino IDE
Raspberry Pi Raspbian
OpenCV

Sobre este projeto





Introdução


O Túnel de Desinfecção e Saneamento Inteligente é uma demonstração de como foi projetado para fornecer proteção máxima às pessoas que passam pelo túnel em cerca de 15 segundos. O que pode ajudar a comunidade a lutar contra o COVID-19.

A ideia principal deste projeto é fazer um túnel que possa tentar prevenir a propagação do COVID-19.

Este túnel de desinfecção e saneamento é preparado para higienizar as pessoas em 15 segundos de qualquer possível bactéria.

A solução desinfetante utilizada consiste em uma combinação de hipoclorito de sódio (NaOCl) e água (H2O). O desinfetante não é volátil, permitindo atividade verídica e bactericida prolongada e higienizando as superfícies.

Então, tomei a iniciativa de fazer este Túnel de Desinfecção e Saneamento Inteligente. Este túnel foi feito em um período de 12 horas. Pode desinfetar totalmente uma pessoa da cabeça aos pés em apenas 15 segundos e a solução usada é totalmente inofensiva *. O custo total do túnel é de aproximadamente $$ 30.000 ou $ 400. (Custo revisado)









Onde usar?

  • Mercados de alimentos
  • Escritórios
  • Shopping centers
  • aeroportos
  • pontos de ônibus
  • Estações ferroviárias
  • Delegacias
  • faculdade
  • hospitais
  • Colônia





Como funciona


Na lateral de cada túnel é colocada uma bomba de água 1HP que retira do tanque a solução de 0,4% de solução de hipoclorito de sódio em 100 litros de água. Como a máquina é automática, ela detecta se alguém está entrando no túnel. Quando qualquer pessoa entra no túnel, a bomba d'água é iniciada por 15 segundos. Para que o usuário possa passar por aquele túnel e se não houver ninguém no túnel a bomba será desligada para economizar água e luz. O spray desinfetante nebuloso protege os cidadãos contra a infecção de bactérias por um período de pelo menos 60 minutos (Aprox *). Uma vez que desinfeta o ar, a pele exposta e as roupas humanas.










Um tanque de plástico para 200 litros de solução e uma bomba para o sistema de tubulação de alta pressão estão localizados na lateral do túnel. De acordo com o cálculo, a solução deve ser suficiente para 8-10 horas. Já que possui um sensor de movimento acima da entrada para economizar um anti-séptico. (Maio varia de acordo com as pessoas que entram no túnel **)





Diagrama de fluxo





Configuração de hardware


Coloquei a moldura fora de um perfil de metal, dobrável para que pudesse ser transportada de um lugar para outro, e quando tudo acabar, guardei para o caso do próximo apocalipse. A cobertura é feita pelo banner (que é usado para publicidade de transporte ao ar livre ) O banner é fácil de prender com o perfil de metal com fitas de plástico. É rápido e não requer habilidades especiais.

Confira o modelo - https://skfb.ly/6RGvZ

Um tanque de plástico para 200 litros de solução e uma bomba para o sistema de tubulação de alta pressão estão localizados na lateral do túnel que está conectado ao Conjunto do Fogger 4 vias.

Tubos de microtubulação têm sido usados ​​em todo o túnel para fornecer a solução para o nebulizador.
>
No interior, existe uma tubulação de alta pressão com 4 Fogger 4 vias que podem ser conectados. O nevoeiro não deixa marcas nas roupas, ao mesmo tempo que envolve completamente a pessoa que chega e destrói o vírus mesmo nas dobras da roupa de difícil acesso e protege por algum tempo após a saída.

Como solução, uma solução certificada é usada neste projeto. (Certificado em anexo abaixo)

Fogger 4 vias
  • Taxa de descarga:30 LPH / 0,5 LPM (para 1 nebulizador)
  • Pressão recomendada:45-60 psi
  • Tamanho médio da gota:65 mícrons (a 55-60 psi)
  • Filtração necessária:130 mícrons (malha 120)
  • Bomba necessária:40 a 45 metros de altura

Outros acessórios usados





Prepare o Arduino


A bomba d'água realmente funciona detectando os raios infravermelhos. Sempre que o corpo humano se aproxima de um sensor de movimento, de forma que o corpo humano reflita os raios infravermelhos, o sensor de movimento detecta esses raios infravermelhos e nos dá um sinal ALTO através do pino de saída. Este sinal HIGH é então lido pelo Arduino. Portanto, se o Arduino ler um sinal ALTO, ele dará um sinal ALTO ao módulo de relé, o que significa que o relé ligará e, como resultado, o relé de energia ligará e ligará a bomba de água por 15 segundos (pode ser alterado). Da mesma forma, se o Arduino ler um sinal BAIXO, ele tornará o pino do relé BAIXO e, como resultado, a bomba d'água permanecerá desligada.

Nesse caso, usei 2 sensores PIR para torná-lo mais preciso, se algum deles sentir o movimento, o relé ligará por 15 segundos (pode ser alterado).

Não podemos usar o relé de 5 V diretamente com a bomba de água porque, no meu caso, a bomba de água que usei neste projeto tem uma classificação de amperes (A) de 16 amperes e o relé de 5 V tem uma carga máxima de 10 amperes para controlar a bomba de água Usei mais um relé com Módulo de Relé 5V. que é 12V Power Relay.

Código:
  / * 
* Túnel de desinfecção e saneamento inteligente
* /

int relayPin =12; // escolha o pino do Relay Pin

int inputPin =2; // escolha o pino de entrada (para sensor PIR)
int inputPin2 =3; // escolha o pino de entrada (para sensor PIR 02)

int pirState =LOW; // no início, assumindo que nenhum movimento foi detectado
int val =0; // variável para ler o status do pino
int val2 =0; // variável para ler o status do pino


void setup () {
pinMode (relayPin, OUTPUT); // declara o relé como saída
pinMode (inputPin, INPUT); // declara o sensor como entrada
pinMode (inputPin2, INPUT);
Serial.begin (9600);
}

void loop () {
val =digitalRead (inputPin); // lê o valor de entrada
val2 =digitalRead (inputPin2); // ler o valor de entrada
if (val ==HIGH || val2 ==HIGH) {// verificar se a entrada é HIGH
digitalWrite (relayPin, HIGH); // liga o relé
if (pirState ==LOW) {
// liga
Serial.println ("Movimento detectado!");
// atraso de 15 segundos
atraso (15000);
pirState =HIGH;
}
} else {
digitalWrite (relayPin, 0); // desligue o relé
if (pirState ==HIGH) {
// desligue
Serial.println ("Movimento finalizado!");
pirState =LOW;
}
}

}

A fiação final do projeto parece um pouco confusa, mas funcionou bem.
>
Depois de tudo conectado, eu apenas testei com sensoriamento básico e então comecei a verificar se o relé estava disparando.





Prepare o Raspberry Pi 3 (opcional)


Isso é opcional. No caso de você precisar fazer alguma análise dos dados e contar com precisão o número de pessoas usando este túnel. Você pode implementar esta parte.

Embora existam muitas maneiras de contar isso com alguns sensores físicos como o sensor PIR e o sensor ultrassônico, mas achei isso mais preciso pensando em todas as probabilidades.

Existe um modelo de aprendizado de máquina que detecta o corpo humano usando OpenCV em Python e armazena o log no arquivo que pode ser processado para mostrar os dados no aplicativo.





Conecte a câmera Pi

  • Desligue o Raspberry Pi
  • Localize o módulo da câmera, entre o módulo USB e os módulos HDMI.
  • Destrave o clipe de plástico preto puxando-o (com cuidado) para cima
  • Insira o cabo de fita do módulo da câmera (conectores de metal voltados para fora das portas Ethernet / USB em um Raspberry Pi 4)
  • Trave o clipe de plástico preto





Habilite a câmera Pi

  • Corra
  sudo raspi-config  
  • Selecione Opções de interface (ou seja, 4ª opção) no menu principal da Ferramenta de configuração do software Raspberry Pi. Pressione ENTER.
  • Selecione Ativar câmera (ou seja, 5ª opção) opção de menu e pressione ENTER.
  • No próximo menu, use a tecla de seta para a direita para destacar ENABLE e pressione ENTER.





Teste a câmera Pi


Em seguida, verifique se a câmera Pi está instalada corretamente iniciando a sobreposição de visualização da câmera. A sobreposição será renderizada na tela.
  • Conecte-se ao Raspberry Pi usando o VNC Viewer.
  • Execute o seguinte comando:
  raspistill -v -o test.jpg  

Se você instalou a câmera Pi corretamente, deverá ver a filmagem da câmera renderizada em sua tela.





Instalando OpenCV


Siga este link para instalar o OpenCV

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

Código

Execute o seguinte comando para criar e abrir um novo arquivo de script:
  cd Desktop 
sudo nano main.py

Copie o script e cole-o no novo arquivo que você criou.
  import cv2.cv as cv 
from datetime import datetime
import time
import sys
import datetime
contagem =0
classe MotionDetector ():
def onChange (self, val):#callback quando o usuário mudar o ceil
self.ceil =val
def __init __ (self, ceil =8, doRecord =True, showWindows =True):
self.writer =Nenhum
self.font =Nenhum
self.doRecord =doRecord # Grave ou não o objeto em movimento
self.show =showWindows # Mostrar ou não as 2 janelas
self.frame =Nenhum
self.capture =cv.CaptureFromCAM (0)
self.frame =cv.QueryFrame (self.capture) #Take a frame para o gravador de inicialização
se doRecord:
self.initRecorder ()
self.frame1gray =cv.CreateMat (self.frame.height, self.frame.width, cv.CV_8U) # Frame cinza em t-1
cv.CvtColor (self.frame, self.frame1gray, cv.CV_RGB2GRAY)
# Manterá o resultado limiar
self.res =cv.CreateMat (self.frame. altura, self.frame.width, cv.CV_8U)
self.frame2gray =cv.CreateMat (self.fra me.height, self.frame.width, cv.CV_8U) # Frame cinza em 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 #Hold timestamp da última detecção
if showWindows :
cv.NamedWindow ("Image")
# cv.CreateTrackbar ("Mytrack", "Image", self.ceil, 100, self.onChange)
def initRecorder (self):#Crie o gravador
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 ", codec, 15, cv.GetSize (self.frame), 1)
#FPS definido como 15 porque parece ser o fps da minha câmera, mas deve ser ajustado às suas necessidades
self.font =cv.InitFont (cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) #Cria uma fonte
def run (self):
contagem global
started =time.time ()
enquanto True:
curframe =cv.QueryFrame (self.capture)
instant =time.time () # Obter carimbo de data / hora do quadro
self.processImage (curframe) #Processar a imagem
se não for self.isRecording:
if self.somethingHasMoved ():
self.trigger_time =instant #Atualize o trigger_time
if instant> started +5:#Espere 5 segundos após o início da webcam para ajuste de luminosidade etc.
print "Human Detected"
contagem + =1
imprimir (contagem / 2)
orig_stdout =sys.stdout
f =abrir ('out.txt', 'a +')
sys.stdout =f
print (contagem / 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 somente se gravarmos um vídeo
self.isRecording =True
else:
se instantâneo> =self.trigger_time +10:#Gravar durante 10 segundos
imprimir "Parar gravação "
self.isRecording =False
else:
cv.PutText (curframe, datetime.now (). strftime ("% b% d,% H:% M:% S " ), (25,30), self.font, 0) #Colocar data no quadro
cv.WriteFrame (self.writer, curframe) #Escrever o quadro
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 ou c ==1048603:#Break se o usuário digitar 'Esc'.
break
def processImage (self, frame):
cv.CvtColor (frame, self.frame2gray, cv.CV_RGB2GRAY)
#Absdiff para obter a diferença entre os frames
cv.AbsDiff (self.frame1gray, self.frame2gray, self.res)
# Remova o ruído e faça o limite
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 # Irá conter o número de pixels pretos
para y em range (self.height):#Iterar a imagem do furo
para x no intervalo (self.width):
if self.res [y, x] ==0.0:#Se o pixel for preto, mantenha it
nb + =1
média =(nb * 100.0) /self.nb_pixels #Calcule a média do pixel preto na imagem
#print "Average:", avg, "% \ r ",
if avg> self.ceil:#Se sobre o ceil acionar o alarme
retornar Verdadeiro
else:
retornar Falso
if __name __ ==" __ main__ ":
detect =MotionDetector (doRecord =False)
detect.run ()

Download - https://www.hackster.io/code_files/438321/download

Feito isso, simplesmente salve o arquivo digitando "CTRL + X", Y e ENTER. O script pode ser executado digitando o seguinte comando:
  python main.py  

Deverá conseguir ver uma imagem no ecrã e por favor ver o vídeo para verificar, se necessário, se existe a contagem humana pelo programa no terminal.

Acabei de criar um invólucro com folha de MDF para o Arduino e Raspberry Pi 3





Criação de um painel para desktop / aplicativo





Etapa 1:Instale o Apache


Instale o apache2 pacote com este comando:
  sudo apt install apache2 -y  





Etapa 2:Instale o PHP


Para permitir que seu servidor Apache processe arquivos PHP, você precisará instalar a versão mais recente do PHP e o módulo PHP para Apache. Digite o seguinte comando para instalá-los:
  sudo apt install php libapache2-mod-php -y  

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

e instalar descompactar:
  sudo apt-get install unzip  

extraia os arquivos de um arquivo ZIP:
  unzip Dashboard.zip  

Agora salve e atualize seu navegador. Você deveria ver





Configurando um Raspberry Pi como um ponto de acesso sem fio


Siga este link https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

Nota:Nomeie o ponto de acesso sem fio como 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





Agora vamos começar a construir o aplicativo.





Aplicativo Android:


Pré-requisito:Android Studio

Você pode simplesmente baixar o código diretamente aqui.

E mude suas credenciais como o endereço IP do seu raspberry pi de acordo com suas necessidades.





Aplicativo iOS:


Pré-requisito:XCode

Você pode simplesmente baixar o código diretamente aqui.

E mude suas credenciais como o endereço IP do seu raspberry pi de acordo com suas necessidades.





Solução química usada


O túnel de desinfecção contém 0,4% de solução de hipoclorito de sódio em 100 litros de água.

Atualizar - Eu tinha visto muitos comentários dizendo que você está usando produtos químicos prejudiciais.

Então, acabei de coletar as informações do fornecedor que estava me fornecendo este produto químico. Então ele me disse que o produto químico que estou usando neste túnel é da Raman &Weil Unip. Ltd e eles têm " Declaração "da Bode Chemie Germany , na eficácia contra COVID-19 .

Link oficial - http://ramanweil.com/pdf/Declaration%20from%20Bode%20Chemie%20Germany%20on%20efficacy%20against%20COVID%2019.pdf





Juntando tudo


Finalmente, era hora de ligar o túnel e verificar se todas as rotinas e o aplicativo estão funcionando conforme o plano.





Custo


Link - https://docs.google.com/spreadsheets/d/1jt-hy8N8IwuQnaLYt-25BywdlREkEhp5zjAfYC6eGqw/edit?usp=sharing

Código

  • Túnel de código Arduino
  • main.py
  • Arquivos do painel
  • Código-fonte do Android do túnel de saneamento
  • Aplicativo para Android do túnel de saneamento
  • Código-fonte do iOS do túnel de saneamento
Túnel de código Arduino C / C ++
 / * * Túnel de desinfecção e saneamento inteligente * / int relayPin =12; // escolha o pino para o Relay Pinint inputPin =2; // escolha o pino de entrada (para sensor PIR) int inputPin2 =3; // escolha o pino de entrada (para sensor PIR 02) int pirState =LOW; // começamos, assumindo que nenhum movimento foi detectadoint val =0; // variável para leitura do pino statusint val2 =0; // variável para ler o status do pino void setup () {pinMode (relayPin, OUTPUT); // declara o relé como saída pinMode (inputPin, INPUT); // declara o sensor PIR como input pinMode (inputPin2, INPUT); Serial.begin (9600);} void loop () {val =digitalRead (inputPin); // lê o valor de entrada val2 =digitalRead (inputPin2); // ler o valor da entrada if (val ==HIGH || val2 ==HIGH) {// verificar se a entrada está HIGH digitalWrite (relayPin, HIGH); // liga o relé if (pirState ==LOW) {// acabamos de ligar o Serial.println ("Movimento detectado!"); // atraso de 15 segundos (15000); // Queremos apenas imprimir na alteração da saída, não no estado pirState =HIGH; }} else {digitalWrite (relayPin, 0); // DESLIGUE o relé if (pirState ==HIGH) {// acabamos de desligar Serial.println ("Movimento finalizado!"); // Queremos apenas imprimir na alteração da saída, não no estado pirState =LOW; }}} 
main.py Python
 import cv2.cv as cvfrom datetime import datetimeimport timeimport sysimport datetimecount =0class MotionDetector ():def onChange (self, val):#callback quando o usuário muda o ceil self.ceil =val def __init __ (self, ceil =8 , doRecord =True, showWindows =True):self.writer =Nenhum self.font =Nenhum self.doRecord =doRecord # Ou gravar ou não o objeto em movimento self.show =showWindows #Eu ou não mostrar as 2 janelas self.frame =Nenhum self.capture =cv.CaptureFromCAM (0) self.frame =cv.QueryFrame (self.capture) # Pegue um quadro para o gravador de inicialização se doRecord:self.initRecorder () self.frame1gray =cv.CreateMat (self.frame. height, self.frame.width, cv.CV_8U) # Frame cinza em t-1 cv.CvtColor (self.frame, self.frame1gray, cv.CV_RGB2GRAY) #Will manter o resultado limiar 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) # Frame cinza em 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 #Hold timestamp da última detecção se showWindows:cv.NamedWindow ("Image") # cv.CreateTrackbar ("Mytrack" , "Image", self.ceil, 100, self.onChange) def initRecorder (self):#Create the recorder 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", codec, 15, cv.GetSize (self.frame), 1) #FPS definido como 15 porque parece ser o fps da minha câmera, mas deve ser ajustado às suas necessidades self.font =cv. InitFont (cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) #Cria uma fonte 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
 Sem visualização (somente download). 
Sanitation-Tunnel Android Source CodeJava
 Sem visualização (somente download). 
Sanitation-Tunnel Android AppJava
Demo App
No preview (download only).
Sanitation-Tunnel iOS Source CodeSwift
 Sem visualização (somente download). 
Smart Disinfection and Sanitation Tunnel
https://github.com/yugn27/Smart-Disinfection-and-Sanitation-Tunnel

Peças personalizadas e gabinetes

smart_disinfection_and_sanitation_tunnel_prlFu8ZRXO.3mf

Esquemas

Circuit Diagram - fritzing file smart_disinfection_and_sanitation_tunnel_Zkb20Q5S2B.fzz

Processo de manufatura

  1. Benefícios da IoT na agricultura e agricultura inteligente
  2. Registrador de dados de temperatura e umidade
  3. IOT - Jar inteligente usando ESP8266, Arduino e sensor ultrassônico
  4. Automação residencial inteligente e sistema de segurança usando 1Sheeld
  5. Sapatos inteligentes (com laço automático e geração de eletricidade)
  6. Feliz Aniversário:Luzes e sons
  7. Carro robô rastreador Smart Face
  8. Speed ​​Pick e pedal de pedal da guitarra!
  9. Manufatura Inteligente:o que é e seus benefícios
  10. Indústria 4.0 e hidráulica