Guten Morgen
Habe seit einiger Zeit einen Arduino herumliegen und bisher leider nicht die Zeit bzw auch kein Projekt um ihn einzusetzen.
Nun habe ich begonnen einen Ersatz für unsere Hoftorsteuerung zu bauen, da diese recht anfällig ist.
Hier die Eckdaten: (Zeiten weichen vom Programm ab, wegen unnötiger Wartezeiten)
Irgendwie komm ich mit der while Schleife net klar, da ich ja einelne Vorgänge darin stoppen muss, andere sollen aber weiterlaufen?!?
Board: Nano-Baugleich
StromMessbausteine: ACS712 +-5A
Relais: 8-Fach Relais Modul
T1= Tor öffnen
T2= Tor schliessen
T3= Stop z.B. Nottaster/Lichtschranke
Relais1 bis 4: Strom für Motor
Relais5: LED AUF
Relais6: LED ZU
Tore öffnen:
Nach drücken der Taste T1 zieht das Relais1 und Relais5 an.
4 Sekunden verzögert das Relais3. Diese sollen so lange gezogen bleiben,
bis entweder die Taste T1 erneut gedrückt wird, die Taste T3 gedrückt wird,
oder eine maximale Zeit von 10 sekunden erreicht ist.
Vorher sollte jedoch einer der beiden Strommessbausteine (ACS712 +-5A) bei einem in Analogeingang
festgelegten Wert (z.B. 3 Ah) das jeweilige Relais (R1 oder R3) lösen.
Das jeweils andere Relais würde ebenfalls erst lösen,
wenn der festgelegte Wert überschritten ist.
Relais5 würde in diesem Fall erst nach 10 sekunden lösen.
Tore schliessen:
Nach drücken der Taste T3 zieht das Relais2 und Relais6 an.
4 Sekunden verzögert das Relais4. Diese sollen so lange gezogen bleiben,
bis entweder die Taste T2 erneut gedrückt wird, die Taste T3 gedrückt wird,
oder eine maximale Zeit von 10 sekunden erreicht ist.
Vorher sollte jedoch einer der beiden Strommessbausteine (ACS712 +-5A) bei einem in Analogeingang
festgelegten Wert (z.B. 3 Ah) das jeweilige Relais (R2 oder R4) lösen.
Das jeweils andere Relais würde ebenfalls erst lösen,
wenn der festgelegte Wert überschritten ist.
Relais6 würde in diesem Fall erst nach 10 sekunden lösen.
Hier mein "Ansatz":
const int R1 = 2 ; //M1 K1
const int R2 = 3 ; //M1 K2
const int R3 = 4 ; //M2 K1
const int R4 = 5 ; //M2 K2
const int R5 = 6 ; //LED AUF
const int R6 = 7 ; //LED ZU
const int T1 = 10 ; //Taster AUF
const int T2 = 11 ; //Taster ZU
const int T3 = 12 ; //STOP
//const int strom1 = A0; //Strommessbaustein 1
//const int strom2 = A1; //Strommessbaustein 2
//const int strom3 = A2; //Strommessbaustein 3
//const int strom4 = A3; //Strommessbaustein 4
//const int maxstrom = 400; //Strombegrenzung
int T1status = 0;
int T2status = 0;
int T3status = 0;
void setup() {
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(R3, OUTPUT);
pinMode(R4, OUTPUT);
pinMode(R5, OUTPUT);
pinMode(R6, OUTPUT);
pinMode(T1, INPUT);
pinMode(T2, INPUT);
pinMode(T3, INPUT);
//Alle Relais lösen wegen Umkehrung
digitalWrite(R1, HIGH);
digitalWrite(R2, HIGH);
digitalWrite(R3, HIGH);
digitalWrite(R4, HIGH);
digitalWrite(R5, HIGH);
digitalWrite(R6, HIGH);
}
void loop() {
//Taster1 zum öffnen
T1status = digitalRead(T1);
while (T1status == HIGH) {
digitalWrite(R5, LOW); //LOW heisst anziehen
digitalWrite(R1, LOW);
delay(2000);
digitalWrite(R3, LOW);
delay(3000);
digitalWrite(R1, HIGH); //HIGH heisst lösen
digitalWrite(R3, HIGH);
digitalWrite(R5, HIGH);
T1status = digitalRead(T1);
}
//Taster2 zum schliessen
T2status = digitalRead(T2);
while (T2status == HIGH) {
digitalWrite(R6, LOW); //LOW heisst anziehen
digitalWrite(R2, LOW);
delay(2000);
digitalWrite(R4, LOW);
delay(3000);
digitalWrite(R2, HIGH); //HIGH heisst lösen
digitalWrite(R4, HIGH);
digitalWrite(R6, HIGH);
T2status = digitalRead(T2);
}
//Stoppen bei Stromüberschreitung
//int strom1 = analogRead(A0);
//int strom2 = analogRead(A1);
//int strom3 = analogRead(A2);
//int strom4 = analogRead(A3);
//maxstrom = 10;
//if (strom1 > maxstrom) {
//digitalWrite(R1, LOW);
//}
//if (strom2 > maxstrom) {
//digitalWrite(R2, LOW);
//}
//if (strom3 > maxstrom) {
//digitalWrite(R3, LOW);
//}
//if (strom4 > maxstrom) {
//digitalWrite(R4, LOW);
//}
}
Tor2nano.ino (2.23 KB)