Túnel de desinfecção e saneamento inteligente
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
Ferramentas e máquinas necessárias
| ||||
| ||||
![]() |
| |||
![]() |
| |||
![]() |
|
Aplicativos e serviços online
![]() |
| |||
![]() |
| |||
![]() |
|
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.
_yOvU8LUx6F.jpeg?auto=compress%2Cformat&w=680&h=510&fit=max)
Tubos de microtubulação têm sido usados em todo o túnel para fornecer a solução para o nebulizador.
_bDYXyY5wFt.jpeg?auto=compress%2Cformat&w=680&h=510&fit=max)
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.
_NesuSpBJwr.jpeg?auto=compress%2Cformat&w=680&h=510&fit=max)
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 AppNo 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-TunnelPeças personalizadas e gabinetes
smart_disinfection_and_sanitation_tunnel_prlFu8ZRXO.3mfEsquemas
Circuit Diagram - fritzing file smart_disinfection_and_sanitation_tunnel_Zkb20Q5S2B.fzzProcesso de manufatura
- Benefícios da IoT na agricultura e agricultura inteligente
- Registrador de dados de temperatura e umidade
- IOT - Jar inteligente usando ESP8266, Arduino e sensor ultrassônico
- Automação residencial inteligente e sistema de segurança usando 1Sheeld
- Sapatos inteligentes (com laço automático e geração de eletricidade)
- Feliz Aniversário:Luzes e sons
- Carro robô rastreador Smart Face
- Speed Pick e pedal de pedal da guitarra!
- Manufatura Inteligente:o que é e seus benefícios
- Indústria 4.0 e hidráulica