Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Automatische Schiebetür für die Garage

Komponenten und Verbrauchsmaterialien

Arduino Nano R3
× 1
Breadboard (generisch)
Um das Arduino Nano und das Oled Display zu halten
× 1
Adafruit Oled-Display
Um Sensorstatus, Zeitzähler und Aktionen anzuzeigen.
× 1
Relaismodul (generisch)
4 Relaismodul. Ich habe nur drei davon verwendet.
× 1
SparkFun Breadboard Netzteil 5V/3,3V
Ich habe ein 5V Miniaturnetzteil von 220V verwendet
× 1
SparkFun Drucktastenschalter 12 mm
Für Reset-Taste (Fehleralarm löschen)
× 1

Über dieses Projekt

Hintergrund

Nun, die Geschichte begann eines Tages, als ich zu Hause ankam und merkte, dass die Fernbedienung der Schiebetür nicht funktionierte. "Die Batterien!" Dachte ich, aber nein, das war nicht der Grund. Ich recherchierte ein wenig und was für eine Überraschung, als ich die Abdeckung des Türmotors entfernte:Eine kleine Eidechse war buchstäblich auf einem winzigen Raum zwischen der elektronischen Steuerplatine und dem Kunststoffträger verkohlt (ich werde übrigens keine Bilder hochladen von .) diese schreckliche Szene). Ich vermute, dass das kleine Reptil die 220V Fastons berührt und einen Kurzschluss erzeugt hat. Das Ergebnis war sein Tod und der gesamte Stromkreis brannte aus.

Ich habe einige Komponenten von der Platine entfernt, die ich für die Verwendung in meinen Projekten speichern konnte, aber Sie können auf diesem Foto sehen, wie es geendet hat.

In diesem Moment entschied ich, dass dies die perfekte Ausrede sein könnte, um ein Arduino-Projekt zu machen und die Steuereinheit komplett neu aufzubauen.

ACHTUNG

Für dieses Projekt müssen Sie mit Komponenten umgehen, die direkt an 220 V (oder 110 V) angeschlossen sind. Bedenken Sie, dass dies gefährlich sein kann, wenn Sie mit dieser Art von Installationen nicht sehr vertraut sind. Bitte seien Sie vorsichtig und gehen Sie mit Bedacht vor. Führen Sie immer eine Simulation durch, bevor Sie eine Verbindung zum eigentlichen Motorschaltkreis herstellen.

Komponenten &Schaltung

Das Projekt ist in einige Teile unterteilt, aber was ich hier vorstelle, ist die Arduino-Schaltung, die die Drehung des Motors und das Signallicht steuert und den Status der Endschaltersensoren und einer Sicherheitslichtschranke berücksichtigt.

Anfangs könnte man meinen, dass es einfach zu bauen und zu programmieren ist, aber ich kann Ihnen versichern, dass ich viele Schwierigkeiten überwinden musste, die dieses Projekt so spannend gemacht haben.

Andere wichtige Komponenten für das gesamte Projekt sind:

  • Elektrischer 220-V-Motor und physische Führungen und Mechanismen:Diese wurden von der Aktion der Eidechse nicht beeinflusst.
  • Fernbedienung zum Ausgeben des "Öffnen"-Befehls:Ich habe ein handelsübliches Fertiggerät verwendet, das die Fernbedienungen und den Empfänger enthält.
  • 220-V-Relais zur Unterstützung des vom Motor verwendeten hohen Stroms.
  • Hauptsteuereinheit mit Arduino Nano und anderem kompatiblen Zubehör wie OLED-Display und Relaismodul. Das zeige ich dir in diesem Portal.

Ich habe auch einige Verbesserungen und einige automatisierte Aktionen hinzugefügt, die nicht in der kommerziellen Originalsteuereinheit enthalten waren.

Pinbelegungen für dieses Projekt

Die folgenden Informationen fassen die Pins der Komponenten und deren Verbindung zusammen:

Wie Sie sehen, habe ich für dieses Projekt ein OLED-Display verwendet, das direkt an der Platine befestigt ist. Unter normalen Arbeitsbedingungen befindet sich diese Anzeige innerhalb der Schutzabdeckung des Mechanismus und der Elektronik. Sie können es also nicht sehen. Tatsächlich ist diese Anzeige nur dazu gedacht, den Status der Komponenten zu überprüfen, während Sie Einstellungen vornehmen und eine Feinabstimmung des Codes vornehmen (z. B. Einstellung der maximalen Zeit).

Die von diesem Display bereitgestellten Informationen könnten auch an den seriellen Port gesendet und von einem Laptop mit der Arduino IDE-Software überprüft worden sein, aber ich finde, dass dieses kleine Display eine coole Möglichkeit ist, das Gerät zu bedienen, ohne einen Laptop oder zusätzliches verwenden zu müssen Gerät.

Die angezeigten Informationen im OLED sind die folgenden:

  • Phase des ausgeführten Codes (Tür öffnen, Tür schließen, Warten auf Befehl "Öffnen", Hauptschleife, ...)
  • Verstrichene Zeit für Hauptaktionen (Öffnen, Warten vor erneutem Schließen und Schließen)
  • Fotozellenstatus (aktiv, wenn sich jemand oder etwas im Schließpfad befindet)
  • Status des Grenzsensors GESCHLOSSEN (aktiv, wenn die Tür vollständig geschlossen ist)
  • Geöffneter Grenzsensorstatus (aktiv wenn die Tür vollständig geöffnet ist)
  • Befehlssignal AUF (aktiv, wenn die Fernbedienung gedrückt wird und das Funkmodul ein Relais aktiviert)

Hinweis:Das von mir verwendete OLED-Display ist 0,96 Zoll groß und hat eine Auflösung von 128 x 64 Pixel. Dieses Display kann I2C oder SPI verwenden, um mit dem Steuergerät (in diesem Fall Arduino Nano) zu kommunizieren, und ich verwende SPI (Serial Peripheral Interface).

Flussdiagramme

Die folgenden Flussdiagramme fassen den Softwarecode lesbar zusammen:

Code

  • Englische Version des Softwarecodes
  • Code
Englische SoftwarecodeversionC/C++
Hier haben Sie den Code mit allen Kommentaren ins Englische übersetzt. Es enthält eine kurze Liste mit Vokabular, um die Bedeutung von Variablen und Labels zu verstehen.
/**************************** **************************************** Automatismus für motorisierte Schiebetür**** ************************************************* **************//* Kommentare sind ins Englische übersetzt, aber damit Sie die Namen der Variablen und Labels besser verstehen, haben Sie hier ein schnelles Vokabular "Katalanisch-Englisch" :Bucle Principal =Hauptschleife Sequencia Obertura =Eröffnungssequenz Sequencia Tancament =Schlusssequenz Obrir =Open; Obert =Geöffnet Tancar =Schließen; Tancat =Geschlossen Bombeta =Glühbirne Llum =Licht Porta =Tor / Tür Avaria =Ausfalltemperaturen =Zeit Recorregut =Türfahrt*/// Bibliotheken für Oled-Display#include #include #include #include // Wir definieren die Pins, die von der Steuerschaltung verwendet werden sollenint FOTOCELULA =2;int BOMBETA =5; //Relais 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; // Relais 2int MOTOR_TANCAR =12; //Relais 3int OBRIR =4;// Wir definieren die Pins, die vom Oled-Display verwendet werden sollen#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 .DC, OLED_RESET , OLED_CS); // Wir definieren globale Variablenunsigned long TEMPS_PORTA_OBERTA =20000;unsigned long TEMPS_MAXIM_RECORREGUT =15000; // Später werden wir diesen Wert neu definierenint interval =1000; // Intervall ist, wie lange wir wartenint TEMPS_DISPLAY =1; // Zeit in Sekunden bis zur Anzeigeint DURADA =300; // Cicle für Glühbirneunsigned long previousMillis =0; // Verfolgt die Zeit seit dem letzten ausgelösten Ereignisdunsigned long currentMillis =millis();unsigned long TEMPS_LLUM =1000; // Zeit in Millisekunden für Glühbirne statusboolean LLUM =false; // Licht EIN oder AUSboolean AVARIA =false; // Türfahrzeit überschritten, ohne das begrenzende Switchvoid-Setup zu erkennen () { // Motor und Licht ausschalten DigitalWrite (MOTOR_OBRIR, HIGH); digitalWrite (MOTOR_TANCAR, HOCH); digitalWrite (BOMBETA, HOCH); // Wir initialisieren die Pins für den Automatismus pinMode(FOTOCELULA, INPUT_PULLUP); pinMode (TANCAT, INPUT_PULLUP); pinMode (OBERT, INPUT_PULLUP); pinMode (OBRIR, INPUT_PULLUP); pinMode (BOMBETA, AUSGANG); pinMode (MOTOR_OBRIR, AUSGANG); pinMode (MOTOR_TANCAR, AUSGANG); // Initialisierung anzeigen Serial.begin (9600); display.begin(SSD1306_SWITCHCAPVCC); display.display(); // Adafruit anfängliche Logoverzögerung anzeigen (1000); display.clearDisplay(); display.display(); // Wir bereiten die Textgröße für die Anzeige vor (nicht wichtig, da sie später dynamisch neu definiert wird) display.setTextSize(1); display.setTextColor(WHITE);}void loop() {BUCLE_PRINCIPAL:delay(2000); vorherigeMillis =millis(); Während (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 und (millis() - previousMillis <60000)) { digitalWrite (BOMBETA, LOW); } sonst (digitalWrite (BOMBETA, HIGH)); }; // Wir warten bis der Open-Befehl ausgegeben wird und währenddessen wird die Anzeige aktualisiert und zeigt den Status der Sensoren an goto SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // Maximale Zeit zum Öffnen der Tür (wenn sie überschritten wird, deutet dies auf einen Fehler hin) previousMillis =millis(); digitalWrite (MOTOR_OBRIR, NIEDRIG); digitalWrite (BOMBETA, NIEDRIG); Verzögerung (1000); A:if (digitalRead (OBERT) ==HIGH) { goto PORTA_OBERTA; }; if (digitalRead (OBRIR) ==LOW) {display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Esperant ordre per tancar"); // "Warteauftrag zum Schließen" 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, HOCH); digitalWrite (BOMBETA, HOCH); Verzögerung (1000); while (digitalRead (OBRIR) ==HIGH) {}; //Nichts tun, bis der Befehl OPEN ausgegeben wird goto SEQUENCIA_TANCAMENT; }; //--Zeitsteuerung und Anzeigeaktualisierung-------------- currentMillis =millis(); TEMPS_DISPLAY =(aktuellesMillis - vorherigesMillis) / 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)>=Intervall) { digitalWrite (MOTOR_OBRIR, HIGH); AVARIA =wahr; // gehe zu PORTA_OBERTA; }; //--Licht Blinkfrequenzsteuerung ------------------ if ((currentMillis - TEMPS_LLUM)>=1000) //Blinken mit niedriger Geschwindigkeit { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =aktuelleMillis; }; goto A;SEQUENCIA_TANCAMENT:Intervall =28000; // Maximale Zeit zum Schließen der Tür (wenn sie überschritten wird, weist dies auf einen Fehler hin)! vorherigeMillis =millis(); digitalWrite (MOTOR_TANCAR, NIEDRIG); digitalWrite (BOMBETA, NIEDRIG); if (digitalRead(TANCAT) ==LOW) {delay(1000);};B:if (digitalRead(TANCAT) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); digitalWrite (BOMBETA, HOCH); gehe zu 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, HOCH); digitalWrite (BOMBETA, HOCH); Verzögerung (1000); while (digitalRead (OBRIR) ==HIGH) {}; //Nichts tun, bis der Befehl OPEN ausgegeben wird goto SEQUENCIA_OBERTURA; }; if (digitalRead (FOTOCELULA) ==HIGH) { digitalWrite (MOTOR_TANCAR, HIGH); Verzögerung (1000); gehe zu SEQUENCIA_OBERTURA; }; //--Zeitsteuerung und Anzeigeaktualisierung--------------------- currentMillis =millis(); TEMPS_DISPLAY =(aktuellesMillis - vorherigesMillis) / 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)>=Intervall) { digitalWrite (MOTOR_TANCAR, HIGH); AVARIA =wahr; gehe zu BUCLE_PRINCIPAL; }; //--Licht Blinkfrequenzsteuerung ------------------ if ((currentMillis - TEMPS_LLUM)>=300) // Blinkt mit hoher Geschwindigkeit { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =aktuelleMillis; }; goto B;PORTA_OBERTA:Intervall =30000; // Wartezeit vor dem Schließen der Tür! (30 Sekunden zum Einsteigen ins Auto...) previousMillis =millis(); digitalWrite (MOTOR_OBRIR, HOCH); Verzögerung (500); C:if (digitalRead (OBRIR) ==LOW) { goto SEQUENCIA_TANCAMENT; }; //--Zeitsteuerung und Anzeigeaktualisierung--------------------- currentMillis =millis(); TEMPS_DISPLAY =(aktuellesMillis - vorherigesMillis) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Porta Oberta-Komplement"); 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)>=Intervall) { goto SEQUENCIA_TANCAMENT; }; //--Spezielle zusammengesetzte Blinkfrequenz im Wartezustand ------------------ // (Kurzes Blinken von 100 Millisekunden zwischen langen Zeiträumen von 2 Sekunden) if (LLUM ==false ) {DURADA =100; } sonst DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =aktuelleMillis; }; goto C;}
CodeC/C++
Dies ist der C++-Code zum Kompilieren und Hochladen auf den Arduino Nano
/************************************ ********************************* Automatisme per porta corredera motoritzada********* ************************************************* **********/// Llibreries per fer servir el display#include #include #include #include // Definim Pins pro automatisme porttaint FOTOCELULA =2;int BOMBETA =5; //Relais 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; // Relais 2int MOTOR_TANCAR =12; //Relais 3int OBRIR =4; // Definim-Pins pro Display#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_DC, OLED_RESET, OLED_imCS .);// OLED_imCS .); Variablen globalsunsigned long TEMPS_PORTA_OBERTA =20000;unsigned long TEMPS_MAXIM_RECORREGUT =15000; //Despres ho Redefinimint-Intervall =1000; // Intervall ist, wie lange wir wartenint TEMPS_DISPLAY =1; // temps en segons per imprimir en pantallaint DURADA =300; // Cicle bombeta senyalitzaciounsigned long previousMillis =0; // Verfolgt die Zeit seit dem letzten ausgelösten Ereignisdunsigned long 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 Sense Detectar finals de carreravoid setup () {// Inicialitzem els Pins per automatisme porta pinMode (FOTOCELULA, INPUT_PULLUP); pinMode (TANCAT, INPUT_PULLUP); pinMode (OBERT, INPUT_PULLUP); pinMode (OBRIR, INPUT_PULLUP); pinMode (BOMBETA, AUSGANG); pinMode (MOTOR_OBRIR, AUSGANG); pinMode (MOTOR_TANCAR, AUSGANG); // Apaguem-Motoren i llum digitalWrite (MOTOR_OBRIR, HIGH); digitalWrite (MOTOR_TANCAR, HOCH); digitalWrite (BOMBETA, HOCH); // Inicialitzem el Anzeige Serial.begin (9600); display.begin(SSD1306_SWITCHCAPVCC); display.display(); // Mostra pantalla inicial de Adafruit Verzögerung (1000); display.clearDisplay(); display.display(); // Anzeige per Text vorbereiten display.setTextSize(1); display.setTextColor(WHITE);}void loop() {BUCLE_PRINCIPAL:delay(2000); vorherigeMillis =millis(); Während (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 und (millis() - previousMillis <60000)) { digitalWrite (BOMBETA, LOW); } sonst (digitalWrite (BOMBETA, HIGH)); }; // Esperem Flossen que premem OBRIR und anem refrescant pantalla per Mostrar Estat Sensoren goto SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:Intervall =28000; // TEMPS MAXIM DE RECORREGUT PORTA OBRINT !!!!!!!!! vorherigeMillis =millis(); digitalWrite (MOTOR_OBRIR, NIEDRIG); digitalWrite (BOMBETA, NIEDRIG); Verzögerung (1000); A:if (digitalRead (OBERT) ==HIGH) { goto PORTA_OBERTA; }; if (digitalRead (OBRIR) ==LOW) {display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Esperant ordre per tancar"); 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, HOCH); digitalWrite (BOMBETA, HOCH); Verzögerung (1000); while (digitalRead (OBRIR) ==HIGH) {}; //Keine fem res fins que premem OBRIR goto SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla------------------------ currentMillis =millis(); TEMPS_DISPLAY =(aktuellesMillis - vorherigesMillis) / 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)>=Intervall) { digitalWrite (MOTOR_OBRIR, HIGH); AVARIA =wahr; // gehe zu PORTA_OBERTA; }; //--Control-de-cadencia-de-la-llum-intermitent-------------------- if ((currentMillis - TEMPS_LLUM)>=1000) // Cadencia de la llum intermittierend de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =aktuelleMillis; }; goto A;SEQUENCIA_TANCAMENT:Intervall =28000; // TEMPS MAXIM DE RECORREGUT PORTA TANCANT !!!!!!!!! vorherigeMillis =millis(); digitalWrite (MOTOR_TANCAR, NIEDRIG); digitalWrite (BOMBETA, NIEDRIG); if (digitalRead(TANCAT) ==LOW) {delay(1000);};B:if (digitalRead(TANCAT) ==HIGH) { digitalWrite(MOTOR_TANCAR, HIGH); digitalWrite (BOMBETA, HOCH); gehe zu 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, HOCH); digitalWrite (BOMBETA, HOCH); Verzögerung (1000); while (digitalRead (OBRIR) ==HIGH) {}; //Keine fem res fins que premem OBRIR goto SEQUENCIA_OBERTURA; }; if (digitalRead (FOTOCELULA) ==HIGH) { digitalWrite (MOTOR_TANCAR, HIGH); Verzögerung (1000); gehe zu SEQUENCIA_OBERTURA; }; //--Control-de-temps-i-impressió-en-pantalla------------------------ currentMillis =millis(); TEMPS_DISPLAY =(aktuellesMillis - vorherigesMillis) / 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)>=Intervall) { digitalWrite (MOTOR_TANCAR, HIGH); AVARIA =wahr; gehe zu BUCLE_PRINCIPAL; }; //--Control-de-cadencia-de-la-llum-intermitent-------------------- if ((currentMillis - TEMPS_LLUM)>=300) // Cadencia de la llum intermittierend de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =aktuelleMillis; }; goto B;PORTA_OBERTA:Intervall =30000; // TEMPS MAXIM ESPERANT AMB PORTA OBERTA !!!!!!!!! vorherigeMillis =millis(); digitalWrite (MOTOR_OBRIR, HOCH); Verzögerung (500); C:if (digitalRead (OBRIR) ==LOW) { goto SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla------------------------ currentMillis =millis(); TEMPS_DISPLAY =(aktuellesMillis - vorherigesMillis) / 1000; display.clearDisplay(); display.setTextSize(1); display.setCursor(0, 0); display.println("Porta Oberta-Komplement"); 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)>=Intervall) { goto SEQUENCIA_TANCAMENT; }; //--Control-de-cadencia-de-la-llum-intermitent-------------------- if (LLUM ==false) { DURADA =100; } sonst DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // Cadencia de la llum intermitting de senyalitzacio { LLUM =!LLUM; digitalWrite(BOMBETA, LLUM); TEMPS_LLUM =aktuelleMillis; }; goto C;}

Schaltpläne

So schließen Sie die Verkabelung an Sensoren, Relais und Funkmodul von der Hauptsteuereinheit an. schematisches_Kzy9lps55T.fzzScreenshoot von Fritzing-Schaltplänen Dies ist die Liste der verwendeten Arduino-Pins und wie man sie mit den restlichen Komponenten verbindet. pinouts_x7JmwoGJTY.txtDieses Hardware-Addon ist eine Antwort auf die Frage von irshad2318 (siehe die Beiträge zu diesem Projekt)

Herstellungsprozess

  1. DHT Tiny Breakout für den Raspberry Pi
  2. Das beste Zubehör für Ihren Raspberry Pi
  3. SICHT:Für Blinde
  4. Unterwasserdrohne:Die Geschichte des Wahnsinns
  5. Automatischer Langdreher für Längs- und Produktionsdrehen
  6. Automatisches Wachstum:eine strahlende Zukunft für KMUs, die sich der Automatisierung verschrieben haben
  7. Danke für die Erinnerungen!
  8. Auswahl der besten Stoßdämpfer für Fahrzeuge
  9. Die manuelle Bandsäge für alle Fälle
  10. Was ist die automatische Kraftpresse?