ガレージ用自動引き戸
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
このプロジェクトについて
背景
さて、ある日家に着いて話が始まり、引き戸のリモコンが動かないことに気づきました。 「電池!」私は思ったが、いや、これは理由ではなかった。ドアモーターのカバーを外したとき、私は少し驚きました。電子制御ボードとプラスチックサポートの間の小さなスペースで文字通り小さなトカゲが炭化されました(ちなみに、私はからの画像をアップロードするつもりはありませんその恐ろしいシーン)。小さな爬虫類が220Vのファストンに触れ、短絡を引き起こしたと思います。その結果、その死に至り、すべての回路が焼けました。
プロジェクトで使用するために保存できるいくつかのコンポーネントをボードから削除しましたが、この写真で最終的にどのようになったかを確認できます。
<図>
その瞬間、私はこれがArduinoプロジェクトを作成してコントロールユニットを完全に再構築するための完璧な言い訳になるかもしれないと判断しました。
警告
このプロジェクトでは、220V(または110V)に直接接続されたコンポーネントを処理する必要があります。この種のインストールにあまり熟練していない場合、これは危険である可能性があることを考慮に入れてください。注意して、注意して進んでください。実際のモーター回路に接続する前に、必ずシミュレーションを実行してください。
コンポーネントと回路
プロジェクトはいくつかの部分に分かれていますが、ここで紹介するのは、モーターと信号灯の回転を制御し、リミットスイッチセンサーと安全フォトセルのステータスを考慮したArduino回路です。
最初は、構築とプログラミングが簡単だと思うかもしれませんが、このプロジェクトを非常にエキサイティングなものにした多くの困難を克服しなければならなかったことは確かです。
プロジェクト全体のその他の重要なコンポーネントは次のとおりです。
- 電気220Vモーターと物理ガイドおよびメカニズム:これらはトカゲの行動の影響を受けませんでした。
- 「開く」コマンドを発行するためのリモート無線受信機:リモートコントローラーと受信機を含む市販の既製のユニットを使用しました。
- モーターが使用する大電流をサポートする220Vリレー。
- Arduino Nanoと、OLEDディスプレイやリレーモジュールなどの他の互換性のあるアクセサリで作られたメインコントロールユニット。これがこのポータルで紹介するものです。
また、市販のオリジナルコントロールユニットには含まれていなかったいくつかの改善といくつかの自動化されたアクションを追加しました。
このプロジェクトのピン配置
次の情報は、コンポーネントのピンとそれらの接続方法をまとめたものです。
<図>
ご覧のとおり、このプロジェクトでは、ボードに直接取り付けられたOLEDディスプレイを使用しました。通常の動作状態では、このディスプレイはメカニズムと電子機器の保護カバーの内側にあります。そのため、あなたはそれを見ることができません。実際、このディスプレイは、設定を調整し、コードを微調整する際にコンポーネントのステータスを確認するためにのみ使用することを目的としています(たとえば、最大時間の調整)。
このディスプレイによって提供される情報は、シリアルポートに送信され、Arduino IDEソフトウェアを使用してラップトップからチェックされる可能性もありますが、この小さなディスプレイは、ラップトップや追加の使用を必要とせずにユニットを操作するためのクールな方法であることがわかりましたデバイス。
OLEDに表示される情報は次のとおりです。
- 実行中のコードのフェーズ(ドアを開く、ドアを閉じる、「開く」コマンドを待つ、メインループなど)
- 主なアクションの経過時間(開く、再び閉じる前に待つ、閉じる)
- フォトセルのステータス(誰かまたは何かがクロージングパスにあるときにアクティブになります)
- 閉限界センサーステータス(ドアが完全に閉じているときにアクティブ)
- OPENEDリミットセンサーステータス(ドアが完全に開いているときにアクティブ)
- OPENコマンド信号(リモコンが押され、無線モジュールがリレーをアクティブにするとアクティブになります)
注:私が使用しているOLEDディスプレイは0.96インチで、解像度は128 x64ピクセルです。このディスプレイは、I2CまたはSPIを使用して制御デバイス(この場合はArduino Nano)と通信でき、私はSPI(シリアルペリフェラルインターフェイス)を使用しています。
<図>
フローチャート
次のフローチャートは、ソフトウェアコードを読みやすい方法で要約したものです。
<図>
<図>

<図>

コード
- 英語のソフトウェアコードバージョン
- コード
英語のソフトウェアコードバージョン C / C ++
ここに、すべてのコメントが英語に翻訳されたコードがあります。変数とラベルの意味を理解するために、語彙の短いリストが含まれています。/ ******************************* *****************************************スライド式電動ドアの自動化**** ************************************************** *************** // *コメントは英語に翻訳されていますが、変数とラベルの名前を理解しやすくするために、ここに簡単な語彙「カタロニア語-英語」があります。 :Bucleプリンシパル=メインループSequencia Obertura =オープニングシーケンスSequenciaTancament =クロージングシーケンスObrir =オープン; Obert =開いたTancar =閉じる; Tancat =閉じたBombeta =電球Llum =ライトPorta =ゲート/ドアAvaria =故障温度=時間Recorregut =ドアトラベル* /// OledDisplay用ライブラリ#include#include #include #include //制御回路で使用されるピンを定義しますintFOTOCELULA =2; int BOMBETA =5; //リレー1intTANCAT =7; int OBERT =3; int MOTOR_OBRIR =6; //リレー2intMOTOR_TANCAR =12; //リレー3intOBRIR =4; // Oledディスプレイで使用するピンを定義します#defineOLED_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_DC、OLED_RESET 、OLED_CS); //グローバル変数を定義しますunsignedlong TEMPS_PORTA_OBERTA =20000; unsigned long TEMPS_MAXIM_RECORREGUT =15000; //後でこの値を再定義しますintinterval =1000; //間隔は待機時間ですintTEMPS_DISPLAY =1; //表示する時間(秒単位)int DURADA =300; //電球のシクルunsignedlong previousMillis =0; //最後のイベントが発生してからの時間を追跡しますdunsignedlong currentMillis =millis(); unsigned long TEMPS_LLUM =1000; //電球statusbooleanのミリ秒単位の時間LLUM =false; //ライトONまたはOFFbooleanAVARIA =false; //制限スイッチを検出せずにドアの移動時間が超過しましたvoidsetup(){//モーターとライトをオフにしますdigitalWrite(MOTOR_OBRIR、HIGH); digitalWrite(MOTOR_TANCAR、HIGH); digitalWrite(BOMBETA、HIGH); //自動化のためにピンを初期化しますpinMode(FOTOCELULA、INPUT_PULLUP); pinMode(TANCAT、INPUT_PULLUP); pinMode(OBERT、INPUT_PULLUP); pinMode(OBRIR、INPUT_PULLUP); pinMode(BOMBETA、OUTPUT); pinMode(MOTOR_OBRIR、OUTPUT); pinMode(MOTOR_TANCAR、OUTPUT); //初期化を表示Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.display(); // Adafruitの初期ロゴを表示delay(1000); display.clearDisplay(); display.display(); //表示用のテキストサイズを準備します(後で動的に再定義されるため重要ではありません)display.setTextSize(1); display.setTextColor(WHITE);} void loop(){BUCLE_PRINCIPAL:delay(2000); previousMillis =millis(); while(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( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if(AVARIA and(millis()-previousMillis <60000)){digitalWrite(BOMBETA、LOW); } else(digitalWrite(BOMBETA、HIGH)); }; // Openコマンドが発行されるまで待機し、その間、センサーのステータスを示す表示が更新されます。SEQUENCIA_OBERTURA; SEQUENCIA_OBERTURA:interval =28000; //ドアを開く最大時間(超えた場合は何らかの失敗を示します)previousMillis =millis(); digitalWrite(MOTOR_OBRIR、LOW); digitalWrite(BOMBETA、LOW); delay(1000); A:if(digitalRead(OBERT)==HIGH){goto PORTA_OBERTA; }; if(digitalRead(OBRIR)==LOW){display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "TancarごとのEsperant ordre"); //「閉じる順番を待っています」display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); digitalWrite(MOTOR_OBRIR、HIGH); digitalWrite(BOMBETA、HIGH); delay(1000); while(digitalRead(OBRIR)==HIGH){}; // OPENコマンドが発行されるまで何もしませんgotoSEQUENCIA_TANCAMENT; }; //-時間制御と表示の更新--------------- currentMillis =millis(); TEMPS_DISPLAY =(currentMillis-previousMillis)/ 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Obrint porta"); display.setTextSize(2); display.setCursor(90、0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if((currentMillis-previousMillis)> =間隔){digitalWrite(MOTOR_OBRIR、HIGH); AVARIA =true; // PORTA_OBERTAに移動します; }; //-ライト点滅周波数制御------------------ if((currentMillis --TEMPS_LLUM)> =1000)//低速で点滅{LLUM =!LLUM; digitalWrite(BOMBETA、LLUM); TEMPS_LLUM =currentMillis; }; goto A; SEQUENCIA_TANCAMENT:interval =28000; //ドアを閉じる最大時間(超えた場合は何らかの失敗を示します)! previousMillis =millis(); digitalWrite(MOTOR_TANCAR、LOW); digitalWrite(BOMBETA、LOW); if(digitalRead(TANCAT)==LOW){delay(1000);}; B:if(digitalRead(TANCAT)==HIGH){digitalWrite(MOTOR_TANCAR、HIGH); digitalWrite(BOMBETA、HIGH); goto BUCLE_PRINCIPAL; }; if(digitalRead(OBRIR)==LOW){display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Esperant ordre per obrir"); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); digitalWrite(MOTOR_TANCAR、HIGH); digitalWrite(BOMBETA、HIGH); delay(1000); while(digitalRead(OBRIR)==HIGH){}; // OPENコマンドが発行されるまで何もしませんgotoSEQUENCIA_OBERTURA; }; if(digitalRead(FOTOCELULA)==HIGH){digitalWrite(MOTOR_TANCAR、HIGH); delay(1000);後藤SEQUENCIA_OBERTURA; }; //-時間制御と表示の更新--------------------- currentMillis =millis(); TEMPS_DISPLAY =(currentMillis-previousMillis)/ 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Tancant porta"); display.setTextSize(2); display.setCursor(90、0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if((currentMillis-previousMillis)> =間隔){digitalWrite(MOTOR_TANCAR、HIGH); AVARIA =true; goto BUCLE_PRINCIPAL; }; //-軽い点滅周波数制御------------------ if((currentMillis --TEMPS_LLUM)> =300)//高速で点滅{LLUM =!LLUM; digitalWrite(BOMBETA、LLUM); TEMPS_LLUM =currentMillis; }; goto B; PORTA_OBERTA:間隔=30000; //ドアを閉める前に待ってください! (車に入るのに30秒...)previousMillis =millis(); digitalWrite(MOTOR_OBRIR、HIGH); delay(500); C:if(digitalRead(OBRIR)==LOW){goto SEQUENCIA_TANCAMENT; }; //-時間制御と表示の更新--------------------- currentMillis =millis(); TEMPS_DISPLAY =(currentMillis-previousMillis)/ 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Porta Oberta completament"); display.setTextSize(2); display.setCursor(90、0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if((currentMillis-previousMillis)> =間隔){goto SEQUENCIA_TANCAMENT; }; //-待機状態での特殊な複合点滅頻度------------------ //(2秒の長い期間の間に100ミリ秒の短い点滅)if(LLUM ==false ){DURADA =100; } else DURADA =2000; if((currentMillis --TEMPS_LLUM)> =DURADA)// {LLUM =!LLUM; digitalWrite(BOMBETA、LLUM); TEMPS_LLUM =currentMillis; }; goto C;}
コード C / C ++
これは、コンパイルしてArduinoNanoにアップロードするC ++コードです/ ********************************* ************************************ porta correderamotoritzadaごとの自動化********* ************************************************** ********** /// Llibreries per fer servir el display#include#include #include #include // Definim自動化ポートごとのピンFOTOCELULA =2; int BOMBETA =5; //リレー1intTANCAT =7; int OBERT =3; int MOTOR_OBRIR =6; //リレー2intMOTOR_TANCAR =12; //リレー3intOBRIR =4; //ディスプレイあたりのピン数を定義#defineOLED_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_DC、OLED_RESET、OLED_CS);変数globalsunsignedlong TEMPS_PORTA_OBERTA =20000; unsigned long TEMPS_MAXIM_RECORREGUT =15000; // Despres ho redefinimint interval =1000; //間隔は待機時間ですintTEMPS_DISPLAY =1; // temps en segons per imprimir en pantallaint DURADA =300; // Cicle bombeta senyalitzaciounsigned long previousMillis =0; //最後のイベントが発生してからの時間を追跡しますdunsignedlong currentMillis =millis(); unsigned long TEMPS_LLUM =1000; // temps en milisegons de estat llum senyalitzacioboolean LLUM =false; // Llum encessa si ON i apagada si OFFboolean AVARIA =false; // Excedit el temps de recorregut sensedetectar finals de carreravoid setup(){//自動化ごとのInicialitzem elsピンportapinMode(FOTOCELULA、INPUT_PULLUP); pinMode(TANCAT、INPUT_PULLUP); pinMode(OBERT、INPUT_PULLUP); pinMode(OBRIR、INPUT_PULLUP); pinMode(BOMBETA、OUTPUT); pinMode(MOTOR_OBRIR、OUTPUT); pinMode(MOTOR_TANCAR、OUTPUT); // Apaguem motors i llum digitalWrite(MOTOR_OBRIR、HIGH); digitalWrite(MOTOR_TANCAR、HIGH); digitalWrite(BOMBETA、HIGH); // Inicialitzem el display Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.display(); // Mostra pantalla inicial de Adafruit delay(1000); display.clearDisplay(); display.display(); //テキストごとにディスプレイを準備しますdisplay.setTextSize(1); display.setTextColor(WHITE);} void loop(){BUCLE_PRINCIPAL:delay(2000); previousMillis =millis(); while(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( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if(AVARIA and(millis()-previousMillis <60000)){digitalWrite(BOMBETA、LOW); } else(digitalWrite(BOMBETA、HIGH)); }; // Esperem fins que premem OBRIR i anem refrescant pantalla per mostrar estat Sensors goto SEQUENCIA_OBERTURA; SEQUENCIA_OBERTURA:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA OBRINT !!!!!!!!! previousMillis =millis(); digitalWrite(MOTOR_OBRIR、LOW); digitalWrite(BOMBETA、LOW); delay(1000); A:if(digitalRead(OBERT)==HIGH){goto PORTA_OBERTA; }; if(digitalRead(OBRIR)==LOW){display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "TancarごとのEsperant ordre"); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); digitalWrite(MOTOR_OBRIR、HIGH); digitalWrite(BOMBETA、HIGH); delay(1000); while(digitalRead(OBRIR)==HIGH){}; // fem res fins que premem OBRIR gotoSEQUENCIA_TANCAMENT;はありません}; //-Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(currentMillis-previousMillis)/ 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Obrint porta"); display.setTextSize(2); display.setCursor(90、0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if((currentMillis-previousMillis)> =間隔){digitalWrite(MOTOR_OBRIR、HIGH); AVARIA =true; // PORTA_OBERTAに移動します; }; //-Control-de-cadencia-de-la-llum-intermitent ------------------ if((currentMillis --TEMPS_LLUM)> =1000)// Cadencia de la llum intermitent de senyalitzacio {LLUM =!LLUM; digitalWrite(BOMBETA、LLUM); TEMPS_LLUM =currentMillis; }; goto A; SEQUENCIA_TANCAMENT:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA TANCANT !!!!!!!!! previousMillis =millis(); digitalWrite(MOTOR_TANCAR、LOW); digitalWrite(BOMBETA、LOW); if(digitalRead(TANCAT)==LOW){delay(1000);}; B:if(digitalRead(TANCAT)==HIGH){digitalWrite(MOTOR_TANCAR、HIGH); digitalWrite(BOMBETA、HIGH); goto BUCLE_PRINCIPAL; }; if(digitalRead(OBRIR)==LOW){display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Esperant ordre per obrir"); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); digitalWrite(MOTOR_TANCAR、HIGH); digitalWrite(BOMBETA、HIGH); delay(1000); while(digitalRead(OBRIR)==HIGH){}; // fem res fins que premem OBRIR gotoSEQUENCIA_OBERTURA;はありません}; if(digitalRead(FOTOCELULA)==HIGH){digitalWrite(MOTOR_TANCAR、HIGH); delay(1000);後藤SEQUENCIA_OBERTURA; }; //-Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(currentMillis-previousMillis)/ 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Tancant porta"); display.setTextSize(2); display.setCursor(90、0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if((currentMillis-previousMillis)> =間隔){digitalWrite(MOTOR_TANCAR、HIGH); AVARIA =true; goto BUCLE_PRINCIPAL; }; //-Control-de-cadencia-de-la-llum-intermitent ------------------ if((currentMillis --TEMPS_LLUM)> =300)// Cadencia de la llum intermitent de senyalitzacio {LLUM =!LLUM; digitalWrite(BOMBETA、LLUM); TEMPS_LLUM =currentMillis; }; goto B; PORTA_OBERTA:間隔=30000; // TEMPS MAXIM ESPERANT AMB PORTA OBERTA !!!!!!!!! previousMillis =millis(); digitalWrite(MOTOR_OBRIR、HIGH); delay(500); C:if(digitalRead(OBRIR)==LOW){goto SEQUENCIA_TANCAMENT; }; //-Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(currentMillis-previousMillis)/ 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0、0); display.println( "Porta Oberta completament"); display.setTextSize(2); display.setCursor(90、0); display.println(TEMPS_DISPLAY); display.setTextSize(1); display.setCursor(0、20); display.print( "Fotocel.lula:"); display.println(digitalRead(FOTOCELULA)); display.print( "Sensor TANCAT:"); display.println(digitalRead(TANCAT)); display.print( "Sensor OBERT:"); display.println(digitalRead(OBERT)); display.print( "Ordre OBRIR:"); display.println(!digitalRead(OBRIR)); display.display(); if((currentMillis-previousMillis)> =間隔){goto SEQUENCIA_TANCAMENT; }; //-Control-de-cadencia-de-la-llum-intermitent ------------------ if(LLUM ==false){DURADA =100; } else DURADA =2000; if((currentMillis --TEMPS_LLUM)> =DURADA)// Cadencia de la llum intermitent de senyalitzacio {LLUM =!LLUM; digitalWrite(BOMBETA、LLUM); TEMPS_LLUM =currentMillis; }; goto C;}
回路図
メインコントロールユニットからセンサー、リレー、無線モジュールに配線を接続する方法。 回路図面のフリッツからのschematics_Kzy9lps55T.fzzScreenshoot 

製造プロセス