home
erste Version am 13.05.2018
letzte Änderung am 21.05.2018

Uhrenbeweger

Ich trage meine Automatikuhr quasi täglich. Durchschnittlich wahrscheinlich mindestens 16 von 24 Stunden. Somit brauche ich eigentlich keinen Bewegungs-Automaten dafür.
Der Grund, warum ich trotzdem ein solches Gerät entwerfen will, ist der, dass ich nach meinen derzeit 34 veröffentlichten Designs@Thingiverse nun endlich auch mal was Bewegtes bauen möchte.
Und natürlich soll es nicht einfach nur eine Armbanduhr-Halterung mit direktem Motor-Antrieb werden....also irgendwie ein bischen figgelinsch muss es schon sein.

Die erste Idee hatte mehrere Zahnräder zwischen Motor und Armbanduhr-Halterung - im Steampunk-Design. Logischerweise sollten sich die Zahnräder dazu an der Außenseite des Gehäuses sichtbar drehen. Und das stellte sich als größeres Problem dar. Konkret verkanten die Zahnräder sehr leicht, wenn sie nur einseitig geführt werden.

Das nächste Design ging in Richtung Levitation: die Lagerung der Achse und die Übertragung der Drehbewegung des Motors sollte berührungslos erfolgen. Leider hat es mit der Achs-Lagerung nicht hinreichend belastbar funktioniert.

Mein drittes Design hat es nun geschafft und ist eine Mischung aus den beiden vorigen Designs.
Derzeit ist der Drucker gerade mit dem letzten Zahnrad beschäftigt.



Die Ansteuerung des Stepper-Motors erledigt momentan noch ein ArduinoUno und dreht das Ding ganz stumpf in eine Richtung. Wie die endgültige Bewegungs-Sequenz aussehen wird, ist noch offen. Dazu braucht es zunächst ein paar Studien. Schließlich könnte es sein, dass die Uhr schneller aufgezogen ist, wenn sich die Bewegungsrichtung nach jeder Umdrehung umkehrt. ....wie auch immer diese Automatikuhren funktionieren mögen!?

Vielleicht wird die Stromversorgung final über Solarzellen erfolgen. Vorsichtshalber habe ich mal ein Zweierpack davon bestellt.
Für die Antriebs-Übertragung kommen diese Magneten zum Einsatz. Weiterhin wird ein Set mit M4-Schrauben, eine M4-Sicherungsmutter, ein 608-Kugellager und 75mm einer M4-Gewindestange benötigt.
Ach ja.....die Verfügbarkeit eines 4mm-Bohrers und eines M4-Gewindeschneiders kann auch nicht schaden.



Mittlerweile habe ich die openSCAD-Datei und sämtliche STL-Dateien auf Thingiverse hochgeladen.
Auch gibt es auf Youtube dazu bereits ein kurzes Video.
So sieht das Teil aus:
der 3D-gedruckte Uhrenbeweger

Jedoch liegt meine Armbanduhr nun schon seit geschlagenen zwei Nächten (und dem Tag dazwischen) unbewegt rum und will einfach nicht aufhören, die korrekte Uhrzeit anzuzeigen. Damit ich mit meinen Auflade-Messungen beginnen kann, muss sie aber erstmal stehen bleiben.

Die Idee ist, die leere Uhr jeweils 10 Minuten mit einem Bewegungs-Profil aufzuladen, danach die angezeigte Zeit zu notieren, sie wieder leerlaufen zu lassen und dann anhand der notierten und aktuell angezeigten Zeit die Betriebs-Dauer des jeweiligen Profils zu ermitteln.

Zur Ansteuerung des Steppers habe ich es mir leicht gemacht. Dafür wird -ganz profan- die Library CheapStepper genutzt. Sollte ich mich final für einen ATtiny85 als CPU entscheiden, werde ich die Library wahrscheinlich wieder rausschmeißen und durch eine einzelne Funktion zum Ansteuern der Spulen ersetzen.
Erste Tests haben ergeben, dass die maximale Drehzahl nicht direkt erreicht werden kann. Der Stepper läuft nicht an, wenn er aus dem Stand auf Vollgas eingestellt wird. Wobei Vollgas einem RPM-Wert von 24 entspricht.



Die erste Messung ist abgeschlossen. Die Bewegungssequenz sah dabei so aus, dass die Uhr zehn Minuten lang abwechselnd erst 360° in die eine Richtung und danach 360° in die andere Richtung gedreht wurde (@RPM=15). Das hat zu einer Betriebsdauer von 4,5 Stunden geführt.
Allerdings hat die Uhr nicht irgendwann während der Bewegungsphase angefangen, sich wieder zu drehen. Nach den zehn Minuten Bewegung zeigte die Uhr die selbe Zeit, wie davor. Es brauchte erst eine deutliche Erschütterung. Dadurch hat sie gestartet ... und 4,5 Stunden durchgehalten.

Eben habe ich sie 20 Minuten drehen lassen. Immer 3*360° in eine Richtung, dann 3*360° andersrum (@RPM=15). Nach den ersten zehn Minuten habe ich die Uhr kurz aus dem Uhrenbeweger genommen, sie kurz angeschnippt (um sie zu starten) und sie danach weitere zehn Minuten laden lassen. Mal schauen, ob sie nun neun Stunden durchhält.
Ergebnis: Die Uhr ist 11,5 Stunden (bzw. 11:30) gelaufen.

Nun probiere ich es mal mit nur einer Drehrichtung. Zehn Minuten lang wird die Uhr konstant gegen den Uhrzeigersinn gedreht.
Vorher hatte ich mit höheren RPM-Werten gespielt. Jedoch hat sich gezeigt, dass der Motor ab einem Wert von 18 sporadisch stehen bleibt, wenn die Uhrhalterung blockiert wird und der Motor gegen die Magnet-Kraft arbeiten muss. Auch läuft der Motor nach einer solchen Blockade nicht wieder von alleine an.
Daher werde ich nun beim RPM-Wert 15 bleiben.

Vier Stunden und 20 Minuten später ist die Uhr wieder stehen geblieben.
Danach habe ich die Uhr mit dem Ziffernblatt nach unten in den Uhrenbeweger gesteckt und erneut zehn Minuten gegen den Uhrzeigersinn drehen lassen. Aus Sicht der Mechanik müsste das ja nun eine Drehung im Uhrzeigersinn gewesen sein. Spannenderweise hat das zu einer Laufzeit von sechs Stunden und 25 Minuten geführt. Somit knapp 50% längere Laufzeit.

Wegen der unterschiedlichen Laufzeiten scheint es also durchaus Sinn zu machen, unterschiedliche Bewegungsprofile jeweils mehrfach laufen zu lassen und die sich daraus ergebenden Laufzeiten zu protokollieren.
Andererseits wäre mir das entschieden zu zeitintensiv und -vor allen Dingen- unspannend. Außerdem würde es meine einzige Armbanduhr für Tage oder eher Wochen blockieren.

Was ich mal angedacht hatte, war eine Profil-Auswahl mittels Drehgeber und OLED-Display. Zusätzlich zum Drehprofil dann auch gleich sowas wie Dauer, Geschwindigkeit und Wiederholungs-Frequenz.
Jedoch langweilt mich das jetzt schon. Die Stepper-Ansteuerung ist trivial und eine Menü-Navigation ist einfach nur stumpfsinnige / lästige Arbeit. Und das dann für etwas, was ich eigentlich -insgesamt- überhaupt nicht brauche...
Die Idee mit der Stromversorgung über Solarzelle musste ich wieder verwerfen, weil der einzig sinnvolle Aufstellungsort für den Uhrenbeweger das Schlafzimmer wäre. Dort kommt direkte Sonneneinstrahlung aber nicht vor 14:00 Uhr an.
Vielleicht könnte der Prozessor Wartezeiten im Tiefschlafmodus abarbeiten. Wenn ich den Uhrenbeweger allerdings nur sehr sporadisch nutze, wäre selbst Tiefschlaf noch sinnlose Stromverschwendung. Viel sinnvoller ist es in diesem Fall, das Steckernetzteil nur bei Bedarf in eine Schuko-Steckdose zu stecken.

Das Minimum zum Abschluss dieses Projektes wäre eine CPU-Platine mit entsprechend programmiertem ATtiny85 samt einer USB-Buchse im Gehäuse-Unterteil zwecks Stromversorgung. Und wenn ich statt der USB-Buchse diesen Schrott verbauen würde, müsste ich nicht einmal das Gehäuse-Unterteil neu drucken.
Eine Bodenplatte ließe sich so designen, dass sie einerseits Schraubsockel für die zwei Leiterplatten (Stepper-Driver und ATtiny85) hätte und anderseits auf Spannung mit dem vorhandenen Gehäuse-Unterteil zu verbinden wäre. Die Kabeldurchführung könnte am Rand der Bodenplatte erfolgen.
Alternativ könnte die Bodenplatte außenrum einen 10mm hohen Sockel bekommen, auf dem das Gehäuse-Unterteil aufsitzen würde. So könnte dann doch eine USB-Buchse eingesetzt werden - die Aussparung für die Buchse befände sich im Sockel.
In beiden Fällen befände sich sämtliche Elektronik somit auf der Bodenplatte, die einzige Verbindung nach oben wäre das fünfpolige Kabel zwischen Stepper und Stepper-Driver. Das sähe dann sogar fast schon so aus, als wäre das von Anfang an so geplant gewesen ;-)   ... tatsächlich war jetzige Gehäuse-Unterteil nur als Übergangslösung gedacht, die in dem Moment ersetzt worden wäre, in dem die Komponenten des Bedienpanels festgestanden hätten.

Jedenfalls muss ich auf diese Weise nix auf der Thingiverse-Seite löschen und durch ein verändertes Teil ersetzen.
Einfach noch eine entsprechende Bodenplatte zufügen .... und als finalen Schritt den Status "Work in Progress" deaktivieren.



Der Kode für den ArduinoUNO ist z.Zt. folgender:

#include "CheapStepper.h"

CheapStepper stepper;

//Richtungszuweisung des Motors
boolean moveClockwise = true;

void setup() {
//Serial.begin(115200);
//Serial.println("28BYJ-48 bereit.");
}


void loop() {
static int cnt=0;
static unsigned long t1, t2;

stepper.setRpm(15);
moveClockwise=false;

t1=millis();
while((millis()-t1)<(60000L*10)) {
stepper.step(moveClockwise);
if(++cnt>=4096*3) {
cnt=0;
moveClockwise=!moveClockwise;
}
}
while(true) {
delay(1000);
}
}


Wie man sieht, kommt da keine Zuweisung bezüglich der zu verwendenden IO-Pins vor.
In CheapStepper.h wirds initialisiert mit: int pins[4] = {8,9,10,11};
Aber sinnigerweise gibt es auch eine Konstruktor-Varinte von CheapStepper, über die eine abweichende Pin-Zuordnung eingestellt werden kann.
Also etwa so (für den ATtiny85): CheapStepper stepper(1, 2, 3, 4);  // Pins am Chip: 6, 7, 2, 3
Das lässt sich immerhin schon mal erfolgreich für den ATtiny85 compilieren.

Das könnte ich nun von 10 Minuten Drehdauer auf 30 Minuten umstellen ... und dann kann man es mittels Steckernetzteil rein/raus ein- bzw. ausschalten.
Oder noch simpler: die Drehdauer-Limitierung wieder rausschmeissen und das Ding solange drehen lassen, wie Strom da ist. Das hätte den Vorteil, dass man sowohl optisch wie auch akustisch darauf hingewiesen würde, dass das Ding noch am Strom hängt.



Nun ist die Bodenplatte gedruckt, die Strippen sind verlötet, die Leiterplatten sind verschraubt und der finale Test war erfolgreich.

Im ATtiny85 läuft jetzt folgender Kode:

#include "CheapStepper.h"

CheapStepper stepper(1, 2, 3, 4); // Pins am Chip/Driver: 6/IN1, 7/IN2, 2/IN3, 3/IN4

boolean moveClockwise=false;

void setup() {
stepper.setRpm(15);
moveClockwise=false;
}

void loop() {
static int cnt=0;
static unsigned long t1;

t1=millis();
while((millis()-t1)<(60000L*30)) { // 30 Minuten drehen
stepper.step(moveClockwise);
if(++cnt>=4096*3) { // immer drei Umdrehungen...
cnt=0;
moveClockwise=!moveClockwise; // ...danach Richtungswechsel
}
}
while(true) { // wenn die 30 Minuten um sind
stepper.step(moveClockwise);
if(++cnt>=4096/2) { // immer eine halbe Umdrehung...
cnt=0;
moveClockwise=!moveClockwise; // ...danach Richtungswechsel
}
}
}

Weil auf dem Stepper-Driver-Board bereits ein kleiner Keramik-Kondensator verbaut ist, habe ich den ATtiny85 komplett ohne zusätzliche Beschaltung verbaut - also einfach nur sechs Strippen zum Stepper-Driver (4x Motorsteuerung und 2x Versorgungsspannung).

Damit sieht das im geöffneten Zustand nun so aus:
der geöffnete Uhrenbeweger

Zwecks Stromversorgung habe ich mich dann doch für eine runde Buchse entschieden. Diese hier müsste es gewesen sein.