Hallo Es gab hier schon verschiedene Beiträge zu Uhren die mit Drehspulmesswerken (3 Stück) betrieben werden.(aber die Links in den Beiträgen sind tot) Nun war ich am Nachbau dieser Uhr: https://michaelteeuw.nl/post/what-time-is-it-fathers-day Soweit funktioniert auch alles sehr gut. Nun ist es aber so das bei dem Drehspulmesswerken Spannungen von 335mV bis 5V vom Ausgang des Arduino anliegen. In dem Moment wo die 5V anliegen und in der nächsten Sekunde wieder die 335mV anliegen, schlägt der Zeiger des Instrumentes nach links. Nun ist meine Vorstellung das der Zeiger "sanfter" zurück geht. Wie kann ich das machen? Ich dachte an einen Elko parallel zum Instrument. Ich hoff ich habe es verständlich erklärt.
Thomas A. schrieb: > Uhren die mit Drehspulmesswerken (3 Stück) betrieben werden. Da könnte man glatt herauslesen, dass die Versorgung der Uhr aus den Messwerken kommt... ;-) > Nun ist meine Vorstellung das der Zeiger "sanfter" zurück geht. > Wie kann ich das machen? > Ich dachte an einen Elko parallel zum Instrument. Ja, mach noch einen Widerstand in Reihe. Das nennt sich dann Tiefpass. Was hast du denn für Messwerke (wieviele mA bzw. µA)? Und wie hast du sie angeschlossen? Evtl. ist ja der Widerstand schon drin.
Lothar M. schrieb: > Ja, mach noch einen Widerstand in Reihe. Der ist ja im Messwerkgehäuse schon drin. Also auch den Kondensator ins Messwerkgehäuse bauen, oder beide nach außen.
Warum nicht per Software? Statt PWM von 255 direkt auf 0 zu setzen, kann man das in mehreren Stufen mit entsprechendem zeitlichen Abstand machen.
Lothar M. schrieb: > Was hast du denn für Messwerke (wieviele mA bzw. µA)? Wenn der TE es genau wie der Holländer im weblink gemacht hat: ca. 0,9mA .
Mario M. schrieb: > Warum nicht per Software? Statt PWM von 255 direkt auf 0 zu setzen, kann > man das in mehreren Stufen mit entsprechendem zeitlichen Abstand machen. Nun mit dem programmieren vom Arduino kenne ich mich nicht so aus. Der Sketch sieht so aus:
1 | /**
|
2 | * An Arduino Volt Meter Analog Clock based on a TinyRTC real time clock.
|
3 | *
|
4 | * For more info about this project, check out my blog for the full story
|
5 | * images, and the endresult of the project:
|
6 | * http://michaelteeuw.nl/post/174972004187/what-time-is-it- fathers-day
|
7 | *
|
8 | * LICENSE: Permission is hereby granted, free of charge, to any person
|
9 | * obtaining a copy of this software and associated documentation files
|
10 | * (the "Software"). For more info see LICENSE file.
|
11 | *
|
12 | * @category CategoryName
|
13 | * @package PackageName
|
14 | * @author Michael Teeuw
|
15 | * @copyright 2018
|
16 | * @license https://opensource.org/licenses/MIT
|
17 | * @link http://michaelteeuw.nl
|
18 | */
|
19 | |
20 | #include <Arduino.h> |
21 | #include <Wire.h> |
22 | |
23 | #include "RTClib.h" // https://github.com/adafruit/RTClib |
24 | |
25 | // Define the Pins we are using.
|
26 | #define PIN_BUTTON_HOUR 7
|
27 | #define PIN_BUTTON_MIN 8
|
28 | #define PIN_METER_HOUR 3
|
29 | #define PIN_METER_MIN 5
|
30 | #define PIN_METER_SEC 6
|
31 | |
32 | // Define the minimum and maximum PWM values for all the meters.
|
33 | // These values can be used to calibrate the meters.
|
34 | #define MINIMUM_PWM_VALUE_HOUR 15
|
35 | #define MAXIMUM_PWM_VALUE_HOUR 240
|
36 | #define MINIMUM_PWM_VALUE_MIN 15
|
37 | #define MAXIMUM_PWM_VALUE_MIN 254
|
38 | #define MINIMUM_PWM_VALUE_SEC 15
|
39 | #define MAXIMUM_PWM_VALUE_SEC 240
|
40 | |
41 | // Create the real time clock instance.
|
42 | RTC_DS1307 rtc; |
43 | |
44 | /**
|
45 | * Slowly animate one meter to the maximum value and back.
|
46 | * This animation is used in the start sequence. Not only does it look
|
47 | * cool. It's also a way to test the meters.
|
48 | *
|
49 | * @param uint8_t pin The pin of the meter.
|
50 | * @param uint8_t min The meter's minimum PWM value.
|
51 | * @param uint8_t max The meter's maximum PWM value.
|
52 | */
|
53 | void animateMeter(uint8_t pin, uint8_t min, uint8_t max) { |
54 | uint8_t v; |
55 | for (v = min; v <= max; v++) { |
56 | analogWrite(pin, v); |
57 | delay(2); |
58 | }
|
59 | delay(100); |
60 | for (v = max; v >= min; v--) { |
61 | analogWrite(pin, v); |
62 | delay(2); |
63 | }
|
64 | delay(100); |
65 | }
|
66 | |
67 | /**
|
68 | * Run the startup sequence by animating all three meters sequentially.
|
69 | */
|
70 | void startSequence() { |
71 | animateMeter(PIN_METER_HOUR, MINIMUM_PWM_VALUE_HOUR, MAXIMUM_PWM_VALUE_HOUR); |
72 | animateMeter(PIN_METER_MIN, MINIMUM_PWM_VALUE_MIN, MAXIMUM_PWM_VALUE_MIN); |
73 | animateMeter(PIN_METER_SEC, MINIMUM_PWM_VALUE_SEC, MAXIMUM_PWM_VALUE_SEC); |
74 | }
|
75 | |
76 | /**
|
77 | * The method to update the time displayed on the the meter.
|
78 | */
|
79 | void displayTime() { |
80 | // Retrieve the time from the real time clock.
|
81 | DateTime now = rtc.now(); |
82 | |
83 | // Since the real time clock returns a 24 hour format,
|
84 | // we need to convert the hour value to 12 hour format.
|
85 | // For minutes and seconds we can just directly use the
|
86 | // properties on the 'now' object. No need to store those
|
87 | // in a temporary variable.
|
88 | int8_t h = (now.hour() == 0 || now.hour() == 12) ? 12 : now.hour() % 12; |
89 | |
90 | // Convert the time values to PWM values by using map ...
|
91 | // and set that value as the PWM value using analogWrite.
|
92 | analogWrite(PIN_METER_HOUR, map(h, 1, 12, MINIMUM_PWM_VALUE_HOUR, MAXIMUM_PWM_VALUE_HOUR)); |
93 | analogWrite(PIN_METER_MIN, map(now.minute(), 0, 60, MINIMUM_PWM_VALUE_MIN, MAXIMUM_PWM_VALUE_MIN)); |
94 | analogWrite(PIN_METER_SEC, map(now.second(), 0, 60, MINIMUM_PWM_VALUE_SEC, MAXIMUM_PWM_VALUE_SEC)); |
95 | |
96 | // For debuging purposes, write the time to the
|
97 | // Serial port as well.
|
98 | Serial.print(h); |
99 | Serial.print(":"); |
100 | Serial.print(now.minute()); |
101 | Serial.print(":"); |
102 | Serial.println(now.second()); |
103 | }
|
104 | |
105 | /**
|
106 | * The setup method used by the Arduino.
|
107 | */
|
108 | void setup () { |
109 | // Initiate the serial port for debugging purposes.
|
110 | Serial.begin(9600); |
111 | |
112 | // Configure all the pin modes for all connected pins.
|
113 | pinMode(PIN_BUTTON_HOUR, INPUT_PULLUP); |
114 | pinMode(PIN_BUTTON_MIN, INPUT_PULLUP); |
115 | pinMode(PIN_METER_HOUR, OUTPUT); |
116 | pinMode(PIN_METER_MIN, OUTPUT); |
117 | pinMode(PIN_METER_SEC, OUTPUT); |
118 | |
119 | // Start the real time clock.
|
120 | rtc.begin(); |
121 | |
122 | // If the real time clock is not running,
|
123 | // for example after the battery was replaced,
|
124 | // start it by setting the time.
|
125 | if (!rtc.isrunning()) { |
126 | rtc.adjust(DateTime(2018, 6, 17, 0, 0, 0)); |
127 | }
|
128 | |
129 | // Initiate the power-on self test by running the start sequence.
|
130 | startSequence(); |
131 | }
|
132 | |
133 | /**
|
134 | * The main runloop used by the Arduino.
|
135 | */
|
136 | void loop () { |
137 | // Update the meters by calling the `displayTime()` method.
|
138 | displayTime(); |
139 | |
140 | // Check if we pressed the button to adjust the hour ...
|
141 | // Repeat the following loop for as long as we hold this button.
|
142 | while (!digitalRead(PIN_BUTTON_HOUR)) { |
143 | // Grab the current time.
|
144 | DateTime now = rtc.now(); |
145 | |
146 | // Set the RTC time by using the current time and increaing the hour by one.
|
147 | // By using the % 24, it will automaticly overflow to 0 when it reaches 24.
|
148 | // The seconds are simply reset.
|
149 | rtc.adjust(DateTime(now.year(), now.month(), now.day(), (now.hour() + 1) % 24, now.minute(), 0)); |
150 | |
151 | // Update the display to reflect the changes.
|
152 | displayTime(); |
153 | |
154 | // Wait half a second before we check again to see
|
155 | // if the button is still pressed.
|
156 | delay(500); |
157 | }
|
158 | |
159 | // Check if we pressed the button to adjust the minutes ...
|
160 | // Repeat the following loop for as long as we hold this button.
|
161 | while (!digitalRead(PIN_BUTTON_MIN)) { |
162 | // Grab the current time.
|
163 | DateTime now = rtc.now(); |
164 | |
165 | // Set the RTC time by using the current time and increaing the minutes by one.
|
166 | // By using the % 60, it will automaticly overflow to 0 when it reaches 60.
|
167 | // The seconds are simply reset.
|
168 | rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), (now.minute() + 1) % 60, 0)); |
169 | |
170 | // Update the display to reflect the changes.
|
171 | displayTime(); |
172 | |
173 | // Wait a quarter of a second before we check again to see
|
174 | // if the button is still pressed.
|
175 | delay(250); |
176 | }
|
177 | |
178 | // Wait for 1 second before we start all over again.
|
179 | delay(1000); |
180 | }
|
Mod: bitte c-Tags das nächste Mal selber einfügen. Siehe die BEdienungsanleitung über jeder Texteingabebox unter "Wichtige Regeln - erst lesen, dann posten!"
:
Bearbeitet durch Moderator
Andrew T. schrieb: > Lothar M. schrieb: >> Was hast du denn für Messwerke (wieviele mA bzw. µA)? > > Wenn der TE es genau wie der Holländer im weblink gemacht hat: ca. 0,9mA > . Die Messwerke sind für 300V. Da ist intern ein Widerstand zwischen "+" und Messwerk in Reihe von 115k Ohm verbaut. Zwischen "-" und Messwerk eine Diode. Parallel zum Messwerk ein Elko. Getauscht wurde nur der Widerstand auf 4,7k um die 300V Messwerke für 5V zu nutzen.
Thomas A. schrieb: > Andrew T. schrieb: >> Lothar M. schrieb: >>> Was hast du denn für Messwerke (wieviele mA bzw. µA)? >> >> Wenn der TE es genau wie der Holländer im weblink gemacht hat: ca. 0,9mA >> . > > Die Messwerke sind für 300V. Da ist intern ein Wider.... > Getauscht wurde nur der Widerstand auf 4,7k um die 300V Messwerke für 5V > zu nutzen. Der Holländer schreibt 5,6,k um auf 5V Fullscale zu kommen. Daher schrieb ich 0,9 mA
Andrew T. schrieb: > Der Holländer schreibt 5,6,k um auf 5V Fullscale zu kommen. > Daher schrieb ich 0,9 mA Das sind Voltmeter. Hat ja nichts mit Ampere zu tun. Der Holländer hat auch probiert welcher Widerstand passt um die Skala bei 5V zu nutzen. Bei mir sind es 4,2k bzw. 4,7k je nach Messwerk. Später werde ich die Festwiderstände durch 10Gang Spindel-Widerstände ersetzen um bei 5V 100% die Skala zu nutzen. Da haben die Messwerke halt eine Toleranz.(China halt)
Thomas A. schrieb: > Das sind Voltmeter. Hat ja nichts mit Ampere zu tun Ausnahmslos jedes magnetische Drehspulmessgerät ist ein Strommesser. Die Spannung wird durch einen Vorwiderstand in einen passenden Strom umgewandelt, der zum gewünschten Ausschlag führt. > Bei mir sind es 4,2k bzw. 4,7k je nach Messwerk. Dann mach einfach hinter diesen Widerstand deinen Elko im Bereich um 100µF. Thomas A. schrieb: > Die Messwerke sind für 300V. Ach so, AC. Und die Diode hat nur 1 Halbwelle durchgelassen. Dann passen die 0,9mA wieder zu den 115k. > Parallel zum Messwerk ein Elko. Welchen Wert hat der? Mein Tipp: überbrücke die Diode, dann sind auch die blöden 350mV Offset weg.
:
Bearbeitet durch Moderator
Lothar M. schrieb: >> Bei mir sind es 4,2k bzw. 4,7k je nach Messwerk. > Dann mach einfach hinter diesen Widerstand deinen Elko im Bereich um > 100µF. > Dann bewegt sich der Zeiger nicht mehr. > Thomas A. schrieb: >> Die Messwerke sind für 300V. > Ach so, AC. Und die Diode hat nur 1 Halbwelle durchgelassen. Dann passen > die 0,9mA wieder zu den 115k. > >> Parallel zum Messwerk ein Elko. > Welchen Wert hat der? > 47µF > Mein Tipp: überbrücke die Diode, dann sind auch die blöden 350mV Offset > weg. Ohne Diode sind die 335mV immer noch zu messen. Aber das ist kein Problem.
Thomas A. schrieb: > Nun mit dem programmieren vom Arduino kenne ich mich nicht so aus. > Der Sketch sieht so aus Ok, ist der übliche Arduino-delay-Müll, da kommt der Einbau einer Decay-Funktion einer Neuprogrammierung gleich. Also besser doch die Kondensator-Variante. Thomas A. schrieb: > Ohne Diode sind die 335mV immer noch zu messen. Aber das ist kein > Problem. Der Offset ist notwendig, um bei den verwendeten DrehEISENmesswerken aus dem nichtlinearen Bereich der Skala zu kommen.
Mario M. schrieb: > Ok, ist der übliche Arduino-delay-Müll, da kommt der Einbau einer > Decay-Funktion einer Neuprogrammierung gleich. Genau das habe ich mir auch gedacht. Wenn ich ein delay(1000) sehe, weiß ich sicher, dass so ein Programm ohne Nachdenken kurz mal lieblos hingekritzelt und garantiert nicht einfach erweiterbar ist. Thomas A. schrieb: > Dann bewegt sich der Zeiger nicht mehr. Dann hast du irgendwas falsch gemacht. Denn wenn der Zeiger mit den bestehenden 47µF an den Anschlag knallt, dann ist es *äusserst unwahrscheinlich*, dass er sich mit 100µF gar nicht mehr bewegt. Thomas A. schrieb: > 47µF >> Mein Tipp: überbrücke die Diode, dann sind auch die blöden 350mV Offset >> weg. > Ohne Diode sind die 335mV immer noch zu messen. Na klar, du gibst die ja auch aus. Aber: der Zeiger schlägt dann schon aus, wo er vorher noch links am Anschlag geklebt hat. Ich würde an dieser Stelle dringend vorschlagen, dass du mal versuchst, deine Schaltung wie in der Elektronik üblich in einen Schaltplan zu malen. Denn Schaltpläne sind die Sprache der Elektronik.
Thomas A. schrieb: > Parallel zum Messwerk ein Elko. > Getauscht wurde nur der Widerstand auf 4,7k um die 300V Messwerke für 5V > zu nutzen. Wenn man den Vorwiderstand in zwei Hälften teilt, und den Elko dazwischen anschließt, dann braucht man weniger Kapazität.
Meine Überschlagsrechnung ergibt, dass das Messwerk einen Innenwiderstand von ca. 400 Ohm haben dürfte. Da die vollständige Umladung eines Kondensators ca. 5 Tau dauert, ergibt sich bei einer Kapazität von 100 uF eine Zeit von rund 0,2 Sekunden, was fast noch etwas zu wenig wäre.
Lothar M. schrieb: > Thomas A. schrieb: >> Dann bewegt sich der Zeiger nicht mehr. > Dann hast du irgendwas falsch gemacht. Denn wenn der Zeiger mit den > bestehenden 47µF an den Anschlag knallt, dann ist es *äusserst > unwahrscheinlich*, dass er sich mit 100µF gar nicht mehr bewegt. Vielleicht hat er den Kondensator in Reihe geschaltet?
so. Habe wieder Zeit mich mit dem Problem zu beschäftigen. Habe leider nicht immer die Zeit dafür. In Bild 1 ist die originale Beschaltung des Messwerkes. Diese hatte ich nur soweit geändert indem ich den Widerstand (von 115k zu 4,7k) an die Skala angepasst habe (Bild 2). Dann habe ich versucht den 25µF Elko durch 100µF bzw. 1000µF zu ersetzen. Bei 1000µF bewegt sich meiner Meinung nach der Zeiger nicht linear. Bei der Schaltung Bild 3 habe ich mit den gleichen Werten von Elko experimentiert.
:
Bearbeitet durch User
Thomas A. schrieb: > Der Sketch sieht so aus: > <viele Seiten Quellcode> > ... Wichtige Regeln - erst lesen, dann posten! Längeren Sourcecode nicht im Text einfügen, sondern als DATEIANHANG Warum programmierst du kein Tiefpassfilter vor die Ausgabe des Analogwertes?
:
Bearbeitet durch User
Ich habe deine Schaltung mal so abgeändert, wie Herr Hinz das richtiger Weise vorgeschlagen hat, dann sind endlich alle Probleme wie weggeblasen: H. H. schrieb: > Wenn man den Vorwiderstand in zwei Hälften teilt, und den Elko > dazwischen anschließt, dann braucht man weniger Kapazität.
Rainer W. schrieb: > Warum programmierst du kein Tiefpassfilter vor die Ausgabe des > Analogwertes? Tiefpassfilter programmieren? Kenne ich nur Hardware seitig.
Beitrag #7403188 wurde vom Autor gelöscht.
Enrico E. schrieb: > Ich habe deine Schaltung mal so abgeändert, wie Herr Hinz das richtiger > Weise vorgeschlagen hat, dann sind endlich alle Probleme wie > weggeblasen: > > H. H. schrieb: >> Wenn man den Vorwiderstand in zwei Hälften teilt, und den Elko >> dazwischen anschließt, dann braucht man weniger Kapazität. Danke. Versuche ich mal.
Gerade mal getestet. Funktioniert richtig schön. Dann möchte ich mich mal bei allen Beteiligten bedanken.
Thomas A. schrieb: > Tiefpassfilter programmieren? > Kenne ich nur Hardware seitig. Wurde doch hier gerade ausführlich diskutiert: Beitrag "Eigenschaften des Moving Avarage Filters" Um eine ähnliche Wirkung wie mit dem Kondensator zu erzielen, könnte man das TP-Filter z.B. alle 50ms aktualisieren und mit dem Ausgangswert den PWM-Ausgang füttern.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.