산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

스마트 소독 및 위생 터널

구성품 및 소모품

Arduino UNO
× 1
점퍼 와이어(일반)
× 1
PIR 모션 센서(일반)
× 2
12V 전원 릴레이(4PDT)
× 1
12볼트 SMPS
× 1
Seeed Grove - 2채널 SPDT 릴레이
× 1
5볼트 SMPS
× 1
토글 스위치, (켜기)-끄기-(켜기)
× 1
라즈베리 파이 3 모델 B
× 1
라즈베리 파이 카메라 모듈 V2
× 1
마이크로 SD 카드
× 1
마이크로 USB-USB 케이블(일반)
× 1
방열판
× 1
1 HP 워터 펌프
× 1
스틸 박스 파이프
× 1
물탱크(200L)
× 1
PVC 플라스틱 파이프
× 1
4방향 포거
× 1
배너 플렉스
× 1
티 조인트
× 1
마이크로 튜빙 파이프
× 1
벽 고정 램프
× 1
팔꿈치
× 1
케이블 타이, 양면
× 1

필요한 도구 및 기계

용접기
절단기
납땜 인두(일반)
납땜 와이어, 무연
레이저 커터(일반)

앱 및 온라인 서비스

Arduino IDE
라즈베리 파이 라즈비안
OpenCV

이 프로젝트 정보

소개

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방향 포거

    <울>
  • 방전율 :30LPH/0.5LPM(1인용 포거용)
  • 권장 압력:45-60psi
  • 평균 액적 크기:65미크론(55-60psi에서)
  • 여과 필요:130마이크론(120메쉬)
  • 펌프 필요:40~45미터 헤드
  • 기타 액세서리 사용

    코드:

    /*
    * 스마트 소독 및 위생 터널
    */

    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를 사용하여 인체를 감지하고 로그를 파일에 저장하는 머신 러닝 모델이 있으며 이를 앱에서 데이터를 보여주기 위해 처리할 수 있습니다.

    파이 카메라 연결

    <울>
  • 라즈베리 파이 끄기
  • USB 모듈과 HDMI 모듈 사이에서 카메라 모듈을 찾습니다.
  • 검은색 플라스틱 클립을 (부드럽게) 위로 당겨 잠금 해제
  • 카메라 모듈 리본 케이블을 삽입합니다(금속 커넥터향하게 Raspberry Pi 4의 이더넷/USB 포트에서)
  • 검은색 플라스틱 클립 잠금
  • <울>
  • 카메라 활성화 선택 (즉, 다섯 번째 옵션) 메뉴 옵션을 선택하고 ENTER를 누릅니다.
  • <울>
  • 다음 메뉴에서 오른쪽 화살표 키를 사용하여 ENABLE을 강조 표시합니다. Enter 키를 누릅니다.
  • 파이 카메라 테스트

    다음으로, 카메라의 미리보기 오버레이를 시작하여 Pi 카메라가 올바르게 설치되었는지 확인하십시오. 오버레이가 화면에 렌더링됩니다.

    <울>
  • VNC 뷰어를 사용하여 Raspberry 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="코드">

    코드

    <울>
  • Arduino 코드 터널
  • 메인.py
  • 대시보드 파일
  • 위생 터널 Android 소스 코드
  • 위생 터널 Android 앱
  • 위생 터널 iOS 소스 코드
  • Arduino 코드 터널C/C++
    /* * 스마트 소독 및 위생 터널 */ 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; } } }
    main.py파이썬
    <사전>cv2.cv as cvfrom datetime import datetimeimport timeimport sysimport datetimecount=0class 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 #두 창을 표시하거나 표시하지 않음 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" , "이미지", 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", 코덱, 15, cv.GetSize(self.frame), 1) #FPS는 내 캠의 fps인 것처럼 보이지만 필요에 따라 조정되어야 하기 때문에 15로 설정됩니다. 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. 농업 및 스마트 농업에서 IoT의 이점
    2. 온도 및 습도 데이터 로거
    3. IOT - ESP8266, Arduino 및 초음파 센서를 사용하는 스마트 항아리
    4. 원쉴드를 사용한 스마트 홈 자동화 및 보안 시스템
    5. 스마트 신발(자동 끈 및 전기 생성)
    6. 생일 축하합니다:조명과 소리
    7. 스마트 얼굴 추적 로봇 자동차
    8. 기타 스피드 픽 및 스톰프 페달!
    9. 스마트 제조:정의 및 이점
    10. 인더스트리 4.0 및 유압 장치