11.03.2017 15:58
Alibaba
|
Rückschlagklappe - der Rückschlag
Grüss euch zusammen,
find ich super, dass ihr ein Treffen veranstaltet, hab leider noch nicht gefunden, wo es stattfinden soll, würd mich über eine Info betreffend freuen. Doch zum Thema, seit fast einem Jahr hab ich einen Kollektor am laufen, der Zweite seit Sommer, Zeit Resumee zu ziehen: Funkt alles super, macht warm, ausser dass ich bereits 2 Servos gekillt hab. Davon abgesehen, dass die kleinen Servos mit einem halben Jahr Betriebsdauer ein glatter Wahnsinn sind, hätte ich dennoch weniger Arbeit damit, ab und an den Kollektor testen zu müssen, ob noch alles funktioniert. So habe ich mich entschlossen, zumal ich ja für beide Kollektoren ja einen Arduino Nano einsetze, die Servos mit Schrittmotoren mit Getriebe zu ersetzen. Angeboten hat sich von der Grösse, auch vom Preis her die 28BYJ-48 Stepper (=Schrittmotor), die es in der Bucht samt der Treiberelektronik umn knapp 3 Euro gibt. Vorteil meiner Meinung nach ist, die Schrittmotoren brauchen keinen Strom, wenn man sie nach der Arbeit abschaltet, haben relativ gut Kraft, lassen sich problemlos mit dem Arduino ansteuern, sind von der Haltbarkeit um vieles besser als Servos . Nachteil ist, dass man 4-5 Leitungen braucht, um den Schrittmotor zu steuern. Dazu kommt, ich wollte, wen ich das Projekt realisiere, dass der Schrittmotor beim Rücklauf immer an einer definierten Stelle stopt, d.h. ich brauche dazu einen Sensor, der die Bewegung mitverfolgt. Ich habe mich dazu entschlossen, das ganze mit einem Hall-Sensor zu machen, also ein Schalter, der auf ein Megnetfeld reagiert. Diese Sonsoren sind ebenfalls recht günstig, in der Bucht hab ich 2 um 3 Euro erstanden, in China kosten die in paar Cent. Macht in dem Falle 9 Leitungen zur Klappe. Blöd, könnte man auf 7 Leitungen reduzieren, wenn man mag. Ich denke der Aufwand lohnt sich aber nicht.
Die Schrittmotoren habe ich pro Klappe innert 2 Stunden umgetauscht, Programmierarbeit inklusive. Ist also überschaubar, und man lernt auch wieder einiges. Was für mich angenehm ist, die Teile machen keinen Lärm, ruckeln nicht, ruckeln nicht wenn sie die Klappe halten, und machen ihren Dienst. Wie lange weiss keiner, doch ich denke, dass die um einiges länger halten als die Servos, zumal der Strom abschaltbar ist.
Zum Technischen: Schrittmotor 28BYJ-48 5 Draht Motor, d.h. das Treiber IC hat einen offenen Kollektor, und steuert so den Motor an. Als Treiber bietet sich das ULN2003A an, ist ein IC mit 7 Treiberstufen, der Schrittmotor wird oft mit dieser Stufe verkauft.
Der Hall Sensor: Type A3144E, 3 polig, schaut aus wie ein Transitor ist aber ein richtiger integierter Schaltkreis, von links nach rechts Plus, Gnd, Data. Zwischen data und Plus einfach einen 10K Widerstand dranlöten.
Ich bin ja eher der Typ "schön muss es nicht sein, funktionieren soll es!" - darum hier auch die Bilder:
Die Installation von Vorne - gut erkennbar die Feder, die mittels Schnur die Klappe öffnet oder schliesst, die Feder ist Teil einer Spange, mit der man Deckenspots einklemmt. Am krummen Nagel ist einfach ein kleines Magnet dran, hier steht er gerade über den Hallsensor. 5 mm Entferung reicht, dass der Sensor auslöst. Im Betrieb fährt der Motor im Uhrzeigersinn und öffnet die Klappe, beim Zurückfahren fährt er bis der Sensor auslöst und somit die Klappe sicher zu ist. Befestigt habe ich Feder und Nagel mit dem Innenleben einer Lusterklemme.
Rückseite: Links die hingeschraubte Treiberplatine. Mittig der Motor.
Und hier noch der Arduinosketch, falls wer da eine Anregung herausnehmen mag. Dieser Sketch geht davon aus, dass der Temperaturfühler ein Signal schickt, das der Arduino auswertet und dann die Klappe öffnet oder schliesst. Wie immer, der Sketch ist nur ein Beispiel, und kann gerne verwendet und auch geändert werden. Die Lib für den 28byj48 Motor gibts wie immer in Github: https://github.com/lefty01/AH_28BYJ48
#include <AH_28BYJ48.h> // lib für Stepper const int stepsPerRevolution = 64*64; // number of steps per revolution * gear factor const int hallPin = 12; // Hallsensor eingang const int tempsensor = 2; // Eingang vom Temperaturfühler const int ledPin = 13; // the number of the LED pin int thermo = 0; // Variable für Tempfühler int motor = 0; // Anfangs motor aus int hallState = 0; // Variable beinhaltet Hall Status
AH_28BYJ48 myStepper(stepsPerRevolution, 4,5,6,7); //Pins des Steppers definieren
void setup() { pinMode(ledPin, OUTPUT); //Temperaturfühler und Hall Sensor einstellen pinMode(tempsensor, INPUT); pinMode(hallPin, INPUT); myStepper.setSpeedRPM(15); myStepper.setSpeedHz(1000); }
void loop() { thermo = digitalRead(tempsensor); if (thermo == HIGH && motor == 0) { //high //Routine Stepper öffnet Klappe oeffnen(); portaus(); digitalWrite(ledPin, HIGH); delay (500); digitalWrite(ledPin, LOW); delay (500); motor = 1 ; } if (thermo == LOW && motor == 1) { // Routine Stepper schliesst Klappe schliessen(); portaus(); digitalWrite(ledPin, HIGH); delay (500); digitalWrite(ledPin, LOW); delay (500); motor=0; } }
void oeffnen() { // myStepper.setSpeedRPM(10); myStepper.step(-2000); delay(200);
}
void schliessen() { for (int i=0; i<25; i++) { hallState = digitalRead(hallPin); if (hallState == 1) { myStepper.step(100); } if (hallState == 0) { digitalWrite(ledPin, HIGH); delay (100); digitalWrite(ledPin, LOW); delay (100); digitalWrite(ledPin, HIGH); delay (100); digitalWrite(ledPin, LOW); delay (100); } } }
void portaus() { //alle Stepperports aus digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); }
|