Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Automatische schuifdeur voor de garage

Componenten en benodigdheden

Arduino Nano R3
× 1
Broodplank (algemeen)
Om de Arduino Nano en het Oled-scherm vast te houden
× 1
Adafruit Oled-display
Om de sensorstatus, tijdteller en acties weer te geven.
× 1
Relaismodule (algemeen)
4 relaismodule. Ik heb er maar drie gebruikt.
× 1
SparkFun Breadboard-voeding 5V/3,3V
Ik gebruikte een 5V miniatuur voeding van 220V
× 1
SparkFun Drukknopschakelaar 12 mm
Voor resetknop (wis storingsalarm)
× 1

Over dit project

Achtergrond

Nou, het verhaal begon op een dag toen ik thuis aankwam en ik me realiseerde dat de afstandsbediening van de schuifdeur niet werkte. "De batterijen!" Ik dacht, maar nee, dit was niet de reden. Ik heb een beetje onderzocht en wat een verrassing toen ik het deksel van de deurmotor verwijderde:een kleine hagedis was letterlijk verkoold in een kleine ruimte tussen de elektronische besturingskaart en de plastic steun (trouwens, ik ga geen afbeeldingen uploaden van dat afschuwelijke tafereel). Ik vermoed dat het kleine reptiel de 220V fastons heeft aangeraakt en kortsluiting heeft veroorzaakt. Het resultaat was zijn dood en het hele circuit werd verbrand.

Ik heb een aantal componenten van het bord verwijderd die ik kon bewaren voor gebruik in mijn projecten, maar je kunt op deze foto zien hoe het eindigde.

Op dat moment besloot ik dat dit misschien wel het perfecte excuus was om een ​​Arduino-project te maken en de besturingseenheid volledig opnieuw op te bouwen.

WAARSCHUWING

Voor dit project heb je te maken met componenten die direct op 220V (of 110V) zijn aangesloten. Houd er rekening mee dat dit gevaarlijk kan zijn als u niet zo handig bent met dit soort installaties. Wees alsjeblieft voorzichtig en ga voorzichtig te werk. Voer altijd een simulatie uit voordat u verbinding maakt met het eigenlijke motorcircuit.

Componenten en circuits

Het project is opgedeeld in enkele delen, maar wat ik hier presenteer is het Arduino-circuit dat de rotatie van de motor en het signaallicht regelt, en houdt rekening met de status van de eindschakelaarsensoren en een veiligheidsfotocel.

In het begin zou je kunnen denken dat het gemakkelijk te bouwen en te programmeren is, maar ik kan je verzekeren dat ik veel moeilijkheden heb moeten overwinnen die dit project zo spannend maakten.

Andere belangrijke componenten voor het hele project zijn:

  • Elektrische 220V-motor en fysieke geleiders en mechanismen:deze werden niet beïnvloed door de actie van de hagedis.
  • Afstandsbediening radio-ontvanger om het "Open"-commando te geven:ik heb een commerciële kant-en-klare eenheid gebruikt die de afstandsbedieningen en de ontvanger bevatte.
  • 220V-relais ter ondersteuning van de hoge stroom die door de motor wordt gebruikt.
  • Hoofdbesturingseenheid gemaakt met Arduino Nano en andere compatibele accessoires zoals OLED-display en relaismodule. Dit laat ik je zien in dit portaal.

Ik heb ook enkele verbeteringen en verschillende geautomatiseerde acties toegevoegd die niet waren opgenomen in de commerciële originele besturingseenheid.

Pinouts voor dit project

De volgende informatie geeft een overzicht van de pinnen van de componenten en hoe ze moeten worden aangesloten:

Zoals je kunt zien, heb ik voor dit project een OLED-display gebruikt dat rechtstreeks op het bord is bevestigd. Onder normale werkomstandigheden bevindt dit display zich in de beschermkap van het mechanisme en de elektronica. Zodat je het niet kunt zien. In feite is dit display bedoeld om alleen te worden gebruikt om de status van de componenten te controleren terwijl u instellingen aanpast en een fijnafstemming van de code uitvoert (bijvoorbeeld maximale tijdaanpassing).

De informatie die door dit scherm wordt geleverd, had ook naar de seriële poort kunnen worden gestuurd en gecontroleerd vanaf een laptop met de Arduino IDE-software, maar ik vind dat dit kleine scherm een ​​coole manier is om het apparaat te bedienen zonder dat er een laptop of extra apparaat.

De weergegeven informatie in de OLED is de volgende:

  • Fase van de code die wordt uitgevoerd (deur openen, deur sluiten, wachten op commando "Open", hoofdlus, ...)
  • Verstreken tijd voor hoofdacties (Openen, wachten voor weer sluiten en sluiten)
  • Fotocelstatus (actief wanneer iemand of iets zich in het sluitpad bevindt)
  • GESLOTEN status limietsensor (actief wanneer de deur volledig gesloten is)
  • status limietsensor GEOPEND (actief wanneer de deur volledig is geopend)
  • Opdrachtsignaal OPEN (actief wanneer op de afstandsbediening wordt gedrukt en de radiomodule een relais activeert)

Opmerking:het OLED-scherm dat ik gebruik is 0,96 inch en heeft een resolutie van 128 x 64 pixels. Dit display kan I2C of SPI gebruiken om te communiceren met het besturingsapparaat (in dit geval Arduino Nano) en ik gebruik SPI (Serial Peripheral Interface).

Stroomschema's

De volgende stroomdiagrammen vatten de softwarecode op een leesbare manier samen:

Code

  • Engelse softwarecodeversie
  • Code
Engels SoftwarecodeversieC/C++
Hier heb je de code met alle opmerkingen vertaald naar het Engels. Het bevat een korte lijst met woordenschat om de betekenis van variabelen en labels te begrijpen.
/**************************** **************************************** Automatisme voor gemotoriseerde schuifdeur**** ********************************************** ***************//* Opmerkingen zijn vertaald naar het Engels, maar om u te helpen de naam van de variabelen en labels te begrijpen, heeft u hier een snelle woordenschat "Catalaans-Engels" :Hoofdlus =Hoofdlus Sequencia Obertura =Openingsreeks Sequencia Tancament =Sluitingsreeks Obrir =Open; Obert =Geopend Tancar =Sluiten; Tancat =Gesloten Bombeta =Gloeilamp Llum =licht Porta =Poort / deur Avaria =Storing Temps =Tijd Recorregut =deurbeweging*/// Bibliotheken voor Oled-display#include #include #include #include // We definiëren de pinnen die moeten worden gebruikt door het besturingscircuitint FOTOCELULA =2;int BOMBETA =5; // Relais 1int TANCAT =7;int OBERT =3;int MOTOR_OBRIR =6; // Relais 2int MOTOR_TANCAR =12; //Relay 3int OBRIR =4;// We definiëren de pinnen die door het Oled-display moeten worden gebruikt#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_RES_ETDC , OLED_CS);// We definiëren globale variabelen unsigned long TEMPS_PORTA_OBERTA =20000; unsigned long TEMPS_MAXIM_RECORREGUT =15000; //Later zullen we deze waarde herdefiniëren.int interval =1000; // Interval is hoe lang we wachten TEMPS_DISPLAY =1; // Tijd in seconden om DURADA =300 weer te geven; // Cicle voor gloeilampunsigned lange vorigeMillis =0; // Volgt de tijd sinds de laatste gebeurtenis fireunsigned long currentMillis =millis();unsigned long TEMPS_LLUM =1000; // tijd in milliseconden voor gloeilampstatusboolean LLUM =false; // licht AAN of UITboolean AVARIA =false; // reistijd van de deur overschreden zonder detectie van beperkende switchvoid setup () { // Zet motor en licht uit digitalWrite (MOTOR_OBRIR, HIGH); digitalWrite (MOTOR_TANCAR, HOOG); digitalWrite (BOMBETA, HOOG); // We initialiseren de pinnen voor het automatisme pinMode (FOTOCELULA, INPUT_PULLUP); pinMode (TANCAT, INPUT_PULLUP); pinMode (OBERT, INPUT_PULLUP); pinMode (OBRIR, INPUT_PULLUP); pinMode (BOMBETA, UITGANG); pinMode (MOTOR_OBRIR, UITGANG); pinMode (MOTOR_TANCAR, UITGANG); // Display-initialisatie Serial.begin (9600); display.begin(SSD1306_SWITCHCAPVCC); weergave.weergave(); // Toon Adafruit initiële logo vertraging (1000); display.clearDisplay(); weergave.weergave(); // We bereiden de tekstgrootte voor de weergave voor (niet belangrijk omdat het later dinamisch opnieuw wordt gedefinieerd) display.setTextSize(1); display.setTextColor(WHITE);}void loop() {BUCLE_PRINCIPAL:delay(2000); vorigeMillis =millis(); while (digitalRead (OBRIR) ==HOOG) { display.clearDisplay (); display.setTextSize(1); display.setCursor(0, 0); display.println("OPDRACHTGEVER ..."); 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)); weergave.weergave(); if (AVARIA en (millis() - previousMillis <60000)) { digitalWrite(BOMBETA, LOW); } else (digitalWrite(BOMBETA, HIGH)); }; // We wachten tot het Open-commando wordt gegeven en ondertussen wordt het display vernieuwd en wordt de status van de sensoren weergegeven:ga naar SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // Maximale tijd om de deur te openen (indien overschreden, duidt dit op een storing) previousMillis =millis(); digitalWrite (MOTOR_OBRIR, LAAG); digitalWrite (BOMBETA, LAAG); vertraging (1000); A:als (digitalRead (OBERT) ==HOOG) {ga naar PORTA_OBERTA; }; if (digitalRead (OBRIR) ==LAAG) { display.clearDisplay (); display.setTextSize(1); display.setCursor(0, 0); display.println("Esperant orde per tancar"); // "Wachtvolgorde om te sluiten" 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)); weergave.weergave(); digitalWrite (MOTOR_OBRIR, HOOG); digitalWrite (BOMBETA, HOOG); vertraging (1000); while (digitalRead(OBRIR) ==HOOG) {}; //Doe niets totdat het OPEN-commando is gegeven ga naar SEQUENCIA_TANCAMENT; }; //--Tijdcontrole en weergave verfrissend --------------- currentMillis =millis(); TEMPS_DISPLAY =(huidigeMillis - vorigeMillis) / 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)); weergave.weergave(); if ((currentMillis - previousMillis)>=interval) { digitalWrite (MOTOR_OBRIR, HIGH); AVARIA =waar; // ga naar PORTA_OBERTA; }; //--licht Knipperende frequentieregeling ------------------ if ((currentMillis - TEMPS_LLUM)>=1000) // Knippert met lage snelheid { LLUM =!LLUM; digitalWrite (BOMBETA, LLUM); TEMPS_LLUM =huidigeMillis; }; ga naar A;SEQUENCIA_TANCAMENT:interval =28000; // Maximale tijd om de deur te sluiten (indien overschreden, duidt dit op een storing)! vorigeMillis =millis(); digitalWrite (MOTOR_TANCAR, LAAG); digitalWrite (BOMBETA, LAAG); if (digitalRead (TANCAT) ==LAAG) {vertraging (1000);}; B:if (digitalRead (TANCAT) ==HOOG) {digitalWrite (MOTOR_TANCAR, HOOG); digitalWrite (BOMBETA, HOOG); ga naar BUCLE_PRINCIPAL; }; if (digitalRead (OBRIR) ==LAAG) { display.clearDisplay (); display.setTextSize(1); display.setCursor(0, 0); display.println("Esperant orde per obirir"); 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)); weergave.weergave(); digitalWrite (MOTOR_TANCAR, HOOG); digitalWrite (BOMBETA, HOOG); vertraging (1000); while (digitalRead(OBRIR) ==HOOG) {}; //Doe niets totdat het OPEN-commando is gegeven ga naar SEQUENCIA_OBERTURA; }; if (digitalRead (FOTOCELULA) ==HOOG) {digitalWrite (MOTOR_TANCAR, HOOG); vertraging (1000); ga naar SEQUENCIA_OBERTURA; }; //--Tijdcontrole en weergave verfrissend --------------------- currentMillis =millis(); TEMPS_DISPLAY =(huidigeMillis - vorigeMillis) / 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)); weergave.weergave(); if ((currentMillis - previousMillis)>=interval) {digitalWrite(MOTOR_TANCAR, HIGH); AVARIA =waar; ga naar BUCLE_PRINCIPAL; }; //-licht Knipperende frequentieregeling ------------------ if ((currentMillis - TEMPS_LLUM)>=300) // Knippert met hoge snelheid { LLUM =!LLUM; digitalWrite (BOMBETA, LLUM); TEMPS_LLUM =huidigeMillis; }; ga naar B;PORTA_OBERTA:interval =30000; // Wachttijd voor het sluiten van de deur! (30 seconden om de auto in te gaan...) previousMillis =millis(); digitalWrite (MOTOR_OBRIR, HOOG); vertraging (500); C:if (digitalRead (OBRIR) ==LAAG) {ga naar SEQUENCIA_TANCAMENT; }; //--Tijdcontrole en weergave verfrissend --------------------- currentMillis =millis(); TEMPS_DISPLAY =(huidigeMillis - vorigeMillis) / 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)); weergave.weergave(); if ((currentMillis - previousMillis)>=interval) { ga naar SEQUENCIA_TANCAMENT; }; //--Speciale samengestelde knipperfrequentie in wachttoestand ------------------ // (Korte flitsen van 100 milliseconden tussen lange perioden van 2 seconden) if (LLUM ==false ) { DURADA =100; } anders DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // { LLUM =!LLUM; digitalWrite (BOMBETA, LLUM); TEMPS_LLUM =huidigeMillis; }; ga naar C;}
CodeC/C++
Dit is de C++-code die moet worden gecompileerd en geüpload naar de Arduino Nano
/********************************* *********************************** Automatisme per porta corredera motoritzada********* ********************************************** **********/// Llibreries per fer servir el display#include #include #include #include // Definim pinnen per automatisme portret 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;// Definieer pinnen per 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_CRESET); variabelen globalsunsigned long TEMPS_PORTA_OBERTA =20000;unsigned long TEMPS_MAXIM_RECORREGUT =15000; //Despres ho herdefinieert interval =1000; // Interval is hoe lang we wachten TEMPS_DISPLAY =1; // temps en segons per imprimir en pantallaint DURADA =300; // Cicle bombeta senyalitzaciounsigned lange vorigeMillis =0; // Volgt de tijd sinds de laatste gebeurtenis fireunsigned 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 per automatisme porta pinMode (FOTOCELULA, INPUT_PULLUP); pinMode (TANCAT, INPUT_PULLUP); pinMode (OBERT, INPUT_PULLUP); pinMode (OBRIR, INPUT_PULLUP); pinMode (BOMBETA, UITGANG); pinMode (MOTOR_OBRIR, UITGANG); pinMode (MOTOR_TANCAR, UITGANG); // Apaguem-motoren i llum digitalWrite (MOTOR_OBRIR, HIGH); digitalWrite (MOTOR_TANCAR, HOOG); digitalWrite (BOMBETA, HOOG); // Inicialitzem el display Serial.begin (9600); display.begin(SSD1306_SWITCHCAPVCC); weergave.weergave(); // Mostra pantalla inicial de Adafruit vertraging (1000); display.clearDisplay(); weergave.weergave(); // preparem el display per texte display.setTextSize(1); display.setTextColor(WHITE);}void loop() {BUCLE_PRINCIPAL:delay(2000); vorigeMillis =millis(); while (digitalRead (OBRIR) ==HOOG) { display.clearDisplay (); display.setTextSize(1); display.setCursor(0, 0); display.println("OPDRACHTGEVER ..."); 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)); weergave.weergave(); if (AVARIA en (millis() - previousMillis <60000)) { digitalWrite(BOMBETA, LOW); } else (digitalWrite(BOMBETA, HIGH)); }; //Esperem vinnen que premem OBRIR ik anem refrescant pantalla per meestrar estat sensoren goto SEQUENCIA_OBERTURA;SEQUENCIA_OBERTURA:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA OBRINT !!!!!!!!! vorigeMillis =millis(); digitalWrite (MOTOR_OBRIR, LAAG); digitalWrite (BOMBETA, LAAG); vertraging (1000); A:als (digitalRead (OBERT) ==HOOG) {ga naar PORTA_OBERTA; }; if (digitalRead (OBRIR) ==LAAG) { display.clearDisplay (); display.setTextSize(1); display.setCursor(0, 0); display.println("Esperant orde 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)); weergave.weergave(); digitalWrite (MOTOR_OBRIR, HOOG); digitalWrite (BOMBETA, HOOG); vertraging (1000); while (digitalRead(OBRIR) ==HOOG) {}; //Geen fem res fins que premem OBRIR ga naar SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(huidigeMillis - vorigeMillis) / 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)); weergave.weergave(); if ((currentMillis - previousMillis)>=interval) { digitalWrite (MOTOR_OBRIR, HIGH); AVARIA =waar; // ga naar PORTA_OBERTA; }; //--Control-de-cadencia-de-la-llum-intermitterend------------------ if ((currentMillis - TEMPS_LLUM)>=1000) // Cadencia de la llum intermitterend de senyalitzacio { LLUM =!LLUM; digitalWrite (BOMBETA, LLUM); TEMPS_LLUM =huidigeMillis; }; ga naar A;SEQUENCIA_TANCAMENT:interval =28000; // TEMPS MAXIM DE RECORREGUT PORTA TANCANT !!!!!!!!! vorigeMillis =millis(); digitalWrite (MOTOR_TANCAR, LAAG); digitalWrite (BOMBETA, LAAG); if (digitalRead (TANCAT) ==LAAG) {vertraging (1000);}; B:if (digitalRead (TANCAT) ==HOOG) {digitalWrite (MOTOR_TANCAR, HOOG); digitalWrite (BOMBETA, HOOG); ga naar BUCLE_PRINCIPAL; }; if (digitalRead (OBRIR) ==LAAG) { display.clearDisplay (); display.setTextSize(1); display.setCursor(0, 0); display.println("Esperant orde per obirir"); 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)); weergave.weergave(); digitalWrite (MOTOR_TANCAR, HOOG); digitalWrite (BOMBETA, HOOG); vertraging (1000); while (digitalRead(OBRIR) ==HOOG) {}; //Geen fem res vinnen que premem OBRIR ga naar SEQUENCIA_OBERTURA; }; if (digitalRead (FOTOCELULA) ==HOOG) {digitalWrite (MOTOR_TANCAR, HOOG); vertraging (1000); ga naar SEQUENCIA_OBERTURA; }; //--Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(huidigeMillis - vorigeMillis) / 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)); weergave.weergave(); if ((currentMillis - previousMillis)>=interval) {digitalWrite(MOTOR_TANCAR, HIGH); AVARIA =waar; ga naar BUCLE_PRINCIPAL; }; //--Control-de-cadencia-de-la-llum-intermitterend------------------ if ((currentMillis - TEMPS_LLUM)>=300) // Cadencia de la llum intermitterend de senyalitzacio { LLUM =!LLUM; digitalWrite (BOMBETA, LLUM); TEMPS_LLUM =huidigeMillis; }; ga naar B;PORTA_OBERTA:interval =30000; // TEMPS MAXIM ESPERANT AMB PORTA OBERTA !!!!!!!!! vorigeMillis =millis(); digitalWrite (MOTOR_OBRIR, HOOG); vertraging (500); C:if (digitalRead (OBRIR) ==LAAG) {ga naar SEQUENCIA_TANCAMENT; }; //--Control-de-temps-i-impressió-en-pantalla--------------------- currentMillis =millis(); TEMPS_DISPLAY =(huidigeMillis - vorigeMillis) / 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)); weergave.weergave(); if ((currentMillis - previousMillis)>=interval) { ga naar SEQUENCIA_TANCAMENT; }; //--Control-de-cadencia-de-la-llum-intermitterend------------------ if (LLUM ==false) { DURADA =100; } anders DURADA =2000; if ((currentMillis - TEMPS_LLUM)>=DURADA) // Cadencia de la llum intermitterende de senyalitzacio {LLUM =!LLUM; digitalWrite (BOMBETA, LLUM); TEMPS_LLUM =huidigeMillis; }; ga naar C;}

Schema's

Hoe de bedrading op sensoren, relais en radiomodule van de hoofdbesturingseenheid aan te sluiten. schemas_Kzy9lps55T.fzzScreenshoot van fritzing schema's Dit is de lijst met de gebruikte Arduino-pinnen en hoe u ze op de rest van de componenten kunt aansluiten. pinouts_x7JmwoGJTY.txtDeze hardware-add-on is een antwoord op de vraag van irshad2318 (zie de berichten voor dit project)

Productieproces

  1. De Pentode
  2. DHT Tiny Breakout voor de Raspberry Pi
  3. De beste accessoires voor je Raspberry Pi
  4. SIGHT:For the Blind
  5. Onderwaterdrone:het verhaal van de waanzin
  6. Sliding Headstock Automatic voor Zwitsers en productiedraaien
  7. Automatische groei:een mooie toekomst voor kmo's die automatisering omarmen
  8. Bedankt voor de herinneringen!
  9. De beste schokdempers voor voertuigen kiezen
  10. De handmatige lintzaag voor elke gelegenheid
  11. Wat is de Automatic Power Press?