- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Modellbahnübergang mit schranken

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    Anzeige

    Praxistest und DIY Projekte
    Hallo 1_make_it,
    ich habe zur Zeit einen Arduino uno und wenn meine Lieferung aus China kommt gibt es einen Aruino Nano.
    Also etwas habe ich schon ausprobiert und die Servosteuerung finde ich auch echt super.
    Leider bringt es mir halt nicht sehr viel wenn ich den Arduino immer wieder wenn er etwas machen soll ein Netzteil ind die Steckdose stecken muss und wenn der Sketch am ende ist und wieder in diesen blöden loop hinein geht den Stecker zu ziehen.

    Zu meiner Schulzeit habe ich mit meiner alten Modelleisenbahn herum gebastelt und ganz wilde Relaisstuerungen dafür gebaut.
    Also wenn ich das mit dem Bahnübergang so nicht mehr hin bekommen sollte dann bleibt mir nur das mit der Sromversorgnung und einer kleinen Relaissteuerung die halt ein Anfangs und Endpunkt mechanisch steuert.

    Jetzt noch einmal einen Versuch...heißt der Schuß ging wieder einmal wie erwartet nach hinten los.
    //Variablen Deklaration
    unsigned long prevmicros = 0;

    void setup() {
    Servo myservo; // create servo object to control a servo
    // twelve servo objects can be created on most boards

    int pos = 0; // variable to store the servo position
    int pinEingang = 2;
    int pinAusgang = 9;

    void setup() {
    pinMode(pinEingang, INPUT_PULLUP);
    pinMode(pinAusgang, OUTPUT);
    myservo.attach(9); // Was halt beim Initialisieren so alles einmalig laufen soll
    }

    void loop() {
    // hier kann Code hin
    do {
    int zustand = digitalRead(pinEingang);
    if (zustand == HIGH) {
    digitalWrite(pinAusgang, LOW);
    } else { //zustand == LOW
    }
    for (pos = 50; pos <= 150; pos += 1) { //
    //
    myservo.write(pos); //
    delay(50); //
    }
    delay(20000);
    for (pos = 150; pos >= 50; pos -= 1) { //
    myservo.write(pos); //
    delay(50); // n
    }
    delay(10000); // hier kann Code hin
    unsigned long curmicros = millis();
    prevmicros = curmicros;
    } while (curmicros - prevmicros <= 5000);
    ????? // hier kann Code hin
    }

    Bei den ganzen Fragezeichen da passt ein Code hinein 123 hat er leider auch nicht verstanden!!!

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Mit Arduino kenne ich mich zwar nicht aus, aber der Code ist extrem unleserlich, da es keine Formatierung gibt. Poste den Code mit den Code Tags (#-Button) und passender Formatierung.

    MfG Hannes

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    So, kann das nicht funktionieren:
    Mit copy & paste ohne nachzudenken und die absoluten Grundlagen zu verstehen kann man kein Programm schreiben.
    Klicke auf die Grafik für eine größere Ansicht

Name:	struct.jpg
Hits:	12
Größe:	121,3 KB
ID:	32173
    Zitat Zitat von i_make_it Beitrag anzeigen
    Der Prinzipielle Aufbau eines Arduino Sketchs:
    void setup() //wird genau einmal ausgeführt.
    void loop() // wird als Endlosschleife (loop) immer wieder ausgeführt.
    Zitat Zitat von i_make_it Beitrag anzeigen
    Ich denke schon das auch viele C Anfänger mit der Arduino Sprachreferenz und Einsteiger Tutorials
    http://www.netzmafia.de/skripten/har...erhandbuch.pdf
    C lernen könnten,
    Es darf in einem Arduino Sketch nur genau einen
    void setup () {
    }
    Block und nur genau einen
    void loop () {
    }
    Block geben.

    Geschweifte Klammern markieren immer Anfang und Ende von Funktionen und Anweisungsblöcken.
    Es muß also zu jeder "{" auch eine "}" geben.

    Dein erster Fehler: das erste "void etup()" wird nirgendwo beendet.

    Zweiter Fehler es gibt mehr als ein "void setup()".

    Unschön sind die fehlenden Einrückungen, denn diese hätten Dir sofort das fehlen einer "}" gezeigt und erhöhen die Lesbarkeit ungemein.
    Unnütz und der Übersichtlichkeit abträglich, Remark (Kommentar) Zeichen "//" am Ende vieler Zeilen ohne das dort überhaupt ein Kommentar steht.

    Das zur allgemeinen Programmstruktur.

    Sinnhaftigkeit / Sinnlosigkeit des Code

    Die DO-WHILE Schleife wird solange durchlaufen, solange sie Abbruchbedingung nicht wahr ist.
    Nicht wahr ist sie solange "curmicros - prevmicros <= 5000", also das Ergebniss der Berechnung kleiner oder gleich 5000 ist.
    Da das nur ein Codebeispiel ist, habe ich sinnigerweise "prevmicros = curmicros" direkt in die Zeile davor gesetzt.
    Das Ergebniss der Berechnung wird also meist 0 oder 1 sein und so nie die 5000 übersteigen kann, was zu einer Endlosschleife führt (Für die ist aber ja schon "void loop()" zuständig).
    Versteht man das Konstrukt, fällt einem das auf und man weiß das diese Zeile vor die DO Zeile muß.
    Ich erkenne also das Du den Code nur kopiert hast ohne darüber nachzudenken.

    Aber selbst wenn das korrekt implementiert wäre, ist die Do Schleife immer noch sinnlos.
    Da "unsigned long curmicros = millis()" die Variable curmicros mit dem aktuellen Wert der Funktion "millis()" füttert.
    Sprich das Konstrukt prüft in diesem Fall ob mehr als 5 Sekunden vergangen sind.
    in der Gesamten DO-WHILE Schleife, sind aber:
    delay(50)
    delay(20000)
    delay(50)
    delay(10000)
    -------------
    = 30100

    Delays für 30,1 Sekunden drin.
    Das heist beim einmaligen Durchlaufen der DO-WHILE Schleife vergeht schon mehr als die achtfache Zeit der Abbruchbedingung. Damit würde die Schleife immer nach einem Durchlauf beendet.
    Womit eine Schleife an dieser Stelle keinen Sinn macht.
    Vor allem da das Konstrukt ja die Delays ersetzen soll (diese aber immer noch vorhanden sind.)

    Also noch mal, fang mit ganz kleinen Schritten bei Null an.
    Zitat Zitat von i_make_it Beitrag anzeigen
    Erster Sketch, alternierendes Blinken von zwei LEDs mit Delay.

    Zweiter Sketch, alternierendes Blinken von zwei LEDs mit Timer bzw. millis() (siehe Beispiel).

    Dritter Sketch, alternierendes Blinken von zwei LEDs, über eine bestimmte Dauer, gestartet durch Taster.

    Vierter Sketch, alternierendes Blinken von zwei LEDs, gestartet durch Interrupteingang.

    Fünfter Sketch, Schalter entprellen.

    Sechster Sketch, Servo bewegen.
    Du willst einen Sprintwettkampfe gewinnen, must aber erst mal Laufen lernen.
    Genaugenommen sehe ich Dich momentan noch nicht einmal krabbeln.
    Geändert von i_make_it (02.11.2016 um 07:47 Uhr)

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    Hallo,
    ich wollte nur das ich einen BÜ zum laufen bringe mit so einem Arduino uno und nicht an weinem Wettbewerb teilnehmen bin unsportlich ; )

    Es gibt einfach keinen Sketch mit dem ich mein Servo so ansteuern kann wie ich es brauche.


    #include <Servo.h>

    Servo myservo;

    int pos = 0;

    void setup() {
    myservo.attach(9);
    }

    void loop() {
    for (pos = 0; pos <= 150; pos += 1) { // Servo fährt von 0° bis 150°
    // in steps of 1 degree
    myservo.write(pos); // Servo soll zu der variabelen POS fahren
    delay(15); // in diesem Zeitraum soll der Servo den Weg von 0-150 fahren
    delay(5000); // Servo soll in dieser POS variabel warten
    }
    for (pos = 150; pos >= 0; pos -= 1) { // Servo soll von 150° auf 0° fahren
    myservo.write(pos); // Servo soll zu der variabelen POS fahren
    delay(15); // in diesem Zeitraum soll der Servonn den Weg von 150-0 fahren
    delay(5000); // Servo soll in dieser POS variabel warten
    }
    }


    So und mit diesem Sketch werde ich nun meine ganzen Sorgen mit den blöden Tastern einprogrammieren los.
    Da ich ja sowieso einige Reedkontakte verarbeiten muss kann ich auch gleich mit einem Bistabilenrelais die Stromversorgung ein und aus schalten dann komme ich auch zurecht.
    Das blinken werde ich dann mit einem zweiten Arduino und einem Blinksketch paralell betreiben.
    Es hat funktioniert.
    Danke für Euer Bemühen und weiter hin alles Gute.
    Hochachtungsvoll
    Geändert von alterraucher (02.11.2016 um 18:33 Uhr)

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Wenn man gar nichts selbst machen will, kann man auch einfach das freundliche Modellbahn Forum nebenan, anstelle des Roboter Forums, fragen.
    Google ist Dein Freund!

    https://www.google.de/?gws_rd=ssl#q=...o+bahnschranke


    http://www.stummiforum.de/viewtopic.php?t=123040

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    ja das ist ja schon einmal gut aber es kann keine Servos steuern, da die Produkte die der Modellbauer verarbeitet hat keine Servos direkt am Arduino betreiben.

    Aus diesem Grund habe ich mir hier etwas mehr erhofft!

    Danje noch einmal für die LINKS gehe gleich noch einmal etwas stöbern!

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    Hallo,
    nun habe ich diesen alten Sketch erst einmal endsorgt.
    Ich muss ganz anders an diese Sache heran gehen.
    Ein Kollege hat mich beim Schreiben super unterstützt, da ich mich bisher nur an der Oberfläche befinde und es noch nicht geschafft habe mich in der kurzen Zeit soweit einzulesen.
    Der neue Sketch ist so ganz ohne ein DELAY ausgekommen und durch Timer ersetzt worden.
    Ich kann den Sketch nun noch weiter ausbauen und dann werde ich das geschriebene einmal hier mit hinein stellen.
    Auch die Gundeinstellungen beim ARDUINO 1.6.12 ide habe ich jetzt ordentlich eingerichtet bekommen.

    Etwas Zeit brauche ich aber noch bis die ersten Bilder hier hochgeladen werden.

    Bis dem nächst!
    Geändert von alterraucher (13.02.2017 um 07:09 Uhr)

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    Hallo,
    nun gibt es auch einmal ein kleines Bild von meiner Baustelle Die einzelnen Komponeten zum testen verdrahtet.
    Klicke auf die Grafik für eine größere Ansicht

Name:	Arduino Schrankenbaustelle1.jpg
Hits:	15
Größe:	37,0 KB
ID:	32413

    Der Sketch wird dann beim nächsten Mal folgen.

    Gruß alterraucher

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Okay ich steig hier etwas Spät ein, wollte aber meine Erfahrung mit Modellbau und der Funktionsweise von Schranken ergänzen.

    Üblicherweise arbeiten Schranken mit einem Gegengewicht, welches die Schranken immer in die offene Position zieht. Das ist relativ delikat ausbalanciert. Gesenkt werden die Schranken dann üblicherweise mit einem Seilzug (aus der Vergangenheit her) ... modernere Schranken werden teilweise mit einem Zahnradsystem betrieben haben aber ebenfalls ein Gegengewicht und eine Art Durchrutschsystem, wenn ein Hindernis die Schranke blockiert.

    Im Modell verwendet man sehr häufig das gleiche Prinzip (Ausblanaciertes Gewicht + Zugkraft zu schließen) und zieht die Schranken dann einfach mit einem kleinen Gestänge einem Magneten und einer Spule nach unten. Vorteil ist das authentische wippen wenn die Schranke auf den Stützbock aufschlägt bzw. wenn sie öffnet. Und man braucht nur Strom auf die Spule geben, ohne irgendwelche Servos. Auch wenn die Digitalisierung höchst Lobenswert ist
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    Hallo Ceos,
    ja soweit habe ich das auch verstanden. Da ich etwas mehr als nur eine H0 H0e Anlage habe...bei der Selfkantbahn angefangen und immer noch dabei und zum guten Schluß auch noch bei der DB aushelfe im Museum Koblenz!
    Die Schrankenanlage die ich als Bausatz mir gekauft habe Auhagen Halbschranken.
    Eine einfache Funktion einen dünnen Draht am Servoarm befestigen das andere Ende wird durch die kleine Öse am Schrankenbau gefädelt und fertig ist das ganze.
    Auch Faller Bausätze haben solche Ösen am Schranckenbaum wo man einen Draht zum ansteuern einfädeln kann.
    Das Wippen der Schrankenbäume an den Endlagen kann man ohne weiteres durch programmieren hin bekommen, nur bei einer Halbschrankenanlage ist das meiner Meinung nach zuviel des guten

    - - - Aktualisiert - - -

    Hallo und nun der Sketch:


    #include <Servo.h> // Variablen-Deklaration und Definition

    // das ist für die Servoantriebe und muss überall wo es um die Schranke geht mit hinter die laufzahl geschrieben werden!
    int Kreuz1 = 13; // BITTE NICHT IN KREUZ1 UMSCHREIBEN das geht NICHT!!!!
    int Kreuz2 = 12;
    int Kreuz3 = 11;
    int Kreuz4 = 8;
    int Kreuz5 = 5;
    int Reed1 = 6;
    int Reed2 = 7;

    int buttonState = 0;

    int Schranke1 = 9;
    int Schranke2 = 10;

    unsigned int TimerSchrankeZu = 0;

    Servo Schranke1a; // das a hinter der Zahl ist wichtig und darf nicht vergessen werden!
    Servo Schranke2a;

    unsigned long aktMillis, vorMillis; // aktuelle Millisekunden und vorherige

    byte b = 0;


    boolean KreuzAnAus = LOW; // boolean Kreuz1-x an low werden über internenwiederstand angeschlossen auch ein relais an kreuz3 wird zum läutwerk geschaltet
    boolean Kreuz2AnAus = LOW;
    boolean Kreuz3AnAus = LOW;
    boolean Kreuz4AnAus = LOW;
    boolean Kreuz5AnAus = LOW; // hier wird das alte spulenläutwerk über ein relais mit optokoppler angesteuert!!!
    boolean blink100ms = LOW;
    boolean blink500ms = LOW;
    boolean blink1000ms = LOW;

    //boolean Schranke1u2SollZu = LOW;

    // Funktionsdeklaration
    void Funktion100ms();




    void setup() // put your setup code here, to run once:
    {

    aktMillis = vorMillis = 0;

    pinMode(Kreuz1, OUTPUT);
    pinMode(Kreuz2, OUTPUT);
    pinMode(Kreuz3, OUTPUT);
    pinMode(Kreuz4, OUTPUT);
    pinMode(Kreuz5, OUTPUT);
    pinMode(Reed1, INPUT);
    pinMode(Reed2, INPUT);
    digitalWrite(Reed1, HIGH);
    digitalWrite(Reed2, HIGH);
    Schranke1a.attach(Schranke1);
    Schranke2a.attach(Schranke2);
    Schranke1a.write(10);
    Schranke2a.write(7);


    }




    void loop() // put your main code here, to run repeatedly:
    {

    aktMillis = millis();

    if( aktMillis < vorMillis ) // Wird Bei Variablenüberlauf zurücgesetzt
    aktMillis = vorMillis = 0;



    if( aktMillis - vorMillis >= 100)
    {
    Funktion100ms();
    }

    buttonState = digitalRead(Reed1);

    if(buttonState == LOW)
    { // Schranken ZU
    KreuzAnAus = HIGH;
    TimerSchrankeZu = 30; // Timer auf Wunschzeit setzen auf 3 Sekunden

    }
    else
    {
    buttonState = digitalRead(Reed2);


    if(buttonState == LOW)
    { // Schranken AUF
    KreuzAnAus = LOW;
    Schranke1a.write(10);
    Schranke2a.write(7);
    TimerSchrankeZu = 0; // Timer Reset nicht zwingend erforderlich
    }
    }


    digitalWrite(Kreuz1, KreuzAnAus && blink500ms);
    digitalWrite(Kreuz2, KreuzAnAus && !blink500ms); // ausrufezeichen kehr die funktion um!!!
    digitalWrite(Kreuz3, KreuzAnAus && blink500ms);
    digitalWrite(Kreuz4, KreuzAnAus && !blink500ms);
    digitalWrite(Kreuz5, KreuzAnAus && !blink500ms); //ist der anschlußpin für das läutwerk-relais!!
    }

    // Die Funktion 100ms wird alle 100 ms aufgerufen
    void Funktion100ms()
    {
    b++;

    if(b == 0)
    b = 1;

    blink100ms = !blink100ms;

    if((b % 5) == 0 )
    blink500ms ^= 1;

    if((b % 10) == 0 )
    blink1000ms ^= 1;


    if(TimerSchrankeZu > 0) // Ist Timer/Zähler > 0 ?
    {//ja
    TimerSchrankeZu--;

    if((TimerSchrankeZu == 0) && KreuzAnAus)
    {
    Schranke1a.write(100);
    Schranke2a.write(95);
    }


    }

    vorMillis = aktMillis;
    }
    Geändert von alterraucher (14.02.2017 um 07:50 Uhr)

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. ACHTUNG!!! FEHLER BEI SIMPLEN IR-SCHRANKEN AUFGEDECKT!!!
    Von bexter im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 16.05.2005, 19:04

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests