제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
| ||||
| ||||
| ||||
|
| ||||
| ||||
|
소개
Smart Disinfection and Sanitation Tunnel은 약 15초 만에 터널을 통과하는 사람들을 최대한 보호하도록 설계되었음을 보여줍니다. 커뮤니티가 COVID-19와 싸우는 데 도움이 될 수 있습니다.
이 프로젝트의 주요 아이디어는 COVID-19의 확산을 방지하고 시도할 수 있는 터널을 만드는 것입니다.
이 소독 및 위생 터널은 가능한 박테리아로부터 15초 이내에 사람들을 소독하기 위해 준비되었습니다.
사용된 소독액은 차아염소산나트륨(NaOCl)과 물(H2O)의 조합으로 구성됩니다. 소독제는 비휘발성이므로 장기간의 살균 및 살균 활성이 가능하고 표면을 살균합니다.
그래서 이 스마트 소독 및 위생 터널을 만들기 위해 이 주도권을 잡았습니다. 이 터널은 12시간 동안 만들어졌습니다. 단 15초 만에 머리부터 발끝까지 사람을 완전히 소독할 수 있으며 사용된 용액은 완전히 무해합니다*. 터널의 총 비용은 약 ₩입니다. 30,000 또는 $400. (수정된 비용)
어디에 사용하나요? <울>
작동 원리
1HP 워터 펌프 기계는 탱크에서 물 100리터에 0.4% 차아염소산나트륨 용액을 취하는 각 터널의 측면에 배치됩니다. 기계는 자동이므로 터널에 사람이 들어가는지 감지합니다. 누구든지 터널에 들어가면 15초 동안 워터 펌프가 작동합니다. 사용자가 그 터널을 통과할 수 있도록 터널에 사람이 없으면 물과 전기를 절약하기 위해 펌프가 꺼집니다. 안개가 자욱한 소독 스프레이는 시민을 박테리아로부터 최소 60분 동안 보호합니다(약*). 공기, 노출된 피부, 의복을 소독합니다.
200리터의 용액을 위한 플라스틱 탱크와 고압 파이프 시스템용 펌프가 터널 측면에 있습니다. 계산에 따르면 솔루션은 8-10시간 동안 충분해야 합니다. 방부제를 절약하기 위해 입구 위에 모션 센서가 있기 때문입니다. (터널에 진입하는 사람에 따라 다를 수 있음**)
흐름도
하드웨어 설정
나는 금속 프로필로 프레임을 놓았고, 접을 수 있어 이곳저곳으로 운반할 수 있었고, 다 끝나면 다음 대재앙에 대비해 보관할 수 있습니다. 덮개는 배너 옆입니다(옥외 광고에 사용됨). ). 배너는 플라스틱 타이가 있는 금속 프로파일로 쉽게 부착할 수 있습니다. 빠르고 특별한 기술이 필요하지 않습니다.
모델 확인 - https://skfb.ly/6RGvZ
포거에 솔루션을 공급하기 위해 터널 전체에 마이크로 튜빙 파이프가 사용되었습니다.
4방향 포거 <울>기타 액세서리 사용
코드:
/*
* 스마트 소독 및 위생 터널
*/
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); // Relay를 output으로 선언
pinMode(inputPin, INPUT); // 센서를 입력으로 선언
pinMode(inputPin2, INPUT);
Serial.begin(9600);
}
void 루프(){
val =digitalRead(inputPin); // 입력값 읽기
val2 =digitalRead(inputPin2); // 입력 값 읽기
if (val ==HIGH || val2 ==HIGH) { // 입력이 HIGH인지 확인
digitalWrite(relayPin, HIGH); // 릴레이 ON
if (pirState ==LOW) {
// 켜짐
Serial.println("모션 감지!");
// 15초 지연
지연(15000);
pirState =HIGH;
}
} else {
digitalWrite(relayPin, 0); // 릴레이 OFF
if (pirState ==HIGH){
// 꺼짐
Serial.println("모션 종료!");
pirState =LOW;
}
}
}
프로젝트의 최종 배선이 약간 지저분해 보이지만 정상적으로 작동했습니다.
모든 배선이 끝나면 기본 센싱으로 테스트한 다음 릴레이가 작동하는지 확인했습니다.
Raspberry Pi 3 준비(선택 사항)
이것은 선택 사항입니다. 데이터 분석을 수행하고 이 터널을 사용하는 사람들의 수를 정확하게 계산해야 하는 경우. 이 부분을 구현할 수 있습니다.
PIR 센서 및 초음파 센서와 같은 일부 물리적 센서를 사용하여 이를 계산하는 방법은 여러 가지가 있지만 모든 확률을 생각하면서 이 방법이 더 정확하다는 것을 알았습니다.
Python에서 OpenCV를 사용하여 인체를 감지하고 로그를 파일에 저장하는 머신 러닝 모델이 있으며 이를 앱에서 데이터를 보여주기 위해 처리할 수 있습니다.
파이 카메라 연결 <울>
카메라 활성화
선택 (즉, 다섯 번째 옵션) 메뉴 옵션을 선택하고 ENTER를 누릅니다.ENABLE
을 강조 표시합니다. Enter 키를 누릅니다.
파이 카메라 테스트
다음으로, 카메라의 미리보기 오버레이를 시작하여 Pi 카메라가 올바르게 설치되었는지 확인하십시오. 오버레이가 화면에 렌더링됩니다.
<울>raspistill -v -o test.jpg
Pi 카메라를 올바르게 설치했다면 카메라의 영상이 화면에 렌더링된 것을 볼 수 있습니다.
OpenCV 설치
OpenCV를 설치하려면 이 링크를 따르십시오.
https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/
코드
다음 명령을 실행하여 새 스크립트 파일을 만들고 엽니다.
cd 데스크탑
sudo nano main.py
스크립트를 복사한 다음 생성한 새 파일에 붙여넣습니다.
cv2.cv를 cv로 가져오기
날짜/시간 가져오기 날짜/시간
시간 가져오기
시스템 가져오기
날짜/시간 가져오기
count=0
클래스 MotionDetector():
def onChange(self, val):#사용자가 ceil을 변경할 때 콜백
self.ceil =val
def __init__(self,ceil=8, doRecord=True, showWindows=True):
self.writer =없음
self.font =없음
self.doRecord=doRecord #움직이는 물체를 기록하거나 기록하지 않음
self.show =showWindows # 2개의 창을 표시하거나 표시하지 않음
self.frame =None
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. 높이, 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("이미지")
#cv.CreateTrackbar("Mytrack", "이미지", 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는 내 캠의 fps인 것처럼 보이지만 필요에 따라 조정되어야 하기 때문에 15로 설정됩니다.
self.font =cv.InitFont (cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 8) #글꼴 생성
def run(self):
글로벌 카운트
started =time.time()
참:
curframe =cv.QueryFrame(self.capture)
instant =time.time() #프레임의 타임스탬프 가져오기
self.processImage(curframe) #이미지 처리
self.isRecording이 아닌 경우:
if self.somethingHasMoved():
self.trigger_time =instant #trigger_time 업데이트
if Instant> started +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 로그
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+' 로그 항목:1')
sys.stdout =orig_stdout
f.close()
if self.doRecord:#set isRecording=동영상을 녹화하는 경우에만 True
self.isRecording =True
else:
if Instant>=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("해상도", self.res)
cv.Copy(self.frame2gray, self.frame1gray)
c=cv.WaitKey(1)
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, 없음, 없음, cv.CV_MOP_OPEN)
cv.MorphologyEx(self.res , self.res, 없음, 없음, 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):#구멍 이미지 반복 it
nb +=1
avg =(nb*100.0)/self.nb_pixels #이미지에서 검은색 픽셀의 평균을 계산합니다.
#print "Average:",avg, "%\ r",
if avg> self.ceil:# 만약 ceil이 알람을 트리거하면
True를 반환
else:
False를 반환
if __name__=="__main__ ":
감지 =MotionDetector(doRecord=False)
detect.run()
다운로드 - https://www.hackster.io/code_files/438321/download
완료되면 "CTRL+X", Y, Enter 키를 차례로 입력하여 파일을 저장합니다. 스크립트는 다음 명령을 입력하여 실행할 수 있습니다.
파이썬 메인.py
화면에서 이미지를 볼 수 있어야 하며, 필요한 경우 단말기에 프로그램에 의한 휴먼 카운트가 있는지 확인하기 위해 비디오를 보시기 바랍니다.
방금 Arduino 및 Raspberry Pi 3용 MDF 시트로 인클로저를 만들었습니다.
압축 해제 설치:
sudo apt-get install unzip
ZIP 파일에서 파일 추출:
Dashboard.zip 압축 해제
이제 브라우저를 저장하고 새로 고칩니다. 보아야 합니다
Raspberry Pi를 무선 액세스 포인트로 설정
이 링크를 따라가십시오 https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md
참고:무선 액세스 포인트의 이름을 SanitizingTunnel로 지정
인터페이스=wlan0
드라이버=nl80211
ssid=SanitizingTunnel
hw_mode=g
채널=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 스튜디오
여기에서 직접 코드를 다운로드할 수 있습니다.
그리고 필요에 따라 라즈베리 파이의 IP 주소와 같은 자격 증명을 변경하십시오.
iOS 앱:
전제 조건:XCode
여기에서 직접 코드를 다운로드할 수 있습니다.
그리고 필요에 따라 라즈베리 파이의 IP 주소와 같은 자격 증명을 변경하십시오.
사용된 화학 용액
소독터널은 100리터의 물에 0.4%의 차아염소산나트륨 용액을 함유하고 있습니다.
선언 " Bode Chemie Germany , COVID-19에 대한 효능 .공식 링크 - http://ramanweil.com/pdf/Declaration%20from%20Bode%20Chemie%20Germany%20on%20efficacy%20against%20COVID%2019.pdf
종합하기
드디어 Tunnel의 전원을 켜고 모든 루틴과 앱이 계획대로 작동하는지 확인할 시간이었습니다.
비용
링크 - https://docs.google.com/spreadsheets/d/1jt-hy8N8IwuQnaLYt-25BywdlREkEhp5zjAfYC6eGqw/edit?usp=sharing
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">/* * 스마트 소독 및 위생 터널 */ int relayPin =12; // 릴레이용 핀 선택 Pinint inputPin =2; // 입력 핀 선택(PIR 센서용) int inputPin2 =3; // 입력 핀 선택(PIR 센서 02용) int pirState =LOW; // 움직임이 감지되지 않는다고 가정하고 시작합니다.int val =0; // 핀을 읽기 위한 변수 statusint val2 =0; // 핀 상태를 읽기 위한 변수 void setup() { pinMode(relayPin, OUTPUT); // Relay를 출력으로 선언 pinMode(inputPin, INPUT); // PIR 센서를 입력으로 선언 pinMode(inputPin2, INPUT); Serial.begin(9600);} 무효 루프(){ val =digitalRead(inputPin); // 입력값 읽기 val2 =digitalRead(inputPin2); // 입력 값 읽기 if (val ==HIGH || val2 ==HIGH) { // 입력이 HIGH인지 확인 digitalWrite(relayPin, HIGH); // 릴레이 ON if (pirState ==LOW) { // 방금 켰습니다. Serial.println("모션이 감지되었습니다!"); // 15초 지연 지연(15000); // 우리는 상태가 아닌 출력 변경 사항에 대해서만 인쇄하기를 원합니다. pirState =HIGH; } } else { 디지털 쓰기(릴레이 핀, 0); // 릴레이를 끕니다. if (pirState ==HIGH){ // Serial.println("모션이 종료되었습니다!"); // 우리는 상태가 아닌 출력 변경 사항에 대해서만 인쇄하기를 원합니다. pirState =LOW; } } }
미리보기 없음(다운로드만 가능).
미리보기 없음(다운로드만 가능).
No preview (download only).
미리보기 없음(다운로드만 가능).
제조공정
제조 공장의 기술이 오작동하거나 수리가 필요한 경우 휴대전화로 경고가 전송되는 세상을 상상해 보십시오. 이 세상에서는 공장 내의 시스템이 한 제품을 다른 제품으로 빠르고 원활하게 제조할 수도 있습니다. 서로 다른 자동화 시스템이 서로 대화하고 효과적으로 조정합니다. 거의 미래 지향적인 것처럼 들리지만 이 기술은 이미 21st 현실이 되었습니다. 세기. IoT는 로봇과 같은 산업 환경에서 발견되는 기술과 결합하여 IIoT(산업용 사물 인터넷이라고도 함)를 생성합니다. 이 기술의 구현은 효율성과 반복성을 높이는 동시에 비용을 줄이는
연결성 및 데이터 수집은 기계 가공 및 제조 분야에서 가장 중요한 주제가 되었습니다. 공작 기계 OEM 및 액세서리 공급업체는 장비에 자동 피드백/모니터링 기능을 지속적으로 구축하여 작업장에서 작업장 프로세스를 더 잘 제어할 수 있도록 합니다. 예를 들어 Hainbuch America Corp.는 TopPlus IQ 척 및 맨드릴에 지능형 기능을 제공하고 있습니다. 이러한 지능형 워크홀딩 장치는 부품 측정 및 워크홀딩 매개변수 모니터링 기능을 포함하는 센서와 통합됩니다. 분석 및 프로세스 조정을 위해 데이터를 기계 컨트롤러에 전달하