제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
배경
그런데 이야기는 어느 날 집에 도착했을 때 미닫이 도어의 리모콘이 작동하지 않는다는 것을 깨달았습니다. "배터리!" 생각했지만 아니, 이것이 이유가 아니었다. 조금 조사를 해보니 도어 모터의 덮개를 제거했을 때 놀라운 일이 벌어졌습니다. 전자 제어 보드와 플라스틱 지지대 사이의 작은 공간에서 작은 도마뱀이 말 그대로 탄화되어 있었습니다. 그 끔찍한 장면). 나는 작은 파충류가 220V 고정 장치를 만지고 단락을 생성했다고 생각합니다. 결과는 죽음이었고 모든 회로가 불탔습니다.
내 프로젝트에 사용하기 위해 저장할 수 있는 몇 가지 구성 요소를 보드에서 제거했지만 이 사진에서 최종 결과를 볼 수 있습니다.
바로 그 순간 나는 이것이 Arduino 프로젝트와 제어 장치의 완전한 재구축을 위한 완벽한 핑계가 될 수 있다고 결정했습니다.
경고
이 프로젝트의 경우 220V(또는 110V)에 직접 연결된 구성 요소를 처리해야 합니다. 이러한 종류의 설치에 능숙하지 않은 경우 위험할 수 있다는 점을 고려하십시오. 주의하여 진행하시기 바랍니다. 실제 모터 회로에 연결하기 전에 항상 시뮬레이션을 수행하십시오.
부품 및 회로
프로젝트는 여러 부분으로 나누어져 있지만 여기서 소개하는 것은 모터와 신호등의 회전을 제어하고 리미트 스위치 센서와 안전 광전지의 상태를 고려하는 Arduino 회로입니다.
처음에는 빌드하고 프로그래밍하는 것이 쉽다고 생각할 수 있지만 이 프로젝트를 매우 흥미롭게 만든 많은 어려움을 극복해야 했습니다.
전체 프로젝트의 다른 중요한 구성 요소는 다음과 같습니다.
<울>또한 상업적인 원래 제어 장치에 포함되지 않은 몇 가지 개선 사항과 몇 가지 자동화 작업을 추가했습니다.
이 프로젝트의 핀아웃
다음 정보는 구성 요소의 핀과 연결 방법을 요약한 것입니다.
보시다시피 이 프로젝트에서는 기판에 직접 부착된 OLED 디스플레이를 사용했습니다. 정상적인 작업 조건에서 이 디스플레이는 메커니즘 및 전자 장치의 보호 덮개 내부에 있습니다. 그래서, 당신은 그것을 볼 수 없습니다. 사실, 이 디스플레이는 설정을 조정하고 코드를 미세 조정하는 동안 구성 요소의 상태를 확인하는 데만 사용하도록 고안되었습니다(예:최대 시간 조정).
이 디스플레이에서 제공하는 정보는 Arduino IDE 소프트웨어가 있는 랩톱에서 직렬 포트로 전송되어 확인할 수도 있었지만 이 작은 디스플레이는 랩톱이나 추가 장치를 사용하지 않고도 장치를 작동할 수 있는 멋진 방법이라는 것을 알았습니다. 장치.
OLED에 표시되는 정보는 다음과 같습니다.
<울>참고:내가 사용하는 OLED 디스플레이는 0.96인치이고 해상도는 128 x 64픽셀입니다. 이 디스플레이는 I2C 또는 SPI를 사용하여 제어 장치(이 경우 Arduino Nano)와 통신할 수 있으며 저는 SPI(Serial Peripheral Interface)를 사용하고 있습니다.
순서도
다음 순서도는 읽을 수 있는 방식으로 소프트웨어 코드를 요약합니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
/**************************** ***************************************** 슬라이딩 전동 도어를 위한 자동화**** ************************************************** ***************//* 주석은 영어로 번역되지만 변수 및 레이블의 이름을 이해하는 데 도움이 되도록 여기에 빠른 어휘 "카탈로니아어-영어"가 있습니다. :Bucle principal =메인 루프 Sequencia Obertura =오프닝 시퀀스 Sequencia Tancament =클로징 시퀀스 Obrir =Open; Obert =열림 Tancar =닫힘; Tancat =폐쇄형 봄베타 =전구 Llum =조명 Porta =게이트 / 도어 Avaria =실패 온도 =시간 Recorregut =도어 여행*/// Oled 디스플레이용 라이브러리#include#include #include #include // 제어 회로에서 사용할 핀을 정의합니다int FOTOCELULA =2;int BOMBETA =5; //릴레이 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; //릴레이 2int MOTOR_TANCAR =12; //Relay 3int OBRIR =4;// Oled 디스플레이에서 사용할 핀을 정의합니다.#define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_RESET , OLED_CS);// 전역 변수를 정의합니다.unsigned long TEMPS_PORTA_OBERTA =20000;unsigned long TEMPS_MAXIM_RECORREGUT =15000; //나중에 이 값을 재정의할 것입니다.int interval =1000; // Interval은 대기하는 시간입니다. TEMPS_DISPLAY =1; // 표시하는 데 걸리는 시간(초)int DURADA =300; // 전구에 대한 Cicleunsigned long previousMillis =0; // 마지막 이벤트 이후의 시간을 추적합니다. fireunsigned long currentMillis =millis();unsigned long TEMPS_LLUM =1000; // 전구 상태에 대한 시간(밀리초) 부울 LLUM =false; // 조명 켜기 또는 끄기 부울 AVARIA =false; //제한을 감지하지 않고 도어 이동 시간 초과 switchvoid setup() { // 모터 및 조명 끄기 digitalWrite(MOTOR_OBRIR, HIGH); 디지털 쓰기(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, HIGH); // 자동화를 위한 핀을 초기화합니다. pinMode(FOTOCELULA, INPUT_PULLUP); 핀모드(TANCAT, INPUT_PULLUP); 핀모드(OBERT, INPUT_PULLUP); 핀모드(OBRIR, INPUT_PULLUP); 핀모드(BOMBETA, 출력); 핀모드(MOTOR_OBRIR, 출력); 핀모드(MOTOR_TANCAR, 출력); // 초기화 표시 Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); 디스플레이.디스플레이(); // Adafruit 초기 로고 표시 delay(1000); display.clearDisplay(); 디스플레이.디스플레이(); // 디스플레이의 텍스트 크기를 준비합니다(나중에 동적으로 재정의되므로 중요하지 않음) display.setTextSize(1); display.setTextColor(WHITE);} 무효 루프() {BUCLE_PRINCIPAL:지연(2000); 이전Millis =millis(); 동안 (digitalRead(OBRIR) ==HIGH) { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("BUCLE PRINCIPAL ..."); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if (AVARIA 및 (millis() - 이전Millis <60000)) { digitalWrite(BOMBETA, LOW); } 그렇지 않으면 (digitalWrite(BOMBETA, HIGH)); }; // Open 명령이 내려질 때까지 기다리며 디스플레이가 새로 고쳐지는 동안 센서의 상태를 표시합니다 goto SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // 문을 여는 최대 시간(초과하면 약간의 실패를 나타냄) previousMillis =millis(); 디지털 쓰기(MOTOR_OBRIR, LOW); digitalWrite(BOMBETA, LOW); delay(1000);A:if (digitalRead(OBERT) ==HIGH) { PORTA_OBERTA로 이동; }; if (digitalRead(OBRIR) ==LOW) { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("탄카 당 에스페란트 명령"); // "닫기 대기 중" display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); 디지털 쓰기(MOTOR_OBRIR, 높음); digitalWrite(BOMBETA, HIGH); 지연(1000); 동안 (디지털 읽기(OBRIR) ==높음) {}; //OPEN 명령이 발행될 때까지 아무것도 하지 않음 goto SEQUENCIA_TANCAMENT; }; //--시간 제어 및 표시 새로 고침--------------- currentMillis =millis(); TEMPS_DISPLAY =(현재 밀리 - 이전 밀리) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("오브린트 포트"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if ((currentMillis - previousMillis)>=간격) { digitalWrite(MOTOR_OBRIR, HIGH); AVARIA =사실; // PORTA_OBERTA로 이동; }; //--light 점멸 빈도 제어------------------ if ((currentMillis - TEMPS_LLUM)>=1000) //저속으로 점멸 { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =현재밀리; }; goto A;SEQUENCIA_TANCAMENT:간격 =28000; // 문을 닫는 최대 시간(초과하면 일부 실패를 나타냄)! 이전Millis =millis(); 디지털 쓰기(MOTOR_TANCAR, LOW); digitalWrite(BOMBETA, LOW); if (digitalRead(TANCAT) ==LOW) {delay(1000);};B:if (digitalRead(TANCAT) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, HIGH); BUCLE_PRINCIPAL로 이동 }; if (digitalRead(OBRIR) ==LOW) { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("오브리르에 대한 에스페란트 명령"); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); 디지털 쓰기(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, HIGH); 지연(1000); 동안 (디지털 읽기(OBRIR) ==높음) {}; //OPEN 명령이 발행될 때까지 아무 것도 하지 않음 goto SEQUENCIA_OBERTURA; }; if (digitalRead(FOTOCELULA) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); 지연(1000); SEQUENCIA_OBERTURA로 이동; }; //--시간 제어 및 표시 새로 고침--------------------- currentMillis =millis(); TEMPS_DISPLAY =(현재 밀리 - 이전 밀리) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("탄칸트 포르타"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if ((currentMillis - previousMillis)>=간격) { digitalWrite(MOTOR_TANCAR, HIGH); AVARIA =사실; BUCLE_PRINCIPAL로 이동 }; //--light 점멸 빈도 제어------------------ if ((currentMillis - TEMPS_LLUM)>=300) // 빠른 속도로 점멸 { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =현재밀리; }; goto B;PORTA_OBERTA:간격 =30000; // 문을 닫기까지 기다리는 시간! (차 진입까지 30초...) previousMillis =millis(); 디지털 쓰기(MOTOR_OBRIR, 높음); 지연(500);C:if (digitalRead(OBRIR) ==LOW) { SEQUENCIA_TANCAMENT로 이동; }; //--시간 제어 및 표시 새로 고침--------------------- currentMillis =millis(); TEMPS_DISPLAY =(현재 밀리 - 이전 밀리) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("포르타 오버타 완성"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if ((currentMillis - previousMillis)>=간격) { SEQUENCIA_TANCAMENT로 이동; }; //--대기 상태의 특수 복합 깜박임 빈도------------------ // (2초의 긴 기간 사이에 100밀리초의 짧은 깜박임) if (LLUM ==false ) { 듀라다 =100; } 그렇지 않으면 DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =현재밀리; }; C로 이동;}
/************************************로 컴파일 및 업로드하기 위한 C++ 코드입니다. ************************************ Automatisme per porta corredera motoritzada************ ************************************************** **********/// 디스플레이 서비스당 라이브러리#include섹션>#include #include #include // Definim automatisme portaint 당 핀 FOTOCELULA =2;int BOMBETA =5; //릴레이 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; //릴레이 2int MOTOR_TANCAR =12; //릴레이 3int OBRIR =4;// 디스플레이당 핀 정의 정의#define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 디스플레이(OLED_MOSI, OLED_CLK, OLED_DC, OLED_im)RESET 변수 globalsunsigned long TEMPS_PORTA_OBERTA =20000, unsigned long TEMPS_MAXIM_RECORREGUT =15000; // Despres ho 재정의 간격 =1000; // Interval은 대기하는 시간입니다. TEMPS_DISPLAY =1; // 임시 엔 판탈린트당 임시 엔 세곤 DURADA =300; // Cicle bombeta senyalitaciounsigned long previousMillis =0; // 마지막 이벤트 이후의 시간을 추적합니다. fireunsigned long currentMillis =millis();unsigned long TEMPS_LLUM =1000; // mmilisegons de estat llum senyalitzacioboolean temps LLUM =false; // Llum encessa si ON i apagada si OFFboolean AVARIA =false; // Excedit el temps de recorregut sense detectar finals de carreravoid setup() { // 자동 포트에 대한 초기 핀 핀 모드(FOTOCELULA, INPUT_PULLUP); 핀모드(TANCAT, INPUT_PULLUP); 핀모드(OBERT, INPUT_PULLUP); 핀모드(OBRIR, INPUT_PULLUP); 핀모드(BOMBETA, 출력); 핀모드(MOTOR_OBRIR, 출력); 핀모드(MOTOR_TANCAR, 출력); // Apaguem 모터 i llum digitalWrite(MOTOR_OBRIR, HIGH); 디지털 쓰기(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, HIGH); // 표시 초기화 Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); 디스플레이.디스플레이(); // Mostra pantalla 초기 de Adafruit delay(1000); display.clearDisplay(); 디스플레이.디스플레이(); // 텍스트당 디스플레이 준비 display.setTextSize(1); display.setTextColor(WHITE);} 무효 루프() {BUCLE_PRINCIPAL:지연(2000); 이전Millis =millis(); 동안 (digitalRead(OBRIR) ==HIGH) { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("BUCLE PRINCIPAL ..."); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if (AVARIA 및 (millis() - 이전Millis <60000)) { digitalWrite(BOMBETA, LOW); } 그렇지 않으면 (digitalWrite(BOMBETA, HIGH)); }; //Esperem fins que premem OBRIR i anem refresant pantalla per mostrar estat sensor goto SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA OBRINT !!!!!!!!! 이전Millis =millis(); 디지털 쓰기(MOTOR_OBRIR, LOW); digitalWrite(BOMBETA, LOW); delay(1000);A:if (digitalRead(OBERT) ==HIGH) { PORTA_OBERTA로 이동; }; if (digitalRead(OBRIR) ==LOW) { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("탄카 당 에스페란트 명령"); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); 디지털 쓰기(MOTOR_OBRIR, 높음); digitalWrite(BOMBETA, HIGH); 지연(1000); 동안 (디지털 읽기(OBRIR) ==높음) {}; // fem res fins que premem OBRIR goto SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla------------------ currentMillis =millis(); TEMPS_DISPLAY =(현재 밀리 - 이전 밀리) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("오브린트 포트"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if ((currentMillis - previousMillis)>=간격) { digitalWrite(MOTOR_OBRIR, HIGH); AVARIA =사실; // PORTA_OBERTA로 이동; }; //--Control-de-cadencia-de-la-llum-intermitent--- if ((currentMillis - TEMPS_LLUM)>=1000) // Cadencia de la llum 간헐적 데 senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =현재밀리; }; goto A;SEQUENCIA_TANCAMENT:간격 =28000; // TEMPS MAXIM DE RECORREGUT PORTA TANCANT !!!!!!!! 이전Millis =millis(); 디지털 쓰기(MOTOR_TANCAR, LOW); digitalWrite(BOMBETA, LOW); if (digitalRead(TANCAT) ==LOW) {delay(1000);};B:if (digitalRead(TANCAT) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, HIGH); BUCLE_PRINCIPAL로 이동 }; if (digitalRead(OBRIR) ==LOW) { display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("오브리르에 대한 에스페란트 명령"); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); 디지털 쓰기(MOTOR_TANCAR, HIGH); digitalWrite(BOMBETA, HIGH); 지연(1000); 동안 (디지털 읽기(OBRIR) ==높음) {}; // fem res fins que premem OBRIR goto SEQUENCIA_OBERTURA; }; if (digitalRead(FOTOCELULA) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); 지연(1000); SEQUENCIA_OBERTURA로 이동; }; //--Control-de-temps-i-impressió-en-pantalla------------------ currentMillis =millis(); TEMPS_DISPLAY =(현재 밀리 - 이전 밀리) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("탄칸트 포르타"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if ((currentMillis - previousMillis)>=간격) { digitalWrite(MOTOR_TANCAR, HIGH); AVARIA =사실; BUCLE_PRINCIPAL로 이동 }; //--Control-de-cadencia-de-la-llum-intermitent--- if ((currentMillis - TEMPS_LLUM)>=300) // Cadencia de la llum 간헐적 데 senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =현재밀리; }; goto B;PORTA_OBERTA:간격 =30000; // TEMPS MAXIM ESPERANT AMB PORTA OBERTA !!!!!!!!! 이전Millis =millis(); 디지털 쓰기(MOTOR_OBRIR, 높음); 지연(500);C:if (digitalRead(OBRIR) ==LOW) { SEQUENCIA_TANCAMENT로 이동; }; //--Control-de-temps-i-impressió-en-pantalla------------------ currentMillis =millis(); TEMPS_DISPLAY =(현재 밀리 - 이전 밀리) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("포르타 오버타 완성"); display.setTextSize(2); display.setCursor(90, 0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0, 20); display.print("포토셀.룰라:"); display.println(디지털 읽기(FOTOCELULA)); display.print("탄캣 센서:"); display.println(digitalRead(TANCAT)); display.print("센서 OBERT:"); display.println(디지털 읽기(OBERT)); display.print("오드르 오브리르:"); display.println(!digitalRead(OBRIR)); 디스플레이.디스플레이(); if ((currentMillis - previousMillis)>=간격) { SEQUENCIA_TANCAMENT로 이동; }; //--Control-de-cadencia-de-la-llum-intermitent--- if (LLUM ==false) { DURADA =100; } 그렇지 않으면 DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // Cadencia de la llum 간헐적 de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =현재밀리; }; C로 이동;}
제조공정
공구 및 커터 그라인더는 밀링 커터, 공구 비트 및 기타 여러 절삭 공구를 날카롭게 하는 데 사용됩니다. 공구 연삭은 공작 기계를 다시 연마하기 위해 연마제 또는 맞춤형 연삭 휠이 필요한 더 넓은 연삭 기술 분야의 하위 전문 분야입니다. 공구 및 커터 그라인더는 표면, 실린더 또는 복잡한 모양과 같은 다양한 연삭 작업을 수행합니다. 건설 그림. 1 일반 구성, 최고의 기계 공학 공구 및 커터 그라인더의 일반적인 구성은 그림 1과 같다. 기본 구조는 선반과 비슷하지만 터닝 헤드에 죠 척 대신에 그라인딩 휠이 장착되어 있다. 고정
USB 케이블이 어떻게 만들어지는지 궁금하신가요? 실제로 USB 케이블뿐만 아니라 우리가 매일 보는 모든 전자 케이블은 두 부분으로 나눌 수 있습니다. 케이블 및 커넥터 . 사용할 수 있는 USB 케이블을 만드는 것은 케이블과 커넥터를 연결하기만 하면 됩니다. 따라서 모든 전자 케이블은 유사한 공정을 통해 만들어집니다. 다음 단락에서 프로세스가 무엇인지 보여드리겠습니다. 1단계:케이블 절단 원시 케이블은 종종 매우 길기 때문에 적절한 길이로 절단해야 합니다. 고객의 요구 사항을 충족하기 위해 1미터 또는 2미터. 2단계:내부 도