Schmale Module: Bahndammdurchlass mit Bach

Hier dreht sich alles um die Modellbahn
Helmut
Site Admin
Beiträge: 1532
Registriert: 14 Jan 2019, 19:29

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von Helmut »

Hallo Michael,
jetzt weiß ich endlich, wie ich den Kasten mache. Die Reihenfolge spielt eigentlich keine nennenswerte Rolle. Es wird nur der kurze Befehl "Spiele" an den MP3-Player gesendet, dann geht es mit der Programm direkt weiter. Die LED wird auch in der finalen Version nicht benötigt. Ich nutze sie aktuell um das Timing abzustimmen. Wie lang muss ich z.B. den delay-Befehl ausführen.

Gruß aus KerpeN
Helmut
MHAG
Beiträge: 2039
Registriert: 21 Jan 2019, 01:09

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von MHAG »

Hallo Helmut,

mir ist noch das DELAY aufgefallen; sowas kann Probleme bereiten.
Besser wäre, das von der Zeit abhängig zu machen, dann muss der Prozessor nicht Däumchen drehen.
Also zum Startzeitpunkt die gewünschte Zeitdauer addieren (=Endzeitpunkt) und dann in der LOOP immer wieder abfragen, ob der Endzeitpunkt schon vorbei ist; dann kann der Prozessor was anderes machen, anstatt zu warten.
Ich habe mal einen Lückencode als Beispiel angehängt:

Code: Alles auswählen

byte tasterstatus = LOW;   // speichert, ob Taster gedrückt (=HIGH)
byte tasterSperre = LOW;   // sperrt den Taster , solange er gedrückt ist bzw. Aktion läuft (=HIGH)

// ... Programmcode ...

unsigned long aktionsDauer = 35000;       // Zeitdauer für die Aktion in ms
unsigned long aktionsEnde  = 0;           // End-Zeitpunkt für die Aktion

// ... Programmcode ...

void startaction()
{
  myDFPlayer.play(1); //Play the first mp3
}

// ... Programmcode ...

void loop()
{
  tasterstatus=digitalRead(taster);      //Hier wird der Pin7 ausgelesen 5V = HIGH, 0V = LOW, High startet den Ablauf

  // die Abfrage verhindert, dass Dauerdrücken auf den Taster die Aktion stört - nur der erste Druck
  if (tasterstatus == HIGH && tasterSperre == LOW)
  {
    tasterSperre = HIGH;                // wird erst nach Ablauf zurückgesetzt
    aktionsEnde=millis()+aktionsDauer;  // festlegen, wann die Zeit verstrichen ist
    digitalWrite(13, HIGH);             // Testhandlung: Schalte die Spannung an Pin 13 ein (LED AN)
    startaction();
  }
  
  // hier sind weitere Aktionen möglich, _während_ die andere Aktion läuft
  
  // hier folgen die Aktionen, die nach Ablauf der Zeitdauer stattfinden sollen
  if (aktionsEnde>millis())
  {
    digitalWrite(13, LOW);              // Testhandlung: Schalte die Spannung an Pin 13 aus (LED AUS)
    // den Taster nach dem Loslassen wieder auf "bereit" setzen 
    if (tasterstatus == LOW && tasterSperre == HIGH) tasterSperre = LOW;      // Zurücksetzen der Tastensperre
  }
}
Eine Tastensperre habe ich da auch gleich noch mit eingebaut, damit ein "dicker Daumen" nicht stören kann.

Bei Fragen: Fragen! ;)

Viele Grüße 8-)
Michael
Helmut
Site Admin
Beiträge: 1532
Registriert: 14 Jan 2019, 19:29

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von Helmut »

Hallo Michael,
danke für die Arbeit die Du Dir gemacht hast.
Sehr interessant finde ich Deinen "Delay"-Ersatz. Das kann ich mir in der finalen Version gut vorstellen. In der Schleife wird dann auch noch die Lautstärkeregelung abgefragt. Die wollte ich als zwei Taster für lauter bzw. leiser realisieren. Eine Tastensperre habe ich bereits implementiert, da die Taste nur in der Loop-Schleife abgefragt wird., Sobald die Taste einmal die Action gestartet hat, wird sie erst wieder abgefragt, wenn die Show vorbei ist. Da kann solange darauf rumgetastet werden, wie man will.

Gruß aus KerpeN
Helmut
MHAG
Beiträge: 2039
Registriert: 21 Jan 2019, 01:09

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von MHAG »

Hallo Helmut,

keine Ursache, das habe ich "aus meinem Vorrat" ;) und nur lesbar aufbereitet.

Bei der Tastensperre gehe ich davon aus, dass die Aktion nicht neu starten soll, wenn der Taster durchgehend gedrückt wurde (gibt ja Typen, die sowas "testen"). Zwischendurch sollte er deshalb mal losgelassen worden sein.
Ob sowas dann bei den Lautstärke-Tastern sinnvoll ist? Wahrscheinlich eher nicht, außerdem bedienst die ja nur Du (vermute ich mal :lol: ).

Bin gespannt, was da noch alles kommt :)

Viele Grüße 8-)
Michael
Helmut
Site Admin
Beiträge: 1532
Registriert: 14 Jan 2019, 19:29

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von Helmut »

Hallo Michael,
das Starten der Szene erfolgt durch Aufruf der Prozedur "startaction" in dem Programmteil loop. Ein erneutes Starten ist erst wieder nach dem kompletten Durchlauf möglich, der durch die vielen delays zur Zeit simuliert wird. Da brauche ich keine Tastensperre. Wer die muss hat, die Taste rund 30 - 45 s zu drücken, der darf die Szene gerne direkt neu starten ;) . Anders sieht es bei der Lautstärkeregelung aus. Hier möchte ich in dem Delayersatz abfragen, ob eine der Tasten gedrückt wird. Hier fürchte ich, dass die Schleifen so schnell durchlaufen werden, dass ich meine Finger so schnell gar nicht von der Taste bekomme und so immer mehrere Lautstärkestufen überspringe. Hier muss ich sicherstellen, ein Tastendruck eine Stufe. Aber das ist noch Zukunftsmusik.

Aktuell habe ich die Bibliothek Servo.h eingebunden und die PWM-Eingänge von 2 Servos auf die Pins 9 und 10 gelegt. Diese Pins waren bisher für die Kommunikation mit dem MP3-Player vorgesehen. Da die Bibliothek Servo.h diese Pins bei vielen Boards blockiert, egal ob eine Servo angeschlossen ist oder nicht. Daher nutze ich jetzt für den MP3-Player die Pins 4 und 5. Die Miniservos, die ich zuerst angeschlossen hatte, war leider ein unerwünschtes Ruckeln zu beobachten. Da habe ich viel Zeit gebraucht, bis nach Wechsel des Servotyps plötzlich alles wunderbar lief. Fazit: ich kann einen Sound abspielen und 2 Servos steuern. Das ist alles, was ich brauche :D . Jetzt geht es erstmal an die Hardware wie Baum, Holzfäller und Lautsprecher.

Code: Alles auswählen

/********************************************************************
Steuerung von Sound und Bewegung einer Baumfällung für die Modellbahn

(2023) Helmut Riering
********************************************************************/

//Einbindung der Bibliotheken
//#include "Arduino.h"

#include "DFRobotDFPlayerMini.h"
#include <SoftwareSerial.h>
#include <Servo.h>


//IO und Variablendefinition
int taster=7;         //Pin für den Tasteranschluss zum Starten der Aktion
int tasterstatus=0;   //Speichervariabke für den tastereingang

SoftwareSerial mySerial(/*rx =*/4, /*tx =*/5); //erzeugt ein neues SoftwareSerial-Objekt an den Pins 4 und 5
DFRobotDFPlayerMini myDFPlayer; //erzeugt ein neues Player-Objekt
Servo myServo1; //erzeugt ein neues Servo-Objekt
Servo myServo2; //erzeugt ein neues Servo-Objekt

void startaction()
{
  myDFPlayer.play(1);  //Play the first mp3
  digitalWrite(13, HIGH); // Schalte die Spannung an Pin 13 ein (LED AN)
  myServo1.write(10); // Servoarm 1 auf 10° einstellen
  myServo2.write(10); // Servoarm 2 auf 10° einstellen
  delay(2000);   //2 Sekunden Pause
  myServo1.write(90); // Servoarm 1 auf 90° einstellen
  delay(2000);   //2 Sekunden Pause
  myServo1.write(170); // Servoarm 1 auf 170° einstellen
  delay(2000);   //2 Sekunden Pause
  myServo1.write(10); // Servoarm 1 auf 10° einstellen
  delay(2000);   //2 Sekunden Pause
  myServo2.write(90); // Servoarm 2 auf 90° einstellen
  delay(2000);   //2 Sekunden Pause
  myServo2.write(170); // Servoarm 2 auf 170° einstellen
  delay(2000);   //2 Sekunden Pause
  //delay(23000);
  digitalWrite(13, LOW); // LED AUS
}

void setup()
{
  pinMode(taster, INPUT); //Der Pin mit dem Taster (Pin 7) ist jetzt ein Eingang.
  pinMode(13, OUTPUT); // Pin 13 wird als Ausgang definiert LED auf der Platine geht an, wenn Sound abgespielt wird
  mySerial.begin(9600);
  myDFPlayer.begin(mySerial, /*isACK = */true, /*doReset = */true); //Use serial to communicate with mp3.
  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
  myServo1.attach(9); //Der myServo1 ist am GPIO 9 angeschlossen
  myServo2.attach(10); //Der myServo2 ist am GPIO 10 angeschlossen
}

void loop()
{
  tasterstatus=digitalRead(taster); //Hier wird der Pin7 ausgelesen 5V = HIGH, 0V = LOW, High startet den Ablauf
  if (tasterstatus == HIGH) startaction();
}
Gruß aus KerpeN
Helmut
MHAG
Beiträge: 2039
Registriert: 21 Jan 2019, 01:09

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von MHAG »

Hallo Helmut,

wenn´s läuft, was spricht dagegen?
Wenn es nicht stört, dass ein Dauerdruck (kann ja auch ein klemmender Taster sein) "nur" neu auslöst, passt das schon.
Die Lautstärke-Taster kann man dann halt nur betätigen, wenn die Aktion nicht läuft. Ist vielleicht beim Kontrollhören lästig bzw. zeitaufwändig, aber es geht.
Das mit den Servo-Bibliotheken habe ich auch schon mal festgestellt, die wollen oft bestimmte Pins. Ich hatte mal vor einiger Zeite eine, die wollte partout 3 und 5 -- bis ich das herausgefunden hatte... Aber die war sowieso nicht gut, da konnte man die Geschwindigkeit nicht richtig einstellen.
Pin13 als Aktionsanzeige ist jedenfalls eine gute Idee, das könnte sogar als Tastenausleuchtung den Taster mit "rot" belegen, damit man sinnigerweise erst wieder draufdrückt, wenn das rote Licht aus ist.

Jedenfalls bist Du momentan deutlich weiter als ich, mit Sound habe ich noch nichts gemacht.

Viele Grüße 8-)
Michael
Helmut
Site Admin
Beiträge: 1532
Registriert: 14 Jan 2019, 19:29

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von Helmut »

Hallo Michael,
da hast Du mich missverstanden. Die Lautstärkeregelung kann nur erfolgen, wenn der Lautsprecher aktiv ist, also nur während der Startaction-Prozedur. Die aktuellen delays möchte ich gegen Deine Warteschleife austauschen und in dieser Schleife dann auch die Lauter/Leiser-Taster abfragen. Da brauche ich dann auch die Tastatursperre. Vielleicht sollte ich mal ein Flussdiagramm zeichnen.


Gruß aus KerpeN

Helmut
MHAG
Beiträge: 2039
Registriert: 21 Jan 2019, 01:09

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von MHAG »

Hallo Helmut,

da bin ich tatsächlich in den falschen Zug gestiegen :lol:
Dann sollte es kein Probleme geben ;) von dicken Fingern beim Programmieren abgesehen :mrgreen: Ich weiß, wovon ich schreibe :roll:

Viele Grüße 8-)
Michael
Helmut
Site Admin
Beiträge: 1532
Registriert: 14 Jan 2019, 19:29

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von Helmut »

Hallo,
hier ist es jetzt auch mal weitergegangen. Ich habe mich mit dem Platinenlayout und da vor allem mit der Spannungsversorgung mittels LM2596 beschäftigt (siehe auch viewtopic.php?t=744 und viewtopic.php?t=755). In dem aktuell realisierten Teil wird die Wechselspannung von 15 V~ auf 5 V = gewandelt. Unterm Strich ohne große Abwärme. Die Schaltung sollte bis zu 3 A liefern können. Ich hatte nach durcharbeiten des Datasheets etwas Bedenken, ob das auch klappt, aber es funktioniert. Der Rest der Platine dient zur Aufnahme des Arduinos, des Soundplayers und der Servoanschlüsse.

Bild

Gruß aus KerpeN
Helmut
LAG-Isartalbahn
Beiträge: 418
Registriert: 19 Jan 2019, 18:05
Wohnort: München

Re: Schmale Module: Bahndammdurchlass mit Bach

Beitrag von LAG-Isartalbahn »

Hallo Helmut

meine Anerkennung und Respekt für deine Platine :o .

Wenn ich mich recht erinnere sollte die 16V ~ Stromversorgung verwendet werden, da sie auf den unterschiedlichen Modulen Durchgeschleift ist !
Das verstehe ich jetzt so, es gibt irgendwo einen Trafo 16V~ mit einen unbekannten maximalen Ausgangsstrom der in alle Module einspeist ?
Währe es dann nicht sinnvoll im 16V~ Eingang eine Sicherung vorzusehen ?

Nur so eine spontane Idee!

Hast du die Platine selbst geätzt ?

schöne Grüße
Eduard
Antworten