Bluetooth Messwagen
Beim Test der genialen SuperCap Ladeschaltung von Matthias hatte ich in bestimmten Bereichen der Anlage Aussetzer. Das lag an zwei Dingen:
- ich habe die Spannung der Ladeschaltung auf 16V erhöht
- die Spannung in den Bereichen lag unter 16V und die Schienen waren durch nicht Benutzung sehr verstaubt und verdreckt
Um das zu untersuchen wollte ich „mal schnell“ einen Messwagen bauen mit dem man die Schienenspannung an einer beliebigen Stelle der Anlage messen kann.
Matthias hatte ja hier schon gezeigt wie einfach das geht. Der Anfang war super schnell gemacht. Matthias hat uns ja alles zu Verfügung gestellt.
Dann bin ich auf den Geschmack gekommen und wollte noch ein paar „kleine“ Verbesserungen einbauen. Das hat sich dann etwas in die Länge gezogen.
Hier die wichtigsten Erweiterungen:
- Messung der Schienenspannung und einer zusätzlichen externen Spannung. Damit habe ich die Spannung am SuperCap der ziehenden Lok analysiert. Außerdem wird die 5V des Arduinos gemessen.
Zur Messung der Schienenspannung wird das Signal nach dem Gleichrichter verwendet. Die tatsächliche Spannung ist daher um 0.4-0.6V größer. Generell sind die Messungen nicht besonders genau, weil die interne Referenzspannung des Arduinos verwendet wird. - Die Steigung und Neigung der Schiene habe ich eingebaut, weil ich mir vor einiger zeit einen billigen Beschleunigungssensor (ADXL345: https://de.aliexpress.com/item/32281429971.html) gekauft habe welchen ich mal testen wollte. Die Messung ist alles andere als präzise und außerdem stark abhängig von Geschwindigkeitsschwankungen der Lok. Aber sie zeigt einen Trend und offenbart so unnötige Steigungsschwankungen auf der Anlage.
- Ermittlung der Staubsauger Zeit und Strecke haben sich angeboten da die Elektronik in einen Schienenreinigungswagen eingebaut wurde. Es existieren ein Gesamt und „Tages“ Zähler. Letztere kann man per DCC auf Null stellen, wenn der Staubbehälter geleert wird.
Dadurch weiß ich jetzt, dass diese Menge Staub
Auf einer Strecke von 61 Metern in knapp 17 Minuten eingesammelt wurden. Das ist doch toll :-) Wie konnte ich nur ohne diese Information leben…
In Summe ist der Staubsauger, seitdem er gepimpt wurde, 23 Minuten im Einsatz gewesen und hat dabei 82 Meter Gleise geputzt:
- Auch wenn der Staubsauger aus ist wird zurückgelegte Strecke und die Fahrzeit erfasst. Auch hier gibt es zwei Kategorien. Einen „Etappenzähler“ welche die Fahrtzeit und Strecke einer Fahrt misst. Diese Zähler werden automatisch auf 0 gesetzt, wenn eine neue Fahrt beginnt. Mit diesen Zählern wird auch die Maximalgeschwindigkeit zurückgesetzt.
Die Gesamtzeit und Gesamtstrecke dagegen werden permanent im EEPROM gespeichert. - Momentan werden 15 verschiedene Messwerte auf dem OLED Display angezeigt.
Es können 4 verschiedene OLED Displays benutzt werden. Zwei davon können zwei Messwerte gleichzeitig anzeigen, die anderen beiden Displays stellen 4 Werte dar. Ausgewählt werden die angezeigten Werte per DCC Befehl oder (ganz Witzig) per Klopfzeichen. Dazu tippt man einfach kräftig auf das Gehäuse des Messwagens solange dieser steht. Der Beschleunigungssensor erkennt das und gibt den Befehl zum Umschalten an den Arduino weiter.
Hier die momentan unterstützen Anzeigen:
0.87" I2C 128x32 OLED SSD1316 (https://de.aliexpress.com/item/4000182887362.html)
0.91" I2C 128x32 OLED SSD1306 (https://de.aliexpress.com/item/4001028654247.html)
0.96" I2C 128X64 OLED SSD1306 (https://de.aliexpress.com/item/32643950109.html)
1.3" I2C 128X64 OLED SH1106 (https://de.aliexpress.com/item/32683739839.html)
Es können auch zwei gleiche OLED Displays simultan eingesetzt werden. Dann muss beim zweiten Display eine Diode in die SDA Leitung eingebaut werden. - Die Bluetooth Übertragung zum Handy funktioniert weiterhin. Hier passen aber die Werte noch nicht so richtig. Das muss ich mit Matthias noch mal abklären. Alternativ können die Daten auch auf einem PC über den seriellen Plotter der Arduino IDE dargestellt werden. Das gefällt mir besonders gut. Genau so können sie auch im seriellen Monitor mitgeschnitten werden und dann z.B. über Excel aufbereitet werden.
- Der Arduino kann sogar per Bluetooth programmiert werden. Das ist allerdings etwas langsamer als über die serielle Schnittstelle.
- Über DCC können neben der Anzeige noch weitere Funktionen geschaltet werden. Ein wichtiger Punkt ist das Ein- und Ausschalten des Staubsaugers. Bei Messfahrten sollte der Sauger nicht laufen, weil die Vibrationen die Steigungs- und Neigungsmessung beeinflussen.
Der Motor des Saugers kann neben DCC per „Doppel Tipp“ geschaltet werden. Wenn man zweimal schnell hintereinander gegen das Gehäuse Tippt wird der Motor An oder Ausgeschaltet. Er quittiert das indem der Motor für eine Sekunde an geht, wenn er aktiviert wurde oder durch einen ganz kurzen Impuls (100ms) wenn er Ausgeschaltet wurde. Tatsächlich saugen tut er erst wenn der Wagen fährt.
Mit einem Weiteren DCC Kommando wird der Beschleunigungssensor auf 0 gestellt. Dazu muss der Wagen ganz eben stehen. Das ist gar nicht so einfach, weil der Sensor extrem empfindlich ist. Mein Tisch steht nicht eben genug dafür ;-(
Diese DCC Funktionen sind momentan Implementiert:
FN0: On/Off Licht
FN1: On/Off Pause der Distanz Messung
FN2: On/Off Staubsauger Motor
FN3: Impuls Tageszähler des Staubsaugers zurücksetzen
FN4: Impuls Vorangegangene OLED Anzeige
FN5: Impuls Nächste OLED Anzeige
FN6: Impuls Markierung zur Identifikation der Position innerhalb der Runde setzen
FN8: Impuls Steigung und Neigung Kalibrieren - Damit der Messwagen auch bei kurzzeitigen Stromunterbrechungen weiterhin daten per Bluetooth übertragen kann besitzt er einen SuperCap zur Stromversorgung. Damit kann er bis zu 25 Sekunden überbrücken. Das ist wichtig, weil man das Handy oder den PC neu mit dem BT-Modul verbinden muss, wenn die Kommunikation unterbrochen wird.
- Mit einem zusätzlichen Eingang kann man einen Impuls für die Datenaufzeichnung generieren. Damit kann man später die genaue Position auf der Strecke ermitteln oder einfach nur einen „Rundenzähler“ basteln. Dieser Eingang erkennt über einen zusätzlichen Hallsensor einen Magneten auf der Strecke. Denkbar sind auch mehrere Magnete in einem Bestimmten Abstand. So können mehrere Marker gesetzt werden.
- Über einen zusätzlichen per DCC schaltbaren Ausgang könnte man z.B. ein Schlusslicht oder eine Warnlampe schalten.
- …
Doch jetzt schaut erst mal ein kleines Filmchen. Es zeigt wie Uneben die scheinbar ebene Viadukt Runde auf unserer Anlage ist:
(Video vergrößern mit einem Klick)
Ich dachte zunächst, dass die Sensoren nur Blödsinn messen. Aber hier sieht man ein sich wiederholendes Muster nach drei Runden.
(Bild vergrößern mit einem Klick)
Wenn man sich die Strecke genau anschaut, dann sieht man die Steigungen und Gefällestrecken auch. An der rot markierten Stelle bleiben auch tatsächlich manche Lokomotiven bei langsamer Fahrt hängen.
Die Abhilfe ist ganz einfach. Das Tal davor muss etwas aufgeschüttet werden…
Auf dieser Messung sieht man, dass wir im linken Teil nicht genügend Stromeinspeisungen gelegt haben und dass die Schienen schon lange nicht mehr gereinigt wurden:
(Bild vergrößern mit einem Klick)
Momentan habe ich die Schaltung auf einer Lochstreifenplatine aufgebaut. Aber Matthias hat eine Platine dafür entwickelt und in China produzieren lassen. Diese werden wir in den nächsten Tagen in Betrieb nehmen. Falls sie das das tut was sie soll, dann könnt Ihr diese über Matthias bekommen.
Dann gibt es natürlich auch das Programm und vielleicht eine etwas ausführlichere Dokumentation.
Hardi