Ansteuerung von elektrischer Seilwinde | kinetic sculpture | interactive art installation | GELÖST!

Hallo liebe community,

Ich bin gerade an folgendem Projekt zu Gange: Zwei Figuren stehen sich gegenüber. Die erste Figur löst bei der zweiten Figur einen Bewegungsmelder aus. Daraufhin reagiert die zweite Figur mit einer Bewegung und löst einen Bewegungsmelder bei der ersten Figur aus. Das wiederholt sich immer so weiter.
Zum Auslösen der Bewegungsmelder (PIR- Sensor HC- SR501) dient jeweils eine Infrarotlampe.

Bewegung der Arme

Ich habe die Bewegung der Arme mit jeweils einer Seilwinde realisiert. Die Umlenkrolle halbiert die Geschwindigkeit der Bewegung und verdoppelt die Zugkraft der Seilwinde. Mir ist wichtig, dass die Geschwindigkeit der Armbewegung langsamer wird! Ich würde gerne noch zusätzlich mit einem Drehzahlregler wie diesem ( WINGONEER AC 220V 4000W High Power SCR elektronischer Spannungs-Regler Gouverneur Dimmer Thermostat Drehzahlregler: Amazon.de: Baumarkt ) versuchen die Bewegung langsamer zu machen.

Ich habe bei den Bewertungen gelesen, dass der Drehzahlregler zwar die Drehzahl von einem Elektromotor regeln kann aber sich auch dessen Kraft dadurch verringert. Wenn sich wirklich nur die Drehzahl verändern soll bedarf es eines Frequenzumrichters. Schade ich der Seilwinde wenn ich durch einen Drehzahlregler wie im Link den Motor drossele und ihn dadurch überlaste oder sollte da nichts passieren?

Steuerung der Seilwinden

Ich habe den Schalter mit dem man normalerweise die Auf- und Abwärtsbewegung der Seilwinde steuern kann durch ein 4- fach- Relais ersetzt, sodass man sie mit einem Mikrocontroller steuern kann.

Das Setup zur Steuerung der Seilwinde sieht so aus:

Mir sind beide Relais in den Setups kaputt gegangen. Entweder, weil ich die elektrischen Seilwinden überlastet habe oder weil der Anlaufstrom der Seilwinden größer ist als die 10 Ampere, die die Relais aushalten.

Ich habe mir jetzt zwei von diesen Relais bestellt, die 30 Ampere aushalten, die sollten der Belastung stand halten ( 30A 4-Kanal-Relaismodul-Erweiterungskarte für Arduino Raspberry Pi DSP AVR PIC-ARM(5VDC): Amazon.de: Gewerbe, Industrie & Wissenschaft ).

Bei dem PIR- Sensor HC- SR501 kann man ja die Empfindlichkeit (Sensitivity) einstellen. Glaubt Ihr es ist möglich, dass ich die Empfindlichkeit des PIR- Sensors so stark zurückdrehe, dass nur das nahe Vorbeifahren der Infrarotlampe diesen Sensor auslöst und nicht ein vorbeilaufender Mensch?

Sketch

Das ist der Sketch mit dem als Reaktion auf das Auslösen der Bewegungsmelder eine Bewegung in Gang gesetzt wird:

int Relais1 = 8;[color=#222222][/color]
int Relais2 = 9;[color=#222222][/color]
int Relais3 = 10;[color=#222222][/color]
int Relais4 = 11;[color=#222222][/color]
 [color=#222222][/color]
int pirPin = 7; // Input for HC-S501 // pirPin ist LOW wenn keine Bewegung registriert wurde und wird HIGH wenn eine Bewegung registiriert wird[color=#222222][/color]
 [color=#222222][/color]
int pirValue = LOW; // Place to store read PIR Value // Platz an dem der gelesene PIR- Wert gespeichert wird[color=#222222][/color]
int Bewegungswert = LOW; // Der Bewegungswert ist zu Beginn LOW / 0[color=#222222][/color]
 [color=#222222][/color]
 [color=#222222][/color]
void setup() {[color=#222222][/color]
 [color=#222222][/color]
  pinMode(Relais1, OUTPUT);[color=#222222][/color]
  pinMode(Relais2, OUTPUT);[color=#222222][/color]
  pinMode(Relais3, OUTPUT);[color=#222222][/color]
  pinMode(Relais4, OUTPUT);[color=#222222][/color]
  pinMode(pirPin, INPUT);[color=#222222][/color]
 [color=#222222][/color]
  digitalWrite(Relais1, HIGH); // regelt, dass die Relais offen bleiben (normally open) wenn Strom angelegt wird[color=#222222][/color]
  digitalWrite(Relais2, HIGH);[color=#222222][/color]
  digitalWrite(Relais3, HIGH);[color=#222222][/color]
  digitalWrite(Relais4, HIGH);[color=#222222][/color]
 [color=#222222][/color]
 [color=#222222][/color]
}[color=#222222][/color]
 [color=#222222][/color]
void loop() {[color=#222222][/color]
 [color=#222222][/color]
  // Bewegungsablauf[color=#222222][/color]
  pirValue = digitalRead(pirPin);                // der gelesene Wert von pirPin wird auf pirValue gespeichert[color=#222222][/color]
  if (pirValue == HIGH && Bewegungswert == LOW ) // wenn pirValue = HIGH und Bewegungswert = LOW[color=#222222][/color]
  {[color=#222222][/color]
    Bewegungswert = HIGH;[color=#222222][/color]
  }[color=#222222][/color]
  if ( Bewegungswert == HIGH)[color=#222222][/color]
  {[color=#222222][/color]
    delay(2000);                // die Anfangspause soll dafür sorgen, dass die Bewegung erst beginnt, wenn die Bewegung des Anderen abgeschlossen ist![color=#222222][/color]
    digitalWrite(Relais1, LOW); // Aufwärtsbewegung[color=#222222][/color]
    digitalWrite(Relais2, LOW);[color=#222222][/color]
    delay (3000);                // regelt die Zeit der Aufwärtsbewegung[color=#222222][/color]
    digitalWrite(Relais1, HIGH);[color=#222222][/color]
    digitalWrite(Relais2, HIGH);[color=#222222][/color]
    delay (1000);                //regelt die Zeit des Stillstandes[color=#222222][/color]
    digitalWrite(Relais3, LOW); // Abwärtsbewegung[color=#222222][/color]
    digitalWrite(Relais4, LOW);[color=#222222][/color]
    delay(3000);                 // regelt die Zeit der Abwärtsbewegung[color=#222222][/color]
    digitalWrite(Relais3, HIGH); // Bewegungsende[color=#222222][/color]
    digitalWrite(Relais4, HIGH);[color=#222222][/color]
    Bewegungswert = LOW;         // Bewegungswert LOW setzen[color=#222222][/color]
  }[color=#222222][/color]
 [color=#222222][/color]
}

Wenn Ihr irgendwelche Verbesserungsvorschläge habt, lasst es mich bitte wissen.

Herzliche Grüße Leonardo

Hallo
gibt es den Sketch ohne Farbformatierungsanweisungen?

Und setze bitte die Bilder sowie alles was dazugehört direkt in das Forum.
Alles was auf externen Servern liegt ist in Kürze verschwunden und damit ist der Thread nicht mehr nutzbar, weil kein Zusammenhang vorhanden.

int Relais1 = 8; 
int Relais2 = 9; 
int Relais3 = 10; 
int Relais4 = 11; 
 
int pirPin = 7; // Input for HC-S501 // pirPin ist LOW wenn keine Bewegung registriert wurde und wird HIGH wenn eine Bewegung registiriert wird 
 
int pirValue = LOW; // Place to store read PIR Value // Platz an dem der gelesene PIR- Wert gespeichert wird 
int Bewegungswert = LOW; // Der Bewegungswert ist zu Beginn LOW / 0 
 
 
void setup() { 
 
  pinMode(Relais1, OUTPUT); 
  pinMode(Relais2, OUTPUT); 
  pinMode(Relais3, OUTPUT); 
  pinMode(Relais4, OUTPUT); 
  pinMode(pirPin, INPUT); 
 
  digitalWrite(Relais1, HIGH); // regelt, dass die Relais offen bleiben (normally open) wenn Strom angelegt wird 
  digitalWrite(Relais2, HIGH); 
  digitalWrite(Relais3, HIGH); 
  digitalWrite(Relais4, HIGH); 
 
 
} 
 
void loop() { 
 
  // Bewegungsablauf 
  pirValue = digitalRead(pirPin);                // der gelesene Wert von pirPin wird auf pirValue gespeichert 
  if (pirValue == HIGH && Bewegungswert == LOW ) // wenn pirValue = HIGH und Bewegungswert = LOW 
  { 
    Bewegungswert = HIGH; 
  } 
  if ( Bewegungswert == HIGH) 
  { 
    delay(2000);                // die Anfangspause soll dafür sorgen, dass die Bewegung erst beginnt, wenn die Bewegung des Anderen abgeschlossen ist! 
    digitalWrite(Relais1, LOW); // Aufwärtsbewegung 
    digitalWrite(Relais2, LOW); 
    delay (3000);                // regelt die Zeit der Aufwärtsbewegung 
    digitalWrite(Relais1, HIGH); 
    digitalWrite(Relais2, HIGH); 
    delay (1000);                //regelt die Zeit des Stillstandes 
    digitalWrite(Relais3, LOW); // Abwärtsbewegung 
    digitalWrite(Relais4, LOW); 
    delay(3000);                 // regelt die Zeit der Abwärtsbewegung 
    digitalWrite(Relais3, HIGH); // Bewegungsende 
    digitalWrite(Relais4, HIGH); 
    Bewegungswert = LOW;         // Bewegungswert LOW setzen 
  } 
 
}

ja zB die ganzen colors weg.
Grüße Uwe

Ich würde für die Bewegungen Endschalter einbauen, weil man nie weiß wo die Startposition ist.
Die Seilwinde sehe ich ziemlich massiv sodaß einige 1000 N Zugkraft zusammenkommen. Hält das die Mechanik aus wenn der Arm nicht die ganze Bewegung machen kann?
Grüße Uwe

@paulpaulson und uwefed: Hier ist der Sketch nochmal ohne Farbformatierungsanweisungen.

int Relais1 = 8;
int Relais2 = 9;
int Relais3 = 10;
int Relais4 = 11;

int pirPin = 7; // Input for HC-S501 // pirPin ist LOW wenn keine Bewegung registriert wurde und wird HIGH wenn eine Bewegung registiriert wird

int pirValue = LOW; // Place to store read PIR Value // Platz an dem der gelesene PIR- Wert gespeichert wird
int Bewegungswert = LOW; // Der Bewegungswert ist zu Beginn LOW / 0


void setup() {

  pinMode(Relais1, OUTPUT);
  pinMode(Relais2, OUTPUT);
  pinMode(Relais3, OUTPUT);
  pinMode(Relais4, OUTPUT);
  pinMode(pirPin, INPUT);

  digitalWrite(Relais1, HIGH); // regelt, dass die Relais offen bleiben (normally open) wenn Strom angelegt wird
  digitalWrite(Relais2, HIGH);
  digitalWrite(Relais3, HIGH);
  digitalWrite(Relais4, HIGH);


}

void loop() {

  // Bewegungsablauf
  pirValue = digitalRead(pirPin);                // der gelesene Wert von pirPin wird auf pirValue gespeichert
  if (pirValue == HIGH && Bewegungswert == LOW ) // wenn pirValue = HIGH und Bewegungswert = LOW
  {
    Bewegungswert = HIGH;
  }
  if ( Bewegungswert == HIGH)
  {
    delay(1000);                // eigentlich Anfangspause, die dazu dient erst zu starten wenn die Bewegung des Anderen abgeschlossen ist!
    digitalWrite(Relais1, LOW); // Aufwärtsbewegung
    digitalWrite(Relais2, LOW);
    delay (3000);                // regelt die Zeit der Aufwärtsbewegung Test 1: 2200 ( nur mit Umlenkrollen), Test 2: 3000 (mit Seilzug)
    digitalWrite(Relais1, HIGH);
    digitalWrite(Relais2, HIGH);
    delay (4000);                //regelt die Zeit des Stillstandes
    digitalWrite(Relais3, LOW); // Abwärtsbewegung
    digitalWrite(Relais4, LOW);
    delay(3000);                 // regelt die Zeit der Abwärtsbewegung  Test 1: 1600( nur mit Umlenkrollen), Test 2: 300 (mit Seilzug)
    digitalWrite(Relais3, HIGH); // Bewegungsende
    digitalWrite(Relais4, HIGH);
    delay(24000);                // eigentlich Anfangspause, aber probehalber erstmal Pause hinten
    Bewegungswert = LOW;         // Bewegungswert LOW setzen
  }

}

Hallo,
und Danke für den Sketch.
Wie können wir dir helfen?

@HotSystems:

Hier sind sind die Fotos nochmal direkt fürs Forum, ich kann sie leider nicht direkt in meinen ersten Beitrag machen, weil die Dateien zusammen zu groß sind.

noch ein Foto

noch ein Foto

hier die Mechanik des Armes als Skizze

hier das Setup als Skizze

Sorry für das Zuspammen mit den Bildern:/. Welches Dateiformat würdet Ihr für mehrere Bilder in Zukunft empfehlen, damit ich nicht für jedes Foto einen extra Beitrag machen muss?

@uwefed:

Das mit den Endschaltern ist eine sehr gute Idee! Ich habe jetzt je zwei Endschalter in einer Figur angebracht. Einen für "Arm oben" und einen für "Arm unten".

Skizze für Anbringung der Endschalter

so sieht das ganze in echt aus:

@paulpaulson:

Hallo,
und Danke für den Sketch.
Wie können wir dir helfen?

Kann ich den Elektromotor der Seilwinde mit einem Dimmer wie diesem hier 4000W AC Spannungsregler 220V Dimmer Elektromotor Drehzahl Temperaturregler DE | eBay drosseln oder glaubt ihr die Seilwinde verliert dann zu viel Kraft? Könnt ihr mir ansonsten eine andere ( preisgünstige) Möglichkeit verraten wie ich den Motor ohne Kraftverlust drosseln kann?

Glaubt Ihr ich kann die Empfindlichkeit des HC- SR501 Bewegungssensors so weit runterdrehen, dass nur die vorbeifahrende Infrarotlampe den Sensor auslöst und kein vorbeilaufender Mensch?

Ich hätte da noch eine Frage:

Einer dieser Endschalter hier war in der elektrischen Seilwinde eingebaut: Honeywell Micro Taster Schalter Microswitch V15T16 1x Ein 16A 250VAC 2x | eBay

Wenn dieser Endschalter auslöst, wird ein Pol unterbrochen, durch den beim Aufrollen der Seilwinde Strom fließt und so kann man sie per Tastendruck ( Original- Steuerung der Seilwinde) nicht mehr weiter aufrollen. Per Tastendruck kann man jetzt nur noch abrollen, weil dieser Stromkreis nicht unterbrochen ist. (Siehe wiring diagram)

Erst dachte ich, dass ich meine Endschalter auch so einsetzen werde. Inzwischen glaube ich jedoch es ist viel sinnvoller wenn ich das HIGH/LOW Signal der Endschalter an den Mikrocontroller weiterleite und durch ihn das "Abrollen" und das "Aufrollen" der Seilwinde, bzw. das "Senken" und "Heben" des Armes stoppe. Seht ihr das genauso?

Ich habe mir gestern schon ein paar der Endschalter, die ich oben verlinkt habe gekauft. Auf Ihnen steht :16A 250VAC. Kann ich diese Endschalter auch für das 5 VDC Signal des Mikrocontrollers benutzen? 16 A und 250VAC, das sind nur die maximalen Werte für den Strom, der durch den Schalter fließen darf, oder?

LeonardoFiando:
oder glaubt ihr die Seilwinde verliert dann zu viel Kraft?

Das wird vom Motor abhängen. Je nach Art und Typ verhalten die sich bei sowas anders. Im Prinzip geht es wahrscheinlich, aber ob es für deine Anwendung passt wirst du ausprobieren müssen

Kann ich diese Endschalter auch für das 5 VDC Signal des Mikrocontrollers benutzen?

Natürlich

@serenifly: Danke für deine Antwort! Okay ich werde das mit dem Drosseln per Spannungsregler einfach mal ausprobieren. Freut mich auch, dass ich die bestellten Taster ohne Probleme mit 5 VDC nutzen kann.