Propelleruhr POV

Die Propelleruhr bedient sich eines als Persistence of Vision (POV) benannten Phänomens, bei dem das menschliche Auge und Gehirn eine schnelle Abfolge von Bildern als eine fließende Bewegung wahrnehmen. Auf Deutsch nennt sich das Ganze Persistenz des Sehens oder Nachbildwirkung.

Bei der Propelleruhr sind LEDs in einer Reihe angeordnet und diese werden dann in Rotation versetzt. Während der Rotation blitzen die einzelnen LEDs kontrolliert nur ganz kurz auf, wenn sie an einer bestimmten Stelle angekommen sind. Durch die schnelle Rotation bzw. Abfolge dieser Blitze entsteht beim Betrachter im Hirn das Bild einer kompletten Uhr. Die äußersten roten LED werden zum Beispiel im Tastverhätnis 50:50 ein- und ausgeschaltet. Dadurch ergeben sich die Minutenstriche. Alle 5 Minuten/30° blitzen zwei weitere rote LEDs weiter innen auf, was den Eindruck längerer Stundenstriche erzeugt. Für die Stunden- und Minutenzeiger muss der Microcontroller (konkret ein Arduino) die genau Uhrzeit kennen. Ist es zum Beispiel konkret 15:45, so blitzen beim Positionswinkel  90° + 22.5° die inneren 5 Stundenzeiger-LEDs kurz auf, beim Positionswinkel 270° die inneren + äußeren Stunden/Minutenzeiger-LEDs.

Für diese sehr genau getimte Ausgabe muss der Arduino natürlich die Rotationsdauer kennen und den Startpunkt. Für beides ist ein sog. Hallsensor zuständig. Dieser reagiert, wenn ein Magnet nahe beim Sensor vorbeiwandert. Der Magnet ist auf dem Elektromotor postiert, welcher sich nicht dreht. Der Arm mit dem Arduino, den LEDs und dem Hallsensor saust dadurch periodisch am Magneten vorbei und erhält auf diese Weise genau die Startposition und aus der Zeitdifferenz der beiden letzten Pulse noch die Periodendauer.

Diese Periodendauer τ teile ich durch 120, der Wert ist dann mein Zeit- bzw. Taktgeber für die Ausgabe. In einer for-Schleife lasse ich eine Zählvariable i von 0 bis 118 hochzählen. Ist i zum Beispiel gerade, dann steuert der Arduino für die Zeitdauer τ/120 die äußerste rote LED an. Ist i durch 10 teilbar ohne Rest, schaltet er zusätzlich die inneren 2 roten LEDs für den Stundenzeiger an. Aus der aktuellen Stunde h und Minute min ergibt sich ganz einfach der i-Wert des Stunden- bzw. Minutenzeigers und zwar: iStunde = h · 10 + min / 60. Der zweite Term sorgt dafür, dass der Stundenzeiger nicht immer bei der jeweils vollen Stundenmarkierung hängen bleibt, sondern sich stetig der nächsten vollen Stunde nähert. Für die Minutenposition gilt: iMinute = min · 2.

Ein Problem ist der letzte Bereich knapp vor 12 Uhr. Denn die for-Schleife sollte nur ganz knapp vor dem nächsten Hallsensor-Puls fertig durchlaufen sein. Ist die zu früh fertig, klafft zwischen der 59-ten Minute und der 12 Uhr-Position eine Lücke. Ist die zu spät fertig, ragen die letzten Minuten der Stunde bereits in die „neue Stunde“ hinein, spricht in die Positionen knapp rechts von der 12. Infolgedessen bewegen sich die ganzen Markierungen. Dieses exakte Timing ist nicht immer leicht umzusetzen. In meinem Fall habe ich mich auf einen kleinen Kompromiss eingelassen und es gibt zwischen der 59-ten und 60-ten Minute eine etwas größere Lücke als normal. Damit kann ich aber leben…

Es gibt im Internet bestimmt eine elegante Softwarelösung für dieses Problem. Ich habe aber weder im Internet nach einer bereits fertigen Lösung gesucht, noch habe ich ChatGPT u.a. befragt. Die hier präsentierte Lösung ist also eine komplette Eigenkreation und dadurch vielleicht weniger elegant als möglich.

Den starken Elektromotor habe ich bei meinem Lieblingsgeschäft, Neuhold Elektronik, in Graz gekauft: https://www.neuhold-elektronik.at/. Ich hatte Glück, denn es war vom gesuchten Modell nur noch Einer vorhanden 😉

Für die Stromversorgung sorgen zwei in Serie geschaltete 3.7 V Liion-Akkus mit je 250 mAh Kapazität:

Der „etwas“ angestaubte Arduino Nano und links daneben die Real-Time-Clock (RTC):

Die beiden Logik-Mosfets IRL510 schalten die inneren bzw. äußeren LEDs des Stunden/Minutenzeigers. Die je 5 LEDs würden nämlich für einen einzelnen digitalen Arduino-Ausgang zu viel Strom benötigen:

Insgesamt habe ich mich für 14 LEDs entschieden:

Ganz innen leuchtet eine blaue LED kontinuierlich, der Stunden/Minutenzeiger ist gelb und die Markierungen außen habe ich mit roten LEDs umgesetzt:

Wer den kompletten Schaltplan und den Arduino-Code gerne hätte, der spende mir 5 Euro auf mein Paypal-Konto für einen Kaffee. Dann schicke ich die Dateien umgehend an die Spender-Emailadresse. Dies deshalb, weil die allgemeine Spendenbereitsschaft eigentlich defacto nicht vorhanden ist. Bei rund 250 000 clicks pro Jahr generiere ich lediglich um die 40 Euro Spenden in derselben Zeit. Im Internet präsentiertes Fachwissen scheint leider für die allermeisten keinerlei Wert zu haben. Deshalb habe ich mich zu diesen Schritt entschieden…