Hilfe bei einem Automatischen Tür-Schließer

Hallo, :wink:
Ich bin relativ unvertraut mit dem Arduino (am 27.5.2016 gestartet) und wollte fragen, ob mir jemand Tipps beim Schreiben des Programmes geben kann.

Ich habe hier bereits ein Programm geschrieben und mir überlegt, den Motor über Relais anzusteuern, da H-Brücken zu wenig Leistung Aufbringen. Es ist ein 24V Motor mit einem benötigten Start-Strom von 3A. :sweat_smile:

Laut Datenblatt sind H-Brücken bis einen kurzfristiger Maximalstrom von 1,2A zugelassen, bin ich da Richtig aufgeklärt? :grinning:

Das Programm:

int relais1 = 7;           //+ (Links/Rechtslauf des Motors) auf Anschluss 1 des Motors
int relais2 = 8;           //+ (Links/Rechtslauf des Motors) auf Anschluss 2 des Motors
int relais3 = 9;           //- (Links/Rechtslauf des Motors) auf Anschluss 2 des Motors
int relais4 = 10;          //- (Links/Rechtslauf des Motors) auf Anschluss 1 des Motors
int lichtsensor;           //Einlesen des Lichtsensorwertes
int bauf = 11;             //Aufknopfabfrage (Wird betätigt wenn das Schiebetor auf der Höchsten stelle ist)
int bzu = 12;              //Zuknopfabfrage (Wird betätigt, wenn das Schiebetor auf der Niedrigsten Stelle ist)
int pufferauf=0;           //Zwischenspeicher für Button Auf
int pufferzu=0;            //Zwischenspeicher für Button Zu


void setup()
{
 //Deklarieren der Variablen
 Serial.begin(9600);           
 pinMode(relais1, OUTPUT);
 pinMode(relais2, OUTPUT);
 pinMode(relais3, OUTPUT);
 pinMode(relais4, OUTPUT);
 pinMode(bauf, INPUT);
 pinMode(bzu, INPUT);
}

void loop()
{
 //Einlesen des Analogen Lichtsensor-Signales
 lichtsensor = analogRead(0);
 Serial.println(lichtsensor);
 
 //Wenn lichtsensorwert unter bestimmten werteberreich & der Button Auf gedrückt ist sowie Button Zu nicht gedrückt ist und der Zwischenspeicher von Button auf auf 0 ist, Rechtslauf 

 
 if (lichtsensor <= 720 && lichtsensor <690 && digitalRead(bauf)==HIGH && digitalRead(bzu)==LOW && pufferauf==0)
 {
   digitalWrite (relais1, HIGH);
   digitalWrite (relais2, LOW);
   digitalWrite (relais3, HIGH);
   digitalWrite (relais4, LOW);
   (pufferauf=1); 
delay(10); //10ms Warten um die Schaltzeit der Relais zu berücksichtigen (ca. 3ms)
   
 }
//Wenn lichtsensorwert unter bestimmten werteberreich & der Button Auf nicht gedrückt ist sowie Button Zu nicht gedrückt ist und der Zwischenspeicher von Button auf auf 1 ist, Rechtslauf 
 else if (lichtsensor <= 720 && lichtsensor <690 && digitalRead(bauf)==LOW && digitalRead(bzu)==LOW && pufferauf==1)
{
   digitalWrite (relais1, HIGH);
   digitalWrite (relais2, LOW);
   digitalWrite (relais3, HIGH);
   digitalWrite (relais4, LOW);
delay(10);
}
//Wenn lichtsensorwert über bestimmten werteberreich & der Button zu gedrückt ist sowie Button auf nicht gedrückt ist und der Zwischenspeicher von Button zu auf 0 ist, Linkslauf 
 else if (lichtsensor >= 720 && lichtsensor > 750 && digitalRead(bzu)==HIGH && digitalRead(bauf)==LOW && pufferzu==0)
 {
   digitalWrite (relais1, LOW);
   digitalWrite (relais2, HIGH);
   digitalWrite (relais3, LOW);
   digitalWrite (relais4, HIGH);
   (pufferzu=1);
   delay(10);

 }
 //Wenn lichtsensorwert über bestimmten werteberreich & der Button zu nicht gedrückt ist sowie Button auf nicht gedrückt ist und der Zwischenspeicher von Button Zu auf 1 ist, Linkslauf 
 else if (lichtsensor >= 720 && lichtsensor > 750 && digitalRead(bauf)==LOW && digitalRead(bzu)==LOW && pufferzu==1)
 {
   digitalWrite (relais1, LOW);
   digitalWrite (relais2, HIGH);
   digitalWrite (relais3, LOW);
   digitalWrite (relais4, HIGH);
   delay(10);

 }
 else 
 {
   digitalWrite (relais1, LOW);
   digitalWrite (relais2, LOW);
   digitalWrite (relais3, LOW);
   digitalWrite (relais4, LOW);
   (pufferzu=0);
   (pufferauf=0);
 }
}

Hoffe ich habe verständliche Infos hinzugefügt und Ihr könnt mir helfen.

Danke im Vorraus :smiley:

google

arduino forum german

Hallo,

ich habe dein Programm mir nicht komplett durchgesehen. Du solltest es in Code-Tags (Schaltfläche </>) setzen.

Es gibt sicher H-Bridges für mehr als 1,2A. Oft werden sie als Motor Driver bezeichnet. Nur als Beispiel: http://www.robotshop.com/en/10a-dc-motor-driver-arduino-shield.html

Grundsätzliches zu den Relais. Es gibt auch Mehrfachrelais. Für deine Richtungsumschaltung brauchst du 2xUm-Relais.
Mit einem Relais schaltest du die Stromzufuhr an. Das zweite Relais schaltet die Richtung. Siehe Grafik: http://www.windmolensite.be/sturing-motoren.html

Bei der Ansteuerung so, wie du es machst über 4 Relais und 4 Pins, besteht die extrem hohe Gefahr, dass du einen Schaltfehler einprogrammierst und du einen fetten Kurzschluss hast. Auch Wackelkontakte oder Kabelbruch, die dazu führen, dass ein Relais nicht richtig schaltet, können böse Folgen haben. Je nach dem wie viel Strom fließt und wie die Kabel verlegt sind, können die Folgen bis zum Brand gehen. Dagegen ist obige Schaltung sehr sicher. Das mindeste wäre zwei Relais so zu koppeln, dass sie von einem Pin angesteuert werden und so ein 2xUm-Relais simulieren. Das schützt zumindest vor Kurzschlüssen durch Programmierfehler.

if (lichtsensor <= 720 && lichtsensor <690 && digitalRead(bauf)==HIGH && digitalRead(bzu)==LOW && pufferauf==0)

wenn lichtsensor <690, dann ist lichtsensor automatisch <=720
außerdem solltest du zwei Statusvariablen bool bzu_state und bool bauf_state einbauen, dann brauchst du nur am Anfang das digitalRead 2 mal und kannst besser entprellen