@Rentner: Vielen , lieben Dank für deine Antwort!
Okay, es gilt herauszufinden ob es sich um einen Kondensatormotor (kann es eigentlich nicht sein, weil sonst 4 Drähte aus dem Motor kommen müssten) oder einen Drehstrommotor in Steinmetzschaltung handelt ( 3 Drähte kommen aus dem Motor).
Leider befindet sich kein Typenschild auf dem Motor...
Ich habe mir gestern mit dem Elektriker unserer Kunsthochschule geschrieben, der hat aber gemeint er kennt sich nicht so gut mit der Materie aus und hat mich an zwei andere Personen verwiesen, die das studiert haben sollen. Ich schreibe die gleich mal an und hoffe von denen kann mir jemand bei dem Verschalten des Motors helfen.
Danke für Deinen Rat zu den Schützen mit den drei Schließern + 1 Öffner. Das mit dem gegenseitigen Abriegeln ist eine sehr gute Idee/ Sicherheitsvorkehrung. Danke auch für Deine Schaltpläne, die helfen mir extrem weiter! Absolut unmissverständlich und eindeutig!
Ich hatte mal ein Problem bei einem Projekt, da hat so ein 4- Kanal- Relais 4 Kanal Relais 5V/230V Raspberry Pi Optokoppler Modul Channel Relay Arduino | eBay verrückt gespielt immer wenn ich damit vier Magnetventile (230 V) gleichzeitig geschaltet habe. Die Kontakte die dabei geschlossen wurden sind dann einfach kleben geblieben und haben dann auf Anhieb nicht mehr geöffnet. Nach dem Aus- und Anschalten haben die einzelnen Relais dann wieder problemlos geschaltet, bis ich wieder alle 4 auf einmal geschaltet habe. Dann sind sie wieder kleben geblieben und das Spiel ging von vorne los. Ich habe es dann durch ein Solid State Relais ersetzt und es gab keine Probleme mehr. Das war im Endeffekt ein ähnliches Problem wie beim Ansteuern des Elektromotors mit diesen Relais anfangs, wenn auch in einer abgeschwächten Form. Ich habe mir mein Thema damals gerade nochmal durchgelesen...
Fazit: Mit den 12VDC- Schützen bin ich in jeder Hinsicht auf der sichereren Seite, ich bestelle mir lieber welche mit dieser Spannung. Da sollte es mit den Relais 4 Kanal Relais 5V/230V Raspberry Pi Optokoppler Modul Channel Relay Arduino | eBay dann keine Probleme geben.
P.S.: Ich habe heute den State- Machine Sketch ausprobiert, mit dem ich die Seilwinde ansteuern will, der hat noch nicht funktioniert, dieser hier tut es jetzt aber:
//State Machine
// Pin - Definitionen
const int Relais1 = 8;
const int Relais2 = 9;
const int Relais3 = 10;
const int Relais4 = 11;
const int Bewegungsmelder = 7;
const int EndschalterOben = 6;
unsigned long Pausenzeitgeber;
const int EndschalterUnten = 5;
//Zustände
const int Z_ArmUnten = 0;
const int Z_ArmNachOben = 1;
const int Z_ArmOben = 2;
const int Z_ArmNachUnten = 3;
//Variablen für Ereignisse
bool e_Bewegungsmelder;
bool e_EndschalterOben;
bool e_Pausenzeitgeber;
bool e_EndschalterUnten;
//Variablen für Zustände
int Zustand;
void ArmUnten()
{
Serial.println("Arm unten");
digitalWrite(Relais1, HIGH);
digitalWrite(Relais2, HIGH);
digitalWrite(Relais3, HIGH);
digitalWrite(Relais4, HIGH);
Zustand = Z_ArmUnten;
e_EndschalterUnten = false;
e_Bewegungsmelder = false;
e_EndschalterOben = false;
e_Pausenzeitgeber = false;
}
void ArmNachOben()
{
Serial.println("Arm geht nach oben");
digitalWrite(Relais1, LOW);
digitalWrite(Relais2, LOW);
digitalWrite(Relais3, HIGH);
digitalWrite(Relais4, HIGH);
Zustand = Z_ArmNachOben;
e_EndschalterUnten = false;
e_Bewegungsmelder = false;
e_EndschalterOben = false;
e_Pausenzeitgeber = false;
}
void ArmOben()
{
Serial.println("Arm ist oben");
digitalWrite(Relais1, HIGH);
digitalWrite(Relais2, HIGH);
digitalWrite(Relais3, HIGH);
digitalWrite(Relais4, HIGH);
Zustand = Z_ArmOben;
e_EndschalterUnten = false;
e_Bewegungsmelder = false;
e_EndschalterOben = false;
e_Pausenzeitgeber = false;
Pausenzeitgeber = millis();
}
void ArmNachUnten()
{
Serial.println("Arm geht nach unten");
digitalWrite(Relais1, HIGH);
digitalWrite(Relais2, HIGH);
digitalWrite(Relais3, LOW);
digitalWrite(Relais4, LOW);
Zustand = Z_ArmNachUnten;
e_EndschalterUnten = false;
e_Bewegungsmelder = false;
e_EndschalterOben = false;
e_Pausenzeitgeber = false;
}
void Ereignisse()
{
if (digitalRead(Bewegungsmelder) == HIGH) {
e_Bewegungsmelder = true;
}
if (digitalRead(EndschalterOben) == LOW)
{
e_EndschalterOben = true;
// hier darf: Pausenzeitgeber = millis(); nicht stehen, weil der Schalter ja gedrückt bleibt!!!
}
if (millis() - Pausenzeitgeber > 3000 && millis() - Pausenzeitgeber <3500)
{
e_Pausenzeitgeber = true;
}
if (digitalRead(EndschalterUnten) == LOW )
{
e_EndschalterUnten = true;
}
}
void Verarbeitung()
{
if (e_Bewegungsmelder)
{
switch (Zustand)
{
case Z_ArmUnten: ArmNachOben(); break;
}
}
if (e_EndschalterOben)
{
switch (Zustand)
{
case Z_ArmNachOben: ArmOben(); break;
}
}
if (e_Pausenzeitgeber)
{
switch (Zustand)
{
case Z_ArmOben: ArmNachUnten(); break;
}
}
if ( e_EndschalterUnten)
{
switch (Zustand)
{
case Z_ArmNachUnten: ArmUnten(); break;
}
}
}
void setup() {
// Schnittstelle für den seriellen Monitor
Serial.begin(9600);
// Pin's vorbereiten
pinMode(Relais1, OUTPUT);
pinMode(Relais2, OUTPUT);
pinMode(Relais3, OUTPUT);
pinMode(Relais4, OUTPUT);
pinMode(Bewegungsmelder, INPUT);
pinMode(EndschalterOben, INPUT_PULLUP);
pinMode(EndschalterUnten, INPUT_PULLUP);
pinMode(Pausenzeitgeber, INPUT_PULLUP);
//Ausgangszustand herstellen
digitalWrite(Relais1, HIGH);
digitalWrite(Relais2, HIGH);
digitalWrite(Relais3, HIGH);
digitalWrite(Relais4, HIGH);
Zustand = Z_ArmUnten;
e_Bewegungsmelder = false;
e_EndschalterOben = false;
e_Pausenzeitgeber = false;
e_EndschalterUnten = false;
}
void loop()
{
Ereignisse(); // Ereignisse werden abgefragt
Verarbeitung(); // Anhand der Ereignisse werden die einzelnen Funktionen abgerufen
}
Herzliche Grüße Leonardo