Home > Technologie > Arduino Etch-A-Sketch Uhr

Arduino Etch-A-Sketch Uhr

0
Advertisement

Arduino Etch-A-Sketch Uhr

Ich habe verschiedene Arduino getrieben Etch-A-Sketch Uhren im Web gesehen, aber keiner mit Anweisungen (ist es eine Art von Geheimnis?) Ist jemand plant, es reich an der Etch-A-Sketch Clock globalen Markt?). Ich habe Arduino verwendet, aber nie benutzt Schrittmotoren, Echtzeit-Uhren, nie auf dieser Ebene codiert (eigentlich ganz einfach), und nie wirklich etwas aus dem Nichts gebaut.

Ich nahm den Code von jemandem, der eine EAS (Etch-A-Sketch) gemacht hatte, die zufällige Zeilen zeichnete und dann von dort gelernt wurde (sein Code lehrte mich, wie man Stepper steuert und wie man Case-Anweisungen verwendet).

Es ist alles ziemlich einfach. Der schwierigste Teil ist die Definition jeder numerischen Ziffer im Code, da jedes EAS etwas anders ist. Wenn Sie beispielsweise einen EAS-Regler drehen, bleibt der "Cursor" auf der EAS stehen. Sie können dies messen und schnell schreiben Sie den Code, dass "-1600" Schritte des Schrittmotors zieht 2cm Linie auf der EAS in die linke Richtung.

Sie würden dann davon ausgehen, dass "+1600" Schritte geben würde 2cm Linie auf der EAS in die richtige Richtung, aber es wird nicht. Sie werden wahrscheinlich ca. 1cm. Denn die EAS ist ein "analoges" Gerät mit eigenen analogen Schwächen. Sie werden feststellen, dass, wenn Sie einen Drehknopf in einer Richtung drehen und dann Richtung ändern, der Zeichnungsstift zurückbleibt, während Schlauch in den internen Mechanismen aufgenommen wird.

Die genaue Entfernung jedes EAS-Drehknopfes bewegt den Stylus / Cursor auf dem EAS ist abhängig von dem, was es zuletzt getan hat! Dh wenn die EAS nur nach oben verschoben wird, dann ist die nächste Bewegung nach rechts anders als wenn sie gerade nach links gegangen ist. Etc usw.

Das bedeutet, dass jede Zahl / Ziffer manuell berechnet werden muss. Es war eine Menge Arbeit. Nicht schwierig, aber es erforderte Geduld. Ich habe es über mehrere Abende. Sie werden feststellen, dass die Ziffern 8, 9 und 0 nicht so hübsch sind, wie dies die letzten waren, und ich hatte damals meine Geduld verloren! Sie können feine tune sie leicht :-)

Um die Zahlen zu erarbeiten, druckte ich 0-9 in einer "digitalen" Schriftart und schneide dann die Zahlen aus. Ich habe dann stecken sie auf der EAS und "zeichnete" um sie mit dem EAS-Test-Code (mehr dazu später).

Schritt 1: Stückliste - Stückliste (Stückliste für uns Briten!)

Das ist ziemlich flüssig - ich gebe Ihnen ein paar Optionen am Ende.

Plexiglas / Acrylblatt A3 - 3mm dick 5 €
Perspex / Acryl Blatt A3 - 4mm dick £ 6.80 erhältlich

Alle der unten waren von http://www.zappautomation.co.uk/de/
8mm glatte Stahlstange 300mm SFC8 £ 3.60
8mm Stangenschellen x 2 SK08 £ 2.82
T2.5 32 Zahnriemenscheibe für EAS Rotation £ 3.49
T2.5 Gürtel 6mm breit 145mm lang für EAS Drehung £ 3.96
Nema 17 Motor SY42STH33-1334A für EAS Rotation £ 11.00 (Ich fand es besser, da, später zu lesen)

Diese waren von beltingonline.com
T2.5 6mm breite 177.50 lange Bänder x 2 £ 6.98 für beide
T2.5 30 Zahnscheibe x 2 £ 5.91 für beide
T2.5 20 Zahnscheibe x 4 10,94 € für alle 4 (Sie benötigen nur 3)

ITC RTC DS1307 AT24C32 - Echtzeituhr mit Akku £ 2,85 Ebay Chinesischer Verkäufer
5V Schrittmotor mit ULN2003 Fahrer x 2 £ 3.30 jeder oder kleiner - Ebay
EasyDriver - Arduino Schrittmotor-Treiber (http://www.schmalzhaus.com/EasyDriver/) £ 3,00 oder weniger - Ebay (chinesische Verkäufer)

Etch-A-Sketch - um £ 10 von Tesco online.
12V Stromversorgung - mindestens 2 Ampere - £ variieren

Arduino ATMega328 Arduino Uno Chip Kit 3,50 € - dies ist der Arduino Chip, Widerstände, Kristall und 5V Regler Kit. Sie könnten genauso gut kaufen alle Arduino auf einem Brett. Es spielt keine Rolle. Dies ist nur der billigste Weg.

Zusätzliche Bemerkungen:

Die kleinen Schrittmotoren (x2) mit den ULN2003 Treibern kosten bei Ebay nahezu nichts. Ich kaufte sie, wie ich experimentierte und wusste nicht einmal, ob ich in der Lage sein, diese zu arbeiten, an allen so wollte nicht zu viel Geld begehen. Sie sind langsam. Aber sie funktionieren. Sie bekommen auch sehr heiß, aber scheinen ok. Sie sind langsam genug, dass es ungefähr 2.5 Minuten dauert, um die Zeit zu zeichnen. Ich habe dann die Uhr pausieren eine Weile, dann zeichnen Sie die Zeit wieder. Auf diese Weise können die Motoren halten, und die EAS wird nicht ständig aktualisiert, die sicherlich würde es in kurzer Zeit tragen. Mein nächster Schritt ist, sie mit Nema 17 Motoren zu ersetzen.

Der Schrittmotor für die EAS-Rotation war ein Fehler. Ich wusste nicht, was ich tat. Es funktioniert, aber nur eben! - Es erfordert 1.3Amps pro Phase, um mit vollem Drehmoment laufen und ist auch ein ziemlich kleiner Motor. Der EasyDriver Stepper-Treiber ist nur auf ca. 750 mA ausgelegt, so dass er den Schrittmotor nicht mit vollem Drehmoment laufen lässt. Mit der Einstellung der Leistungsschraube am EasyDriver dreht sich die EAS, aber das Gewicht des EAS muss gut ausgeglichen werden, um die Arbeit aus ihm herauszunehmen.

Ich kaufte einige Nema 17 Schrittmotoren, die bei 0.8amp pro Phase bei 6v bewertet werden und sie sind nicht aufzuhalten!

Der einfache Treiber kann auch mit einem generischen L298N 4-Schritt Stepper Treiber ersetzt werden - aber sie kosten fast die gleichen, und haben keine schöne glatte Microstepping wie die EasyDriver hat, und sie verwenden mehr Drähte! Ich verließ die kommentierte Code in der Haupt-Arduino Skizze, so dass Sie sehen können, wo ich 1. verwendet einen dieser Treiber, um die EAS (bevor ich verbrannt es mit dem falschen Motor!).

Schritt 2: Konstruktion - Rahmen

Arduino Etch-A-Sketch Uhr

Arduino Etch-A-Sketch Uhr

Arduino Etch-A-Sketch Uhr

Dies ist die erste Sache, die Sie machen müssen, da Sie nicht wirklich testen können alle Motorsteuerung der EAS mit ihm. Sie brauchen sich nicht darum zu kümmern, die EAS-Rotationsmotorsteuerung bis viel später hinzuzufügen, wenn Sie nicht wollen. Stellen Sie sicher, dass Sie die EAS-Rahmen (Halter) zuerst, so dass Sie wissen, welche Höhe, um es zu montieren, so dass es nicht auf die Basis, wenn es rotiert!

Ich verwendete 4mm Acryl für die Unterseite und die Seiten und 3mm Acryl für den EAS-Halter / Rahmen.

Sie wollen Ihre nach Ihrem Geschmack zu bauen, aber um Ihnen zu helfen, meine Dimensionen (grob) sind:

Unterseite = 20cm durch 32cm
Seiten = 10cm x 18cm
Seitenwelle / Spindelbohrung = 16cm von der Basis

EAS Rahmen 3mm Platte (ungebogen) = 30-31cm lang x 24.5 breit (könnte dünner sein)

Für den EAS-Rahmen (Halter) habe ich eine Heißluftpistole verwendet, um das Acryl in eine "U" -Form am Boden zu biegen. Das war weder einfach noch ordentlich! - Ich musste das Acryl mehrmals aufwärmen, um es meistens flach zu bekommen !. Google, wie man Acryl biegen - Sie legen sie einfach auf eine gute gerade Kante und dann heizen sie und es beugt sich. Das Resultat ist für beiläufige Kontrolle fein. Wenn ich größere Nema 17 Stepper später werde ich schneiden ein Stück Acryl, um die Motoren unterhalb montieren, dann befestigen Sie dieses Stück Acryl, um die Hauptplatte mit 3cm Abstandshalter.

Ich reparierte die Seiten an der Basis mit Ersatz 45 dgree Winkel Klammern hatte ich herumliegen, und dann vernietete sie zusammen. Sie könnten auch schrauben sie zusammen mit Muttern und Bolzen - ich würde M3 empfehlen.

Zur Befestigung der EAS versuchte ich mehrere Experimente. Ich habe gelernt, dass jedes Loch in der EAS ein Fehler ist! Probieren Sie es aus - und versuchen Sie dann, Aluminiumpulver aufzuräumen .... Am Ende klebte ich die EAS Knöpfe (die einfach abziehen) auf der Rückseite des EAS mit Epoxy 2 Teil Kleber und gebohrt 2mm Löcher in ihnen. Ich hatte 4 von diesen, wie ich schon mit dem Bohren in eine andere EAS experimentiert ...... Verwenden Sie einfach, was Sie haben, um die EAS in einem Abstand von der Platte, die für Sie arbeitet. Mein System erlaubt mir, den EAS mit 4 Schrauben zu entfernen, zum Testen etc.

Schritt 3: Konstruktion - Fahren der EAS-Knöpfe

Arduino Etch-A-Sketch Uhr

Arduino Etch-A-Sketch Uhr

Die Motoren für die EAS-Drehknöpfe sind nur verschraubt (M3 Muttern und Schrauben) in das Acryl. Bohren Sie die Löcher für die Schrauben größer als Sie benötigen, dann verwenden Sie Scheiben auf den Schrauben. Auf diese Weise können Sie die Riemenspannung durch Bewegen des Motors auf seine Löcher einstellen.

Ihre Riemenscheiben sollten 5mm Löcher haben. Diese passend zu den Motorwellen gut genug (oder perfekt für NEMA 17 Motoren). Bestellen Sie Ihre Riemenscheiben mit dem richtigen Durchmesser Löcher - ich nicht - und sogar mit einem Säulenbohrer, schaffte ich es, nicht zentrale Bohrungen bohren - das ist wirklich messes up die Riemenspannung.

Die größeren Riemenscheiben brauchen wieder 5mm Löcher. Die 30T Riemenscheiben kommen mit 6mm Löchern, so kaufte ich einige 5mm interne Dia Messing Schläuche und schieben sie in die 6mm Löcher auf 5mm zu reduzieren.

Die Riemenspannung muss dicht sein, ohne die Kunststoff-EAS-Wellen zu biegen.

Ich legte die Treiber-Boards, die mit den Steppern auf der Rückseite des EAS-Mount kommen und nur die Drähte runden. Wenn ich dachte, hätte ich 8mm Löcher gebohrt und die Stecker und Drähte durch die Löcher geführt.

Schritt 4: Konstruktion - Montage und Antrieb der EAS-Rotation

Arduino Etch-A-Sketch Uhr

Arduino Etch-A-Sketch Uhr

Zur Befestigung der EAS an der Unterseite und den Seiten verwendete ich 8mm Stahlstange als die "Achse", mit Klemmen, zum der Stange zu halten.

Was ich zuerst tat, war mit dem EAS montiert, und mit den Motoren montiert, ruhte ich das Ganze auf meine Fingerspitzen, um den Schwerpunkt der gesamten EAS zu finden - dh wo man die Stahlstange so montieren würde An der Waage, wenn Sie die EAS flach, zeigte auf die Decke. Dies ist die erste Stufe des Ausgleichs der ganzen Erfindung.

Dann schraubte ich die Klemmen an und füllte die Stahlstange durch. Ich bohrte 8mm Löcher in den Seitenwänden, um die Stange zu nehmen. In meinem Entwurf benötigte ich Abstandsstücke zwischen den Muscheln und den Seitenrahmen, also kaufte ich einige hohle runde Aluminiumstange von B & Q, die eine ID hat, die größer als 8mm ist, und schneiden Sie die Abstandhalter weg von ihm.

Der nächste Schritt ist, Gewicht zu kompensieren, so dass es nicht wollen, um aus eigenem Antrieb drehen. Dieses ist das Aluminiumrohr, das die Rückseite mit etwas Stahl und einer g-Klemme auf ihm heraus haftet. Dies ist meine grobe Lösung, um das Gewicht auszugleichen. Sie können eine elegantere Lösung erarbeiten!

Wenn Sie fertig sind, sollte die gesamte EAS ziemlich gleichmäßig drehen, ohne zu wollen, natürlich in eine bestimmte Richtung die ganze Zeit fallen. Je ausgewogener das ist, desto weniger muss der Rotationsmotor arbeiten.

Schließlich montierte ich einen NEMA 17 Motor auf der Seite, mit zwei Riemenscheiben, um die EAS zu drehen. Ich montierte den Motor mit Metall Stand-offs, dass die Distanz, die ich brauchte den Motor vom Rahmen entfernt. Ich habe einen fairen Stand-offs zur Hand - ich empfehle Ihnen, eine Vielzahl von ihnen von ebay kaufen - sie sind so nützlich.

Meine Stand-offs sind weiblich-weiblich - so schneide ich das Ende einiger kleiner Schrauben, damit sie Bolzen für das motorische Ende.

Auch hier will die Riemenspannung dicht sein, aber nicht so wahnsinnig.

Schritt 5: Elektronik

Arduino Etch-A-Sketch Uhr

Arduino Etch-A-Sketch Uhr

Ich werde nicht zu hand halten Sie zu viel hier, da es alle sehr Standard Zeug ist, und alle wichtigen Verbindungen sind in den Arduino Sketch-Dateien detailliert. Wenn irgendwelche von diesem ist Nachrichten zu Ihnen dann greifen Sie ein Breadboard und machen Sie einige grundlegende arduino Tutorials 1., wie das Blinken einer LED ... - aber zusammen .... (Update - ich habe einen groben und bereiten Schaltplan angebracht)

Die Hauptplatine ist ein Standard-Arduino 328 mit seiner Standard-Kristall, Kondensatoren, Pull-Down-Widerstände und eine LED auf Chip-Pin 19 (So kann ich sehen, wenn es Strom und es flackert, wenn ich eine Skizze hochzuladen). Nur google Arduino Breadboard (http://arduino.cc/en/Main/Standalone) - es ist das gleiche - aber ich nicht mit dem 5v Regulator Mühe, weil die EasyDriver Stepper Treiber-Board hat 5v Reg eingebaut und ich benutze dies zu Macht die Arduino.

Ich benutze einen USB-FTDI-Programmierer und nur Patch in der Arduino mit Tx und Rx (und Stromversorgung und Erde und Reset) - dies ist der 5-Pin-Breakout auf meiner Platine ..

Ich habe ein Prototyping-Board als die Schaltung ist so einfach, es ist nicht wert, eine Leiterplatte (siehe meine anderen Instructable! :-))

Die Echtzeituhr ist einfach. Es verbindet sich mit Masse und +5 V, und dann geht SCL auf Analog 5 auf dem Aruino (Chip Pin28) und SDA geht auf Analog-Pin 4 (Chip Pin 27). Das ist es! Es ist wirklich wert, eines dieser hinzuzufügen. Ohne sie musst du die Zeit im Arduino einstellen, jedes Mal wenn du es anzog - und das zu tun, das mit einer langsamen ziehenden Uhr ein Albtraum sein würde. Auf diese Weise hält das arduino die Zeit, wenn es ausgeschaltet ist.

Die Stepper-Treiber für die beiden EAS-Regler verbinden nach der Arduino-Skizze Kommentare - vertikaler Stepper in1, in2, in3, in4 geht an arduino digital 4,5,6,7, horizontaler Stepper (in1..2..3..4 ) Geht zu arduino digitalen Pins 2,3,12,13. Die Schrittmotor-Treiber verbinden sich mit Ihrem 12V Source-Boden und live.

Der EasyDriver verbindet sich mit Masse und lebt wieder 12V, und dann geht der DIR-Pin zu arduino digital 8, und der STEP-Pin geht an arduino digital 9 (; einfach hey !! :-))

Ich verklebte die RTC auf die Projekttafel, dann heiß geklebt alles auf ein Ersatzstück von Acryl, die ich an der Haupt-EAS-Platte mit doppelseitigem Schaumband klebte.

Wie Sie sehen können, sind die Stepper von 12V direkt angetrieben - das ist, wo sie ihre Macht bekommen! - sie bekommen dann ihre Signale von der Niederspannung arduino Seite.

Der Rest, ist alles in den Code ...

Schritt 6: Software - Uhr einstellen

Arduino Etch-A-Sketch Uhr

Die Software ist in 3 verschiedene Skizzen unterteilt.

1- Die Uhrzeiteinstellung

Dieses Programm setzt einfach die Zeit auf dem RTC-Chip auf die des Programmier-PCs.
Sie müssen die Bibliothek DS1307RTC in Ihre arduino IDE installieren,
Kopieren und Einfügen in Arduino IDE, Kompilieren, hochladen und ausführen.
Rufen Sie den seriellen Monitor in Arduino IDE auf und Sie sehen, dass es die Zeit bestätigt, die es auf dem RTC-Chip eingestellt hat.

Erledigt! - Sie nie wirklich brauchen, um dies wieder zu verwenden.

Tipp - stellen Sie Ihre PC-Uhr etwa 3 Minuten schnell, wenn Sie dies tun. Auf diese Weise ist die EAS-Uhr immer rund 3 Minuten schnell, und bis zum Ende der Zeichnung der Zeit in der EAS, ist es richtig! Dh um die Zeit, wenn es auf die zweite Minute Ziffer kommt, wird es fast drei Minuten nach dem Start - so ist es richtig :-)

#einschließen
#einschließen
#einschließen

TmElements_t tm;

Void setup () {
Bool parse = false;
Bool config = false;

// das Datum und die Uhrzeit erhalten, zu der der Compiler ausgeführt wurde
If (getTime (__ TIME__)) {
Parse = true;
// und konfiguriere die RTC mit dieser Info
Wenn (RTC.write (tm)) {
Config = true;
aufrechtzuerhalten.
aufrechtzuerhalten.

Serial.begin (9600);
Während (! Serial); // auf Arduino Serial Monitor warten
Verzögerung (200);
Wenn (parse && config) {
Serial.print ( "DS1307 konfiguriert Time =");
Serial.print (__ TIME__);
} Else if (parse) {
Serial.println ( "DS1307-Kommunikationsfehler: - {");
Serial.println ( "Bitte überprüfen Sie Ihre Schaltung");
} Else {
Serial.print ( "Information konnte nicht vom Compiler gelesen werden, Time = \" ");
Serial.print (__ TIME__);
Serial.println ( "");
aufrechtzuerhalten.
aufrechtzuerhalten.

Void Schleife () {
aufrechtzuerhalten.

Bool getTime (const char * str)
{
Int Stunde, Minute, Sek.

Wenn (sscanf (str, "% d:% d:% d", & Stunde, & Min. & Sec)! = 3) return false;
Tm.Stunde = Stunde;
Tm.Minute = Min;
Tm.Second = Sec;
Return true;
aufrechtzuerhalten.

Schritt 7: Software - Testen

2 - Prüfung der Hardware

Diese arduino Skizze ist, was ich erstellt, um alles andere als die Zeitmessung zu testen, und zeichnen und definieren die Ziffern auf dem EAS.

Wieder kopieren, einfügen, kompilieren, hochladen, ausführen.

Für dieses Programm möchten Sie den arduino IDE seriellen Monitor jedes Mal, wenn Sie es ausführen, da dies ist, wie wir werden die EAS zu kontrollieren.

Geben Sie im seriellen Monitor Folgendes ein, gefolgt von enter:

C - löscht den Bildschirm - dh dreht den EAS
R, l, ud - rechts, links, oben und unten für eine kleine Menge - der EAS-Cursor / Stylus
P - loooong links zurück - seien Sie vorsichtig mit diesem, Sie wollen nicht, um die EAS vorbei an seinen Kanten fahren. Dies ist nützlich, wenn Sie die Nummernzeichnung testen und Sie am äußersten rechten Ende des Bildschirms enden.
0-9 - zieht 0 bis 9 auf dem Bildschirm

Mit diesem Programm können Sie sehen, wie es die Zahlen auf Ihrem bestimmten EAS zeichnen und bearbeiten Sie dann den Code, um ihn fein abzustimmen.

aufrechtzuerhalten.
Kleiner Schrittmotor und Treiber
http://arduino-direct.com/sunshop/index.php?l=product_detail&p=126
[email protected] * /
/ * ----- (Import benötigte Bibliotheken) ----- * /
#include <Stepper.h>

/ * ----- (Declare Konstanten, Pin Numbers) ----- * /
#define STEPS 32 // Anzahl der Schritte pro Umdrehung
// # definieren STEPSSIDE 200 // Nummernschrittseitenmotor
/ * ----- (Objekte deklarieren) ----- * /
// Erstellen einer Instanz der Stepper-Klasse mit Angabe
// die Anzahl der Schritte des Motors und die Stifte ist es
// beigefügt
// Die Pin-Anschlüsse müssen mit 4 Pins verbunden werden
// an Motortreiber In1, In2, In3, In4 und dann die Pins eingegeben
// hier in der Reihenfolge 1-3-2-4 für die richtige Sequenzierung
Stepper small_stepperV (SCHRITTE, 4, 6, 5, 7);
Stepper small_stepperH (STEPS, 2, 12, 3, 13);
// Stepper small_stepperR (STEPSSIDE, 8, 10, 9, 11);
/ * ----- (Variablen deklarieren) ----- * /

Void setup () / * ---- (SETUP: RUNS ONCE) ---- * /
{
// Drehzahl des Motors einstellen
Small_stepperH.setSpeed ​​(700);
Small_stepperV.setSpeed ​​(700);
PinMode (8, AUSGANG);
PinMode (9, AUSGANG);
DigitalWrite (8, LOW);
DigitalWrite (9, LOW);

// Serielle Kommunikation initialisieren:
Serial.begin (9600);
} / * - (Ende Setup) --- * /

Void Schleife () / * ---- (LOOP: RUNS CONSTANTLY) ---- * /

{
If (Serial.available ()> 0) {
Int inByte = Serial.read ();

Schalter (inByte) {

Fall "c":
// small_stepperR.step (-150);
// delay (1000);
// small_stepperR.step (150);
// delay (2000);
DigitalWrite (8, LOW);
Für (int microsteps = 1, microsteps <1400, microsteps ++) {
DigitalWrite (9, HIGH);
Verzögerung (1);
DigitalWrite (9, LOW);
Verzögerung (1);
aufrechtzuerhalten.
Verzögerung (1000);
DigitalWrite (8, HIGH);
Für (int microsteps = 1, microsteps <1400, microsteps ++) {
DigitalWrite (9, HIGH);
Verzögerung (1);
DigitalWrite (9, LOW);
Verzögerung (1);
aufrechtzuerhalten.
Unterbrechung;

Fall "r":
Serial.println ( "RIGHT!");
Small_stepperH.step (500);
Verzögerung (200);
Unterbrechung;

Fall 'p':
Serial.println ( "LONG LEFT");
Small_stepperH.step (-10000);
Verzögerung (200);
Unterbrechung;

Fall "l":
Serial.println ( "LEFT!");
Small_stepperH.step (-500);
Verzögerung (200);
Unterbrechung;

Fall 'u':
Serial.println ( "UP");
Small_stepperV.step (500);
Verzögerung (200);
Unterbrechung;

Fall 'd':
Serial.println (& ldquor; DOWN ");
Small_stepperV.step (-500);
Verzögerung (200);
Unterbrechung;

Fall 1':
Serial.println ( "1");
Small_stepperH.step (700); //Recht
Small_stepperV.step (3100); //oben
Small_stepperH.step (500); //Recht
Small_stepperV.step (-3070); // nach unten
Small_stepperH.step (-1000); //links
Kleiner_stepperH.step (1700); //Recht
Verzögerung (200);
Unterbrechung;

Fall "2":
Serial.println (2);
Small_stepperV.step (2000); //oben
Small_stepperH.step (1400); //Recht
Small_stepperV.step (600); //oben
Small_stepperH.step (-1750); //links
Small_stepperV.step (500); //oben
Small_stepperH.step (2200); //Recht
Small_stepperV.step (-1950); // nach unten
Small_stepperH.step (-1600); //links
Small_stepperV.step (-600); // nach unten
Small_stepperH.step (1600); //Recht
Small_stepperV.step (-500); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (2200); //Recht

Verzögerung (200);
Unterbrechung;

Fall "3":
Serial.println (3);
Small_stepperH.step (2000); //Recht
Small_stepperV.step (3100); //oben
Small_stepperH.step (-2250); //links
Small_stepperV.step (-950); // nach unten
Kleiner_stepperH.step (1700); //Recht
Small_stepperV.step (-500); // nach unten
Small_stepperH.step (-1650); //links
Small_stepperV.step (-550); // nach unten
Small_stepperH.step (1650); //Recht
Small_stepperV.step (-550); // nach unten
Small_stepperH.step (-1700); //links
Small_stepperV.step (-550); // nach unten
Small_stepperH.step (2150); //Recht
Verzögerung (200);
Unterbrechung;

Fall "4":
Serial.println (4);
Small_stepperH.step (1800); //Recht
Kleiner_stepperV.step (3100); //oben
Small_stepperH.step (-950); //links
Small_stepperV.step (-1500); // nach unten
Small_stepperH.step (-650); //links
Small_stepperV.step (1500); //oben
Small_stepperH.step (-600); //links
Small_stepperV.step (-1950); // nach unten
Small_stepperH.step (1600); //Recht
Kleiner_stepperV.step (-1130); // nach unten
Small_stepperH.step (630); //Recht
Verzögerung (200);
Unterbrechung;

Fall "5":
Serial.println (5);
Small_stepperV.step (1000); //oben
Small_stepperH.step (1300); //Recht
Small_stepperV.step (600); //oben
Small_stepperH.step (-1700); //links
Kleine_stepperV.step (1500); //oben
Small_stepperH.step (2100); //Recht
Small_stepperV.step (-950); // nach unten
Small_stepperH.step (-1700); //links
Small_stepperV.step (-650); // nach unten
Kleiner_stepperH.step (1700); //Recht
Small_stepperV.step (-1450); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (2200); //Recht
Verzögerung (200);
Unterbrechung;

Fall '6':
Serial.println (6);
Small_stepperV.step (3100); //oben
Small_stepperH.step (1750); //Recht
Small_stepperV.step (-950); // nach unten
Small_stepperH.step (-1650); //links
Small_stepperV.step (-700); // unten
Small_stepperH.step (1650); //Recht
Kleiner_stepperV.step (-1450); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (950); //Recht

Small_stepperV.step (1500); //oben
Small_stepperH.step (800); //Recht
Small_stepperV.step (-1000); // nach unten
Small_stepperH.step (-1150); //links
Small_stepperV.step (-480); // nach unten
Small_stepperH.step (1650); //Recht
Verzögerung (200);
Unterbrechung;

Fall 7:
Serial.println (7);
Small_stepperH.step (1250); //Recht
Small_stepperV.step (2600); //oben
Small_stepperH.step (-1100); //links
Small_stepperV.step (-1200); // nach unten
Small_stepperH.step (-600); //links
Small_stepperV.step (1670); //oben
Small_stepperH.step (2200); //Recht
Small_stepperV.step (-3020); // nach unten
Small_stepperH.step (-900); //links
Small_stepperH.step (1000); //Recht
Verzögerung (200);
Unterbrechung;

Fall "8":
Serial.println (8);
Small_stepperV.step (3100); //oben
Small_stepperH.step (1750); //Recht
Small_stepperV.step (-950); // nach unten
Small_stepperH.step (-1650); //links
Kleiner_stepperV.step (-700); // nach unten
Kleiner_stepperH.step (1150); //Recht

Small_stepperV.step (1200); //oben
Small_stepperH.step (470); //Recht
Small_stepperV.step (-2600); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (950); //Recht

Small_stepperV.step (1500); //oben
Small_stepperH.step (800); //Recht
Small_stepperV.step (-1000); // nach unten
Small_stepperH.step (-1160); //links
Small_stepperV.step (-500); // nach unten
Kleiner_stepperH.step (1700); //Recht
Verzögerung (200);
Unterbrechung;

Fall 9:
Serial.println (9);
Small_stepperH.step (1250); //Recht
Small_stepperV.step (2650); //oben
Small_stepperH.step (-1100); //links
Small_stepperV.step (-1200); // nach unten

Small_stepperH.step (1050); //Recht
Small_stepperV.step (-450); // nach unten

Small_stepperH.step (-1550); //links
Small_stepperV.step (2050); //oben
Small_stepperH.step (2150); //Recht
Small_stepperV.step (-3050); // nach unten
Small_stepperH.step (-900); //links
Small_stepperH.step (1000); //Recht
Verzögerung (200);
Unterbrechung;

Fall '0':
Serial.println ( "0");
Small_stepperV.step (3100); //oben
Small_stepperH.step (1850); //Recht
Small_stepperV.step (-3050); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (800); //Recht
Small_stepperV.step (2500); //oben
Small_stepperH.step (850); //Recht
Small_stepperV.step (-2000); // nach unten
Small_stepperH.step (-1200); //links
Small_stepperV.step (-530); // nach unten
Small_stepperH.step (1850); //Recht

Verzögerung (200);
Unterbrechung;

Aufrechtzuerhalten.

Schritt 8: Software - der Hauptcode!

3 - Hauptcode

Ok, das ist das Hauptprogramm - Sie überschreiben das Testprogramm damit.

Sie müssen die "Time" -Bibliothek installieren, obwohl ich denke, dass dies standardmäßig installiert ist.

Ich werde Sie durch die wichtigsten Funktionen des Codes zu sprechen. Ich bin immer noch sehr viel ein Lerner, so kann ich auch einige ungeschickt Methoden gewählt haben, aber es funktioniert.

Die wichtigsten Hürden sind:

- Lest die Zeit
- Konvertieren Sie die Stunden von 24-Stunden-Format auf 12-Stunden-Format, und stoppen Sie die 0 aus der 1. Ziffer - wollen nicht, dass es Zeichnung "08 32" - Verschwendung von Zeit Zeichnung der Null.
- nehmen Sie die Minuten und streifen sie in einzelne Ziffern.
- zeichnen Sie die Zeit, wobei jede Ziffer denselben Raum einnimmt, so dass der Cursor auf dem EAS immer an die gleiche Stelle zurückkehrt, bereit für die nächste Aktualisierung.

Ich habe die Zeit Konvertierungen mit Remote-Funktionsaufrufe (getDigit und hourConverter) getan. Print2digits wird nicht verwendet, war aber Teil des Tests.

Es gibt viele kommentierte Test-Code links in für Ihren Nutzen. Eine Menge der Prüfung der tatsächlichen Zeit zu halten wurde über die IDE seriellen Monitor - die EAS ist viel zu langsam für die Prüfung dieser Art der Sache.

/ * ----- (Import benötigte Bibliotheken) ----- * /
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <Stepper.h>
/ * ----- (Declare Konstanten, Pin Numbers) ----- * /
#define STEPS 32 // Anzahl der Schritte pro Umdrehung
#define STEPSSIDE 200 // Anzahl Schritte Seite Motor
/ * ----- (Objekte deklarieren) ----- * /
// Erstellen einer Instanz der Stepper-Klasse mit Angabe
// die Anzahl der Schritte des Motors und die Stifte ist es
// beigefügt
// Die Pin-Anschlüsse müssen mit 4 Pins verbunden werden
// an Motortreiber In1, In2, In3, In4 und dann die Pins eingegeben
// hier in der Reihenfolge 1-3-2-4 für die richtige Sequenzierung
Stepper small_stepperV (SCHRITTE, 4, 6, 5, 7);
Stepper small_stepperH (STEPS, 2, 12, 3, 13);

Void setup () {
Serial.begin (9600);
// Drehzahl des Motors einstellen
Small_stepperH.setSpeed ​​(700);
Small_stepperV.setSpeed ​​(700);
PinMode (8, AUSGANG);
PinMode (9, AUSGANG);
DigitalWrite (8, LOW);
DigitalWrite (9, LOW);
aufrechtzuerhalten.

Void Schleife () {
TmElements_t tm;
RTC.read (tm);

// MAJOR IF SEKTION - überprüfen Sie, ob die Minute ein Vielfaches von 5 ist
// if ((getDigit (tm.Minute, 1)) == 5 || (getDigit (tm.Minute, 1)) == 0) {// RE-ENABLE FÜR 5 MIN UPDATE

// EAS-Bildschirm mit einem EasyDriver verdrahtet mit Richtungspin an Arduino Pin 8 und Step-Pin an Aruino Pin 9

DigitalWrite (8, LOW);
Für (int microsteps = 1, microsteps <1400, microsteps ++) {
DigitalWrite (9, HIGH);
Verzögerung (1);
DigitalWrite (9, LOW);
Verzögerung (1);
aufrechtzuerhalten.
Verzögerung (1000);
DigitalWrite (8, HIGH);
Für (int microsteps = 1, microsteps <1400, microsteps ++) {
DigitalWrite (9, HIGH);
Verzögerung (1);
DigitalWrite (9, LOW);
Verzögerung (1);
aufrechtzuerhalten.

/ * Serial.print ( "Ok, Hour =");
Serial.print (hourConverter (tm.Hour));
//hourConvert (tm.Hour);
// Serial.print (tm.Hour);
Serial.write ( ',');
Serial.print ( "Minutes =");
Print2digits (tm.Minute);
//Serial.print(tm.Minute);
Serial.print1n ();
* /
// Hauptzeit-Extraktionsabschnitt
// Extrahiere und zeichne HOUR
If ((hourConverter (tm.Hour)) == 1) {
SketchBlank ();
SketchSpaceSml ();
Sketch1 ();
} Else if ((hourConverter (tm.Hour)) == 2) {
SketchBlank ();
SketchSpaceSml ();
Sketch2 ();
} Else if ((hourConverter (tm.Hour)) == 3) {
SketchBlank ();
SketchSpaceSml ();
Sketch3 ();
} Else if ((hourConverter (tm.Hour)) == 4) {
SketchBlank ();
SketchSpaceSml ();
Sketch4 ();
} Else if ((hourConverter (tm.Hour)) == 5) {
SketchBlank ();
SketchSpaceSml ();
Sketch5 ();
} Else if ((hourConverter (tm.Hour)) == 6) {
SketchBlank ();
SketchSpaceSml ();
Sketch6 ();
} Else if ((hourConverter (tm.Hour)) == 7) {
SketchBlank ();
SketchSpaceSml ();
Sketch7 ();
} Else if ((hourConverter (tm.Hour)) == 8) {
SketchBlank ();
SketchSpaceSml ();
Sketch8 ();
} Else if ((hourConverter (tm.Hour)) == 9) {
SketchBlank ();
SketchSpaceSml ();
Sketch9 ();
} Else if ((hourConverter (tm.Hour)) == 10) {
Sketch1 ();
SketchSpaceSml ();
Sketch0 ();
} Else if ((hourConverter (tm.Hour)) == 11) {
Sketch1 ();
SketchSpaceSml ();
Sketch1 ();
} Else if ((hourConverter (tm.Hour)) == 12) {
Sketch1 ();
SketchSpaceSml ();
Sketch2 ();
aufrechtzuerhalten.
// Raum vor Minuten
SketchBlank ();

// Extrahiere und zeichne Minute 1. Ziffer
Wenn ((getDigit (tm.Minute, 2)) == 1) {
Sketch1 ();
} Else if ((getDigit (tm.Minute, 2)) == 2) {
Sketch2 ();
} Else if ((getDigit (tm.Minute, 2)) == 3) {
Sketch3 ();
} Else if ((getDigit (tm.Minute, 2)) == 4) {
Sketch4 ();
} Else if ((getDigit (tm.Minute, 2)) == 5) {
Sketch5 ();
} Else {
Sketch0 ();
aufrechtzuerhalten.
// Leertaste vor Ziffer 2. Minute
SketchSpaceSml ();

// Extrahiere und zeichne Minute 2. Ziffer
Wenn ((getDigit (tm.Minute, 1)) == 1) {
Sketch1 ();
} Else if ((getDigit (tm.Minute, 1)) == 2) {
Sketch2 ();
} Sonst if ((getDigit (tm.Minute, 1)) == 3) {
Sketch3 ();
} Else if ((getDigit (tm.Minute, 1)) == 4) {
Sketch4 ();
} Else if ((getDigit (tm.Minute, 1)) == 5) {
Sketch5 ();
} Else if ((getDigit (tm.Minute, 1)) == 6) {
Sketch6 ();
} Else if ((getDigit (tm.Minute, 1)) == 7) {
Sketch7 ();
} Else if ((getDigit (tm.Minute, 1)) == 8) {
Sketch8 ();
} Else if ((getDigit (tm.Minute, 1)) == 9) {
Sketch9 ();
} Else {
Sketch0 ();
aufrechtzuerhalten.

// Cursor zum Starten gehen
Small_stepperH.step (-11800); //links
Small_stepperH.step (1200); //Recht

// Test, um die erste oder zweite Ziffer zu extrahieren (zählt von rechts), dh "12" - Ziffer 1 = 2
/ * Serial.print ( "Min-Ziffer 2 =");
Serial.print (getDigit (tm.Minute, 2));
Serial.print1n ();
Serial.print ( "Min-Ziffer 1 =");
Serial.print (getDigit (tm.Minute, 1));
Serial.print1n ();

// testextrahierende Stundenzahl
If ((hourConverter (tm.Hour)) == 9) {
Serial.print ( "Zitierstunde = Nine !!");
} Else if ((hourConverter (tm.Hour)) == 10) {
Serial.print ( "Ziffernstunde = Zehn !!");
aufrechtzuerhalten.
Serial.print1n ();
* /

Verzögerung (59500); // Eine anständige Verzögerung zwischen Updates
//} // die obige Verzögerung entfernen und diese Zeile für 5 min Updates wiederherstellen

aufrechtzuerhalten.
// END OF MAIN LOOP

Void print2digits (int-Nummer) {
Wenn (Zahl> = 0 && Anzahl <10) {
Serial.write ( '0');
aufrechtzuerhalten.
Serial.print (Zahl);
aufrechtzuerhalten.

Int getDigit (unsigned int number, int digit) {// Nimmt eine Zahl und gibt die x'ste Ziffer zurück)
(Int i = 0, i <digit-1; i ++) {
Anzahl / = 10;
aufrechtzuerhalten.
Return number% 10;
aufrechtzuerhalten.

Int hourConverter (int number) {// nimmt 24 Stunden Zeit und subtrahiert 12 oder addiert 12, wenn es 00: Stunde ist)
Wenn (Zahl> 12) {
Zahl = Zahl - 12;
} Else if (Zahl == 0) {
Zahl = Zahl + 12;
aufrechtzuerhalten.
Rücklaufnummer;
aufrechtzuerhalten.

Void sketch1 () {
Small_stepperH.step (700); //Recht
Small_stepperV.step (3100); //oben
Small_stepperH.step (500); //Recht
Small_stepperV.step (-3090); // nach unten
Small_stepperH.step (-1000); //links
Kleiner_stepperH.step (1700); //Recht
aufrechtzuerhalten.

Void sketch2 () {
Small_stepperV.step (2000); //oben
Small_stepperH.step (1400); //Recht
Small_stepperV.step (600); //oben
Small_stepperH.step (-1750); //links
Small_stepperV.step (500); //oben
Small_stepperH.step (2200); //Recht
Small_stepperV.step (-1950); // nach unten
Small_stepperH.step (-1600); //links
Small_stepperV.step (-600); // nach unten
Small_stepperH.step (1600); //Recht
Small_stepperV.step (-500); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (2200); //Recht
aufrechtzuerhalten.

Void sketch3 () {
Small_stepperH.step (2000); //Recht
Small_stepperV.step (3100); //oben
Kleiner_stepperH.step (-2250); //links
Small_stepperV.step (-950); // nach unten
Kleiner_stepperH.step (1700); //Recht
Small_stepperV.step (-500); // nach unten
Kleiner_stepperH.step (-1650); //links
Small_stepperV.step (-550); // nach unten
Small_stepperH.step (1650); //Recht
Small_stepperV.step (-550); // nach unten
Small_stepperH.step (-1700); //links
Small_stepperV.step (-550); // nach unten
Small_stepperH.step (2150); //Recht
aufrechtzuerhalten.

Void sketch4 () {
Small_stepperH.step (1800); //Recht
Small_stepperV.step (3100); //oben
Small_stepperH.step (-950); //links
Small_stepperV.step (-1500); // nach unten
Small_stepperH.step (-650); //links
Small_stepperV.step (1500); //oben
Small_stepperH.step (-600); //links
Small_stepperV.step (-1950); // nach unten
Small_stepperH.step (1600); //Recht
Small_stepperV.step (-1130); // nach unten
Small_stepperH.step (630); //Recht
aufrechtzuerhalten.

Void sketch5 () {
Small_stepperV.step (1000); //oben
Small_stepperH.step (1300); //Recht
Small_stepperV.step (600); //oben
Small_stepperH.step (-1700); //links
Small_stepperV.step (1500); //oben
Small_stepperH.step (2100); //Recht
Small_stepperV.step (-950); // nach unten
Small_stepperH.step (-1700); //links
Small_stepperV.step (-650); // nach unten
Kleiner_stepperH.step (1700); //Recht
Small_stepperV.step (-1450); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (2200); //Recht
aufrechtzuerhalten.

Void sketch6 () {
Small_stepperV.step (3100); //oben
Small_stepperH.step (1750); //Recht
Small_stepperV.step (-950); // nach unten
Small_stepperH.step (-1650); //links
Small_stepperV.step (-700); // nach unten
Small_stepperH.step (1650); //Recht
Small_stepperV.step (-1450); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (950); //Recht

Small_stepperV.step (1500); //oben
Small_stepperH.step (800); //Recht
Small_stepperV.step (-1000); // nach unten
Small_stepperH.step (-1150); //links
Small_stepperV.step (-480); // nach unten
Small_stepperH.step (1650); //Recht
aufrechtzuerhalten.

Void sketch7 () {
Small_stepperH.step (1250); //Recht
Small_stepperV.step (2600); //oben
Small_stepperH.step (-1100); //links
Small_stepperV.step (-1200); // unten
Small_stepperH.step (-600); //links
Small_stepperV.step (1670); //oben
Small_stepperH.step (2200); //Recht
Small_stepperV.step (-3020); // nach unten
Small_stepperH.step (-900); //links
Small_stepperH.step (1000); //Recht
aufrechtzuerhalten.

Void sketch8 () {
Small_stepperV.step (3100); //oben
Small_stepperH.step (1750); //Recht
Small_stepperV.step (-950); // nach unten
Small_stepperH.step (-1650); //links
Small_stepperV.step (-700); // unten
Small_stepperH.step (1150); //Recht

Small_stepperV.step (1200); //oben
Small_stepperH.step (470); //Recht
Small_stepperV.step (-2600); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (950); //Recht

Small_stepperV.step (1500); //oben
Small_stepperH.step (800); //Recht
Small_stepperV.step (-1000); // nach unten
Small_stepperH.step (-1160); //links
Small_stepperV.step (-500); // nach unten
Kleiner_stepperH.step (1700); //Recht
aufrechtzuerhalten.

Void sketch9 () {
Small_stepperH.step (1250); //Recht
Small_stepperV.step (2650); //oben
Small_stepperH.step (-1100); //links
Small_stepperV.step (-1200); // nach unten

Small_stepperH.step (1050); //Recht
Small_stepperV.step (-450); // nach unten

Small_stepperH.step (-1550); //links
Small_stepper V.step (2050); //oben
Small_stepperH.step (2150); //Recht
Small_stepperV.step (-3050); // nach unten
Small_stepperH.step (-900); //links
Small_stepperH.step (1000); //Recht
aufrechtzuerhalten.

Void sketch0 () {
Small_stepperV.step (3100); //oben
Small_stepperH.step (1850); //Recht
Small_stepperV.step (-3050); // nach unten
Small_stepperH.step (-2200); //links
Small_stepperH.step (800); //Recht
Small_stepperV.step (2500); //oben
Small_stepperH.step (850); //Recht
Kleiner_stepperV.step (-2000); // nach unten
Small_stepperH.step (-1150); //links
Small_stepperV.step (-530); // nach unten
Small_stepperH.step (1800); //Recht
aufrechtzuerhalten.

Void sketchBlank () {
Small_stepperH.step (2000); //Recht
aufrechtzuerhalten.

Void sketchSpaceSml () {
Small_stepperH.step (500); //Recht
aufrechtzuerhalten.

Schritt 9: Schlussnotizen

Sie müssen die EAS-Uhr ausschalten, wenn der EAS-Cursor vollständig zurückgekehrt ist und er gestoppt hat. Auf diese Weise, wenn Sie die nächste Macht es auf sie wird an der gleichen Stelle starten. Wenn Sie in einem Durcheinander erhalten, können Sie die EAS-Riemenscheiben von Hand erzwingen.

Meine Ziffern sind nicht perfekt. Sie funktionieren möglicherweise nicht gut auf Ihrem EAS. Ich bin sehr zufrieden mit 1-7. Ich habe faul mit 8,9 und 0 :-)

Meine EAS kommt nicht immer an den Ort zurück, an dem sie angefangen hat. Es ist kein Problem, ich laufe nie mehr als ein paar Stunden, wenn ich Leute habe :-)

Wenn Sie verschiedene Schrittmotoren verwenden, müssen Sie über die Skalierung aller Zahlen für das Zeichnen der Ziffern durch einen Faktor denken, wenn "x". Die Stepper, die ich verwende, haben eine Getriebeverkleinerung von 64: 1 und sind 32 Schritte. So 2048 Schritte = eine volle Umdrehung. A standard Nema usually has 200 steps, but driven by an EasyDriver you cam run at 1/8th micro steps, so you would have 8x200 = 1600 steps per revolutions. So my code would work directly but draw 12% bigger digits - they should fit... I'll know soon!

Related Reading