UHR PROGRAMMIEREN / HILFE !!!!!!!

Hallo Leute

Ich studiere Produktdesign und habe mir vorgenommen eine Uhr zu bauen.
Leider ist mein Zeitmanagement mal wieder unter aller Sau und ich kenne mich
nicht sehr gut mit Elektronik und Programmieren aus.

Am Ende soll jeder Motor einen Zeiger antreiben (Minuten- und Stundenzeiger).

Motor#1 (24 Umdrehungen mit je 60 steps)
Motor#2 (02 Umdrehungen mit je 12 steps)

in Verwendung :

Ich habe ein Sketch im Internet gefunden der genau das machen soll:

#include <Adafruit_MotorShield.h>

int motorPin1 = 8;  // Blue   - In 1
int motorPin2 = 9;  // Pink   - In 2
int motorPin3 = 10; // Yellow - In 3
int motorPin4 = 11; // Orange - In 4

int motorPin5 = 2;  // Blue   - In 1
int motorPin6 = 3;  // Pink   - In 2
int motorPin7 = 4; // Yellow - In 3
int motorPin8 = 5; // Orange - In 4
                       
int stepperSpeed = 1000; // Minimum Anzahl Mikrosekunden zwischen  zwei Steps

void setup() {
 pinMode(motorPin1, OUTPUT);
 pinMode(motorPin2, OUTPUT);
 pinMode(motorPin3, OUTPUT);
 pinMode(motorPin4, OUTPUT);
 
 pinMode(motorPin5, OUTPUT);
 pinMode(motorPin6, OUTPUT);
 pinMode(motorPin7, OUTPUT);
 pinMode(motorPin8, OUTPUT);
}

void stepper1()
 { // 1
 digitalWrite(motorPin4, HIGH);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin1, LOW);
 delayMicroseconds(stepperSpeed);

 // 2
 digitalWrite(motorPin4, HIGH);
 digitalWrite(motorPin3, HIGH);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin1, LOW);
 delayMicroseconds(stepperSpeed);


 // 3
 digitalWrite(motorPin4, LOW);
 digitalWrite(motorPin3, HIGH);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin1, LOW);
 delayMicroseconds(stepperSpeed);


 // 4
 digitalWrite(motorPin4, LOW);
 digitalWrite(motorPin3, HIGH);
 digitalWrite(motorPin2, HIGH);
 digitalWrite(motorPin1, LOW);
 delayMicroseconds(stepperSpeed);


 // 5
 digitalWrite(motorPin4, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin2, HIGH);
 digitalWrite(motorPin1, LOW);
 delayMicroseconds(stepperSpeed);


 // 6
 digitalWrite(motorPin4, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin2, HIGH);
 digitalWrite(motorPin1, HIGH);
 delayMicroseconds(stepperSpeed);


 // 7
 digitalWrite(motorPin4, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin1, HIGH);
 delayMicroseconds(stepperSpeed);


 // 8
 digitalWrite(motorPin4, HIGH);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin1, HIGH);
 delayMicroseconds(stepperSpeed);
}

void stepper2()
{ // 1
 digitalWrite(motorPin8, HIGH);
 digitalWrite(motorPin7, LOW);
 digitalWrite(motorPin6, LOW);
 digitalWrite(motorPin5, LOW);
 delayMicroseconds(stepperSpeed);
 
 // 2
 digitalWrite(motorPin8, HIGH);
 digitalWrite(motorPin7, HIGH);
 digitalWrite(motorPin6, LOW);
 digitalWrite(motorPin5, LOW);
 delayMicroseconds(stepperSpeed);


 // 3
 digitalWrite(motorPin8, LOW);
 digitalWrite(motorPin7, HIGH);
 digitalWrite(motorPin6, LOW);
 digitalWrite(motorPin5, LOW);
 delayMicroseconds(stepperSpeed);


 // 4
 digitalWrite(motorPin8, LOW);
 digitalWrite(motorPin7, HIGH);
 digitalWrite(motorPin6, HIGH);
 digitalWrite(motorPin5, LOW);
 delayMicroseconds(stepperSpeed);


 // 5
 digitalWrite(motorPin8, LOW);
 digitalWrite(motorPin7, LOW);
 digitalWrite(motorPin6, HIGH);
 digitalWrite(motorPin5, LOW);
 delayMicroseconds(stepperSpeed);


 // 6
 digitalWrite(motorPin8, LOW);
 digitalWrite(motorPin7, LOW);
 digitalWrite(motorPin6, HIGH);
 digitalWrite(motorPin5, HIGH);
 delayMicroseconds(stepperSpeed);


 // 7
 digitalWrite(motorPin8, LOW);
 digitalWrite(motorPin7, LOW);
 digitalWrite(motorPin6, LOW);
 digitalWrite(motorPin5, HIGH);
 delayMicroseconds(stepperSpeed);


 // 8
 digitalWrite(motorPin8, HIGH);
 digitalWrite(motorPin7, LOW);
 digitalWrite(motorPin6, LOW);
 digitalWrite(motorPin5, HIGH);
 delayMicroseconds(stepperSpeed);
}


unsigned long lastStepMicros;
const long stepMicros=1000L; // Anzahl Microsekunden zwischen zwei Schritten
int count;
void loop()
{
 if (micros()-lastStepMicros>=stepMicros) // Schrittdauer ist um, mache einen Schritt
 {
    stepper1();
    lastStepMicros+=stepMicros; // Zeit weiterzählen
    count++;  // Schrittzähler weiterzählen
    if (count>=12) // Nach je 12 Schritten, mache einen Schritt mit dem zweiten Motor
    {
      stepper2();// Stepper soll an an dieser Stelle eine Umdrehung machen (ca. 4000 Steps) statt nur einen Schritt
      count=0;
    }
 }
}

Ich freue mich über jede Antwort.
Und wie schon gesagt mir steht nicht sehr viel Zeit zur Verfügung,
sonst würde ich mich da selbst rein Arbeiten.

Mfg Jan

jlm94:
… vorgenommen eine Uhr zu bauen.
Leider ist mein Zeitmanagement mal wieder unter aller Sau …

Wenn das mal kein guter Grund ist, sich eine Uhr zu bauen …

YMMD

jlm94:
Ich habe ein Sketch im Internet gefunden der genau das machen soll:

Ich tippe mal darauf, dass der Sketch es aber nicht tut. Stimmt’s?

SCNR

Gregor

jlm94: Ich habe ein Sketch im Internet gefunden der genau das machen soll:

Macht er das nicht ?

Und wie schon gesagt mir steht nicht sehr viel Zeit zur Verfügung, sonst würde ich mich da selbst rein Arbeiten.

Verstehe ich dich richtig, sollen wir uns jetzt für dich da rein arbeiten ?

Stell Dich bitte für einen kurzen Augenblick auf die "andere Seite" des Forums, und lies dir Deinen Beitrag durch. :o

Stefan

jlm94: Ich freue mich über jede Antwort.

Ebenso wie sich hier viele über eine Frage freuen und gerne helfen, wenn das Problem verständlich ist.

Erstmal Danke für die Antworten.

Ja ich gebe zu mein Eintrag ist ein wenig wirr, liegt wohl an dem normalen Schlafentzug gegen Semesterende und unverschämt wollte ich nicht sein. Sorry

Also mein jetziges Hauptproblem ist wohl das die Motoren nicht richtig laufen. Ich habe gemessen und die Motoren bekommen zu viel Saft ab und stoppen dann.

Habt ihr mir einen Tipp wie ich das lösen konnte? ( Hardware oder Software egal)

mfg Jan

jlm94: ...liegt wohl an dem normalen Schlafentzug gegen Semesterende...

Haha kenn ich xD Schreibe morgen GET2.

https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/using-stepper-motors

Das mit den beiden Motoren und den Steps / Umdrehung für welchen Motor habe ich nicht verstanden. Zu viel Strom stoppt nicht. Und mit dem Sketch kannst du den nicht steuern.

Also: Wie eine Uhr aussieht wissen wir. Deine Stepper haben 200 Schritte für eine Umdrehung. Was möchtest du jetzt wie steuern? Wie kommst Du auf 60 und 12 Steps ?

Stefan

Ich habe jetzt mal ein paar einfache Bewegungen programmiert. Die Motoren laufen keine kurze Zeit, dann macht glaube ich mein Motorshield dicht und die Motoren gehen aus. Könne auch sein das sich mein Arduino und die Motoren nicht verstehen.

Ich habe Zeiger gebaut die ich dann einfach auf die Achsen der Motoren stecken kann.

Mein Ziel ist es:

Motor 1 ->soll in einer Stunde 1 Umdrehung machen.

Motor 2 ->soll nur 2 Umdrehungen pro Tag machen.

Wie normale Zeiger bei einer Uhr natürlich gleichmässig.

mfg jan

Gedankliches Update... wenn der Stepper für die "Minutenanzeige" alle 18 Sekunden einen Schritt macht, bist du nach 3600 Sekunden genau 1 Umdrehung (Stunde) weiter.

Folglich "müsste" der Stundenmotor entweder alle 18x12 oder 18x24 Sekunden EINEN Schritt machen. (Je nachdem, ob Du eine 12 oder 24 Std Uhr bauen willst.) Ob das aber immer genau auf eine "glatte" Stunde raus kommt, wage ich zu bezweifeln. (Also ob um 8.00 Uhr, wenn der Minutenzeiger auf 12 steht, der Stundenzeiger glatt auf 8 steht). Mann KANN das durch Microstepping sicherlich smoother machen, aber Dein Problem wird sich dadurch nicht ändern.

Stefan

Noch ne doofe Frage meinerseits... woher kommt die Energieversorgung? (Bitte Spezifikationen)

Zitat aus der Beschreibung des Schrittmotors

Funktionen

-1m Kabel für die Verbindung eine elektrische Maschine, hat auf der anderen Seite mehrere optionale Verbindungen; Um Schrumpf-Schlauch-Effekt zu verhindern, dass der Draht Wirren bis D-förmige Welle mit 22mm, elektrische Maschine mit hohem Drehmoment und hoher Geschwindigkeit bekommt, geringes Rauschen.

-Spannende Modus: zwei-Phasen 4-Leiter. Es ist verfügbar für die Drehung des Forward und reverse.

Mehr Sorgen macht mir die Angabe 1.6 Ohm und 1.5 Amps... Daher meine Frage nach der Energieversorgung

Stefan

InPUT:100-240V 50/60Hz 0.8A OUTPUT: 12V 2,5A

Ich benutze ein Netzteil das noch bei mir in der Kabelschublade war.

mfg jan

Motor: "Nennspannung: 2.4V." Shield: "Can run motors on 4.5VDC to 13.5VDC."

Motor und Shield passen nicht zusammem, Du befindest Dich auf Zerstörungskurs, "with thermal shutdown protection" rettet noch Deine Elektronik.

jlm94:

Ich benutze ein Netzteil das noch bei mir in der Kabelschublade war.

mfg jan

Jan, du make mich fick un featich... BITTE !!! Daten zu dem Netzteil.

Stefan

Ok dann werde ich mir morgen früh wohl oder übel neue Motoren besorgen müssen :/

Schade, dann kann ich ja nur Feierabend machen für heute. Ich bedanke mich recht herzlich für eure Hilfe habt noch einen schönen Abend.

und Sorry Stefan #stümperamwerk

Ich kann mir vorstellen dass man als Student finanziell nicht besonders flüssig ist.
Darf ich Dir evtl. dennoch einen Rat geben?

Schau mal Hier (Achtung Werbung) nach den Motoren, und dem billigeren EasyTreiber.
Du bräuchtest von beidem jeweils zwei.
Wenn mich nicht alles täuscht, bekommen Schüler und Studenten noch 10%Rabatt (bin nicht Sicher, bitte selber nachlesen).
Dann passen die elektrischen Teile, und du kannst das Netzteil sogar nutzen. (wenn ich auch eines mit
24V empfehlen würde, aber es wird wohl ausreichen…)
Die Motoren passen auch an DEIN Shield, die 2x 3,90 €
zusätzlich würde ich aber als Backup mitnehmen.

Stefan

Wenn es für eine Uhr ist muss es auch nicht unbedingt ein Schrittmotor sein.

Gerade für so Uhr Geschichten gibt es spezielle Motoren Da braucht man nur eine Phase und man kann die ganz easy ansteuern.

Weiß nur gerade nicht mehr wie die Teile hießen.

Wenn ich die Teile wiederfinde meld ich mich wieder

Ich denke dass Schrittmotore hier Vor und Nachteile haben. Ideal sind sie definitiv nicht. Allein die Tatsache dass sie recht viel Strom brauchen, auch beim Stillstehen, die komplizierte Ansteuerung usw... AAABER :) : Der Junge ist DesignStudent... Man(n) kann mit Schrittmotoren natürlich auch unheimlich viel Blödsinn treiben... Z.B. den Minutenzeiger nicht von 59 auf "60" springen lassen, sondern schnell zurück auf 0 drehen. Wenn man den Haltestrom "so" auslegt, dass es (nur) eben so reicht, kann man die Uhr "von Hand" stellen , der/ die Zeiger könnten vor und zurück tanzen zu einer Melodie usw... Wie gesagt, wenn es nicht um eine Ideale Anpassung geht, sondern rein um eine geile Design Idee... Könnte was werden...

Stefan

Man(n) kann mit Schrittmotoren natürlich auch unheimlich viel Blödsinn treiben...

Clock Art

combie: Clock Art

Dafür nimmt man aber keine dicken Schrittmotore.

@jlm94 Der Treiber ist ungeeignet für diese Motore. Entweder nimmst Du andere Treiber (Stromtreiber mit Microschritten) zb A4899, SilentStepStick TMC2100, oder kompatibles für 3D Drucker oder kauf Dir irgendwelche Schrittmotore mit 12V und 0,4A oder 0,33A und 1,8 oder 0,9° Schritte.

Schau Dir die stepper Bibliothek an und auch die AccelStepper Bibliothek.

Grüße Uwe