Datenlogger Pendeluhr

OP #8090852
Lesenswert?

Henrik V. schrieb:

Berndt, ich geh mal davon aus, das Du die einfach verfügbaren Soundkarten basierten Zeitwaagen schon gesichtet hast. Mich wundert, das es da keine Lösung gibt, die auch den Sekungenimpuls eines GPS nutzen (und Absolutzeit über USB, seriell) und ein 2s Pendel lesen können.

Eine Zeitwaage benutzt der Uhrmacher, um eine Uhr schnell einzuregulieren.

Der Datenlogger soll die Langzeitbeobachtung ermöglichen, dafür sind Zeitwaagen nicht gebaut. (Der Datenlogger ist nebenbei natürlich auch eine Zeitwaage).

Grüße Bernd

#8090859
Lesenswert?

Noch mal zu meiner Messung mit diesen auffälligen Wellen: ich muss nicht unbedingt wissen warum das so ist, ich habe nicht vor meine Uhr zu optimieren (ich habe geantwortet weil jemand gefragt hat).

Allerdings würde ich erwarten dass der TO sich dazu äußert wenn er hier schon schreibt was man alles aus der Aufzeichnung eines professionellen Datenloggers erkennen kann. Und eventuell auch die Messung an einer vergleichbaren einfachen Pendeluhr mit eben so einem professionellen Datenlogger zeigt damit man vergleichen kann.

Aber ehrlich gesagt frage ich mich schon was der TO eigentlich möchte: zum einem geht es um Glaskeramik versus Invar, auf der anderen Seite schreibt der TO hier

Beitrag "Re: Datenlogger Pendeluhr"

dass die Lichtschranken schon ganz gut seien weil die LED nur kurz aufblitzt ohne das näher zu quantifizieren bzw. genaue Angaben zu der Lichtschranke zu machen. Und auch der dort erwähnte Schlitz mit 0.5 mm ist nichts besonderes, die von mir erwähnte Gabellichtschranke von Optek gibt es z.B. mit einer Apertur von 0.08 mm auf der Sensorseite.

: Bearbeitet durch User
OP #8090863
Lesenswert?

So eine "einfache" Pendeluhr wird man auch kaum mit einem Datenlogger optimieren können.

Das gesamte Räderwerk ist von der Präzision sehr weit von dem Uhrwerk einer Präzisionsuhr entfernt. Dazu kommt noch das Schlagwerk,hier wird mechanisch Kraft vom Gehwerk abgenommen, um Hebel zu bewegen. (Das müsste man komplett entfernen).

Die Hemmung ist bei solch einer Uhr meist ein gebogenes Stahlteil. Eine Präzisionsuhr hat hier einen massiven Anker mit Rubinpaletten. Sie läuft auch mit viel weniger Kraft (weniger als ein Zehntel, dass eine Gebrauchsuhr hat).

Das entscheidende Teil ist das Pendel als Taktgeber, deswegen wird da ja so ein Aufwand getrieben.

Dann kommen noch 1000 Feinheiten dazu, die eine Gebrauchsuhr von einer PPU unterscheiden. Eine gute PPU hatte fast den Wert eines kleinen Hauses.

Fehler im Räderwerk lassen sich durchaus lokalisieren. Dazu braucht man die genauen Zähnezahlen jedes Zahnrades. Interessant wird es, wenn Fehler nur in bestimmten Kombinationen auftreten.

Deswegen habe ich bei meiner "Uhr" auf ein mechanisches Uhrwerk verzichtet. Ich könnte keine Zahnräder mit der nötigen Genauigkeit herstellen.

Zu den drei Lichtschranken: Die sind für den Antrieb nötig. Die mittlere kann ich auch für den Datenlogger nutzen. Der Schaltpunkt ist der Eintritt der Schaltfahne in den Lichtstrahl, das ist genau genug.

Grüße Bernd

: Bearbeitet durch User
#8090889
Lesenswert?

Dieter S. schrieb:

Aber ehrlich gesagt frage ich mich schon was der TO eigentlich möchte:

Der TE möchte mit seinen Mitteln eine möglichst genaue Uhr bauen und er möchte den Einfluss von Temperatur und Luftdruck auf die Genauigkeit seiner Uhr erfassen.

Was er dazu braucht ist ein System, das ihm erlaubt die Abweichung von der echten Zeit (GPS) in einem angemessenen Zeitraum zu erfassen. Ich bin der Meinung, dass ein Zeitraum im Bereich von 1-3 Stunden erreichbar ist.

#8090893
Lesenswert?

Stephan S. schrieb:

Was er dazu braucht ist ein System, das ihm erlaubt die Abweichung von der echten Zeit (GPS) in einem angemessenen Zeitraum zu erfassen. Ich bin der Meinung, dass ein Zeitraum im Bereich von 1-3 Stunden erreichbar ist.

Dann sollte dem TO klar sein dass die Lichtschranke dafür entscheidend ist (u.a. deren Apertur), diese Erkenntnis hat er aber offensichtlich nicht.

Wenn er nur nach 100 Tagen feststellen will ob seine Uhr auf 1 Sekunde genau geht (davon schrieb er in diesem Thread auch mal) reicht eine DCF77 Uhr und visuelle Kontrolle der angezeigten Zeit. Und nur für das Loggen der Umweltdaten braucht es keine GPS Uhrzeit.

#8090894
Lesenswert?

Dieter S. schrieb:

Wenn er nur nach 100 Tagen feststellen will ob seine Uhr auf 1 Sekunde genau geht (davon schrieb er in diesem Thread auch mal) reicht eine DCF77 Uhr und visuelle Kontrolle der angezeigten Zeit

Er will das natürlich früher wissen, damit er seine mechanischen Werte (v.a. Länge des Pendels) nachregulieren kann. Das geht in 1 h (= 3600000 Millisekunden) mit GPS und einfacher µC-Programmierung auf 1 ppm genau. Der Streit hier geht jetzt darum, wie.

: Bearbeitet durch User
#8090899
Lesenswert?

Günter L. schrieb:

Stephan S. schrieb:

Einfluss von Temperatur und Luftdruck auf die Genauigkeit seiner Uhr erfassen.

Den größten Einfluss wird die Temperatur haben, weil sich durch Ausdehnung die Pendellänge ändert. Da gibt es Kompensationsmethoden, siehe hier: https://de.wikipedia.org/wiki/Kompensation_(Uhr)

Das habe wir schon längst durch, seine Uhr hat ein Pendel aus Glaskeramik.

: Bearbeitet durch User
#8090901
Lesenswert?

1ppm reicht nicht, oder? 1s/100d sind 0,1x ppm...

Und ein Messfenster von 3 Stunden ist m.E. auch doof, weil die Umgebung der Uhr längere Phasen hat (vulgo Tag/Nacht bzw. deren z.B. Temperaturänderung).

Oder vertu' ich mich da? Ich nehme an, wenn man in 3 Stunden feststellt, das die Uhr zu langsam läuft, die Messung aber von 11:00 bis 14:00 "in der Sonne" stattfand, dann reguliert man die Uhr schneller (bzw. das Pendel, eine Uhr isses ja noch nicht) und nachts wenn's kalt wird holt sie wieder derbe auf. Erst Recht dann, wenn es Winter wird.

#8090904
Lesenswert?

Genau das will er ja erfassen, das ist das Kernthema des Threads. Mit welchen Mitteln mache ich das.

Der TE ist Anfäger in Programmierung, also kann man Assembler, aufwendige µC etc vergessen. Micropython oder Arduino-ähnliche Srache ist angesagt. Und er braucht für längere Phasen (wenn es um Bruchteile von ppm geht) auch viel Speicher für die werte.

#8090907
Lesenswert?

Einfluss der Apertur der Lichtschranke: Siehe Anhang, aus dem Datenblatt der OPB830 und OPB840 gegenübergestellt damit man es sofort sieht, das gilt so ähnlich natürlich auch für Lichtschranken von anderen Herstellern. Welche von beiden würde man nehmen wenn man mit möglichst kleiner Streuung der Messwerte eine möglichst genaue Zeitmessung des Durchgangs eines Objekts durch die Lichtschranke machen will?

Angehängte Dateien:
#8090932
Lesenswert?

Dieter S. schrieb:

aus dem Datenblatt der OPB830 und OPB840

Was mich an dem Datenblatt stört, ist die fehlenede Angabe zur genutzten Wellenlänge von Sender und Empfänger. Fremdlicht könnte ein entscheidnedes Kriterium sein, also sollte man den Empfänger so wählen, dass nur IR länger als 800 nm detektiert wird.

Eine Apertur von 0,3 / 0,5 / 1,0 mm bei Sender und Empfänger herzustellen ist easy, Kappe aus schwarzem POM davor und passendes Loch bohren. Das Ausrichten ist dann Feinarbeit, geht aber.

(Firma: Papier & Knalltüten Manufaktur) #8090946
Lesenswert?

Stephan S. schrieb:

Dieter S. schrieb:

aus dem Datenblatt der OPB830 und OPB840

Was mich an dem Datenblatt stört, ist die fehlenede Angabe zur genutzten Wellenlänge von Sender und Empfänger. Fremdlicht könnte ein entscheidnedes Kriterium sein, also sollte man den Empfänger so wählen, dass nur IR länger als 800 nm detektiert wird. Eine Apertur von 0,3 / 0,5 / 1,0 mm bei Sender und Empfänger herzustellen ist easy, Kappe aus schwarzem POM davor und passendes Loch bohren. Das Ausrichten ist dann Feinarbeit, geht aber.

Runde oder eckige Öffnung?

(Firma: Papier & Knalltüten Manufaktur) #8090949
Lesenswert?

Bernd F. schrieb im Beitrag #8090863: ...

Zu den drei Lichtschranken: Die sind für den Antrieb nötig.

...

Grüße Bernd

Nein, Verstoß gegen das KISS Prinzip. Aber du hast es für dich so entschieden und mußt damit klarkommen.

Auch deine Pendelaufhängung ist suboptimal...

#8090963
Lesenswert?

Stephan S. schrieb:

Was mich an dem Datenblatt stört, ist die fehlenede Angabe zur genutzten Wellenlänge von Sender und Empfänger.

Die Angabe "Input Diode LED (See OP240 for additional information—for reference only)" ist im Datenblatt ja auch schwer zu finden, und dann muss man noch die Angabe "890 nm" im Datenblatt der OP240 finden... Und für den "Output Transistor (See OP550 for additional information—for reference only)" findet sich ebenfalls das Datenblatt mit mehr Details.

Eine Apertur von 0,3 / 0,5 / 1,0 mm bei Sender und Empfänger herzustellen ist easy, Kappe aus schwarzem POM davor und passendes Loch bohren.

Genauso einfach wie ein 0.08 mm Loch, mit dieser Apertur gibt es ebenfalls Gablelichschranken (vermutlich auch noch kleiner).

Ich bin jetzt raus, der TO hat bereits geschrieben dass seine Lichtschranken gut genug sind (nach wie vor ohne weitere Angaben zum genauen Typ) und er bekommt hier sicher weiter genügend praxistaugliche Vorschläge...

#8090966
Lesenswert?

Rainer W. schrieb:

Hans schrieb:

Die schnurgerade Linie gibt es halt in der Natur nicht. Da ist alles mehr oder weniger dynamisch und pendelt halt um einen Mittelwert. Der Mittelwert einer vollen Sinusschwingung ist nun mal 0. Insofern wäre ein sinusförmiger Verlauf ideal.

Was soll da eine Sinusschwingung?

Dann schau Dir einfach mal in der vom TO geposteten Grafik, https://www.mikrocontroller.net/attachment/preview/703777.jpg, den Verlauf von Temperatur (rot), Druck (gelb) und die Gangabweichung (braun) an. Das sind sinusförmige Verläufe und das ist für solche Prozesse auch normal. Auch ein eingeschwungener Regelkreis pendelt um einen Mittelwert. Je gleichmäßiger er das tut um so besser ist die Regelcharakterristik eingegestellt. Eine "schurgerade" Linie wäre zwar wünschenswert aber dann würde der Regelkreis nicht mehr funktionieren, der braucht nämlich die Regelabweichung, um den gewünschten Regelwert einstellen zu können. Das Ganze soll natürlich möglichst gleichmäßig ablaufen und das funktioniert am Besten wenn die Abweichungen einen sinusförmigen zeitlichen Verlauf haben.

Rainer W. schrieb:

Eine rauschfreie Messung gibt es nicht, also auch keine schnurgerade Linie.

Auch eine theoretisch rauschfreie Messung, würde am Ende keine schnurgerade Linie ergeben.

#8090971
Lesenswert?

Hans schrieb:

Dann schau Dir einfach mal in der vom TO geposteten Grafik, https://www.mikrocontroller.net/attachment/preview/703777.jpg, den Verlauf von Temperatur (rot), Druck (gelb) und die Gangabweichung (braun) an.

Mit der Briefmarke kann ich nichts anfangen. Warum zitierst du nicht den TO?

Wenn ein Regler sinusförmig schwingt, ist die Verstärkung zu hoch eingestellt.

Eine "schurgerade" Linie wäre zwar wünschenswert aber dann würde der Regelkreis nicht mehr funktionieren, der braucht nämlich die Regelabweichung, um den gewünschten Regelwert einstellen zu können.

Um so eine Restregelabweichung zu vermeiden, wurde der Integralanteil erfunden.

BirnKichler 🧐 S. schrieb:

Runde oder eckige Öffnung?

Bohren ergibt meist eine rund Öffnung, falls man sich nicht zu dusselig anstellt. Und für die OPB830 bzw. OPB840 steht's im Datenblatt, dass sie rechteckig ist.

: Bearbeitet durch User
Beitrag #8090972 wurde vom Autor gelöscht.
#8090973
Lesenswert?

Bernd F. schrieb:

Falls es hier jemand interessiert: Invar und Glaskeramik.

Jetzt gerade gelesen, Du verwendest Robax. Das ist eigentlich bezüglich Ausdehnungskoeffizient das Schlechteste was Schott da anbietet, auch wenn es besser als Invar ist. Das Zeug ist eigentlich für die Glastüren von Kaminöfen gedacht. Da geht es halt darum Spannungsrisse wegen der großen Temperaturdifferenzen zu vermeiden, was mit einem geringen Ausdehnungskoeffizienten am besten gelingt. Die Frage ist halt wie genau der Ausdehnungskoeffizient da eingehalten wird.

Wie von Hinz schon angemerkt wäre Zerodur die bessere Wahl, dürfte aber auch deutlich teurer sein. Ein Maßstab aus Zerodur (ca. 1,5cm breit, 1,5mm dick und 1m lang) kostet dann aber auch um die 3000-4000€. Klar bezüglich des Ausdehnungskoeffizienten ist der natürlich excellent.

#8090974
Lesenswert?

Rainer W. schrieb:

Eine andere Frage ist, ob Zerodur sich auf Grund seiner mechanischen Eigenschaften überhaupt dafür nutzen lässt.

Doch das geht schon. Das ist ausreichend stabil. Wir hatten z.B. auch Stufenendmaße aus Zerodur. Stöße gegen das Material sollte man halt vermeiden, das gibt nämlich unschöne Ausplatzungen etwa so wie bei einer Glasplatte, wenn mit einem harten Gegenstand an die Kante schlägt. Zerodur steckt bis zu einem gewissen Grad Biegelasten weg, aber wenn es zuviel wird bricht es einfach. Zug- bzw. Druckbelastungen, wie sie bei einem Pendel auftreten, sind kein Problem. Man muß sich halt was überlegen wie man das Pendel mechanisch einspannt. Bei uns wurden die Maßstäbe mit einem speziellen Öl auf die Unterlage aufgeklebt.

#8090977
Lesenswert?

Hans schrieb:

Die Frage ist halt wie genau der Ausdehnungskoeffizient da eingehalten wird.

Wenn Schott für Robax für den Ausdehnungskoeffizient zwischen 20°C und 700°C eine mögliche Abweichung von ±0,5 x 10−⁶/K angibt, hält sich Schott doch wohl möglicherweise auch daran, oder?
https://www.schott.com/de-de/products/robax-p1000332/technical-details

: Bearbeitet durch User
#8090979
Lesenswert?

Rainer W. schrieb:

Auf dem Arduino Nano Board wird der ATmega328 verwendet. Wenn du in das Datenblatt dieses µC guckst, siehst du, dass der genau drei Ports besitzt, bezeichnet als "Port B" (8 Bit), "Port C" (7 Bit) und "Port D" (8 Bit). Beim Arduino Nano sind einige der Port-Pins fest belegt, z.B. für ext. Takt (2), serielle Kommunikation (2).

Richtig, macht am Ende, nach Deiner Rechnung, 23 nutzbare Portpins,die alle einzeln ansprechbar sind, d.h. jeder Portpin kann für eine spezielle Aufgabe genutzt werden. Allerdings gibt es einen Unterschied zwischen dem Dabla des Atmega und dem realen Nanoboard, auf Letzterem sind es genau 2 Portpin weniger, aber es reicht trotzdem locker. Auf dem Nanobrettel sind vom Port B nur 6 Pins (PB0 -PB5), Port C 7Pins (PC0-PC6) und bei Port D 8 Pins herhaus geführt. Und ja einige der Portpins PC6, PD0, PD1, PD4 und PD5 sind für spezielle Augaben vorgesehen und die sollte man natürlich möglichst nicht benutzen. Man kann die natürlich auch andereitig verwenden,, wenn mann die speziellen Anwendungszwecke nicht braucht. Trotz dieser Sonderpins sind immer noch 16 Portpins frei verfügbar und das ist für das was der TO vor hat bei weitem ausreichend.

#8090983
Lesenswert?

Rainer W. schrieb:

Mit der Briefmarke kann ich nichts anfangen. Warum zitierst du nicht den TO?

Dann putz einfach mal die Brille. Falls Du das Putztuch nicht findest hier noch der Link Beitrag "Re: Datenlogger Pendeluhr". Scheint ja ja wirklich schwierig zu sein das selbst hinzubekommen

Rainer W. schrieb:

Wenn ein Regler sinusförmig schwingt, ist die Verstärkung zu hoch eingestellt.

Eine "schurgerade" Linie wäre zwar wünschenswert aber dann würde der Regelkreis nicht mehr funktionieren, der braucht nämlich die Regelabweichung, um den gewünschten Regelwert einstellen zu können.

Um so eine Restregelabweichung zu vermeiden, wurde der Integralanteil erfunden.

Ein Regelkreis braucht immer eine Regeldifferenz. Der Integralanteil verschiebt die Regeldifferenz nur in Richtung 0, sie ist aber niemals konstant 0, dann wäre es keine Regelung mehr.

Rainer W. schrieb:

Wenn Schott für Robax für den Ausdehnungskoeffizient zwischen 20°C und 700°C eine mögliche Abweichung von ±0,5 x 10−⁶/K angibt, hält sich Schott doch wohl möglicherweise auch daran, oder?

Natürlich werden die das einhalten. Die Angabe bedeutet halt, daß der reale Ausdehnungskoeffizient +0,5 x 10−⁶/K oder auch -0,5 x 10−⁶/K betragen kann, je nachdem was für ein Charge man erwischt. Der Focus liegt bei Robax halt nicht auf Messtechnik. Für den vorliegenden Fall natürlich nicht relevant.

(Firma: Papier & Knalltüten Manufaktur) #8091136
Lesenswert?

Rainer W. schrieb:

Peter H. schrieb:

Gleich diese Wellen einmal mit den Drehzahlen der einzelnen Zahnräder ab.

Um periodische Fehler durch nicht exakt zentrisch gebohrt Zahnräder aufzuspüren, ist es vielleicht einfacher, direkt das Spektrum zu analysieren und nicht irgendwelche Überlagerungen von Wellen in der Zeitserie versuchen zu interpretieren.

guter Beitrag

#8091472
Lesenswert?

Stephan S. schrieb:

Der TE ist Anfäger in Programmierung, also kann man Assembler, aufwendige µC etc vergessen. Micropython oder Arduino-ähnliche Srache ist angesagt. Und er braucht für längere Phasen (wenn es um Bruchteile von ppm geht) auch viel Speicher für die werte.

Wie wär's, wenn man das aufteilt: Ein Nicht-Anfänger baut und programmiert die Hardware und Bernd macht die Auswertung auf einem normalen PC, pauschal gesagt mit Excel? Damit entfallen alle künstlichen Einschränkungen wie Pin-Anzahl oder Programmiersprache.

Die Hardware müsste alle denkbaren Daten mindestens im Sekundentakt erfassen, aber keine Vorverarbeitung machen. Wegwerfen kann man hinterher immer noch. So sollten später weniger Änderungen nötig werden. Der Mehraufwand für mehr Sensoren ist minimal, wenn man's gleich vorsieht.

Anscheinend gibt es ja nichts passendes fertig. Ja, GPS-Empfänger, RPi oder Schaltnetzteile gibt's fertig, aber für den ganzen Rest wird eine eigene Platine wohl am einfachsten. Zum Beispiel kann man einen fetten STM32 spendieren und mehrere 32-Bit Input Captures nutzen usw.

Man sollte auch einen Analogteil für die Lichtschranke vorsehen. Der LED-Strom muss geregelt werden und Empfänger und Komparator brauchen eine gemeinsame stabile Spannungsversorgung. Dafür wäre ein Schaltbild vom Antrieb nützlich.

Als Taktquelle würde ich einen TCXO mit analoger Temperaturkompensation nehmen: T100F-020.0M. "Natürlich" liefert der ohne Umweg über eine PLL den CPU-Takt. Ja, das gibt nur 50 ns Auflösung, die aber ohne unerwartete Fehlerquellen. Das ist das mindeste, wenn man nach Minuten statt nach Tagen erste Ergebnisse möchte. Der GPS-PPS ist nur für lange Zeiten besser, 30 ns RMS Jitter sind leicht zu schlagen. Außerdem fällt der manchmal ganz aus.

Ein OCXO wäre natürlich besser, der braucht aber über 1 Watt und das Ganze muss aus dem Akku laufen können. Es gibt doch einen Akku für den Antrieb? Bernd?

OP #8091484
Lesenswert?

Bauform B,

das geht aber völlig am Thema vorbei. Um so ein Pendel zu optimieren, bedarf es einer Langzeitbeobachtung über Wochen und Monate.

Ein Monat sind 2,6 Millionen Sekunden, da muss nur die Referenzuhr stimmen. Eine Wertaufnahme pro Stunde wäre völlig ausreichend.

Warum ist das so? Die Umweltbedingungen ändern sich halt langsam. Am einfachsten? sind Temperatureinflüsse zu kompensieren. Dummerweise ist die Luftdichte (nicht nur der Luftdruck) eine entscheidende Störgröße.

Diese Luftdichte ist schwer zu erfassen, weil sie sich aus vielen Faktoren zusammensetzt. Größere Luftdichte bremst das Pendel, andere- seits bekommt das Pendel mehr Auftrieb und wird leichter.

Messen, interpretieren, Konstruktion ändern, von Vorn beginnen. Darum geht es.

Grüße Bernd

#8091515
Lesenswert?

Bernd F. schrieb:

das geht aber völlig am Thema vorbei.

keiner versteht mich :( Die entscheidende Frage war doch: "Könnte jemand ein so Gerät bauen?"

Das muss möglichst einfach werden und trotzdem alle interessanten Daten liefern. Und die fallen eben zweimal pro Pendelperiode an. Wenn man bei der Gelegenheit Luftdruck usw. mit aufzeichnet, wird das Programm einfacher. Wenn man versucht, weniger oft aufzuzeichnen, muss man sich eine Art Kompression ausdenken (schlecht) und später feststellen, dass man anders komprimieren muss (ganz schlecht). Je einfacher, umso funktioniert es!

#8091529
Lesenswert?

Angenommen alle 3 Minuten wird ein Datensatz geschrieben, dann sind dies 31gb im Monat. Die Annahme bezieht sich auf zwei Lichtschranken, 24bit Datensatz und zwei Durchgänge je Sekunde, sowie weiteren 3minuten Datensätzen. Mit zusätzlichem i2c EEPROM und einer zweiten SD Karte sollte die Daten einfach alle 10tage abgeholt werden. Dies sehe ich schon als einfach machbar, wobei ich wirklich einen ocxo empfehle, kostet nicht viel, Und nein, ich würde keine Akku Lösung verwenden.

(Firma: DC3AX) #8091542
Lesenswert?

Bauform B. schrieb:

das geht aber völlig am Thema vorbei.

keiner versteht mich :( Die entscheidende Frage war doch: "Könnte jemand ein so Gerät bauen?"

Klar geht das! Hat man im ESP32 erst mal das richtige Grundgerüst für OTA per WiFi und Webseite, kann man die Schaltung nach Absprache mit dem OP aufbauen und auf dem Tisch soweit testen, dass es grundsätzlich passt. Dann sendet man das ganze, oder besser eine Kopie des ganzen, an den OP und der fängt an zu Messen. Bedarf es weiterer Anpassungen, kann man das im Code korrigieren, das OTA Image backen und dem Op bescheid geben, wenn er auf Update drücken soll. Ob dabei Messreihen verloren gehen, wird am Anfang sicher egal sein, da Entwicklungsphase. Später sollte der Code so aktualisiert werden, dass da nichts verloren geht, oder man baut einen Download mit ein.

Es gibt eine ganze Reihe Varianten, die es erlauben ESP32 mit OTA zu aktualisieren.

OP #8091679
Lesenswert?

Das Thema Datenlogger hat mich jetzt fasziniert. Ich werde erstmal selbst versuchen, was funktionsfähiges hinzustellen. Mehr als Scheitern kann ich nicht.

Nun warte ich auf DPD, oder so.

Für die Zwischenzeit gibt es genug Baustellen. Eigentlich sammel ich ja alte Stoppuhren. Vor ein paar Wochen konnte ich eine exotische Auburndale finden.

https://uhrforum.de/threads/seltene-hemmungen.622990/

Runterscrollen, kommt irgendwann.

Ganz ohne Elektronik.

Die Uhr hat mir Schmerzen bereitet beim Überholen. Jede Schraube war so fest, dass ich immer Angst hatte, was zuerst bricht. (Schraubenkopf oder Schraubendreher).

Grüße Bernd

: Bearbeitet durch User
(Firma: Papier & Knalltüten Manufaktur) #8091722
Lesenswert?

Bernd F. schrieb:

Das Thema Datenlogger hat mich jetzt fasziniert. Ich werde erstmal selbst versuchen, was funktionsfähiges hinzustellen.

... Endlich

Für die Zwischenzeit gibt es genug Baustellen. Eigentlich sammel ich ja alte Stoppuhren. Vor ein paar Wochen konnte ich eine exotische Auburndale finden. https://uhrforum.de/threads/seltene-hemmungen.622990/ Runterscrollen, kommt irgendwann. Ganz ohne Elektronik.

... Nicht nur das, ohne Computer, ohne Software, ohne KI, ohne komplizierte Maschinen. Echte Kunstwerke!

Grüße Bernd

#8091738
Lesenswert?

Stephan S. schrieb:

Chris S. schrieb:

Angenommen alle 3 Minuten wird ein Datensatz geschrieben, dann sind dies 31gb im Monat.

Bitte rechne das vor.

Datensatz: Was ich gerechnet habe, aber irgendwie bin ich von Mb auf Gb gekommen, 2 Lichtschranken * (24bit) timing * 2 durchgaenge * 180 Sekunde = 2160 byte. Dazu kommt noch ein 32bit Wert fuer die Unix Time, ein 16bit incremental counter fuer den Datensatz, ein length byte und CRC, egal ob 8bit oder 16bit, rechne mal mit 8bit, weil is besser passt. Dies macht 8 bytes, + angenommen Feuchtigkeitssensor mit Temperatur, RTC mit Temperatur, Temperatursensor, Drucksensor mit Temperatur, macht 6x 2byte = 12byte, angenommene 3x 32bit timing oder flag register ergeben dann insgesamt 2193 bytes alle 3 Minuten. 2193*20 (Stunden) * 24 (Tag) * 31 (Monat) = 32140800 bytes oder aufgerundet 31 Mb. je Monat. Wenn man jetzt vor dem SD_KARTEN Schreiben eine Led blinken laesst, und beim SD-Karten Schreiben die Led an bleibt, kann man die SD Karte mit einer anderen einfach nach dem Schreiben wechsel Es wurde damit gerechnet, entweder einen Sensor anzuschliessen und Eintritt sowie Austrittsmoment des Pendels zu erfassen, oder eben zwei IR Sensoren welche nur den Eintrittswert erfassen. Je Page passen 40 Sekunden, sowie 24byte andere Sensordaten rein. Demnach muesste man in einem Interwall von 80 Sekunden jeweils zwei Pages schreiben, waehrend die Dritte befuellt wird. Ein Austausch der SD Karten ist in dieser Zeit leicht machbar. Anstelle der 3 Pages koennte man auch nur einen buffer nehmen, z.B. 48byte fuer 4 Sekunden, und anstelle dessen nur 2 Pages verwenden, sowie z.B. die Sensordaten jede Minute messen und abspeichern. Mfg Chris

#8091741
Lesenswert?

Rainer W. schrieb:

Bauform B. schrieb:

Die Hardware müsste alle denkbaren Daten mindestens im Sekundentakt erfassen, aber keine Vorverarbeitung machen.

Warum willst du dem System einen künstlichen zweiten Takt aufdrücken. Die Zeitquantisierung erfolgt doch bereits durch das Pendel. Alles andere ist langsam dagegen.

Das will ich garnicht, deswegen "mindestens". Man könnte sogar sagen, dass es garkeinen solchen Takt gibt, nur Ereignisse (zweimal Lichtschranke, GPS-PPS und Erschütterungen). Aufgezeichnet wird jeweils der Zählerstand des Timers. Die Unix Time braucht man genau genommen nicht, man bekommt sie auch nur zusammen mit dem PPS.

OP #8093682
Lesenswert?

Nachdem alle benötigten Teile eingetroffen sind, habe ich alles auf einem Brett fixiert. (Der GPS-Empfänger findet recht schnell Empfang).

Dann dachte ich mir: Fragst du mal die KI. Programm: 1800 Impulse zählen (Lichtschranke Pendel über Optokoppler) Dann Zeitstempel auf SD-Karte schreiben.

Läuft leider nicht. (Siehe Bild).

Grüße Bernd

Angehängte Dateien:
#8093683
Lesenswert?

1800 Impulse zählen (Lichtschranke Pendel über Optokoppler)

Kommt denn alle Sekunden ein Impuls in den Arduino rein?

Ich kenne mich mit Arduino-Sprech nicht aus, als Test formalisiert wäre das:

1
definiere Pin1 als Eingang   # Lichtschranke
2
definiere Pin2 als Ausgang   # LED über Widerstand
3
definiere Variable X als Bit
4

5
solange True:
6
    Lese Pin1 nach X
7
    gebe X auf Pin2 aus

Dann müsste die LED im Rhythmus des Pendels blinken

: Bearbeitet durch User
OP #8093686
Lesenswert?

Lichtschranke war da noch nicht in Betrieb. Das war der Test auf Fehler im Programm. Anscheinend kann der Arduino mit "failedChecksum" nichts anfangen?

Einen mechanischen Fehler in meinem analogen Anzeigeinstrument konnte ich aber heute finden: Der Sekundenzeiger sitzt nicht fest genug.

Die Magnetspule schaltet recht knackig, das Futter (Kunststoff) des Zeigers sitzt nicht fest genug. Nach 10 Stunden (36,000) Klicks, verschiebt er sich um ca. 1 Sekunde +. (1,5 mm).

Abhilfe: Neues Futter aus Messing drehen und in den Sekundenzeiger einbauen.

Grüße Bernd.

#8093691
Lesenswert?

Bernd F. schrieb:

Läuft leider nicht.

Hast du der KI Zugriff auf die TinyGPS-Header gegeben?

Da hätte die vmtl. gefunden, dass es "gps.time.age()" gibt:

1
uint32_t age() const       { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; }

Die lastCommitTime hängt auf den Ersten Blick davon ab, wann der letzte gültige NMEA-Datensatz vollständig vom UART gelesen wurde, und nachdem die Datensätze keine fixe Länge haben, ist das ein sehr "wackeliger" Wert.

OP #8093713
Lesenswert?

Norbert, die Hoffnung stirbt zuletzt. Natürlich habe ich mir als Neueinsteiger mal Grundlagen angesehen und eine Led blinken lassen.

Das soll aber ein Werkzeug werden. So wie eine Wasserpumpenzange. Da muss ich den Stahl auch nicht selbst herstellen und die Teile aus dem Vollen fräsen.

Deswegen frage ich die KI.(Dieses Fragen ist ja noch verbesserungswürdig).

Grüße Bernd

#8093718
Lesenswert?

Bernd, das ging selbstverständlich nicht gegen dich.

Vielmehr darum, dass ich – wie alle andere Neulinge auch – beim Erstflug zur PPL Ausbildung natürlich erst einmal mit einer Extra300 sowie einer Pitts Kunstflug-Manöver geflogen bin. Was man halt so macht wenn man gerade anfängt.

: Bearbeitet durch User
#8093730
Lesenswert?

Ich oute mich gerne als Fan von Micropython. Python nutze ich sowieso, ich bin zu alt (bzw. zu faul) um noch eine Programmiersprache zu lernen (Algol und Fortran etc habe ich schon wieder vergessen) also Micropython. Damit geht eine Menge auch auf µC-Ebene.

Beispiel 1800 Impulse zählen:

1
from machine import Pin
2
import time
3

4
p4 = Pin(4, Pin.IN)   # GPIO4 ist Eingangs-Pin
5
i4 = 0
6

7
# IRQ erhoeht i4 um 1
8
def edge4(p):
9
    global i4
10
    i4 += 1
11

12
# IRQ aktivieren
13
p4.irq(trigger=p4.IRQ_RISING, handler=edge4)   # steigende Flanke
14

15
t0 = time.ticks_ms()   # Timer Startwert Millisekunden
16
while True:
17
    if i4 == 1800:
18
        break
19
    time.sleep(0.1)    # 0.1 Sekunden warten
20

21
t9 = time.ticks_ms()   # Timer Endwert Millisekunden
22
print(t0, t9, time.ticks_diff(t9, t0))   # Startwert, Endwert, Differenz

Anmerkung. time.ticks:diff() ist motwendig, da der Timer überlaufen kann. time.ticks_diff() berücksichtigt das und errechnet die richtige Differenz auch bei einem Überlauf.

: Bearbeitet durch User
(Firma: Papier & Knalltüten Manufaktur) #8093890
Lesenswert?

Bernd F. schrieb:

Nachdem alle benötigten Teile eingetroffen sind, habe ich alles auf einem Brett fixiert. (Der GPS-Empfänger findet recht schnell Empfang). Dann dachte ich mir: Fragst du mal die KI. Programm: 1800 Impulse zählen (Lichtschranke Pendel über Optokoppler) Dann Zeitstempel auf SD-Karte schreiben. Läuft leider nicht. (Siehe Bild). Grüße Bernd

Auf deinem gezeigten Bild steht sinngemäß das die Kompilierung fehlerhaft ist. Die Lösung könnte in der Beseitigung des Fehlers liegen. Ich habe selber schon einige Programme mit der Hilfe der KI programmiert und habe festgestellt das es eine Ochsentour sein kann bis es korrekt und zuverlässig funktioniert.

Also fleißig weiter machen und immer alle Versionen inklusive der Fehlermeldungen sichern.

OP #8094054
Lesenswert?

Ich habe heute mal eine andere Variante von der KI angefordert. Die lässt sich ohne Fehlermeldung aufspielen.

Blöd ist aber, dass keine Daten auf die SD-Karte geschrieben werden. Die Überschriften (Zeit, Temperatur usw.) werden aber angezeigt.

Eventuell ein Verdrahtungsfehler?

Da bleibe ich dran.

Grüße Bernd

#8094062
Lesenswert?

Bernd F. schrieb:

Ich habe heute mal eine andere Variante von der KI angefordert. Die lässt sich ohne Fehlermeldung aufspielen. Blöd ist aber, dass keine Daten auf die SD-Karte geschrieben werden.

Das ist der Unterschied zwischen ›kann fehlerarm übersetzt werden‹

und

›macht was es soll‹

Da haben's die Gondolieri in Venedig einfacher. Die haben längere Stangen zum herumstochern.

(Firma: Papier & Knalltüten Manufaktur) #8094065
Lesenswert?

Bernd F. schrieb:

Ich habe heute mal eine andere Variante von der KI angefordert. Die lässt sich ohne Fehlermeldung aufspielen. Blöd ist aber, dass keine Daten auf die SD-Karte geschrieben werden. Die Überschriften (Zeit, Temperatur usw.) werden aber angezeigt. Eventuell ein Verdrahtungsfehler?

dann sage das doch der ki, ist das sooo schwierig?

so fämngt man an: hast du das pendel angeschlossen? wenn ja, dann klemme es ab und ersetze es durch einen schalter den du per hand betätigst

#8094072
Lesenswert?

im Deinem Antwort Text schreibst Du Deine Bemerkungen wie gewohnt.

den Code-Block beginnst Du mit (code) in einer Zeile, dann kommt Dein Prograemm in einer neuen Zeile per copy/paste und dann (/code) in einer neuen Zeile zum Abschkluss. Statt der runden Klammern musst Du eckige Klammern benutzen, sonst klappt das hier mit meiner Anleitung nicht.

Danach kannst Du nochmal weitere Bemerkungen machen. Mit der Vorschau kannst Du das voarab kontrollieren.

Gruss S. (auch 7x)

: Bearbeitet durch User
OP #8094074
Lesenswert?

Irgendwie ist heute der Wurm im Internet. Das Aufrufen einer Seite dauert ewig. Heute vormittag ging stundenlang gar nichts.

Ich probiere das jetzt mal so:

#include <SPI.h> #include <SD.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <TinyGPS++.h>

// Pins definieren const int GPS_PPS_PIN = 2; // PPS-Signal vom GPS für Sekundentakt const int LICHTSCHRANKE_PIN = 3; // Signal von der Lichtschranke const int SD_CS_PIN = 10; // Chip Select für SD-Kartenleser

// Speicher-Intervall für die Lichtschranke (jeder 1800. Impuls) const unsigned long SPEICHER_INTERVALL_IMPULSE = 1800;

// Instanzen TinyGPSPlus gps; Adafruit_BME280 bme;

// Volatile Variablen für die Interrupts volatile unsigned long ppsMicrosRef = 0; // Systemzeit der letzten GPS-Sekunde volatile unsigned long eventMicros = 0; // Systemzeit des 1800. Impulses volatile unsigned long eventPpsRef = 0; // PPS-Referenzwert beim 1800. Impuls volatile bool eventTriggered = false;

// Globale Zähler und Zwischenspeicher unsigned long gesamtImpulsZaehler = 0; unsigned long logImpulsNummer = 0;

// Globale GPS-Zeitvariablen (werden im Hintergrund aktualisiert) volatile uint8_t gpsStunde, gpsMinute, gpsSekunde; volatile uint8_t gpsTag, gpsMonat; volatile uint16_t gpsJahr;

// Temporäre Kopien der Zeit für das sichere Loggen im Loop uint8_t logStunde, logMinute, logSekunde, logTag, logMonat; uint16_t logJahr;

// Interrupt-Service-Routine für den präzisen GPS-Sekundentakt (Pulse Per Second) void ppsISR() { ppsMicrosRef = micros(); }

// Interrupt-Service-Routine für die Lichtschranke void lichtschrankeISR() { gesamtImpulsZaehler++;

// Nur beim exakt 1800. Impuls frieren wir die Zeiten ein if (gesamtImpulsZaehler % SPEICHER_INTERVALL_IMPULSE == 0) { eventMicros = micros(); eventPpsRef = ppsMicrosRef;

1
// GPS-Zeitstempel für diesen Moment sichern
2
logStunde  = gpsStunde;
3
logMinute  = gpsMinute;
4
logSekunde = gpsSekunde;
5
logTag     = gpsTag;
6
logMonat   = gpsMonat;
7
logJahr    = gpsJahr;
8

9
logImpulsNummer = gesamtImpulsZaehler;
10
eventTriggered = true;

} }

// Hilfsfunktion zur Formatierung des CSV-Zeitstempels (DD.MM.YYYY;HH:MM:SS) void schreibeZeitstempel(File &file, uint8_t tag, uint8_t monat, uint16_t jahr, uint8_t stunde, uint8_t minute, uint8_t sekunde) { if (tag < 10) file.print("0"); file.print(tag); file.print("."); if (monat < 10) file.print("0"); file.print(monat); file.print("."); file.print(jahr); file.print(";");

if (stunde < 10) file.print("0"); file.print(stunde); file.print(":"); if (minute < 10) file.print("0"); file.print(minute); file.print(":"); if (sekunde < 10) file.print("0"); file.print(sekunde); }

void setup() { Serial.begin(115200); Serial1.begin(9600); // Echte Hardware-Serielle für GPS auf Uno R4 (Pins 0/1)

pinMode(GPS_PPS_PIN, INPUT); pinMode(LICHTSCHRANKE_PIN, INPUT_PULLUP);

if (!bme.begin(0x76)) {
Serial.println("BME280 nicht gefunden! I2C-Adresse prüfen (0x76 oder 0x77)."); while (1); }

if (!SD.begin(SD_CS_PIN)) { Serial.println("SD-Kartenfehler!"); while (1); }

// Header für das gemeinsame CSV-Logfile anlegen if (!SD.exists("datenlog.csv")) { File dataFile = SD.open("datenlog.csv", FILE_WRITE); if (dataFile) { dataFile.println("Impuls_Nr;Datum_UTC;Zeit_UTC;Mikrosekunden;Temperatur_C;Luftdruck_hPa;Luftfeuchte_Prozent"); dataFile.close(); } }

// Interrupts aktivieren attachInterrupt(digitalPinToInterrupt(GPS_PPS_PIN), ppsISR, RISING); attachInterrupt(digitalPinToInterrupt(LICHTSCHRANKE_PIN), lichtschrankeISR, FALLING);

Serial.println("System bereit. Warte auf Lichtschranken-Impulse..."); }

void loop() { // 1. GPS-Daten kontinuierlich auslesen while (Serial1.available() > 0) { if (gps.encode(Serial1.read())) { if (gps.time.isUpdated() && gps.date.isValid()) { noInterrupts(); gpsStunde = gps.time.hour(); gpsMinute = gps.time.minute(); gpsSekunde = gps.time.second(); gpsTag = gps.date.day(); gpsMonat = gps.date.month(); gpsJahr = gps.date.year(); interrupts(); } } }

// 2. Den 1800. Impuls verarbeiten und zusammen mit dem BME280 speichern if (eventTriggered) { eventTriggered = false;

1
// Sub-Sekunden-Offset in Mikrosekunden berechnen
2
unsigned long logSubSekundeMicros = eventMicros - eventPpsRef;
3

4
// Umweltdaten vom BME280 genau im Moment des Logs abfragen
5
float temp = bme.readTemperature();
6
float pres = bme.readPressure() / 100.0F; 
7
float hum  = bme.readHumidity();
8

9
// Daten zeilenweise wegschreiben
10
File dataFile = SD.open("datenlog.csv", FILE_WRITE);
11
if (dataFile) {
12
  dataFile.print(logImpulsNummer);
13
  dataFile.print(";");
14
  
15
  schreibeZeitstempel(dataFile, logTag, logMonat, logJahr, logStunde, logMinute, logSekunde);
16
  dataFile.print(";");
17
  
18
  dataFile.print(logSubSekundeMicros);
19
  dataFile.print(";");
20
  
21
  dataFile.print(temp, 2);
22
  dataFile.print(";");
23
  dataFile.print(pres, 2);
24
  dataFile.print(";");
25
  dataFile.println(hum, 2); // Schließt die Zeile ab
26
  
27
  dataFile.close();
28
  
29
  Serial.print("Ziel erreicht! Impuls ");
30
  Serial.print(logImpulsNummer);
31
  Serial.println(" erfolgreich geloggt.");
32
} else {
33
  Serial.println("Fehler: datenlog.csv konnte nicht geöffnet werden!");
34
}

} }

Grüße Bernd

#8094096
Lesenswert?

Bernd F. schrieb:

Ich habe heute mal eine andere Variante von der KI angefordert. Die lässt sich ohne Fehlermeldung aufspielen. Blöd ist aber, dass keine Daten auf die SD-Karte geschrieben werden.

Mir fehlt jegliches Verständnis für die Leute, die hier meinen, ihre Aufgaben mit KI lösen zu können.

Du hast Arduino, da gibt es zu jeder Funktion Beispiele. Es ist zeitaufwendig, aber aus meiner Sicht ohne Alternative: Stück für Stück Einzelfunktionen programmieren und austesten, die man dann später zum Gesamtwerk zusammefügt.

Bernd F. schrieb:

Kleine Anleitung für Volldeppen wäre da angebracht.

Na ja ...

Ich bin Schlosser und deutlich über 70.

Diese Ausrede wird nicht akzeptiert, Du kommst im Forum überwiegend logisch und strukturiert rüber.

Also Anleitung, dann gibt es den Code.

Du hast Dein Programm als Datei (Name.ino), gehe einfach unter dem Eingabefeld auf "Durchsuchen" und hänge diese hier an.

(Firma: Papier & Knalltüten Manufaktur) #8094176
Lesenswert?

Manfred P. schrieb:

Bernd F. schrieb:

Ich habe heute mal eine andere Variante von der KI angefordert. Die lässt sich ohne Fehlermeldung aufspielen. Blöd ist aber, dass keine Daten auf die SD-Karte geschrieben werden.

Mir fehlt jegliches Verständnis für die Leute, die hier meinen, ihre Aufgaben mit KI lösen zu können.

Das hilft dem TO aber nicht.

Du hast Arduino, da gibt es zu jeder Funktion Beispiele. Es ist zeitaufwendig, aber aus meiner Sicht ohne Alternative: Stück für Stück Einzelfunktionen programmieren und austesten, die man dann später zum Gesamtwerk zusammefügt.

Das habe ich mehrfach erfolglos versucht dem TO beizubringen.

Bernd F. schrieb:

Kleine Anleitung für Volldeppen wäre da angebracht.

... Er sollte erst einmal die guten Ratschläge befolgen... Der TO kommt mir vor als wenn ein Stellmacher im Kopfe einen Formel 1 Rennwagen konstruieren will...

: Bearbeitet durch User
#8094314
Lesenswert?

Dann "prellt" deine Lichtschranke, und löst "lichtschrankeISR" pro Durchgang mehrfach aus.

Quickfix:

1
void lichtschrankeISR() {
2
  unsigned long jetzt = micros();
3
  static unsigned long letzterPuls = 0;
4
  if (jetzt - letzterPuls < 10000) return;  // < Mindestabstand, hier 10 ms, ggfs. vergrößern.
5
  letzterPuls = jetzt;
6

7
  gesamtImpulsZaehler++;
8
....

Und um GPS-Fehler auszuschließen: einfach den aktuellen "millis()" - Wert mit in eine CSV-Spalte schreiben, der läuft ja unabhängig vom GPS hoch.

: Bearbeitet durch User
OP #8094319
Lesenswert?

Εrnst B. schrieb:

Dann "prellt" deine Lichtschranke, und löst "lichtschrankeISR" pro Durchgang mehrfach aus. Quickfix:

void lichtschrankeISR() {

unsigned long jetzt = micros();

static unsigned long letzterPuls = 0;

if (jetzt - letzterPuls < 10000) return; // < Mindestabstand, hier 10 ms, ggfs. vergrößern.

letzterPuls = jetzt;

gesamtImpulsZaehler++;

....

Die Lichtschranke geht auf einen Optokoppler (C 817), dann zum Eingang. Die Led am Koppler ist dauerhaft an und wird beim Pendeldurchgang kurz dunkel. Eine Testled am Ausgang leuchtet bei jedem Durchgang kurz auf.

Das die Zeit nicht richtig angezeigt wird, müsste eine andere Ursache haben. Wenn 1800 Impulse in kurzer Zeit gezählt werden, müssten mehr Datensätze nach einigen Stunden auf der Karte sein.

Bernd

: Bearbeitet durch User
#8094374
Lesenswert?

Einfach in Software machen. Wenn's interessiert:

1
void lichtschrankeISR() {
2
  prellImpulsZaehler++; // <--
3

4
  unsigned long jetzt = micros();
5
  static unsigned long letzterPuls = 0;
6
  if (jetzt - letzterPuls < 10000) return;
7
  letzterPuls = jetzt;
8

9
  gesamtImpulsZaehler++;
10

11
....

und beide Zähler in's CSV. Wenn die gleich laufen, ist Prellen nicht das Problem.

und den millis()-Wert noch mit ins CSV. Der ist zwar nicht genau, aber auch nicht extrem daneben.

Wenn laut den Millis 28 oder 32 Minuten vergangen sind, die GPS-Uhrzeit aber nur 3 Minuten hochgegangen ist, stimmt da wohl irgendwas nicht.

OP #8094376
Lesenswert?

Jetzt scheint es zu funktionieren.

Ich habe den direkten Weg von der Lichtschranke (Eingang der Schaltung für die Magnetspulen) genommen, vorher war es ein Ausgang, der auch die Magnet- spule des Anzeigewerkes versorgt.

Rein optisch sieht das Aufblitzen der Led am Optokoppler immer noch gleich aus, es wurde aber nur ein Datensatz in 30 Minuten auf die Karte geschrieben. So soll das sein. (Länger habe ich noch nicht probiert).

Ich schau mal in ein paar Stunden, was da auf der Karte steht.

Der Kartenleser im PC macht mir etwas Probleme (Wackelkontakt ?) Da muss ich mal nachsehen.

Grüße Bernd

OP #8094379
Lesenswert?

BirnKichler 🧐 S. schrieb:

nun, was kann man aus diesem thread lernen? die uhrmacher vor hunderten Jahren hatten einfach mehr drauf an wissen und fähigkeiten, ohne ki, ond controller, ohne software, ohne cad, ohne strom, ohne internet, ohne foren, etc pp

So einfach kann man das nicht sagen. Nur wenige Uhrmacher waren auf der Jagd nach der letzten Sekunde.

Dazu mussten sie endlose Datenerfassung (auf Papier) machen. Die Interpretation dieser Werte und dann eventuelle Fehlerabhilfe am Schwingsystem zu finden, hat nichts mit dem Datenlogger zu tun.

Er erleichtert diese Datenerfassung nur ungemein.

Grüße Bernd

(Firma: Papier & Knalltüten Manufaktur) #8094428
Lesenswert?

Bernd F. schrieb:

BirnKichler 🧐 S. schrieb:

nun, was kann man aus diesem thread lernen? die uhrmacher vor hunderten Jahren hatten einfach mehr drauf an wissen und fähigkeiten, ohne ki, ond controller, ohne software, ohne cad, ohne strom, ohne internet, ohne foren, etc pp

So einfach kann man das nicht sagen. Nur wenige Uhrmacher waren auf der Jagd nach der letzten Sekunde. Dazu mussten sie endlose Datenerfassung (auf Papier) machen. Die Interpretation dieser Werte und dann eventuelle Fehlerabhilfe am Schwingsystem zu finden, hat nichts mit dem Datenlogger zu tun. Er erleichtert diese Datenerfassung nur ungemein. Grüße Bernd

Auch du kommst ans Ziel. 😎 Ich verfolge deine Aktivitäten auch in den anderen Foren.

#8094433
Lesenswert?

Bernd F. schrieb:

Geht die Lichtschranke auf einen Schmitt-Trigger? Falls nicht, würde das das Prellen erklären.

noch nicht, aber ich lese mich da gerade etwas ein. Ich habe noch NE555 im Fundus,sollte doch gehen?

Der 555 kann alles, aber nichts anständig. Besser ein Logic-IC wie das:

Stephan S. schrieb:

Ich würde einfach einen SN74HC4014 nehmen

oder, von mir bevorzugt, CD4093.

OP #8094507
Lesenswert?

Heute Nacht lief das Teil durch. Das ist natürlich ein viel zu kurzer Zeitraum, um an eine Analyse zu denken.

Die Mikrosekunden sind Unsinn. Da bräuchte ich nur 3 Stellen.

Aber 1800 Impulse in 30 Minuten kommt schon hin. Die Temperatur ist in meinem "Gewächshaus" nachts recht stark gesunken. Das Kompensationselement des Pendel ist noch zu wirkungsvoll. Wie geplant wird das kalte Pendel länger und damit langsamer.

Grüße Bernd

Angehängte Dateien:
(Firma: Papier & Knalltüten Manufaktur) #8094520
Lesenswert?

Bernd F. schrieb:

Heute Nacht lief das Teil durch. Das ist natürlich ein viel zu kurzer Zeitraum, um an eine Analyse zu denken. Die Mikrosekunden sind Unsinn. Da bräuchte ich nur 3 Stellen. Aber 1800 Impulse in 30 Minuten kommt schon hin. Die Temperatur ist in meinem "Gewächshaus" nachts recht stark gesunken. Das Kompensationselement des Pendel ist noch zu wirkungsvoll. Wie geplant wird das kalte Pendel länger und damit langsamer. Grüße Bernd

Merkst Du was?

Angehängte Dateien:
(Firma: Papier & Knalltüten Manufaktur) #8094537
Lesenswert?

Rainer W. schrieb:

Bernd F. schrieb:

DATENLOG.xlsx (11,3 KB)

Warum packst du Datum und Zeit nicht als Summe in eine Spalte? Und warum importierst du die Daten für Temperatur, Luftdruck und Luftfeuchte nicht mit dem passenden Dezimaltrenzeichen. So machst du es dir bei irgendwelchen Auswertungen unnötig schwer.

Weil es eben Schmarrn ist wie der TO vor geht. Er soll doch erst einmal hin bekommen Impulsnummer und die Zeit darzustellen. Hat damit genug zu tun. Den anderen Dreck erst einmal weglassen.

#8094569
Lesenswert?

Es ist doch offensichtlich: wenn "sketch_sep10a.ino" von weiter oben noch aktuell ist dann ändert sich "ppsMicrosRef" nur gelegentlich und "eventMicros" ist um ca 1800 Sekunden größer als beim letzten mal. Und alle ca. 4294 Sekunden gibt es einen Überlauf (32-Bit Wert).

Daher auch mein Hinweis weiter oben auf den 1PPS Interrupt.

: Bearbeitet durch User
(Firma: Papier & Knalltüten Manufaktur) #8094583
Lesenswert?

Ja die Zahl 18.000 bzw. 1.800 ist der Klopper schlechthin... 10 würde vollständig ausreichen...

Norbert schrieb:

Norbert schrieb:

Wobei zZ. eine variable Abweichung von 1/3 bis 2/3 Sekunden pro Stunde im Schaukelsystem ist.

Da korrigiere ich mich doch gleich mal selbst nach oben. Es sind natürlich 2/3 bis 4/3 Sekunden pro Stunde. (Die eigentliche Messung war ja immer nur 1/2 Stunde lang)

Im Mittel, das kann noch viel böser aussehen...

OP #8094621
Lesenswert?

Das scheint jetzt zu funktionieren.

Das Problem war wohl das Steckbrett, da gibt es Kontakte, die durch das Einstecken von Mosfets etwas geweitet sind. Steckplatz gewechselt und schon geht das.

War ein guter Tip, da mal mit einer Led zu schauen, ob am Board auch ein Signal ankommt.

Der Kartenleser im PC geht aber gar nicht mehr. Mein freundlicher Nachbar hatte aber noch einen externen mit USB rumliegen.

Grüße Bernd

Angehängte Dateien:
: Bearbeitet durch User
#8094685
Lesenswert?

Dieter S. schrieb:

Dir ist schon klar dass sehr wahrscheinlich der 1PPS Interrupt nicht richtig funktioniert? (z.B. Problem mit der Verbindung zum GPS Empfänger, eine LED am 1PPS Pin hilft bei der Fehlersuche)

Bernd F. schrieb:

War ein guter Tip, da mal mit einer Led zu schauen, ob am Board auch ein Signal ankommt.

Die LED am Sekundentakt zeigt diesen an, aber nicht, ob die Sekunde wirklich präzise ist. GPS-Empfänger geben ein Signal aus, wenn sie selbst auf mehrere SAT gelockt sind und den Takt als stabil ansehen. Ich weiß nicht, ob Dieter nicht eher diese Info meinte, bei Deiner Anforderung an die Genauigkeit ist die relevant.

#8094697
Lesenswert?

Ich kenne mich mit der Arduino-Programmierung nicht aus und kann den ino-File nicht richtig deuten. Ein Problem bei den GPS-Platinen ist, dass die Ausgabe auf die serielle Schnittstelle nicht synchron zum 1PPS-Signal ist, siehe die anliegenden Hardcopies. Bei allen 3 Dateien sind die Einstellungen identisch. M.W. ist nur das 1PPS-Signal auch wirklich monoton und zeigt den genauen Beginn der Sekunde an.

Angehängte Dateien:
: Bearbeitet durch User
#8094756
Lesenswert?

Stephan S. schrieb:

Ich kenne mich mit der Arduino-Programmierung nicht aus und kann den ino-File nicht richtig deuten. Ein Problem bei den GPS-Platinen ist, dass die Ausgabe auf die serielle Schnittstelle nicht synchron zum 1PPS-Signal ist, siehe die anliegenden Hardcopies. Bei allen 3 Dateien sind die Einstellungen identisch. M.W. ist nur das 1PPS-Signal auch wirklich monoton und zeigt den genauen Beginn der Sekunde an.

Vergiss irgendeine Genauigkeit. Hier werden Signale mittels Interrupt gemess^H^H^Hgeschätzt. Wohl wissend, dass dieses Arduino bereits schon eine ISR (für millis()) nutzt.

Da der Quarz wohl eine etwas schlechtere Genauigkeit als 0ppm bzw. 0ppb hat, ergibt sich zu GPS zwangsläufig eine Schwebung. Da ist es nur eine Frage der Zeit, wann periodisch der Interrupt beim Eintreffen des PPS bereits gesperrt ist und sich alles etwas verzögert.

Manchmal geht's gut, manchmal nicht. Genau der richtige Ansatz um eine Uhr präzise zu vermessen. ;-)

#8094764
Lesenswert?

@Bernd F.

Die gemessenen Daten sagen bisher nichts über die Qualität der Messung aus. Dafür braucht man eine Messung jeder Pendelschwingung über einen längeren Zeitraum.

Der entsprechend angepasste Source Code ist im Anhang, er basiert auf "sketch_sep10a.ino" von weiter oben. Sollte "sketch_sep10a.ino" nicht mehr aktuell sein muss man den Code anpassen.

Der Code im Anhang misst jede Pendelschwingung und gibt auch noch die Eventzeit in µs aus (nicht nur die Differenz zum 1PPS Impuls).

Es reicht wenn das für etwa eine Stunde läuft, dann das Ergebnis ("datenlog.csv") hier hochladen.

Angehängte Dateien:
#8094770
Lesenswert?

Manfred P. schrieb:

Die LED am Sekundentakt zeigt diesen an, aber nicht, ob die Sekunde wirklich präzise ist.

Die meisten GPS-Empfänger geben ohne Fix gar keine 1PPS-Pulse aus.

Norbert schrieb:

Da ist es nur eine Frage der Zeit, wann periodisch der Interrupt beim Eintreffen des PPS bereits gesperrt ist und sich alles etwas verzögert.

Bis auf einen verschenken Faktor 100...1000 in der Genauigkeit, ist das doch egal ;-)
Wenn man die Genauigkeit des 1PPS-Pulses nutzen wollte, müsste man besser mit der Capture Funktion eines der Timer arbeiten, aber nicht mit dem latenzbehafteten Interrupt.

Stephan S. schrieb:

Ein Problem bei den GPS-Platinen ist, dass die Ausgabe auf die serielle Schnittstelle nicht synchron zum 1PPS-Signal ist

Ein serielles Datentelegramm mit Symbolzeiten von 1 oder 2 Millisekunden kann prinzipbedingt nicht synchron zur Flanke eines auf besser als 100 Nanosekunden genauen Pulses sein. Für präzises Timing hat das serielle Datentelegramm keine Bedeutung und dient nur der Orientierung.

(Firma: Papier & Knalltüten Manufaktur) #8094773
Lesenswert?

Dieter S. schrieb:

@Bernd F. Die gemessenen Daten sagen bisher nichts über die Qualität der Messung aus. Dafür braucht man eine Messung jeder Pendelschwingung über einen längeren Zeitraum.

Der TO ist da sehr lernresistent und stur.

Der entsprechend angepasste Source Code ist im Anhang, er basiert auf "sketch_sep10a.ino" von weiter oben. Sollte "sketch_sep10a.ino" nicht mehr aktuell sein muss man den Code anpassen. Der Code im Anhang misst jede Pendelschwingung und gibt auch noch die Eventzeit in µs aus (nicht nur die Differenz zum 1PPS Impuls). Es reicht wenn das für etwa eine Stunde läuft, dann das Ergebnis ("datenlog.csv") hier hochladen.

Ich habe mir gerade einmal die mechanische Befestigung der Pendellinse an dem Glasstab angesehen, ob sich dort nichts bewegt? Es geht ja eine präzise Messung.

#8094803
Lesenswert?

Zur Verdeutlichung was man bei einer genauen Messung alles erkennen kann ein Beispiel.

Ich beziehe mich dabei auf meine Messungen von hier:

Erste Messung an einer älteren Pendelwanduhr:

Beitrag "Re: Datenlogger Pendeluhr"

Beitrag "Re: Datenlogger Pendeluhr"

Zweite Messung an einem Pendel mit elektromagnetischem Antrieb:

Beitrag "Messung an einem Pendel mit elektromagnetischem Antrieb"

Bei der zweiten Messung an dem Pendel mit elektromagnetischem Antrieb kann man bei der Schwingungsdauer eine leichte Wellenbewegung erkennen. Es hat sich herausgestellt dass dafür der Lüfter des etwas älteren Laptops verantwortlich ist, der für die Aufzeichnung der Daten verwendet wurde. Der Laptop war bei der Messung mehrere Meter vom Pendel entfernt und die Lüfteröffnung hat vom Pendel weggezeigt. Der Lüfter schaltet etwas alle 10 Minuten für ein paar Minuten ein, der Luftstrom ist so gering dass man ihn nur bemerkt wenn man die Hand direkt an die Lüfteröffnung hält.

Zur Verifikation dass tatsächlich der Lüfter für die Wellen verantwortlich ist wurde die Lüfteröffnung zusätzlich abgedämmt. Das Bild im Anhang zeigt das Ergebnis, die Parameter der Messung entsprechen denen der ersten Messung am Pendel mit elektromagnetischem Antrieb, die Skalierung der Y-Achse ist aber eine andere.

Angehängte Dateien:
OP #8094813
Lesenswert?

Hier die Werte von heute früh.

Seltsam sind die Fehler bei Temperatur. Wenn ich z.B. 23.Mai durch 23,5 ersetze oder z.B. 22.Nov durch 22,11 wäre es plausibel.

Den BME280 habe ich an 3,3 V angeschlossen, sollte ich mal 5 V probieren?

Die Spalten H und J habe ich mal angefügt. (Von Hand berechnet).

H wäre der Wert, der für die Pendeloptimierung wichtig wäre. Hier wird die Zeit des vorherigen Intervall vom aktuellen Intervall subtrahiert. Das sollte später dauerhaft nahe Null bleiben.

Bei J fliesst die bisher noch nicht vorgenommene genaue Regulierung der Länge mit ein. ( Um da was zu erreichen, müsste estmal H stimmen).

Grüße Bernd

Angehängte Dateien:
Beitrag #8094819 wurde vom Autor gelöscht.
#8094821
Lesenswert?

Bernd F. schrieb:

Seltsam sind die Fehler bei Temperatur. Wenn ich z.B. 23.Mai durch 23,5 ersetze oder z.B. 22.Nov durch 22,11 wäre es plausibel.

Wie hast du deine CSV-Datei erzeugt und wie die XLSX-Datei. Offensichtlich hat die Erkennung vom Dezimaltrenzeichen nicht funktioniert.
Poste doch einfach einmal direkt die Datei von der SD-Karte.

Aber ich wiederhole mich:

Rainer W. schrieb:

Und warum importierst du die Daten für Temperatur, Luftdruck und Luftfeuchte nicht mit dem passenden Dezimaltrenzeichen.

: Bearbeitet durch User
#8094822
Lesenswert?

Norbert schrieb:

Und du denkst, nur weil millis() nicht benutzt werden, läuft die ISR nicht trotzdem im Hintergrund.

Wieder so ein Schwätzer. Der Interrupt für millis() kann z.B. so aussehen (beim Arduino):

1
ISR(TIMER0_OVF_vect)
2
{
3
  // copy these to local variables so they can be stored in registers
4
  // (volatile variables must be read from memory on every access)
5
  unsigned long m = timer0_millis;
6
  unsigned char f = timer0_fract;
7

8
  m += MILLIS_INC;
9
  f += FRACT_INC;
10
  if (f >= FRACT_MAX) {
11
    f -= FRACT_MAX;
12
    m += 1;
13
  }
14

15
  timer0_fract = f;
16
  timer0_millis = m;
17
  timer0_overflow_count++;
18
}

Dieser Code braucht kaum Zeit, das reicht damit die Genauigkeit der Zeitmessung in einer Grössenordnung liegt die erstmal ausreichen sollte (besser als 0.1 ms). Mehr weiss man wenn der TO die Daten für eine Bewertung der Messqualität liefert.

#8094824
Lesenswert?

Dieter, bist du nicht in der Lage zu begreifen, dass die ISR ständig aktiv ist, unabhängig davon ob du milles() abfragst oder nicht?

Und dass, während diese ISR läuft, die PPS-ISR gar nicht bearbeitet wird?

Und zu guter Letzt, bist du nicht in der Lage zumindest ein halbwegs akzeptables Benehmen an den Tag zu legen?

#8094828
Lesenswert?

Norbert schrieb:

Dieter, bist du nicht in der Lage zu begreifen, dass die ISR ständig aktiv ist, unabhängig davon ob du milles() abfragst oder nicht?

Du verstehst nicht dass das für die gewünschte Genauigkeit erst mal unerheblich ist?

Aber ich gebe Dir hiermit in allem Recht, dann hast Du Deinen Frieden und ich spar mir eine Menge Zeit.

#8094833
Lesenswert?

Norbert schrieb:

Und dass, während diese ISR läuft, die PPS-ISR gar nicht bearbeitet wird?

Das ist das Prinzip der Interruptbearbeitung. Je nach Priorität muss der restliche Programmablauf warten.
Solange niemand das Interrupt-Flag löscht, werden die Interrupts der Reihe nach abgearbeitet und dann geht es im Hauptprogramm weiter.

Die Zeit zwischen Interrupt und Start der Bearbeitung hat man als Latenz. Schwankungen der Latenz hat man als Rauschen in den Zeitmessdaten, die Latenz selber als Fehler beim Stand der Uhr.

Bernd F. schrieb:

Hier die Daten auf der Karte:

Da sieht noch alles gut aus, d.h. die Fehler passieren in dem Moment, wo du die Daten in deine Tabellenkalkulation importierst.

: Bearbeitet durch User
#8094839
Lesenswert?

Norbert schrieb:

Rainer, ich denke das alles war uns bereits mehr als klar. ;-)

Dir scheint aber die Größenordnung der dadurch bei der Zeitmessung verursachten Fehler nicht klar zu sein. Der Gang der Uhr liegt laut den Daten im Bereich von 0,2 ... 0,8 s/d, d.h. in einer Größenordnung, die weit entfernt von einer möglichen Verzögerung durch den millis()-Interrupt ist. Sonst würde man Spikes oder andere merkwürdige Effekte in den Daten sehen.

: Bearbeitet durch User
#8094871
Lesenswert?

Rainer W. schrieb:

Dir scheint aber die Größenordnung der dadurch bei der Zeitmessung verursachten Fehler nicht klar zu sein. Der Gang der Uhr liegt laut den Daten im Bereich von 0,2 ... 0,8 s/d, d.h. in einer Größenordnung, die weit entfernt von einer möglichen Verzögerung durch den millis()-Interrupt ist.

Ja klar, jetzt noch. Die Uhr soll irgendwann mal max. 1 Sekunde in 100 Tagen falsch gehen. Schreiben man dann jedes Mal, wenn eine bessere Genauigkeit (und Wiederholbarkeit) benötigt wird, das Programm neu?

Die momentane Genauigkeit des Pendels könnte man aber auch mit einem Abreißkalender bestimmen… ;-)

#8094879
Lesenswert?

Norbert schrieb:

Ja klar, jetzt noch. Die Uhr soll irgendwann mal max. 1 Sekunde in 100 Tagen falsch gehen.

Für eine derartige Genauigkeit der Messung des Gangs, ist die Funktion micros() - Interrupt hin oder her - sowieso schlecht geeignet, insbesondere wenn man eine kurze Messzeit anstrebt, um die Pendellänge zu justieren. Da möchte man schon gerne eine der Genauigkeit des 1PPS-Signals angemessene Auflösung für die Zeitmessung verwenden und nicht mehr als einen Faktor 10 verschenken.

Beitrag "Re: Datenlogger Pendeluhr"

OP #8094916
Lesenswert?

Norbert,

danke. Um verwertbare Daten zu bekommen, werde ich das Pendel mal provisorisch Einhausen.

Im Moment hängt es ja völlig frei, direkt neben einer Tür. Da stört ja jeder Luftzug. Die Umweltsensoren kommen in den Kasten.

Der Zacken in der Zeitaufnahme könnte ein Wackler am Draht oder ein Synchronationsfehler des GPS gewesen sein. Ich hatte das Teil auf ein Regal neben dem Pendel gestellt und die Stromversorgung abgesteckt.

Grüße Bernd

: Bearbeitet durch User
#8094922
Lesenswert?

@Bernd F:

Du hast nicht vor die schon mehrfach angefragte Messung zur Beurteilung der Qualität der Messdaten zu machen? Source Code dazu siehe weiter oben, das dauert etwa eine Stunde.

Ist das Absicht dass Du nicht darauf reagierst, genauso wie Du immer noch keine Details zur Lichtschranke genannt hast?

#8094926
Lesenswert?

Bernd, gerne, da nicht für.

Bernd F. schrieb:

Im Moment hängt es ja völlig frei, direkt neben einer Tür. Da stört ja jeder Luftzug.

Kann ich mir gut vorstellen, vor allem wenn die Teile mit positivem und negativem Temperaturkoeffizienten unterschiedlich schnell erwärmen.

Korrigier' mich wenn ich falsch liege, ich vermute, dass die Spalte Mikrosekunden ein halbstündiger Schnappschuss mit der micros() Funktion ist.

Das leitet sich aber vom internen Quarz ab. Ist das Arduino denn mit der GPS-PPS synchronisiert? Sonst korrigierst du gegen den Quarz und die haben im Allgemeinen eine eher überschaubare Qualität (freundlich formuliert).

#8094934
Lesenswert?

Wenn es denn ein Quarz wäre, es ist ein interner Ringoszillator, welcher zwar Temperaturkompensiert ist, aber eigentlich ziemlich unzuverlässig. Ich würde Bernd F. dringenst ein günstiges Arduino uno empfehlen wo zwei Quarze ersichtlich sind, mit avr Microcontroller. Wenn es Pegelwandlung für das GPS Modul braucht, nicht so schlimm. Wenn er es dann später ernst meint kann er ja ein ocxo anstelle des quarzes anschließen, gibt es auch günstig.

#8094939
Lesenswert?

Zur Bestätigung dass die Auswirkungen von anderen Interrupts wie der für millis() keinen Einfluss auf die gewünschte Genauigkeit haben ein kleiner Test:

Source Code siehe Anhang, der orientiert sich an "sketch_sep10a.ino", enthält aber nur den relevanten Teil und gibt das Ergebnis für jeden Impuls der Lichtschranke über die serielle Schnittstelle aus.

Der Code läuft auf einem Arduino UNO, der 1PPS Impuls und das Lichtrankensignal werden von einem Frequenzgenerator mit zwei Kanälen erzeugt (FeelTech FY6600). Der Kanal für den 1PPS Impuls steht auf 1.0 Hz, der Kanal für die Lichtschranke auf 1.000001 Hz. Die 0.000001 Hz sind der kleinste Unterschied denn man zwischen den beiden Kanälen einstellen kann, ganz passt das aber nicht, nach etwa einer Stunde unterscheiden sich die Impulse um ca. 6.4 ms, es sollte aber ungefähr die Hälfte sein (für den Test ist das aber egal).

Im Anhang ist ein Bild mit dem vom Arduino ausgegebenen Wert für den Unterschied zwischen den Impulsen. Außerdem noch der Unterschied des Impulsabstands, damit man besser sieht wie stark eventuelle Auswirkungen eines Interrupts sind, der die Messung stört. Daran sieht man gut die 4 µs Auflösung von micros() auf dem Arduino UNO.

Die Anforderung des TO sind 1 Sekunde Abweichung nach 100 Tagen zu erkennen. Das sind in 24 Stunden also 10 ms oder ca. 0.4 ms je Stunde. Wenn man eine Größenordnung genauer messen will reichen also 1 ms Messgenauigkeit je Tag bzw. 40 µs je Stunde. Das erreicht man mit dem Mikrocontroller, die eigentliche Beschränkung ist sowieso die Genauigkeit der Lichtschranke.

Angehängte Dateien:
OP #8094948
Lesenswert?

Dieter,

morgen spiele ich mal das Testprogramm drauf.

Zu der angesprochenen mechanischen Stabilität des Pendels. Einige Teile sind bisher nur handfest verschraubt. Wenn ich mir sicher bin, an diesen Teilen nichts mehr ändern zu müssen, werden sie mit hochfestem Gewindekleber verschraubt.

Dann sind Änderungen aber fast nicht mehr möglich, da ein Trennen nur mit hohen Temperaturen (ca. 250°) möglich ist.

Grüße Bernd

#8094953
Lesenswert?

Norbert schrieb:

Sonst korrigierst du gegen den Quarz und die haben im Allgemeinen eine eher überschaubare Qualität (freundlich formuliert).

Damit man vom Quarz des µC weitgehend unabhängig ist, muss man doch nur einerseits den Abstand zwischen 1PPS-Puls und Lichtschrankendurchgang, und andererseits den Abstand zwischen zwei 1PPS-Pulsen ablesen. Der Quarz muss dann nur über eine Sekunde ausreichend stabil laufen und die Frequenz ist egal.

(Firma: Papier & Knalltüten Manufaktur) #8095054
Lesenswert?

Dieter S. schrieb:

Bernd F. schrieb:

Hier die Werte von heute früh.

So schlecht sieht das nicht aus, zumindest ist ein klarer Trend bei der Abweichung vom 1PPS Impuls zu erkennen. Dennoch wären die weiter oben erwähnten kontinuierlichen Messdaten hilfreich um die Qualität der Messung zu beurteilen.

Die "Kurve" taugt nichts. Ich habe daraus das Delta berechnet, siehe Foto.

Angehängte Dateien:
#8095063
Lesenswert?

BirnKichler 🧐 S. schrieb:

Hi, hat das Buch auch einen Titel?

Die Feinstellung der Uhren ein Anleitungs- und Nachschlagewerk in 2 Teilen Verfasser: Giebel, Friedrich Karl <1879-1950> GND link to dataset open/close GND search link open/close (DE-588)1023707381 Verfasser: Helwig, Alfred <1886-1974> GND link to dataset open/close GND search link open/close (DE-588)110439031 Repr. d. Orig.-Ausg. Berlin 1952 3-7667-0628-4

Es gibt dieverse Nachdrucke

(Firma: Papier & Knalltüten Manufaktur) #8095065
Lesenswert?

Stephan S. schrieb:

BirnKichler 🧐 S. schrieb:

Hi, hat das Buch auch einen Titel?

Die Feinstellung der Uhren ein Anleitungs- und Nachschlagewerk in 2 Teilen Verfasser: Giebel, Friedrich Karl <1879-1950> GND link to dataset open/close GND search link open/close (DE-588)1023707381 Verfasser: Helwig, Alfred <1886-1974> GND link to dataset open/close GND search link open/close (DE-588)110439031 Repr. d. Orig.-Ausg. Berlin 1952 3-7667-0628-4 Es gibt dieverse Nachdrucke

Danke

#8095073
Lesenswert?

p.p.s.

BirnKichler 🧐 S. schrieb:

p.s. Das JPG-Format taugt für Graphiken übrigens noch viel weniger.

Warum?

Weil der Kompressionsalgorithmus beim JPG auf Photos (Farbverläufe) optimiert ist und mit scharfen Kanten (Graphikelementen) schlecht zurecht kommt. An harten Kanten entstehen in Folge dessen Kompressionsartefakte (Unschärfe bei Symbolen, Gitternetzlinien u.s.w.).

: Bearbeitet durch User
OP #8095088
Lesenswert?

Datenblatt der Lichtschranke und Aufnahme Sekunden. Mir sagt das jetzt wenig. Panasonic PM Serie

Das Schaltfähnchen hängt aber nicht exakt in der Mitte, deswegen Unterschie zu jeder zweiten Sekunde. Da bringt es schon was, nur gerade Zahlen zu zählen.

Grüße Bernd

Angehängte Dateien:
: Bearbeitet durch User
#8095117
Lesenswert?

Jepp, besser. Hier ein ganz, ganz schneller und schmutziger ›Calc‹ Hack.

  • 1 Zeigt jeweils die Summe zweier aufeinander folgender Sekunden ÷ 2
  • 2 Zeigt nur die ersten 500 zur besseren Auflösung
  • 3 Zeigt jeweilige Differenz zwischen Hin- und Herschwung

Anmerkung: Die Impuls_Nr ist ziemlich Witzlos und vor allem auch störend wenn sie mehrfach auftaucht. GPS sollte doch einen Mechanismus liefern um die jeweils tatsächliche Sekunde seit epoch auszugeben. Und wenn der kleine Controller bei großen Zahlen kotzt, dann vielleicht das Delta ab Anfang des Jahres. Damit hätte man eine saubere Nummerierung.

Fehlmessungen sollten besser auch gar nicht erst ausgegeben werden (1;01.01.2026;00:00:00)

Angehängte Dateien:
#8095119
Lesenswert?

Als Basis für die Auswertung der Messwerte wurde die Schwingungsdauer des Pendels genommen (Durchgang Lichtschranke von "links nach rechts" plus Durchgang Lichtschranke von "rechts nach links", also 2 Sekunden), damit ist die nicht exakt in der Mitte positionierte Lichtschranke kein Problem.

Da die Abweichung des Pendels von einer Sekunde noch relativ groß ist wurde die Eventzeit (micros() bei Lichtrankendurchgang) für die Zeitmessung genommen, unter der Annahme dass die Drift des Oszillators während der Messdauer von etwa einer Stunde zu vernachlässigen ist.

Im Anhang die Streuung ("Streuung.PNG"), Verlauf der Schwingungsdauer ("Schwingungsdauer.PNG"), sowie Verlauf der Schwingungsdauer mit gleitendem Mittelwert über jeweils 60 Werte ("Schwingungsdauer_Mittelwert.PNG").

Die Streuung bei meiner Messung an einem Pendel mit elektromagnetischem Antrieb war deutlich geringer, die Frage ist ob man das mit einer anderen Lichtschranke verbessern kann oder ob es an der Mechanik des Pendels liegt.

Zum Vergleich:

https://www.mikrocontroller.net/attachment/704531/Streuung.PNG

Angehängte Dateien:
#8095121
Lesenswert?

Bernd F. schrieb:

DATENLOG_Sekunden.xlsx

Um die Unterbrechungsdauer durch das Fähnchen zu messen, müsstest du das Signal invertiert auswerten. Aktuell ist die Zeit in der Spalte "Mikrosekunden" diejenige Zeit, die die Lichtschranke frei ist.

Norbert schrieb:

Anmerkung: Die Impuls_Nr ist ziemlich Witzlos und vor allem auch störend wenn sie mehrfach auftaucht.

Der Zähler für die Event_Mikrosekunden wird beim µC-Reset auch neu gestartet. Fang doch einfach erst in Zeile 179 (08:54:00) mit dem Plot an.

GPS sollte doch einen Mechanismus liefern um die jeweils tatsächliche Sekunde seit epoch auszugeben.

In den NMEA-Daten liefert GPS die Zeit als UTC.

#8095135
Lesenswert?

Rainer W. schrieb:

In den NMEA-Daten liefert GPS die Zeit als UTC.

Datum und Uhrzeit könnte man also bequem extrahieren und in Sekunden seit epoch umwandeln. So ungefähr:

1
from time import mktime
2
now = (2026,9,13,  12,0,0,  -1,-1,-1)  # YYYY MM DD   HH MM SS
3
secs = mktime(now)

Arduino hat da doch bestimmt auch etwas Bequemes. Ansonsten über struct tm und time_t mktime(struct tm *tm)

#8095151
Lesenswert?

Norbert schrieb:

Datum und Uhrzeit könnte man also bequem extrahieren und in Sekunden seit epoch umwandeln. So ungefähr:

Man hat den 1PPS-Sekundentakt und z.B. den NMEA ZDA-Sentence mit der UTC. Warum soll man irgendetwas umrechnen. Es wird doch alles bereit gestellt. Nur bei Schaltsekunden innerhalb des Messzeitraumes muss man ggf. aufpassen. Die kann die Uhr nicht, d.h. jede Schaltsekunde erzeugt einen Sprung beim Stand der Uhr und UTC-Minuten mit 61 Sekunden.

: Bearbeitet durch User
#8095154
Lesenswert?

Rainer W. schrieb:

Warum soll man irgendetwas umrechnen. Es wird doch alles bereit gestellt.

Hatte ich weiter oben bereits erklärt. Wenn in einer Spalte eine aufsteigende Nummer plötzlich wieder kleiner ist, sich das Ganze in einer Logdatei dann auch noch gleich mehrfach wiederholt, dann macht das eine automatische Auswertung zumindest mal ziemlich unbequem.

Natürlich kann man in seiner Auswerte-Software jedes Mal und bei jedem Aufruf erneut die Umwandlung machen. Allerdings verbirgt sich der Sinn einer solchen repetitiven Vorgehensweise ziemlich gut.

Abschließend, ein paar calls direkt im µC sollten doch nicht wirklich weh tun.

#8095205
Lesenswert?

Dieter S. schrieb:

Da die Abweichung des Pendels von einer Sekunde noch relativ groß ist

Woraus entnimmst du das?
Solange der µC-Takt nicht anhand der 1PPS-Pulse kalibriert wird, ist das nur eine unbegründete Annahme. Ob der µC seinen Takt aus einem Keramikresonator oder einem Quarz bezieht, wissen wir auch nicht.

Um die Genauigkeit der Zeitbasis beurteilen zu können, sollte man wenigstens den Abstand zweier 1PPS-Interrupts zusätzlich loggen.

#8095219
Lesenswert?

Die Frequenz des µC-Quarzes ist ziemlich uninteressant, solange sie stabil ist, ein TCXO reicht da völlig. Wichtig für die Genauigkeit der Uhr ist nur, dass sich der Abstand zwischen der Flanke des 1PPS-impulses und der Flanke der Lichtschranke nicht ändert (genauer gesagt: der Abstand jedes 2. Impulses, denn die Lichtschranke wird nicht absolut genau in der Mitte des Pendelweges liegen).

#8095222
Lesenswert?

Stephan S. schrieb:

Wichtig für die Genauigkeit der Uhr ist nur, dass sich der Abstand zwischen der Flanke des 1PPS-impulses und der Flanke der Lichtschranke nicht ändert

Und womit wird dieser Abstand gemessen - mit dem µC-Takt. Je weiter 1PPS-Puls und Lichtschrankendurchgang zeitlich auseinander liegen, um so mehr geht eine Änderung der µC-Taktfrequenz ein - wenn auch als Fehler höherer Ordnung.

Das ändert nichts daran, dass der Wert Event Mikrosekunden eine Hausnummer ist, solange der µC-Takt nicht kalibriert ist, d.h. ohne Messung des 1PPS-Abstandes kann man sich den sparen.

: Bearbeitet durch User
(Firma: Papier & Knalltüten Manufaktur) #8095227
Lesenswert?

Rainer W. schrieb:

Stephan S. schrieb:

Wichtig für die Genauigkeit der Uhr ist nur, dass sich der Abstand zwischen der Flanke des 1PPS-impulses und der Flanke der Lichtschranke nicht ändert

Und womit wird dieser Abstand gemessen - mit dem µC-Takt. Je weiter 1PPS-Puls und Lichtschrankendurchgang zeitlich auseinander liegen, um so mehr geht eine Änderung der µC-Taktfrequenz ein - wenn auch als Fehler höherer Ordnung. Das ändert nichts daran, dass der Wert Event Mikrosekunden eine Hausnummer ist, solange der µC-Takt nicht kalibriert ist, d.h. ohne Messung des 1PPS-Abstandes kann man sich den sparen.

Ist das nicht zu viel Prosa?

(Firma: Papier & Knalltüten Manufaktur) #8095450
Lesenswert?

Der To könnte ja, wenn er denn es nur wollte, die aktuell benutzte Software hier posten und die Messdaten hier zeigen. Es ist dumm wenn er innerhalb der Messung an seinem Pendel oder Arduino herumfummelt. Ja und ein wenig sorgfältiger damit umgehen. In der Temperatur Spalte haben Wochentage bzw. ... nix zu suchen.

(Firma: Papier & Knalltüten Manufaktur) #8095460
Lesenswert?

Mein Prof. hatte immer ein ein kleines weißes Stäbchen in der Hemdentasche und damit alle Aufgaben in den Klausuren in den Nachbesprechungen ratzefatze gelöst. Die Studies mit Moos dadellten immer noch auf den eletrischen Rechenknechten herum, während der Prof. längst fertig war.

#8095472
Lesenswert?

BirnKichler 🧐 S. schrieb:

Mein Prof. hatte immer ein ein kleines weißes Stäbchen in der Hemdentasche und damit alle Aufgaben in den Klausuren in den Nachbesprechungen ratzefatze gelöst. Die Studies mit Moos dadellten immer noch auf den eletrischen Rechenknechten herum, während der Prof. längst fertig war.

https://c8.alamy.com/compde/2tdc7w9/madrid-1022001-die-grosste-paella-der-welt-wurde-im-madrider-stadtteil-moratalaz-hergestellt-mit-abmessungen-die-so-gross-sind-dass-ein-teil-den-110000-bewohnern-des-viertels-gegeben-werden-konnte-quelle-album-archivo-abc-ngel-de-antonio-2tdc7w9.jpg

OP #8095542
Lesenswert?

Rainer W. schrieb:

BirnKichler 🧐 S. schrieb:

In der Temperatur Spalte haben Wochentage bzw.

Wenn beim Import Excel falsch eingestellt ist, werden aus den Dezimalzahlen nun mal Texte oder, wenn's passt, auch ein Datum.

Wenn ich jetzt noch wüsste, welche Einstellungen ich ändern muss?

Excel gab es in meinem Berufsleben praktisch nicht. Die Architekten haben manchmal "Bauzeitenpläne" als Excel-Datei geschickt, aber das war eh immer reines Wunschdenken.

Grüße Bernd

(Firma: Papier & Knalltüten Manufaktur) #8095553
Lesenswert?

Bernd F. schrieb:

Rainer W. schrieb:

BirnKichler 🧐 S. schrieb:

In der Temperatur Spalte haben Wochentage bzw.

Wenn beim Import Excel falsch eingestellt ist, werden aus den Dezimalzahlen nun mal Texte oder, wenn's passt, auch ein Datum.

Wenn ich jetzt noch wüsste, welche Einstellungen ich ändern muss? Excel gab es in meinem Berufsleben praktisch nicht. Die Architekten haben manchmal "Bauzeitenpläne" als Excel-Datei geschickt, aber das war eh immer reines Wunschdenken. Grüße Bernd

Ja dann lasse doch Excel einfach weg, eine *.csv Datei reicht doch allemal.

Du sammelst doch Daten, dafür ist Excel nicht gedacht, wird aber häufig verwendet.

#8095587
Lesenswert?

Bernd F. schrieb:

Wenn ich jetzt noch wüsste, welche Einstellungen ich ändern muss?

Die Google KI empfiehlt in diesem Fall, beim Import von Dateien mit Dezimalzahlen nicht das Trennzeichen vom Betriebssystem zu übernehmen, sondern es selber auszuwählen. Alternativ geht es, indem man die Daten mit der Funktion "Aus Text/CSV" und dem zur Datei passenden Gebietsschema lädt.
Ich selber verwende leider (?) kein Excel.

https://www.google.com/search?q=excel+import+datei+dezimaltrennzeichen

BirnKichler 🧐 S. schrieb:

Du sammelst doch Daten, dafür ist Excel nicht gedacht, wird aber häufig verwendet.

Excel sammelt die Daten nicht. Das erledigt der Arduino.
Mit Excel sollen die Daten ausgewertet werden. Wenn man ihm sekündliche Werte von 100 Tagen anbietet, könnte es allerdings etwas zäh werden, d.h. da ist es wohl sinnvoll, die Daten vorher z.B. auf stündliche Werte zu reduzieren.

: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren