Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Slimme desinfectie- en sanitaire tunnel

Componenten en benodigdheden

Arduino UNO
× 1
Jumperdraden (algemeen)
× 1
PIR-bewegingssensor (algemeen)
× 2
12V voedingsrelais (4PDT)
× 1
12 volt SMPS
× 1
Seeed Grove - 2-kanaals SPDT-relais
× 1
5 Volt SMPS
× 1
Toggle Switch, (On)-Off-(On)
× 1
Raspberry Pi 3 Model B
× 1
Raspberry Pi-cameramodule V2
× 1
Micro SD-kaart
× 1
Micro-USB naar USB-kabel (algemeen)
× 1
Koellichaam
× 1
1 pk waterpomp
× 1
Stalen kokerpijp
× 1
Watertank (200 l)
× 1
PVC kunststof buis
× 1
4-Way Fogger
× 1
Banner Flex
× 1
T-stuk
× 1
Micro-buisleiding
× 1
Wall Fix-lamp
× 1
Elleboog
× 1
Kabelbinder, dubbelzijdig
× 1

Benodigde gereedschappen en machines

Lasmachine
Snijmachine
Soldeerbout (algemeen)
Soldeerdraad, loodvrij
Lasersnijder (algemeen)

Apps en online services

Arduino IDE
Raspberry Pi Raspbian
OpenCV

Over dit project

Inleiding

De slimme desinfectie- en sanitaire tunnel is een demonstratie van hoe hij is ontworpen om in ongeveer 15 seconden maximale bescherming te bieden aan mensen die door de tunnel gaan. Wat de gemeenschap kan helpen om te vechten tegen de COVID-19.

Het belangrijkste idee van dit project is om een ​​tunnel te maken die de verspreiding van COVID-19 kan proberen te voorkomen.

Deze desinfectie- en sanitatietunnel is voorbereid om mensen binnen 15 seconden te ontsmetten van mogelijke bacteriën.

De gebruikte desinfecterende oplossing bestaat uit een combinatie van natriumhypochloriet (NaOCl) en water (H2O). Het desinfectiemiddel is niet-vluchtig, waardoor langdurige veridische en bacteriedodende activiteit mogelijk is en de oppervlakken worden ontsmet.

Dus nam ik dit initiatief om deze Slimme Desinfectie- en Sanitatietunnel te maken. Deze tunnel is gemaakt in een tijdspanne van 12 uur. Het kan een persoon volledig van top tot teen desinfecteren in slechts 15 seconden en de gebruikte oplossing is volledig onschadelijk*. De totale kosten van de tunnel bedragen ongeveer 30.000 of $400. (Herziene kosten)

Waar te gebruiken?

  • Voedselmarkten
  • Kantoren
  • Winkelcentra
  • Luchthavens
  • Bushaltes
  • Treinstations
  • Politiebureaus
  • College
  • Ziekenhuizen
  • Kolonie

Hoe het werkt

Aan de zijkant van elke tunnel wordt een 1HP-waterpompmachine geplaatst die de oplossing van 0,4% natriumhypochlorietoplossing in 100 liter water uit de tank haalt. Omdat de machine automatisch is, detecteert hij of er iemand de tunnel ingaat. Als iemand de tunnel binnengaat, wordt de waterpomp gedurende 15 seconden gestart. Zodat de gebruiker door die tunnel kan en als er niemand in de tunnel is, staat de pomp uit om water en elektriciteit te besparen. De mistige desinfecterende spray beschermt burgers tegen het vangen van bacteriën gedurende een periode van minimaal 60 minuten (ong.*). Omdat het de lucht, onbedekte huid en menselijke kleding desinfecteert.

Aan de zijkant van de tunnel bevindt zich een kunststof tank voor 200 liter oplossing en een pomp voor het hogedrukleidingsysteem. Volgens berekening zou de oplossing voldoende moeten zijn voor 8-10 uur. Omdat het een bewegingssensor boven de ingang heeft om een ​​antisepticum te besparen. (Mei varieert afhankelijk van de mensen die de tunnel binnengaan**)

Stroomdiagram

Hardware-installatie

Ik heb het frame uit een metalen profiel gelegd, inklapbaar zodat het van de ene naar de andere plaats kan worden vervoerd, en als het allemaal voorbij is, opbergen in het geval van de volgende apocalyps. De bekleding is door de banner (die wordt gebruikt voor buitenreclame voor hoarding ). De banner is eenvoudig te bevestigen met het metalen profiel met kunststof banden. Het is snel en vereist geen speciale vaardigheden.

Bekijk het model - https://skfb.ly/6RGvZ

Een kunststof tank voor 200 liter oplossing en een pomp voor het hogedrukleidingsysteem bevinden zich aan de zijkant van de tunnel die is verbonden met 4-Way Fogger Assembly.

Door de hele tunnel zijn microbuizen gebruikt om de oplossing aan de rookmachine te leveren.

Binnen is er een hogedrukleiding met 4 4-Way Fogger die kunnen worden aangesloten. De mist laat geen sporen achter op kleding, terwijl het de binnenkomende persoon volledig omhult en het virus vernietigt, zelfs in moeilijk bereikbare kledingplooien en beschermt gedurende enige tijd na het verlaten.

Als oplossing wordt in dit project gebruik gemaakt van een gecertificeerde oplossing. (Certificaat hieronder bijgevoegd)

4 Way Fogger

  • Ontladingssnelheid:30 LPH/0,5 LPM (voor 1 rookmachine)
  • Aanbevolen druk:45-60 psi
  • Gemiddelde druppelgrootte:65 micron (bij 55-60 psi)
  • Filtratie vereist:130 micron (120 mesh)
  • Pomp nodig:40 tot 45 meter opvoerhoogte

Andere gebruikte accessoires

Bereid de Arduino voor

De waterpomp werkt eigenlijk door de infraroodstralen te detecteren. Telkens wanneer het menselijk lichaam in de buurt van een bewegingssensor komt, zodat het menselijk lichaam infraroodstralen weerkaatst, detecteert de bewegingssensor deze infraroodstralen en geeft het ons een HOOG signaal via de uitgangspen. Dit HOGE signaal wordt vervolgens gelezen door de Arduino. Dus als Arduino een HOOG signaal leest, zal het een HOOG signaal geven aan de relaismodule, wat betekent dat het relais zal inschakelen, en als resultaat zal het stroomrelais worden ingeschakeld en zal het de waterpomp gedurende 15 seconden inschakelen (kan worden gewijzigd). Evenzo, als de Arduino een LAAG signaal leest, wordt de relaispin LAAG gemaakt en als resultaat blijft de waterpomp uitgeschakeld.

Hierin had ik 2 PIR-sensoren gebruikt om het nauwkeuriger te maken als een van hen de beweging detecteert, dan zal het relais gedurende 15 seconden worden ingeschakeld (kan worden gewijzigd).

We kunnen het 5V-relais niet rechtstreeks met de waterpomp gebruiken, omdat in mijn geval de waterpomp die ik in dit project had gebruikt een ampère (A) van 16 ampère heeft en het 5V-relais een maximale belasting van 10 ampère heeft om de waterpomp te regelen Ik heb nog een relais gebruikt met een 5V-relaismodule. dat is 12V vermogensrelais.

Code:

/*
* Slimme desinfectie- en sanitaire tunnel
*/

int relayPin =12; // kies de pin voor de relaispin

int inputPin =2; // kies de invoerpin (voor PIR-sensor)
int inputPin2 =3; // kies de invoerpin (voor PIR-sensor 02)

int pirState =LAAG; // bij het starten, ervan uitgaande dat er geen beweging is gedetecteerd
int val =0; // variabele voor het lezen van de pinstatus
int val2 =0; // variabele voor het lezen van de pinstatus


void setup() {
pinMode(relayPin, OUTPUT); // declareer relais als output
pinMode (inputPin, INPUT); // verklaar sensor als input
pinMode(inputPin2, INPUT);
Serial.begin(9600);
}

void loop(){
val =digitalRead(inputPin); // lees invoerwaarde
val2 =digitalRead (inputPin2); // lees invoerwaarde
if (val ==HOOG || val2 ==HOOG) {// controleer of de invoer HOOG is
digitalWrite (relayPin, HOOG); // zet relais AAN
if (pirState ==LAAG) {
// ingeschakeld
Serial.println ("Beweging gedetecteerd!");
// 15 sec vertraging
vertraging (15000);
pirState =HOOG;
}
} else {
digitalWrite(relayPin, 0); // zet relais UIT
if (pirState ==HOOG){
// uitgeschakeld
Serial.println ("Beweging beëindigd!");
pirState =LAAG;
}
}

}

De uiteindelijke bedrading voor het project ziet er een beetje rommelig uit, maar werkte prima.

Nadat alles was aangesloten, testte ik het gewoon met basiswaarneming en ging toen verder om te controleren of het relais afvuurde.

Bereid de Raspberry Pi 3 voor (optioneel)

Dit is optioneel. Voor het geval u een analyse van de gegevens moet uitvoeren en het aantal mensen dat deze tunnel gebruikt precies moet tellen. U kunt dit onderdeel implementeren.

Hoewel er veel manieren zijn om dat te tellen met sommige fysieke sensoren zoals PIR-sensor en ultrasone sensor, maar ik vond dit nauwkeuriger toen ik aan alle kansen dacht.

Er is een machine learning-model dat het menselijk lichaam detecteert met behulp van OpenCV in Python en het logbestand opslaat in het bestand dat kan worden verwerkt om de gegevens in de app weer te geven.

Sluit de Pi-camera aan

  • Zet de Raspberry Pi uit
  • Zoek de cameramodule tussen de USB-module en HDMI-modules.
  • Ontgrendel de zwarte plastic clip door (voorzichtig) omhoog te trekken
  • Plaats de lintkabel van de cameramodule (metalen connectoren naar buiten gericht van de Ethernet / USB-poorten op een Raspberry Pi 4)
  • Vergrendel de zwarte plastic clip

De Pi-camera inschakelen

  • Rennen
sudo raspi-config 
  • Selecteer Interfacing-opties (dwz 4e optie) in het hoofdmenu van de Raspberry Pi Software Configuration Tool. Druk op ENTER.
  • Selecteer de Camera inschakelen (dwz 5e optie) menu-optie en druk op ENTER.
  • Gebruik in het volgende menu de rechterpijltoets om ENABLE te markeren en druk op ENTER.

Pi-camera testen

Controleer vervolgens of de Pi-camera correct is geïnstalleerd door de voorbeeldoverlay van de camera te starten. De overlay wordt op het scherm weergegeven.

  • Verbind met Raspberry Pi met VNC Viewer.
  • Voer het volgende commando uit:
raspistill -v -o test.jpg 

Als je de Pi-camera correct hebt geïnstalleerd, zou je de beelden van de camera op je scherm moeten zien.

OpenCV installeren

Volg deze link om OpenCV te installeren

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

Code

Voer de volgende opdracht uit om een ​​nieuw scriptbestand te maken en te openen:

cd Desktop
sudo nano main.py

Kopieer het script en plak het in het nieuwe bestand dat je hebt gemaakt.

importeer cv2.cv als cv
van datetime import datetime
importeer tijd
import sys
import datetime
count=0
class MotionDetector():
def onChange(self, val):#callback wanneer de gebruiker het plafond wijzigt
self.ceil =val
def __init__(self,ceil=8, doRecord=True, showWindows=True):
self.writer =Geen
self.font =Geen
self.doRecord=doRecord #Neem het bewegende object al dan niet op
self.show =showWindows # Ofwel of niet de 2 vensters weergeven
self.frame =Geen
self.capture=cv.CaptureFromCAM(0)
self.frame =cv.QueryFrame(self.capture) #Take a frame om recorder te initiëren
if doRecord:
self.initRecorder()
self.frame1gray =cv.CreateMat(self.frame.height, self.frame.width, cv.CV_8U) #Gray frame op t-1
cv.CvtColor(self.frame, self.frame1gray, cv.CV_RGB2GRAY)
#Will het gedrempelde resultaat behouden
self.res =cv.CreateMat(self.frame. hoogte, zelf.frame.breedte, cv.CV_8U)
self.frame2gray =cv.CreateMat(self.fra me.height, self.frame.width, cv.CV_8U) #Gray frame at 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 van de laatste detectie
if showWindows :
cv.NamedWindow("Image")
#cv.CreateTrackbar("Mytrack", "Image", self.ceil, 100, self.onChange)
defin initRecorder(self):#Maak de 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 ingesteld op 15 omdat het de fps van mijn camera lijkt te zijn, maar moet worden aangepast aan uw behoeften
self.font =cv.InitFont (cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) #Maakt een lettertype
def run(self):
algemene telling
started =time.time()
while True:
curframe =cv.QueryFrame(self.capture)
instant =time.time() #Get timestamp van het frame
self.processImage(curframe) #Process the image
if not self.isRecording:
if self.somethingHasMoved():
self.trigger_time =instant #Update de trigger_time
if instant> gestart +5:#Wacht 5 seconden nadat de webcam is gestart om de helderheid aan te passen enz.
print "Human Detected" af
>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 =('Tijdstempel:{:%Y-%b-%d %H:%M:%S }'.format(datetime.datetime.now()))
print(timestampc+' Logboekinvoer:1')
sys.stdout =orig_stdout
f.close()
if self.doRecord:#set isRecording=Alleen waar als we een video opnemen
self.isRecording =True
else:
if instant>=self.trigger_time +10:#Record gedurende 10 seconden
druk "Stop" af recording"
self.isRecording =False
else:
cv.PutText(curframe,datetime.now().strftime("%b %d, %H:%M:%S" ), (25,30),self.font, 0) #Zet datum op het frame
cv.WriteFrame(self.writer, curframe) #Schrijf het 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 of c ==1048603:#Break als gebruiker 'Esc' invoert.
break
def processImage(self, frame):
cv.CvtColor(frame, self.frame2gray, cv.CV_RGB2GRAY)
#Absdiff om het verschil te zien tussen de frames
cv.AbsDiff(self.frame1gray, self.frame2gray, self.res)
#Verwijder de ruis en doe de drempel
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, Geen, Geen, cv.CV_MOP_CLOSE)
cv.Thresho ld(self.res, self.res, 10, 255, cv.CV_THRESH_BINARY_INV)
def somethingHasMoved(self):
nb=0 #Zal het aantal zwarte pixels behouden
voor y in range(self.height):#Iterate the hole image
for x in range(self.width):
if self.res[y,x] ==0.0:#Als de pixel zwart is, behouden it
nb +=1
avg =(nb*100.0)/self.nb_pixels #Bereken het gemiddelde van de zwarte pixel in de afbeelding
#print "Gemiddelde:", avg, "%\ r",
if avg> self.ceil:#If over the ceil activeert het alarm
retour True
else:
return False
if __name__=="__main__ ":
detect =MotionDetector(doRecord=False)
detect.run()

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

Zodra dat is gebeurd, slaat u het bestand eenvoudig op door "CTRL+X", vervolgens Y en vervolgens ENTER te typen. Het script kan worden uitgevoerd door de volgende opdracht in te typen:

python main.py 

Je zou een afbeelding op het scherm moeten kunnen zien en bekijk de video om te verifiëren, indien nodig, en er is een mensentelling door het programma in de terminal.

Ik heb zojuist een bijlage gemaakt met MDF-plaat voor de Arduino en Raspberry Pi 3

Een dashboard maken voor desktop/app

Stap 1:Installeer Apache

Installeer de apache2 pakket met dit commando:

sudo apt install apache2 -y 

Stap 2:Installeer PHP

Om uw Apache-server PHP-bestanden te laten verwerken, moet u de nieuwste versie van PHP en de PHP-module voor Apache installeren. Typ de volgende opdracht om deze te installeren:

sudo apt install php libapache2-mod-php -y 

Download nu de Dashboard.zip :

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

en installeer unzip:

sudo apt-get install unzip 

pak de bestanden uit een ZIP-bestand:

Dashboard.zip uitpakken 

Sla nu uw browser op en ververs deze. Je zou moeten zien

Een Raspberry Pi instellen als draadloos toegangspunt

Volg deze link https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md

Opmerking:Noem het draadloze toegangspunt 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

Laten we nu beginnen met het bouwen van de app.

Android-app:

Vereiste:Android Studio

U kunt de code hier eenvoudig rechtstreeks downloaden.

En verander uw inloggegevens zoals het IP-adres van uw Raspberry Pi volgens uw behoeften.

iOS-app:

Voorwaarde:XCode

U kunt de code hier eenvoudig rechtstreeks downloaden.

En verander uw inloggegevens zoals het IP-adres van uw Raspberry Pi volgens uw behoeften.

Chemische oplossing gebruikt

De desinfectietunnel bevat 0,4% natriumhypochlorietoplossing in 100 liter water.

Bijwerken - Ik had veel opmerkingen gezien waarin stond dat u schadelijke chemicaliën gebruikt.

Dus ik verzamel gewoon de informatie van de verkoper die me deze chemische stof leverde. Dus hij vertelde me dat de chemische stof die ik in deze tunnel gebruik van Raman &Weil Pvt is. Ltd en ze hebben "Verklaring " van Bode Chemie Duitsland , over de werkzaamheid tegen COVID-19 .

Officiële link - http://ramanweil.com/pdf/Declaration%20from%20Bode%20Chemie%20Germany%20on%20efficacy%20against%20COVID%2019.pdf

Alles bij elkaar

Eindelijk was het tijd om de Tunnel aan te zetten en te controleren of alle routines en apps volgens plan werken.

Kosten

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

Code

  • Arduino-codetunnel
  • main.py
  • Dashboardbestanden
  • Sanitation-Tunnel Android-broncode
  • Android-app voor sanitaire tunnel
  • Sanitation-Tunnel iOS-broncode
Arduino Code TunnelC/C++
/* * Slimme desinfectie- en sanitaire tunnel */ int relayPin =12; // kies de pin voor de Relay Pinint inputPin =2; // kies de invoerpin (voor PIR-sensor) int inputPin2 =3; // kies de invoerpin (voor PIR-sensor 02) int pirState =LAAG; // we beginnen, ervan uitgaande dat er geen beweging is gedetecteerd.int val =0; // variabele voor het lezen van de pin statusint val2 =0; // variabele voor het lezen van de pinstatus void setup () { pinMode (relayPin, OUTPUT); // verklaar Relais als output pinMode (inputPin, INPUT); // verklaar PIR-sensor als input pinMode (inputPin2, INPUT); Serial.begin (9600);} void loop () {val =digitalRead (inputPin); // lees invoerwaarde val2 =digitalRead (inputPin2); // lees invoerwaarde als (val ==HOOG || val2 ==HOOG) {// controleer of de invoer HOOG is digitalWrite (relayPin, HOOG); // zet relais AAN als (pirState ==LAAG) { // we hebben zojuist Serial.println ingeschakeld ("Beweging gedetecteerd!"); // 15 sec vertraging (15000); // We willen alleen afdrukken op de uitvoerwijziging, niet de status pirState =HIGH; } } else { digitalWrite(relayPin, 0); // zet relais UIT if (pirState ==HIGH){ // we hebben zojuist Serial.println uitgeschakeld ("Motion eindigde!"); // We willen alleen afdrukken op de uitvoerwijziging, niet de status pirState =LAAG; } } }
main.pyPython
import cv2.cv als cvfrom datetime import datetimeimport timeimport sysimport datetimecount=0class MotionDetector():def onChange(self, val):#callback wanneer de gebruiker de ceil wijzigt self.ceil =val def __init__(self,ceil=8 , doRecord=True, showWindows=True):self.writer =Geen self.font =Geen self.doRecord=doRecord #Het al dan niet opnemen van het bewegende object self.show =showWindows #De 2 vensters al dan niet tonen self.frame =Geen self.capture=cv.CaptureFromCAM(0) self.frame =cv.QueryFrame(self.capture) #Neem een ​​frame om recorder te initiëren als doRecord:self.initRecorder() self.frame1gray =cv.CreateMat(self.frame. hoogte, self.frame.width, cv.CV_8U) #Gray frame op t-1 cv.CvtColor(self.frame, self.frame1gray, cv.CV_RGB2GRAY) #Zal het gedrempelde resultaat behouden 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) #Grijs frame op t self.width =zelf. frame.width self.height =zelf.frame.height zelf.nb_p ixels =self.width * self.height self.ceil =ceil self.isRecording =False self.trigger_time =0 #Hold timestamp van de laatste detectie als 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 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
Geen voorbeeld (alleen downloaden).
Sanitation-Tunnel Android Source CodeJava
Geen voorbeeld (alleen downloaden).
Sanitation-Tunnel Android AppJava
Demo App
No preview (download only).
Sanitation-Tunnel iOS Source CodeSwift
Geen voorbeeld (alleen downloaden).
Smart Disinfection and Sanitation Tunnel
https://github.com/yugn27/Smart-Disinfection-and-Sanitation-Tunnel

Aangepaste onderdelen en behuizingen

smart_disinfection_and_sanitation_tunnel_prlFu8ZRXO.3mf

Schema's

Circuit Diagram - fritzing file smart_disinfection_and_sanitation_tunnel_Zkb20Q5S2B.fzz

Productieproces

  1. Voordelen van IoT in de landbouw en slimme landbouw
  2. Temperatuur- en vochtigheidsdatalogger
  3. IOT - Smart Jar met ESP8266, Arduino en ultrasone sensor
  4. Smart Home Automation en beveiligingssysteem met 1Sheeld
  5. Slimme schoenen (automatisch rijgen en elektriciteit opwekken)
  6. Gefeliciteerd met je verjaardag:licht en geluid
  7. Smart Face Tracking Robot Car
  8. Eenvoudige en slimme robotarm met Arduino
  9. Gitaar Speed ​​Pick en Stomp Pedaal!
  10. Smart Manufacturing:wat het is en en de voordelen ervan
  11. Industrie 4.0 en hydrauliek