Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Servus Franz,
Teil 1 geschafft - jetzt geht es zum Essen - dannn ein kleines Mittagsschläfchen, dann spazieren gehen oder B A S T E L N .
Schönes Wochenende
Wolfgang
- Dateianhänge
-
- Frästisch.jpg (20.84 KiB) 876 mal betrachtet
Grüße aus der Heimat der E69
- Admin
- Administrator
- Beiträge: 1199
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Ist das so ein xy - Frästisch mit Handbetrieb? Sowas steht bei mir fürs erste auf dem Wunschzettel. Ich muss immer drauf achten dass immer wieder auch etwas Geld reinkommt, bevor ich wieder was kaufe. Bei uns sitzt das Geld Dank meiner Krankheit nicht mehr locker. Aber ich kann immer mal wieder Kleinigkeiten umsetzen. Der Wunschzettel wächst leider scneller als die erfüllten Positionen
Schönen Tag
Franz
PS: Weil du gerade vom Essen schreibst. Ich habe mich heute Morgen entschlossen, wieder mal mit Heilfasten zu beginnen. Also nix essen ....nur flüssige Nahrung Wie lange weiß ich nicht, einfach so lange wie es sich gut anfühlt. Das letzte mal waren es 4 Wochen.
Schönen Tag
Franz
PS: Weil du gerade vom Essen schreibst. Ich habe mich heute Morgen entschlossen, wieder mal mit Heilfasten zu beginnen. Also nix essen ....nur flüssige Nahrung Wie lange weiß ich nicht, einfach so lange wie es sich gut anfühlt. Das letzte mal waren es 4 Wochen.
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Hallo Franz,
der ist handbetrieben und reicht für mich vollkommen, da ich viele Teile auf Sicht fahre - oldschool.
https://www.wabeco-remscheid.de/bohrsta ... -1314.html
Ist halt eine alte deutsche Firma bei deren Produkte man noch was einstellen kann.
Ich kann zum Glück einen Teil meiner Unfallrente für das Hobby verbraten und die beiden digitalen Meßschieber hat das Christkind gebracht.
PS. Hast Du eine gute Quelle für Schrittmotoren - Format NEMA 14 oder NEMA 17 ?
Schönen Abend
Wolfgang
der ist handbetrieben und reicht für mich vollkommen, da ich viele Teile auf Sicht fahre - oldschool.
https://www.wabeco-remscheid.de/bohrsta ... -1314.html
Ist halt eine alte deutsche Firma bei deren Produkte man noch was einstellen kann.
Ich kann zum Glück einen Teil meiner Unfallrente für das Hobby verbraten und die beiden digitalen Meßschieber hat das Christkind gebracht.
PS. Hast Du eine gute Quelle für Schrittmotoren - Format NEMA 14 oder NEMA 17 ?
Schönen Abend
Wolfgang
Grüße aus der Heimat der E69
- Admin
- Administrator
- Beiträge: 1199
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Ich komme gerade nicht so recht weiter. Aber habe gesehen dass diese Abfrage "if ( servos.moving() < 50 )" ja im Programm benutzt wird, um das Relais zu schalten.
Da braucht man ja eigentlich nur erweitern um "if ( servos.moving() == 40 )" und "if ( servos.moving() == 120 )". Dann kann man bei 40 die Abzweig LED einschalten und die Gerade LED aus. Und bei 120 die Abzweig LED ausschalten und die Gerade LED ein.
Franz
Ich habe es jetzt mal angepasst:
Aber da stimmt was nicht. In der Zeile " if (servos.moving() == 120)" müßte das Programm festellen, dass der Servo auf 120 steht und die LED´s umschalten. Tut er aber nicht
Da braucht man ja eigentlich nur erweitern um "if ( servos.moving() == 40 )" und "if ( servos.moving() == 120 )". Dann kann man bei 40 die Abzweig LED einschalten und die Gerade LED aus. Und bei 120 die Abzweig LED ausschalten und die Gerade LED ein.
Franz
Ich habe es jetzt mal angepasst:
Code: Alles auswählen
// Weichenschaltung mit TasterPolRelais und Anzeige der Endlagen
// e69-fan
#define MAX8BUTTONS
#include <MobaTools.h>
//Variablendeklaration
const byte weichenPin[] = {2, 3, 4}; // Pins für die Weichenantriebe
// ------------------------------------------------------------------------------------------------------------------------ //
const byte ANZAHL = sizeof(weichenPin);
// ------------------------------------------------------------------------------------------------------------------------ //
const byte buttonPin[ANZAHL] = {A1, A2, A3}; // Pins für die Taster
// ------------------------------------------------------------------------------------------------------------------------ //
const byte relaisPin[ANZAHL] = {5, 6, 7}; // Pins für die Relais
// ------------------------------------------------------------------------------------------------------------------------ //
const int weichenPos1[ANZAHL] = {40, 40, 40}; // linke Position der Servos
const int weichenPos2[ANZAHL] = {120, 120, 120}; // rechte Position der Servos
// ------------------------------------------------------------------------------------------------------------------------ //
const byte ledGeradePin[ANZAHL] = {8, 9, 10}; // Pin für die LED Zustand gerade
const byte ledAbzweigPin[ANZAHL] = {11, 12, 13}; // Pin für die LED Zustand Anzweig
// ------------------------------------------------------------------------------------------------------------------------ //
const int speed[ANZAHL] = {8, 8, 8}; // festlegen der Verfahrgeschwindigkeit der Servos
// ------------------------------------------------------------------------------------------------------------------------ //
boolean weicheToPos1[ANZAHL]; // Sollposition des Servo ( true = Pos1 )
// ------------------------------------------------------------------------------------------------------------------------
MoToButtons taster( buttonPin, ANZAHL, 20, 300 ); // Weichentaster einrichten
MoToServo servos[3];
void setup() {
for (byte i = 0; i < ANZAHL; i++) {
servos[i].attach(weichenPin[i], true );
servos[i].setSpeed(speed[i]);
pinMode(relaisPin[i], OUTPUT);
pinMode(ledGeradePin[i], OUTPUT);
pinMode(ledAbzweigPin[i], OUTPUT);
weicheToPos1[i] = true;
servos[i].write(weichenPos1[i]); // Startstellung Servo
digitalWrite(relaisPin[i], weicheToPos1[i] ); // Startstellung Relais
}
}//Ende void setup
void loop() {
taster.processButtons();
for ( byte i = 0; i < ANZAHL; i++ ) {
if ( taster.pressed(i) ) {
weicheToPos1[i] = !weicheToPos1[i]; // Weichenstellung umschalten
if ( weicheToPos1[i] ) {
servos[i].write(weichenPos1[i]);
} else {
servos[i].write(weichenPos2[i]);
}
}
// Umstellvorgang läuft, Relais umschalten
if ( servos[i].moving() < 50 ) {
digitalWrite(relaisPin[i], weicheToPos1[i] );
}
//--------------------------------LED Steuerung-----
if (servos[i].moving() == 0)
{
digitalWrite(ledGeradePin[i], HIGH );
digitalWrite(ledAbzweigPin[i], LOW );
}
if (servos[i].moving() == 120)
{
digitalWrite(ledGeradePin[i], LOW );
digitalWrite(ledAbzweigPin[i], HIGH );
}
//--------------------------------------------------
} // Ende for - schleife
} // Ende void loop
- Admin
- Administrator
- Beiträge: 1199
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Jetzt klappt es wohl. Hier mal zum Testen:
Franz
Code: Alles auswählen
// Weichenschaltung mit TasterPolRelais und Anzeige der Endlagen
// e69-fan
#define MAX8BUTTONS
#include <MobaTools.h>
//Variablendeklaration
const byte weichenPin[] = {2, 3, 4}; // Pins für die Weichenantriebe
// ------------------------------------------------------------------------------------------------------------------------ //
const byte ANZAHL = sizeof(weichenPin);
// ------------------------------------------------------------------------------------------------------------------------ //
const byte buttonPin[ANZAHL] = {A1, A2, A3}; // Pins für die Taster
// ------------------------------------------------------------------------------------------------------------------------ //
const byte relaisPin[ANZAHL] = {5, 6, 7}; // Pins für die Relais
// ------------------------------------------------------------------------------------------------------------------------ //
const int weichenPos1[ANZAHL] = {40, 40, 40}; // linke Position der Servos
const int weichenPos2[ANZAHL] = {120, 120, 120}; // rechte Position der Servos
// ------------------------------------------------------------------------------------------------------------------------ //
const byte ledGeradePin[ANZAHL] = {8, 9, 10}; // Pin für die LED Zustand gerade
const byte ledAbzweigPin[ANZAHL] = {11, 12, 13}; // Pin für die LED Zustand Anzweig
// ------------------------------------------------------------------------------------------------------------------------ //
const int speed[ANZAHL] = {8, 8, 8}; // festlegen der Verfahrgeschwindigkeit der Servos
// ------------------------------------------------------------------------------------------------------------------------ //
boolean weicheToPos1[ANZAHL]; // Sollposition des Servo ( true = Pos1 )
// ------------------------------------------------------------------------------------------------------------------------
MoToButtons taster( buttonPin, ANZAHL, 20, 300 ); // Weichentaster einrichten
MoToServo servos[3];
void setup() {
for (byte i = 0; i < ANZAHL; i++) {
servos[i].attach(weichenPin[i], true );
servos[i].setSpeed(speed[i]);
pinMode(relaisPin[i], OUTPUT);
pinMode(ledGeradePin[i], OUTPUT);
pinMode(ledAbzweigPin[i], OUTPUT);
weicheToPos1[i] = true;
servos[i].write(weichenPos1[i]); // Startstellung Servo
digitalWrite(relaisPin[i], weicheToPos1[i] ); // Startstellung Relais
}
}//Ende void setup
void loop() {
taster.processButtons();
for ( byte i = 0; i < ANZAHL; i++ ) {
if ( taster.pressed(i) ) {
weicheToPos1[i] = !weicheToPos1[i]; // Weichenstellung umschalten
if ( weicheToPos1[i] ) {
servos[i].write(weichenPos1[i]);
} else {
servos[i].write(weichenPos2[i]);
}
}
// Umstellvorgang läuft, Relais umschalten
if ( servos[i].moving() < 50 ) {
digitalWrite(relaisPin[i], weicheToPos1[i] );
}
//--------------------------------LED Steuerung-----
if ((servos[i].moving() == 1) && (weicheToPos1[i] == HIGH))
{
digitalWrite(ledGeradePin[i], HIGH );
digitalWrite(ledAbzweigPin[i], LOW );
}
if ((servos[i].moving() == 1) && (weicheToPos1[i] == LOW))
{
digitalWrite(ledGeradePin[i], LOW );
digitalWrite(ledAbzweigPin[i], HIGH);
}
//--------------------------------------------------
} // Ende for - schleife
} // Ende void loop
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Hallo und Danke Franz,
ich bin am testen, läuft gut mit mehreren Servos.
Könnte man noch so erweitern:
Erklärung:
Die LED stellen den jeweiligen Zustand / Lage der Weiche dar.
Sobald die Weiche sich bewegt, ist der letzte Zustand == falsch und keine der beiden LED leuchten.
Hat die Weiche den neuen Zustand erreicht und moving ist Null, dann soll die zugehörige LED zu leuchten beginnen.
mfg Wolfgang
ich bin am testen, läuft gut mit mehreren Servos.
Könnte man noch so erweitern:
Erklärung:
Die LED stellen den jeweiligen Zustand / Lage der Weiche dar.
Sobald die Weiche sich bewegt, ist der letzte Zustand == falsch und keine der beiden LED leuchten.
Hat die Weiche den neuen Zustand erreicht und moving ist Null, dann soll die zugehörige LED zu leuchten beginnen.
mfg Wolfgang
Grüße aus der Heimat der E69
- Admin
- Administrator
- Beiträge: 1199
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Guten Tag.
Das wäre dann sowas:
Das wäre dann sowas:
Code: Alles auswählen
// Weichenschaltung mit TasterPolRelais und Anzeige der Endlagen
// e69-fan
#define MAX8BUTTONS
#include <MobaTools.h>
//Variablendeklaration
const byte weichenPin[] = {2, 3, 4}; // Pins für die Weichenantriebe
// ------------------------------------------------------------------------------------------------------------ //
const byte ANZAHL = sizeof(weichenPin);
// ------------------------------------------------------------------------------------------------------------ //
const byte buttonPin[ANZAHL] = {A1, A2, A3}; // Pins für die Taster
// ------------------------------------------------------------------------------------------------------------ //
const byte relaisPin[ANZAHL] = {5, 6, 7}; // Pins für die Relais
// ------------------------------------------------------------------------------------------------------------ //
const int weichenPos1[ANZAHL] = {40, 40, 40}; // linke Position der Servos
const int weichenPos2[ANZAHL] = {120, 120, 120}; // rechte Position der Servos
// ------------------------------------------------------------------------------------------------------------ //
const byte ledGeradePin[ANZAHL] = {8, 9, 10}; // Pin für die LED Zustand gerade
const byte ledAbzweigPin[ANZAHL] = {11, 12, 13}; // Pin für die LED Zustand Anzweig
// ------------------------------------------------------------------------------------------------------------ //
const int speed[ANZAHL] = {8, 8, 8}; // festlegen der Verfahrgeschwindigkeit der Servos
// ------------------------------------------------------------------------------------------------------------ //
boolean weicheToPos1[ANZAHL]; // Sollposition des Servo ( true = Pos1 )
// ------------------------------------------------------------------------------------------------------------ //
MoToButtons taster( buttonPin, ANZAHL, 20, 300 ); // Weichentaster einrichten
MoToServo servos[3];
void setup() {
for (byte i = 0; i < ANZAHL; i++) {
servos[i].attach(weichenPin[i], true );
servos[i].setSpeed(speed[i]);
pinMode(relaisPin[i], OUTPUT);
pinMode(ledGeradePin[i], OUTPUT);
pinMode(ledAbzweigPin[i], OUTPUT);
weicheToPos1[i] = true;
servos[i].write(weichenPos1[i]); // Startstellung Servo
digitalWrite(relaisPin[i], weicheToPos1[i] ); // Startstellung Relais
}
}//Ende void setup
void loop() {
taster.processButtons();
for ( byte i = 0; i < ANZAHL; i++ ) {
if ( taster.pressed(i) ) {
weicheToPos1[i] = !weicheToPos1[i]; // Weichenstellung umschalten
if ( weicheToPos1[i] ) {
servos[i].write(weichenPos1[i]);
} else {
servos[i].write(weichenPos2[i]);
}
}
// Umstellvorgang läuft, Relais umschalten
if ( servos[i].moving() < 50 ) {
digitalWrite(relaisPin[i], weicheToPos1[i] );
}
//--------------------------------LED Steuerung-----
if ((servos[i].moving() == 1) && (weicheToPos1[i] == HIGH))
{
digitalWrite(ledGeradePin[i], HIGH );
digitalWrite(ledAbzweigPin[i], LOW );
}
if ((servos[i].moving() == 1) && (weicheToPos1[i] == LOW))
{
digitalWrite(ledGeradePin[i], LOW );
digitalWrite(ledAbzweigPin[i], HIGH);
}
if (servos[i].moving() > 39)
{
digitalWrite(ledGeradePin[i], LOW );
digitalWrite(ledAbzweigPin[i], LOW );
}
//--------------------------------------------------
} // Ende for - schleife
} // Ende void loop
- Admin
- Administrator
- Beiträge: 1199
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Du ich habe auch mal eine Frage.
Hast du einen guten Servo der bei dir sauber läuft, den ich hier mal testen könnte? Meiner ist warscheinlich defekt. Der zapelt beim Lauf immer hin und her. Wenn ich weiß dass es wirklich der Servo ist, besorge ich mir einen Neuen. Aber wenn der Grund wo anders liegt, dann kaufe ich mir einen Neuen, und habe keine Besserung Deshalb wäre es schön wenn ich für den Ausschluss anderer Fehler mal einen Servo leihweise anschließen könnte.
Schönen Tag
Franz
Hast du einen guten Servo der bei dir sauber läuft, den ich hier mal testen könnte? Meiner ist warscheinlich defekt. Der zapelt beim Lauf immer hin und her. Wenn ich weiß dass es wirklich der Servo ist, besorge ich mir einen Neuen. Aber wenn der Grund wo anders liegt, dann kaufe ich mir einen Neuen, und habe keine Besserung Deshalb wäre es schön wenn ich für den Ausschluss anderer Fehler mal einen Servo leihweise anschließen könnte.
Schönen Tag
Franz
- Admin
- Administrator
- Beiträge: 1199
- Registriert: Mo 20. Apr 2020, 09:47
- Wohnort: 82441 Ohlstadt
- Kontaktdaten:
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Danke nochmal für den Servo.
Und den MG996R habe ich mir noch bestellt.
Hier ist noch die Änderung, über die wir gerade gesprochen haben:
Zu dem Endlos Servo.
Kann es sein dass man dem wenn er rückwärts laufen soll, minus Werte mitgeben muss? Vielleicht kann ich den morgen mal schnell testen. Ich habe noch nicht wirklich eine Idee wie man den richtig ansteuert Aber schaun wa mal, dann sehn wirs schon
Gute Nacht
Franz
Und den MG996R habe ich mir noch bestellt.
Hier ist noch die Änderung, über die wir gerade gesprochen haben:
Code: Alles auswählen
// Weichenschaltung mit TasterPolRelais und Anzeige der Endlagen
// e69-fan
#define MAX8BUTTONS
#include <MobaTools.h>
//Variablendeklaration
const byte weichenPin[] = {2, 3, 4}; // Pins für die Weichenantriebe
// ------------------------------------------------------------------------------------------------------------ //
const byte ANZAHL = sizeof(weichenPin);
// ------------------------------------------------------------------------------------------------------------ //
const byte buttonPin[ANZAHL] = {A1, A2, A3}; // Pins für die Taster
// ------------------------------------------------------------------------------------------------------------ //
const byte relaisPin[ANZAHL] = {5, 6, 7}; // Pins für die Relais
// ------------------------------------------------------------------------------------------------------------ //
const int weichenPos1[ANZAHL] = {40, 40, 40}; // linke Position der Servos
const int weichenPos2[ANZAHL] = {120, 120, 120}; // rechte Position der Servos
// ------------------------------------------------------------------------------------------------------------ //
const byte ledGeradePin[ANZAHL] = {8, 9, 10}; // Pin für die LED Zustand gerade
const byte ledAbzweigPin[ANZAHL] = {11, 12, 13}; // Pin für die LED Zustand Anzweig
// ------------------------------------------------------------------------------------------------------------ //
const int speed[ANZAHL] = {8, 8, 8}; // festlegen der Verfahrgeschwindigkeit der Servos
// ------------------------------------------------------------------------------------------------------------ //
boolean weicheToPos1[ANZAHL]; // Sollposition des Servo ( true = Pos1 )
// ------------------------------------------------------------------------------------------------------------ //
MoToButtons taster( buttonPin, ANZAHL, 20, 300 ); // Weichentaster einrichten
MoToServo servos[3];
void setup() {
for (byte i = 0; i < ANZAHL; i++) {
servos[i].attach(weichenPin[i], true );
servos[i].setSpeed(speed[i]);
pinMode(relaisPin[i], OUTPUT);
pinMode(ledGeradePin[i], OUTPUT);
pinMode(ledAbzweigPin[i], OUTPUT);
weicheToPos1[i] = true;
servos[i].write(weichenPos1[i]); // Startstellung Servo
digitalWrite(relaisPin[i], weicheToPos1[i] ); // Startstellung Relais
}
}//Ende void setup
void loop() {
taster.processButtons();
for ( byte i = 0; i < ANZAHL; i++ ) {
if ( taster.pressed(i) ) {
weicheToPos1[i] = !weicheToPos1[i]; // Weichenstellung umschalten
if ( weicheToPos1[i] ) {
servos[i].write(weichenPos1[i]);
} else {
servos[i].write(weichenPos2[i]);
}
}
// Umstellvorgang läuft, Relais umschalten
if ( servos[i].moving() < 50 ) {
digitalWrite(relaisPin[i], weicheToPos1[i] );
}
//--------------------------------LED Steuerung-----
if ((servos[i].moving() == 0) && (weicheToPos1[i] == HIGH))
{
digitalWrite(ledGeradePin[i], HIGH );
digitalWrite(ledAbzweigPin[i], LOW );
}
if ((servos[i].moving() == 0) && (weicheToPos1[i] == LOW))
{
digitalWrite(ledGeradePin[i], LOW );
digitalWrite(ledAbzweigPin[i], HIGH);
}
if (servos[i].moving() > weichenPos1[i]-1)
{
digitalWrite(ledGeradePin[i], LOW );
digitalWrite(ledAbzweigPin[i], LOW );
}
//--------------------------------------------------
} // Ende for - schleife
} // Ende void loop
Kann es sein dass man dem wenn er rückwärts laufen soll, minus Werte mitgeben muss? Vielleicht kann ich den morgen mal schnell testen. Ich habe noch nicht wirklich eine Idee wie man den richtig ansteuert Aber schaun wa mal, dann sehn wirs schon
Gute Nacht
Franz
Re: Modellbahn_Weichenschaltung mit Taster, PolRelais und Anzeige der Endlagen
Hallo Franz,
die Daten stammen zwar von einem anderen Servo
mfg wolfgang
die Daten stammen zwar von einem anderen Servo
mfg wolfgang
- Dateianhänge
-
- Data.png (116.38 KiB) 831 mal betrachtet
Grüße aus der Heimat der E69
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast