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