Guten Morgen,
ich habe ein kleines Problem mit der Umsetzung einer Rolltor- / Kabinensteuerung. Meine kleine Recherche hat des Rätsels Lösung auch nicht gefunden, bzw. sind mir bisher keine zielführenden Suchbegriffe eingefallen.
Eine Kabine fährt bei Betätigung eines Tasters (Seiltaster oder ExternTaster) zwischen zwei Endschaltern auf und ab. Die Endschalter stoppen den Motor und ändern die Drehrichtung.
Ich habe ein Problem bei der Umsetzung der Lichtschranke. Wenn diese beim abwärts fahren unterbrochen wird, soll der Motor Stoppen, kurz warten, Drehrichtung nach oben schalten und Motor starten.
Wenn die Kabine in den Endlagen ist, soll nichts passieren.
Mein Problem ist, wenn die Lichtschranke unterbrochen bleibt, bleibt die Kabine ja dauerhaft stehen.
Wie bekomme ich es umgesetzt, dass nach oben gefahren wird, wenn das Lichtschrankensignal "high" bleibt?
Reicht dafür eine Abfrage der Flankenänderung (Low-High) der Lichtschranke im "else-Bereich"?
Hier mein bisheriger Code:
const int seilSch = 12; // Seilzugschalter
const int endSchO = 11; // Endschalter Oben
const int endSchU = 10; // Endschalter Unten
const int extSch = 9; // Extern Hoch
const int lichtSchr = 8; // Lichtschranke
int drehrichtungMot = 6;
int powerMot = 5; // Spannung Motor
int fehlerUnterbr = 4; // Unterbrechung bei Zeitüberschreitung
int status_seilSch = 0;
int status_endSchO = 0;
int status_endSchU = 0;
int status_extSch = 0;
int status_lichtSchr = 0;
void setup() {
pinMode (seilSch, INPUT);
pinMode (endSchO, INPUT);
pinMode (endSchU, INPUT);
pinMode (extSch, INPUT);
pinMode (lichtSchr, INPUT);
pinMode (drehrichtungMot, OUTPUT); //Relais K5
pinMode (powerMot, OUTPUT); // Relais K4
pinMode (fehlerUnterbr, OUTPUT); //Relais K6 und K7 - unbenutzt
digitalWrite (powerMot, HIGH);
}
void loop() {
status_seilSch = digitalRead (seilSch);
status_endSchO = digitalRead (endSchO);
status_endSchU = digitalRead (endSchU);
status_extSch = digitalRead (extSch);
status_lichtSchr = digitalRead (lichtSchr);
// Endschalter oben: Motor stopp, Drehrichtung nach unten schalten
if (status_endSchO == HIGH){
digitalWrite (powerMot, HIGH);
//delay(50);
digitalWrite (drehrichtungMot, HIGH);
}
// Endsachalter unten: Motor stopp, Drehrichtung nach oben schalten
if (status_endSchU == HIGH){
digitalWrite (powerMot, HIGH);
//delay(50);
digitalWrite (drehrichtungMot, LOW);
}
//wenn niemand in einer Lichtschranke steht
if (status_lichtSchr == LOW){
//wenn Kabine oben und Seilschalter wird betätigt, Motor dreht
if (status_seilSch == HIGH && status_endSchO == HIGH && status_endSchU == LOW){
digitalWrite (powerMot, LOW);
delay (1000); // um aus Endschalter zu fahren
}
// wenn Kabine unten und Seilschalter wird betätigt, Motor dreht
if (status_seilSch == HIGH && status_endSchO == LOW && status_endSchU == HIGH){
digitalWrite (powerMot, LOW);
delay (1000); // um aus Endschalter zu fahren
}
//wenn Kabine zwischen Endschaltern, dann Stopp und wieder nach oben
if (status_seilSch == HIGH && status_endSchO == LOW && status_endSchU == LOW){
digitalWrite (powerMot, HIGH);
delay (2000);
digitalWrite (drehrichtungMot, LOW);
delay (200);
digitalWrite (powerMot, LOW);
}
//extern Hochfahren wenn Kabine unten
if (status_extSch == HIGH && status_endSchO == LOW && status_endSchU == HIGH){
digitalWrite (powerMot, LOW);
delay (1000);
}
//wenn Kabine oben und Seilschalter wird betätigt, Motor dreht
if (status_extSch == HIGH && status_endSchO == HIGH && status_endSchU == LOW){
digitalWrite (powerMot, LOW);
delay (1000); // um aus Endschalter zu fahren
}
//wenn Kabine zwischen Endschaltern, dann Stopp und wieder nach oben
if (status_extSch == HIGH && status_endSchO == LOW && status_endSchU == LOW){
digitalWrite (powerMot, HIGH);
delay (2000);
digitalWrite (drehrichtungMot, LOW);
delay (200);
digitalWrite (powerMot, LOW);
}
} //END if (status_lichtSchr == LOW
else{
//soll nicht fahren, wenn Lichtschranke unterbrochen ist und Kabine in Endschaltern
if (status_endSchU == HIGH || status_endSchO == HIGH){
digitalWrite (powerMot, HIGH);
}
}// END else
} // END Loop
Ich kann den Code leider nicht an der Anlage testen, deshalb muss ich mein Problem so lösen und frage deshalb hier nach.
Ich bin für jede Hilfestellung dankbar. Vielen Dank im Voraus.
Grüße,
Stephan